1//===- IntrinsicsX86.td - Defines X86 intrinsics -----------*- tablegen -*-===// 2// 3// The LLVM Compiler Infrastructure 4// 5// This file is distributed under the University of Illinois Open Source 6// License. See LICENSE.TXT for details. 7// 8//===----------------------------------------------------------------------===// 9// 10// This file defines all of the X86-specific intrinsics. 11// 12//===----------------------------------------------------------------------===// 13 14//===----------------------------------------------------------------------===// 15// Interrupt traps 16let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.". 17 def int_x86_int : Intrinsic<[], [llvm_i8_ty]>; 18} 19 20//===----------------------------------------------------------------------===// 21// Read Time Stamp Counter. 22let TargetPrefix = "x86" in { 23 def int_x86_rdtsc : GCCBuiltin<"__builtin_ia32_rdtsc">, 24 Intrinsic<[llvm_i64_ty], [], []>; 25 def int_x86_rdtscp : GCCBuiltin<"__builtin_ia32_rdtscp">, 26 Intrinsic<[llvm_i64_ty], [llvm_ptr_ty], [IntrReadWriteArgMem]>; 27} 28 29// Read Performance-Monitoring Counter. 30let TargetPrefix = "x86" in { 31 def int_x86_rdpmc : GCCBuiltin<"__builtin_ia32_rdpmc">, 32 Intrinsic<[llvm_i64_ty], [llvm_i32_ty], []>; 33} 34 35//===----------------------------------------------------------------------===// 36// 3DNow! 37 38let TargetPrefix = "x86" in { 39 def int_x86_3dnow_pavgusb : GCCBuiltin<"__builtin_ia32_pavgusb">, 40 Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty], 41 [IntrNoMem]>; 42 def int_x86_3dnow_pf2id : GCCBuiltin<"__builtin_ia32_pf2id">, 43 Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty], [IntrNoMem]>; 44 def int_x86_3dnow_pfacc : GCCBuiltin<"__builtin_ia32_pfacc">, 45 Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty], 46 [IntrNoMem]>; 47 def int_x86_3dnow_pfadd : GCCBuiltin<"__builtin_ia32_pfadd">, 48 Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty], 49 [IntrNoMem]>; 50 def int_x86_3dnow_pfcmpeq : GCCBuiltin<"__builtin_ia32_pfcmpeq">, 51 Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty], 52 [IntrNoMem]>; 53 def int_x86_3dnow_pfcmpge : GCCBuiltin<"__builtin_ia32_pfcmpge">, 54 Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty], 55 [IntrNoMem]>; 56 def int_x86_3dnow_pfcmpgt : GCCBuiltin<"__builtin_ia32_pfcmpgt">, 57 Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty], 58 [IntrNoMem]>; 59 def int_x86_3dnow_pfmax : GCCBuiltin<"__builtin_ia32_pfmax">, 60 Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty], 61 [IntrNoMem]>; 62 def int_x86_3dnow_pfmin : GCCBuiltin<"__builtin_ia32_pfmin">, 63 Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty], 64 [IntrNoMem]>; 65 def int_x86_3dnow_pfmul : GCCBuiltin<"__builtin_ia32_pfmul">, 66 Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty], 67 [IntrNoMem]>; 68 def int_x86_3dnow_pfrcp : GCCBuiltin<"__builtin_ia32_pfrcp">, 69 Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty], [IntrNoMem]>; 70 def int_x86_3dnow_pfrcpit1 : GCCBuiltin<"__builtin_ia32_pfrcpit1">, 71 Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty], 72 [IntrNoMem]>; 73 def int_x86_3dnow_pfrcpit2 : GCCBuiltin<"__builtin_ia32_pfrcpit2">, 74 Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty], 75 [IntrNoMem]>; 76 def int_x86_3dnow_pfrsqrt : GCCBuiltin<"__builtin_ia32_pfrsqrt">, 77 Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty], [IntrNoMem]>; 78 def int_x86_3dnow_pfrsqit1 : GCCBuiltin<"__builtin_ia32_pfrsqit1">, 79 Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty], 80 [IntrNoMem]>; 81 def int_x86_3dnow_pfsub : GCCBuiltin<"__builtin_ia32_pfsub">, 82 Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty], 83 [IntrNoMem]>; 84 def int_x86_3dnow_pfsubr : GCCBuiltin<"__builtin_ia32_pfsubr">, 85 Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty], 86 [IntrNoMem]>; 87 def int_x86_3dnow_pi2fd : GCCBuiltin<"__builtin_ia32_pi2fd">, 88 Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty], [IntrNoMem]>; 89 def int_x86_3dnow_pmulhrw : GCCBuiltin<"__builtin_ia32_pmulhrw">, 90 Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty], 91 [IntrNoMem]>; 92} 93 94//===----------------------------------------------------------------------===// 95// 3DNow! extensions 96 97let TargetPrefix = "x86" in { 98 def int_x86_3dnowa_pf2iw : GCCBuiltin<"__builtin_ia32_pf2iw">, 99 Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty], [IntrNoMem]>; 100 def int_x86_3dnowa_pfnacc : GCCBuiltin<"__builtin_ia32_pfnacc">, 101 Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty], 102 [IntrNoMem]>; 103 def int_x86_3dnowa_pfpnacc : GCCBuiltin<"__builtin_ia32_pfpnacc">, 104 Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty], 105 [IntrNoMem]>; 106 def int_x86_3dnowa_pi2fw : GCCBuiltin<"__builtin_ia32_pi2fw">, 107 Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty], [IntrNoMem]>; 108 def int_x86_3dnowa_pswapd : 109 Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty], [IntrNoMem]>; 110} 111 112//===----------------------------------------------------------------------===// 113// SSE1 114 115// Arithmetic ops 116let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.". 117 def int_x86_sse_add_ss : GCCBuiltin<"__builtin_ia32_addss">, 118 Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, 119 llvm_v4f32_ty], [IntrNoMem]>; 120 def int_x86_sse_sub_ss : GCCBuiltin<"__builtin_ia32_subss">, 121 Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, 122 llvm_v4f32_ty], [IntrNoMem]>; 123 def int_x86_sse_mul_ss : GCCBuiltin<"__builtin_ia32_mulss">, 124 Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, 125 llvm_v4f32_ty], [IntrNoMem]>; 126 def int_x86_sse_div_ss : GCCBuiltin<"__builtin_ia32_divss">, 127 Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, 128 llvm_v4f32_ty], [IntrNoMem]>; 129 def int_x86_sse_sqrt_ss : GCCBuiltin<"__builtin_ia32_sqrtss">, 130 Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty], 131 [IntrNoMem]>; 132 def int_x86_sse_sqrt_ps : GCCBuiltin<"__builtin_ia32_sqrtps">, 133 Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty], 134 [IntrNoMem]>; 135 def int_x86_sse_rcp_ss : GCCBuiltin<"__builtin_ia32_rcpss">, 136 Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty], 137 [IntrNoMem]>; 138 def int_x86_sse_rcp_ps : GCCBuiltin<"__builtin_ia32_rcpps">, 139 Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty], 140 [IntrNoMem]>; 141 def int_x86_sse_rsqrt_ss : GCCBuiltin<"__builtin_ia32_rsqrtss">, 142 Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty], 143 [IntrNoMem]>; 144 def int_x86_sse_rsqrt_ps : GCCBuiltin<"__builtin_ia32_rsqrtps">, 145 Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty], 146 [IntrNoMem]>; 147 def int_x86_sse_min_ss : GCCBuiltin<"__builtin_ia32_minss">, 148 Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, 149 llvm_v4f32_ty], [IntrNoMem]>; 150 def int_x86_sse_min_ps : GCCBuiltin<"__builtin_ia32_minps">, 151 Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, 152 llvm_v4f32_ty], [IntrNoMem]>; 153 def int_x86_sse_max_ss : GCCBuiltin<"__builtin_ia32_maxss">, 154 Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, 155 llvm_v4f32_ty], [IntrNoMem]>; 156 def int_x86_sse_max_ps : GCCBuiltin<"__builtin_ia32_maxps">, 157 Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, 158 llvm_v4f32_ty], [IntrNoMem]>; 159} 160 161// Comparison ops 162let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.". 163 def int_x86_sse_cmp_ss : GCCBuiltin<"__builtin_ia32_cmpss">, 164 Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, 165 llvm_v4f32_ty, llvm_i8_ty], [IntrNoMem]>; 166 def int_x86_sse_cmp_ps : GCCBuiltin<"__builtin_ia32_cmpps">, 167 Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, 168 llvm_v4f32_ty, llvm_i8_ty], [IntrNoMem]>; 169 def int_x86_sse_comieq_ss : GCCBuiltin<"__builtin_ia32_comieq">, 170 Intrinsic<[llvm_i32_ty], [llvm_v4f32_ty, 171 llvm_v4f32_ty], [IntrNoMem]>; 172 def int_x86_sse_comilt_ss : GCCBuiltin<"__builtin_ia32_comilt">, 173 Intrinsic<[llvm_i32_ty], [llvm_v4f32_ty, 174 llvm_v4f32_ty], [IntrNoMem]>; 175 def int_x86_sse_comile_ss : GCCBuiltin<"__builtin_ia32_comile">, 176 Intrinsic<[llvm_i32_ty], [llvm_v4f32_ty, 177 llvm_v4f32_ty], [IntrNoMem]>; 178 def int_x86_sse_comigt_ss : GCCBuiltin<"__builtin_ia32_comigt">, 179 Intrinsic<[llvm_i32_ty], [llvm_v4f32_ty, 180 llvm_v4f32_ty], [IntrNoMem]>; 181 def int_x86_sse_comige_ss : GCCBuiltin<"__builtin_ia32_comige">, 182 Intrinsic<[llvm_i32_ty], [llvm_v4f32_ty, 183 llvm_v4f32_ty], [IntrNoMem]>; 184 def int_x86_sse_comineq_ss : GCCBuiltin<"__builtin_ia32_comineq">, 185 Intrinsic<[llvm_i32_ty], [llvm_v4f32_ty, 186 llvm_v4f32_ty], [IntrNoMem]>; 187 def int_x86_sse_ucomieq_ss : GCCBuiltin<"__builtin_ia32_ucomieq">, 188 Intrinsic<[llvm_i32_ty], [llvm_v4f32_ty, 189 llvm_v4f32_ty], [IntrNoMem]>; 190 def int_x86_sse_ucomilt_ss : GCCBuiltin<"__builtin_ia32_ucomilt">, 191 Intrinsic<[llvm_i32_ty], [llvm_v4f32_ty, 192 llvm_v4f32_ty], [IntrNoMem]>; 193 def int_x86_sse_ucomile_ss : GCCBuiltin<"__builtin_ia32_ucomile">, 194 Intrinsic<[llvm_i32_ty], [llvm_v4f32_ty, 195 llvm_v4f32_ty], [IntrNoMem]>; 196 def int_x86_sse_ucomigt_ss : GCCBuiltin<"__builtin_ia32_ucomigt">, 197 Intrinsic<[llvm_i32_ty], [llvm_v4f32_ty, 198 llvm_v4f32_ty], [IntrNoMem]>; 199 def int_x86_sse_ucomige_ss : GCCBuiltin<"__builtin_ia32_ucomige">, 200 Intrinsic<[llvm_i32_ty], [llvm_v4f32_ty, 201 llvm_v4f32_ty], [IntrNoMem]>; 202 def int_x86_sse_ucomineq_ss : GCCBuiltin<"__builtin_ia32_ucomineq">, 203 Intrinsic<[llvm_i32_ty], [llvm_v4f32_ty, 204 llvm_v4f32_ty], [IntrNoMem]>; 205} 206 207 208// Conversion ops 209let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.". 210 def int_x86_sse_cvtss2si : GCCBuiltin<"__builtin_ia32_cvtss2si">, 211 Intrinsic<[llvm_i32_ty], [llvm_v4f32_ty], [IntrNoMem]>; 212 def int_x86_sse_cvtss2si64 : GCCBuiltin<"__builtin_ia32_cvtss2si64">, 213 Intrinsic<[llvm_i64_ty], [llvm_v4f32_ty], [IntrNoMem]>; 214 def int_x86_sse_cvttss2si : GCCBuiltin<"__builtin_ia32_cvttss2si">, 215 Intrinsic<[llvm_i32_ty], [llvm_v4f32_ty], [IntrNoMem]>; 216 def int_x86_sse_cvttss2si64 : GCCBuiltin<"__builtin_ia32_cvttss2si64">, 217 Intrinsic<[llvm_i64_ty], [llvm_v4f32_ty], [IntrNoMem]>; 218 def int_x86_sse_cvtsi2ss : GCCBuiltin<"__builtin_ia32_cvtsi2ss">, 219 Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, 220 llvm_i32_ty], [IntrNoMem]>; 221 def int_x86_sse_cvtsi642ss : GCCBuiltin<"__builtin_ia32_cvtsi642ss">, 222 Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, 223 llvm_i64_ty], [IntrNoMem]>; 224 225 def int_x86_sse_cvtps2pi : GCCBuiltin<"__builtin_ia32_cvtps2pi">, 226 Intrinsic<[llvm_x86mmx_ty], [llvm_v4f32_ty], [IntrNoMem]>; 227 def int_x86_sse_cvttps2pi: GCCBuiltin<"__builtin_ia32_cvttps2pi">, 228 Intrinsic<[llvm_x86mmx_ty], [llvm_v4f32_ty], [IntrNoMem]>; 229 def int_x86_sse_cvtpi2ps : GCCBuiltin<"__builtin_ia32_cvtpi2ps">, 230 Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, 231 llvm_x86mmx_ty], [IntrNoMem]>; 232} 233 234// SIMD store ops 235let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.". 236 def int_x86_sse_storeu_ps : GCCBuiltin<"__builtin_ia32_storeups">, 237 Intrinsic<[], [llvm_ptr_ty, 238 llvm_v4f32_ty], [IntrReadWriteArgMem]>; 239} 240 241// Cacheability support ops 242let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.". 243 def int_x86_sse_sfence : GCCBuiltin<"__builtin_ia32_sfence">, 244 Intrinsic<[], [], []>; 245} 246 247// Control register. 248let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.". 249 def int_x86_sse_stmxcsr : 250 Intrinsic<[], [llvm_ptr_ty], []>; 251 def int_x86_sse_ldmxcsr : 252 Intrinsic<[], [llvm_ptr_ty], []>; 253} 254 255// Misc. 256let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.". 257 def int_x86_sse_movmsk_ps : GCCBuiltin<"__builtin_ia32_movmskps">, 258 Intrinsic<[llvm_i32_ty], [llvm_v4f32_ty], [IntrNoMem]>; 259} 260 261//===----------------------------------------------------------------------===// 262// SSE2 263 264// FP arithmetic ops 265let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.". 266 def int_x86_sse2_add_sd : GCCBuiltin<"__builtin_ia32_addsd">, 267 Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, 268 llvm_v2f64_ty], [IntrNoMem]>; 269 def int_x86_sse2_sub_sd : GCCBuiltin<"__builtin_ia32_subsd">, 270 Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, 271 llvm_v2f64_ty], [IntrNoMem]>; 272 def int_x86_sse2_mul_sd : GCCBuiltin<"__builtin_ia32_mulsd">, 273 Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, 274 llvm_v2f64_ty], [IntrNoMem]>; 275 def int_x86_sse2_div_sd : GCCBuiltin<"__builtin_ia32_divsd">, 276 Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, 277 llvm_v2f64_ty], [IntrNoMem]>; 278 def int_x86_sse2_sqrt_sd : GCCBuiltin<"__builtin_ia32_sqrtsd">, 279 Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty], 280 [IntrNoMem]>; 281 def int_x86_sse2_sqrt_pd : GCCBuiltin<"__builtin_ia32_sqrtpd">, 282 Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty], 283 [IntrNoMem]>; 284 def int_x86_sse2_min_sd : GCCBuiltin<"__builtin_ia32_minsd">, 285 Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, 286 llvm_v2f64_ty], [IntrNoMem]>; 287 def int_x86_sse2_min_pd : GCCBuiltin<"__builtin_ia32_minpd">, 288 Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, 289 llvm_v2f64_ty], [IntrNoMem]>; 290 def int_x86_sse2_max_sd : GCCBuiltin<"__builtin_ia32_maxsd">, 291 Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, 292 llvm_v2f64_ty], [IntrNoMem]>; 293 def int_x86_sse2_max_pd : GCCBuiltin<"__builtin_ia32_maxpd">, 294 Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, 295 llvm_v2f64_ty], [IntrNoMem]>; 296} 297 298// FP comparison ops 299let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.". 300 def int_x86_sse2_cmp_sd : GCCBuiltin<"__builtin_ia32_cmpsd">, 301 Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, 302 llvm_v2f64_ty, llvm_i8_ty], [IntrNoMem]>; 303 def int_x86_sse2_cmp_pd : GCCBuiltin<"__builtin_ia32_cmppd">, 304 Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, 305 llvm_v2f64_ty, llvm_i8_ty], [IntrNoMem]>; 306 def int_x86_sse2_comieq_sd : GCCBuiltin<"__builtin_ia32_comisdeq">, 307 Intrinsic<[llvm_i32_ty], [llvm_v2f64_ty, 308 llvm_v2f64_ty], [IntrNoMem]>; 309 def int_x86_sse2_comilt_sd : GCCBuiltin<"__builtin_ia32_comisdlt">, 310 Intrinsic<[llvm_i32_ty], [llvm_v2f64_ty, 311 llvm_v2f64_ty], [IntrNoMem]>; 312 def int_x86_sse2_comile_sd : GCCBuiltin<"__builtin_ia32_comisdle">, 313 Intrinsic<[llvm_i32_ty], [llvm_v2f64_ty, 314 llvm_v2f64_ty], [IntrNoMem]>; 315 def int_x86_sse2_comigt_sd : GCCBuiltin<"__builtin_ia32_comisdgt">, 316 Intrinsic<[llvm_i32_ty], [llvm_v2f64_ty, 317 llvm_v2f64_ty], [IntrNoMem]>; 318 def int_x86_sse2_comige_sd : GCCBuiltin<"__builtin_ia32_comisdge">, 319 Intrinsic<[llvm_i32_ty], [llvm_v2f64_ty, 320 llvm_v2f64_ty], [IntrNoMem]>; 321 def int_x86_sse2_comineq_sd : GCCBuiltin<"__builtin_ia32_comisdneq">, 322 Intrinsic<[llvm_i32_ty], [llvm_v2f64_ty, 323 llvm_v2f64_ty], [IntrNoMem]>; 324 def int_x86_sse2_ucomieq_sd : GCCBuiltin<"__builtin_ia32_ucomisdeq">, 325 Intrinsic<[llvm_i32_ty], [llvm_v2f64_ty, 326 llvm_v2f64_ty], [IntrNoMem]>; 327 def int_x86_sse2_ucomilt_sd : GCCBuiltin<"__builtin_ia32_ucomisdlt">, 328 Intrinsic<[llvm_i32_ty], [llvm_v2f64_ty, 329 llvm_v2f64_ty], [IntrNoMem]>; 330 def int_x86_sse2_ucomile_sd : GCCBuiltin<"__builtin_ia32_ucomisdle">, 331 Intrinsic<[llvm_i32_ty], [llvm_v2f64_ty, 332 llvm_v2f64_ty], [IntrNoMem]>; 333 def int_x86_sse2_ucomigt_sd : GCCBuiltin<"__builtin_ia32_ucomisdgt">, 334 Intrinsic<[llvm_i32_ty], [llvm_v2f64_ty, 335 llvm_v2f64_ty], [IntrNoMem]>; 336 def int_x86_sse2_ucomige_sd : GCCBuiltin<"__builtin_ia32_ucomisdge">, 337 Intrinsic<[llvm_i32_ty], [llvm_v2f64_ty, 338 llvm_v2f64_ty], [IntrNoMem]>; 339 def int_x86_sse2_ucomineq_sd : GCCBuiltin<"__builtin_ia32_ucomisdneq">, 340 Intrinsic<[llvm_i32_ty], [llvm_v2f64_ty, 341 llvm_v2f64_ty], [IntrNoMem]>; 342} 343 344// Integer arithmetic ops. 345let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.". 346 def int_x86_sse2_padds_b : GCCBuiltin<"__builtin_ia32_paddsb128">, 347 Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, 348 llvm_v16i8_ty], [IntrNoMem, Commutative]>; 349 def int_x86_sse2_padds_w : GCCBuiltin<"__builtin_ia32_paddsw128">, 350 Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, 351 llvm_v8i16_ty], [IntrNoMem, Commutative]>; 352 def int_x86_sse2_paddus_b : GCCBuiltin<"__builtin_ia32_paddusb128">, 353 Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, 354 llvm_v16i8_ty], [IntrNoMem, Commutative]>; 355 def int_x86_sse2_paddus_w : GCCBuiltin<"__builtin_ia32_paddusw128">, 356 Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, 357 llvm_v8i16_ty], [IntrNoMem, Commutative]>; 358 def int_x86_sse2_psubs_b : GCCBuiltin<"__builtin_ia32_psubsb128">, 359 Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, 360 llvm_v16i8_ty], [IntrNoMem]>; 361 def int_x86_sse2_psubs_w : GCCBuiltin<"__builtin_ia32_psubsw128">, 362 Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, 363 llvm_v8i16_ty], [IntrNoMem]>; 364 def int_x86_sse2_psubus_b : GCCBuiltin<"__builtin_ia32_psubusb128">, 365 Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, 366 llvm_v16i8_ty], [IntrNoMem]>; 367 def int_x86_sse2_psubus_w : GCCBuiltin<"__builtin_ia32_psubusw128">, 368 Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, 369 llvm_v8i16_ty], [IntrNoMem]>; 370 def int_x86_sse2_pmulhu_w : GCCBuiltin<"__builtin_ia32_pmulhuw128">, 371 Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, 372 llvm_v8i16_ty], [IntrNoMem, Commutative]>; 373 def int_x86_sse2_pmulh_w : GCCBuiltin<"__builtin_ia32_pmulhw128">, 374 Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, 375 llvm_v8i16_ty], [IntrNoMem, Commutative]>; 376 def int_x86_sse2_pmulu_dq : GCCBuiltin<"__builtin_ia32_pmuludq128">, 377 Intrinsic<[llvm_v2i64_ty], [llvm_v4i32_ty, 378 llvm_v4i32_ty], [IntrNoMem, Commutative]>; 379 def int_x86_sse2_pmadd_wd : GCCBuiltin<"__builtin_ia32_pmaddwd128">, 380 Intrinsic<[llvm_v4i32_ty], [llvm_v8i16_ty, 381 llvm_v8i16_ty], [IntrNoMem, Commutative]>; 382 def int_x86_sse2_pavg_b : GCCBuiltin<"__builtin_ia32_pavgb128">, 383 Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, 384 llvm_v16i8_ty], [IntrNoMem, Commutative]>; 385 def int_x86_sse2_pavg_w : GCCBuiltin<"__builtin_ia32_pavgw128">, 386 Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, 387 llvm_v8i16_ty], [IntrNoMem, Commutative]>; 388 def int_x86_sse2_pmaxu_b : GCCBuiltin<"__builtin_ia32_pmaxub128">, 389 Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, 390 llvm_v16i8_ty], [IntrNoMem, Commutative]>; 391 def int_x86_sse2_pmaxs_w : GCCBuiltin<"__builtin_ia32_pmaxsw128">, 392 Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, 393 llvm_v8i16_ty], [IntrNoMem, Commutative]>; 394 def int_x86_sse2_pminu_b : GCCBuiltin<"__builtin_ia32_pminub128">, 395 Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, 396 llvm_v16i8_ty], [IntrNoMem, Commutative]>; 397 def int_x86_sse2_pmins_w : GCCBuiltin<"__builtin_ia32_pminsw128">, 398 Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, 399 llvm_v8i16_ty], [IntrNoMem, Commutative]>; 400 def int_x86_sse2_psad_bw : GCCBuiltin<"__builtin_ia32_psadbw128">, 401 Intrinsic<[llvm_v2i64_ty], [llvm_v16i8_ty, 402 llvm_v16i8_ty], [IntrNoMem, Commutative]>; 403} 404 405// Integer shift ops. 406let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.". 407 def int_x86_sse2_psll_w : GCCBuiltin<"__builtin_ia32_psllw128">, 408 Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, 409 llvm_v8i16_ty], [IntrNoMem]>; 410 def int_x86_sse2_psll_d : GCCBuiltin<"__builtin_ia32_pslld128">, 411 Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, 412 llvm_v4i32_ty], [IntrNoMem]>; 413 def int_x86_sse2_psll_q : GCCBuiltin<"__builtin_ia32_psllq128">, 414 Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, 415 llvm_v2i64_ty], [IntrNoMem]>; 416 def int_x86_sse2_psrl_w : GCCBuiltin<"__builtin_ia32_psrlw128">, 417 Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, 418 llvm_v8i16_ty], [IntrNoMem]>; 419 def int_x86_sse2_psrl_d : GCCBuiltin<"__builtin_ia32_psrld128">, 420 Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, 421 llvm_v4i32_ty], [IntrNoMem]>; 422 def int_x86_sse2_psrl_q : GCCBuiltin<"__builtin_ia32_psrlq128">, 423 Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, 424 llvm_v2i64_ty], [IntrNoMem]>; 425 def int_x86_sse2_psra_w : GCCBuiltin<"__builtin_ia32_psraw128">, 426 Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, 427 llvm_v8i16_ty], [IntrNoMem]>; 428 def int_x86_sse2_psra_d : GCCBuiltin<"__builtin_ia32_psrad128">, 429 Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, 430 llvm_v4i32_ty], [IntrNoMem]>; 431 432 def int_x86_sse2_pslli_w : GCCBuiltin<"__builtin_ia32_psllwi128">, 433 Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, 434 llvm_i32_ty], [IntrNoMem]>; 435 def int_x86_sse2_pslli_d : GCCBuiltin<"__builtin_ia32_pslldi128">, 436 Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, 437 llvm_i32_ty], [IntrNoMem]>; 438 def int_x86_sse2_pslli_q : GCCBuiltin<"__builtin_ia32_psllqi128">, 439 Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, 440 llvm_i32_ty], [IntrNoMem]>; 441 def int_x86_sse2_psrli_w : GCCBuiltin<"__builtin_ia32_psrlwi128">, 442 Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, 443 llvm_i32_ty], [IntrNoMem]>; 444 def int_x86_sse2_psrli_d : GCCBuiltin<"__builtin_ia32_psrldi128">, 445 Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, 446 llvm_i32_ty], [IntrNoMem]>; 447 def int_x86_sse2_psrli_q : GCCBuiltin<"__builtin_ia32_psrlqi128">, 448 Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, 449 llvm_i32_ty], [IntrNoMem]>; 450 def int_x86_sse2_psrai_w : GCCBuiltin<"__builtin_ia32_psrawi128">, 451 Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, 452 llvm_i32_ty], [IntrNoMem]>; 453 def int_x86_sse2_psrai_d : GCCBuiltin<"__builtin_ia32_psradi128">, 454 Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, 455 llvm_i32_ty], [IntrNoMem]>; 456 457 def int_x86_sse2_psll_dq : GCCBuiltin<"__builtin_ia32_pslldqi128">, 458 Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, 459 llvm_i32_ty], [IntrNoMem]>; 460 def int_x86_sse2_psrl_dq : GCCBuiltin<"__builtin_ia32_psrldqi128">, 461 Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, 462 llvm_i32_ty], [IntrNoMem]>; 463 def int_x86_sse2_psll_dq_bs : GCCBuiltin<"__builtin_ia32_pslldqi128_byteshift">, 464 Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, 465 llvm_i32_ty], [IntrNoMem]>; 466 def int_x86_sse2_psrl_dq_bs : GCCBuiltin<"__builtin_ia32_psrldqi128_byteshift">, 467 Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, 468 llvm_i32_ty], [IntrNoMem]>; 469} 470 471// Conversion ops 472let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.". 473 def int_x86_sse2_cvtdq2pd : GCCBuiltin<"__builtin_ia32_cvtdq2pd">, 474 Intrinsic<[llvm_v2f64_ty], [llvm_v4i32_ty], [IntrNoMem]>; 475 def int_x86_sse2_cvtdq2ps : GCCBuiltin<"__builtin_ia32_cvtdq2ps">, 476 Intrinsic<[llvm_v4f32_ty], [llvm_v4i32_ty], [IntrNoMem]>; 477 def int_x86_sse2_cvtpd2dq : GCCBuiltin<"__builtin_ia32_cvtpd2dq">, 478 Intrinsic<[llvm_v4i32_ty], [llvm_v2f64_ty], [IntrNoMem]>; 479 def int_x86_sse2_cvttpd2dq : GCCBuiltin<"__builtin_ia32_cvttpd2dq">, 480 Intrinsic<[llvm_v4i32_ty], [llvm_v2f64_ty], [IntrNoMem]>; 481 def int_x86_sse2_cvtpd2ps : GCCBuiltin<"__builtin_ia32_cvtpd2ps">, 482 Intrinsic<[llvm_v4f32_ty], [llvm_v2f64_ty], [IntrNoMem]>; 483 def int_x86_sse2_cvtps2dq : GCCBuiltin<"__builtin_ia32_cvtps2dq">, 484 Intrinsic<[llvm_v4i32_ty], [llvm_v4f32_ty], [IntrNoMem]>; 485 def int_x86_sse2_cvttps2dq : GCCBuiltin<"__builtin_ia32_cvttps2dq">, 486 Intrinsic<[llvm_v4i32_ty], [llvm_v4f32_ty], [IntrNoMem]>; 487 def int_x86_sse2_cvtps2pd : GCCBuiltin<"__builtin_ia32_cvtps2pd">, 488 Intrinsic<[llvm_v2f64_ty], [llvm_v4f32_ty], [IntrNoMem]>; 489 def int_x86_sse2_cvtsd2si : GCCBuiltin<"__builtin_ia32_cvtsd2si">, 490 Intrinsic<[llvm_i32_ty], [llvm_v2f64_ty], [IntrNoMem]>; 491 def int_x86_sse2_cvtsd2si64 : GCCBuiltin<"__builtin_ia32_cvtsd2si64">, 492 Intrinsic<[llvm_i64_ty], [llvm_v2f64_ty], [IntrNoMem]>; 493 def int_x86_sse2_cvttsd2si : GCCBuiltin<"__builtin_ia32_cvttsd2si">, 494 Intrinsic<[llvm_i32_ty], [llvm_v2f64_ty], [IntrNoMem]>; 495 def int_x86_sse2_cvttsd2si64 : GCCBuiltin<"__builtin_ia32_cvttsd2si64">, 496 Intrinsic<[llvm_i64_ty], [llvm_v2f64_ty], [IntrNoMem]>; 497 def int_x86_sse2_cvtsi2sd : GCCBuiltin<"__builtin_ia32_cvtsi2sd">, 498 Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, 499 llvm_i32_ty], [IntrNoMem]>; 500 def int_x86_sse2_cvtsi642sd : GCCBuiltin<"__builtin_ia32_cvtsi642sd">, 501 Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, 502 llvm_i64_ty], [IntrNoMem]>; 503 def int_x86_sse2_cvtsd2ss : GCCBuiltin<"__builtin_ia32_cvtsd2ss">, 504 Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, 505 llvm_v2f64_ty], [IntrNoMem]>; 506 def int_x86_sse2_cvtss2sd : GCCBuiltin<"__builtin_ia32_cvtss2sd">, 507 Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, 508 llvm_v4f32_ty], [IntrNoMem]>; 509 def int_x86_sse_cvtpd2pi : GCCBuiltin<"__builtin_ia32_cvtpd2pi">, 510 Intrinsic<[llvm_x86mmx_ty], [llvm_v2f64_ty], [IntrNoMem]>; 511 def int_x86_sse_cvttpd2pi: GCCBuiltin<"__builtin_ia32_cvttpd2pi">, 512 Intrinsic<[llvm_x86mmx_ty], [llvm_v2f64_ty], [IntrNoMem]>; 513 def int_x86_sse_cvtpi2pd : GCCBuiltin<"__builtin_ia32_cvtpi2pd">, 514 Intrinsic<[llvm_v2f64_ty], [llvm_x86mmx_ty], [IntrNoMem]>; 515} 516 517// SIMD store ops 518let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.". 519 def int_x86_sse2_storeu_pd : GCCBuiltin<"__builtin_ia32_storeupd">, 520 Intrinsic<[], [llvm_ptr_ty, 521 llvm_v2f64_ty], [IntrReadWriteArgMem]>; 522 def int_x86_sse2_storeu_dq : GCCBuiltin<"__builtin_ia32_storedqu">, 523 Intrinsic<[], [llvm_ptr_ty, 524 llvm_v16i8_ty], [IntrReadWriteArgMem]>; 525 def int_x86_sse2_storel_dq : GCCBuiltin<"__builtin_ia32_storelv4si">, 526 Intrinsic<[], [llvm_ptr_ty, 527 llvm_v4i32_ty], [IntrReadWriteArgMem]>; 528} 529 530// Misc. 531let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.". 532 def int_x86_sse2_packsswb_128 : GCCBuiltin<"__builtin_ia32_packsswb128">, 533 Intrinsic<[llvm_v16i8_ty], [llvm_v8i16_ty, 534 llvm_v8i16_ty], [IntrNoMem]>; 535 def int_x86_sse2_packssdw_128 : GCCBuiltin<"__builtin_ia32_packssdw128">, 536 Intrinsic<[llvm_v8i16_ty], [llvm_v4i32_ty, 537 llvm_v4i32_ty], [IntrNoMem]>; 538 def int_x86_sse2_packuswb_128 : GCCBuiltin<"__builtin_ia32_packuswb128">, 539 Intrinsic<[llvm_v16i8_ty], [llvm_v8i16_ty, 540 llvm_v8i16_ty], [IntrNoMem]>; 541 def int_x86_sse2_movmsk_pd : GCCBuiltin<"__builtin_ia32_movmskpd">, 542 Intrinsic<[llvm_i32_ty], [llvm_v2f64_ty], [IntrNoMem]>; 543 def int_x86_sse2_pmovmskb_128 : GCCBuiltin<"__builtin_ia32_pmovmskb128">, 544 Intrinsic<[llvm_i32_ty], [llvm_v16i8_ty], [IntrNoMem]>; 545 def int_x86_sse2_maskmov_dqu : GCCBuiltin<"__builtin_ia32_maskmovdqu">, 546 Intrinsic<[], [llvm_v16i8_ty, 547 llvm_v16i8_ty, llvm_ptr_ty], []>; 548 def int_x86_sse2_clflush : GCCBuiltin<"__builtin_ia32_clflush">, 549 Intrinsic<[], [llvm_ptr_ty], []>; 550 def int_x86_sse2_lfence : GCCBuiltin<"__builtin_ia32_lfence">, 551 Intrinsic<[], [], []>; 552 def int_x86_sse2_mfence : GCCBuiltin<"__builtin_ia32_mfence">, 553 Intrinsic<[], [], []>; 554 def int_x86_sse2_pause : GCCBuiltin<"__builtin_ia32_pause">, 555 Intrinsic<[], [], []>; 556} 557 558//===----------------------------------------------------------------------===// 559// SSE3 560 561// Addition / subtraction ops. 562let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.". 563 def int_x86_sse3_addsub_ps : GCCBuiltin<"__builtin_ia32_addsubps">, 564 Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, 565 llvm_v4f32_ty], [IntrNoMem]>; 566 def int_x86_sse3_addsub_pd : GCCBuiltin<"__builtin_ia32_addsubpd">, 567 Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, 568 llvm_v2f64_ty], [IntrNoMem]>; 569} 570 571// Horizontal ops. 572let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.". 573 def int_x86_sse3_hadd_ps : GCCBuiltin<"__builtin_ia32_haddps">, 574 Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, 575 llvm_v4f32_ty], [IntrNoMem]>; 576 def int_x86_sse3_hadd_pd : GCCBuiltin<"__builtin_ia32_haddpd">, 577 Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, 578 llvm_v2f64_ty], [IntrNoMem]>; 579 def int_x86_sse3_hsub_ps : GCCBuiltin<"__builtin_ia32_hsubps">, 580 Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, 581 llvm_v4f32_ty], [IntrNoMem]>; 582 def int_x86_sse3_hsub_pd : GCCBuiltin<"__builtin_ia32_hsubpd">, 583 Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, 584 llvm_v2f64_ty], [IntrNoMem]>; 585} 586 587// Specialized unaligned load. 588let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.". 589 def int_x86_sse3_ldu_dq : GCCBuiltin<"__builtin_ia32_lddqu">, 590 Intrinsic<[llvm_v16i8_ty], [llvm_ptr_ty], [IntrReadMem]>; 591} 592 593// Thread synchronization ops. 594let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.". 595 def int_x86_sse3_monitor : GCCBuiltin<"__builtin_ia32_monitor">, 596 Intrinsic<[], [llvm_ptr_ty, 597 llvm_i32_ty, llvm_i32_ty], []>; 598 def int_x86_sse3_mwait : GCCBuiltin<"__builtin_ia32_mwait">, 599 Intrinsic<[], [llvm_i32_ty, 600 llvm_i32_ty], []>; 601} 602 603//===----------------------------------------------------------------------===// 604// SSSE3 605 606// Horizontal arithmetic ops 607let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.". 608 def int_x86_ssse3_phadd_w : GCCBuiltin<"__builtin_ia32_phaddw">, 609 Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, 610 llvm_x86mmx_ty], [IntrNoMem]>; 611 def int_x86_ssse3_phadd_w_128 : GCCBuiltin<"__builtin_ia32_phaddw128">, 612 Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, 613 llvm_v8i16_ty], [IntrNoMem]>; 614 615 def int_x86_ssse3_phadd_d : GCCBuiltin<"__builtin_ia32_phaddd">, 616 Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, 617 llvm_x86mmx_ty], [IntrNoMem]>; 618 def int_x86_ssse3_phadd_d_128 : GCCBuiltin<"__builtin_ia32_phaddd128">, 619 Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, 620 llvm_v4i32_ty], [IntrNoMem]>; 621 622 def int_x86_ssse3_phadd_sw : GCCBuiltin<"__builtin_ia32_phaddsw">, 623 Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, 624 llvm_x86mmx_ty], [IntrNoMem]>; 625 def int_x86_ssse3_phadd_sw_128 : GCCBuiltin<"__builtin_ia32_phaddsw128">, 626 Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, 627 llvm_v8i16_ty], [IntrNoMem]>; 628 629 def int_x86_ssse3_phsub_w : GCCBuiltin<"__builtin_ia32_phsubw">, 630 Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, 631 llvm_x86mmx_ty], [IntrNoMem]>; 632 def int_x86_ssse3_phsub_w_128 : GCCBuiltin<"__builtin_ia32_phsubw128">, 633 Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, 634 llvm_v8i16_ty], [IntrNoMem]>; 635 636 def int_x86_ssse3_phsub_d : GCCBuiltin<"__builtin_ia32_phsubd">, 637 Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, 638 llvm_x86mmx_ty], [IntrNoMem]>; 639 def int_x86_ssse3_phsub_d_128 : GCCBuiltin<"__builtin_ia32_phsubd128">, 640 Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, 641 llvm_v4i32_ty], [IntrNoMem]>; 642 643 def int_x86_ssse3_phsub_sw : GCCBuiltin<"__builtin_ia32_phsubsw">, 644 Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, 645 llvm_x86mmx_ty], [IntrNoMem]>; 646 def int_x86_ssse3_phsub_sw_128 : GCCBuiltin<"__builtin_ia32_phsubsw128">, 647 Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, 648 llvm_v8i16_ty], [IntrNoMem]>; 649 650 def int_x86_ssse3_pmadd_ub_sw : GCCBuiltin<"__builtin_ia32_pmaddubsw">, 651 Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, 652 llvm_x86mmx_ty], [IntrNoMem]>; 653 def int_x86_ssse3_pmadd_ub_sw_128 : GCCBuiltin<"__builtin_ia32_pmaddubsw128">, 654 Intrinsic<[llvm_v8i16_ty], [llvm_v16i8_ty, 655 llvm_v16i8_ty], [IntrNoMem]>; 656} 657 658// Packed multiply high with round and scale 659let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.". 660 def int_x86_ssse3_pmul_hr_sw : GCCBuiltin<"__builtin_ia32_pmulhrsw">, 661 Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, 662 llvm_x86mmx_ty], [IntrNoMem, Commutative]>; 663 def int_x86_ssse3_pmul_hr_sw_128 : GCCBuiltin<"__builtin_ia32_pmulhrsw128">, 664 Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, 665 llvm_v8i16_ty], [IntrNoMem, Commutative]>; 666} 667 668// Shuffle ops 669let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.". 670 def int_x86_ssse3_pshuf_b : GCCBuiltin<"__builtin_ia32_pshufb">, 671 Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, 672 llvm_x86mmx_ty], [IntrNoMem]>; 673 def int_x86_ssse3_pshuf_b_128 : GCCBuiltin<"__builtin_ia32_pshufb128">, 674 Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, 675 llvm_v16i8_ty], [IntrNoMem]>; 676 def int_x86_sse2_pshuf_d : GCCBuiltin<"__builtin_ia32_pshufd">, 677 Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_i8_ty], 678 [IntrNoMem]>; 679 def int_x86_sse2_pshufl_w : GCCBuiltin<"__builtin_ia32_pshuflw">, 680 Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_i8_ty], 681 [IntrNoMem]>; 682 def int_x86_sse2_pshufh_w : GCCBuiltin<"__builtin_ia32_pshufhw">, 683 Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_i8_ty], 684 [IntrNoMem]>; 685 def int_x86_sse_pshuf_w : GCCBuiltin<"__builtin_ia32_pshufw">, 686 Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_i8_ty], 687 [IntrNoMem]>; 688} 689 690// Sign ops 691let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.". 692 def int_x86_ssse3_psign_b : GCCBuiltin<"__builtin_ia32_psignb">, 693 Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, 694 llvm_x86mmx_ty], [IntrNoMem]>; 695 def int_x86_ssse3_psign_b_128 : GCCBuiltin<"__builtin_ia32_psignb128">, 696 Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, 697 llvm_v16i8_ty], [IntrNoMem]>; 698 699 def int_x86_ssse3_psign_w : GCCBuiltin<"__builtin_ia32_psignw">, 700 Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, 701 llvm_x86mmx_ty], [IntrNoMem]>; 702 def int_x86_ssse3_psign_w_128 : GCCBuiltin<"__builtin_ia32_psignw128">, 703 Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, 704 llvm_v8i16_ty], [IntrNoMem]>; 705 706 def int_x86_ssse3_psign_d : GCCBuiltin<"__builtin_ia32_psignd">, 707 Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, 708 llvm_x86mmx_ty], [IntrNoMem]>; 709 def int_x86_ssse3_psign_d_128 : GCCBuiltin<"__builtin_ia32_psignd128">, 710 Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, 711 llvm_v4i32_ty], [IntrNoMem]>; 712} 713 714// Absolute value ops 715let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.". 716 def int_x86_ssse3_pabs_b : GCCBuiltin<"__builtin_ia32_pabsb">, 717 Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty], [IntrNoMem]>; 718 def int_x86_ssse3_pabs_b_128 : GCCBuiltin<"__builtin_ia32_pabsb128">, 719 Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty], [IntrNoMem]>; 720 721 def int_x86_ssse3_pabs_w : GCCBuiltin<"__builtin_ia32_pabsw">, 722 Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty], [IntrNoMem]>; 723 def int_x86_ssse3_pabs_w_128 : GCCBuiltin<"__builtin_ia32_pabsw128">, 724 Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty], [IntrNoMem]>; 725 726 def int_x86_ssse3_pabs_d : GCCBuiltin<"__builtin_ia32_pabsd">, 727 Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty], [IntrNoMem]>; 728 def int_x86_ssse3_pabs_d_128 : GCCBuiltin<"__builtin_ia32_pabsd128">, 729 Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty], [IntrNoMem]>; 730} 731 732//===----------------------------------------------------------------------===// 733// SSE4.1 734 735// FP rounding ops 736let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.". 737 def int_x86_sse41_round_ss : GCCBuiltin<"__builtin_ia32_roundss">, 738 Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_v4f32_ty, 739 llvm_i32_ty], [IntrNoMem]>; 740 def int_x86_sse41_round_ps : GCCBuiltin<"__builtin_ia32_roundps">, 741 Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, 742 llvm_i32_ty], [IntrNoMem]>; 743 def int_x86_sse41_round_sd : GCCBuiltin<"__builtin_ia32_roundsd">, 744 Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, llvm_v2f64_ty, 745 llvm_i32_ty], [IntrNoMem]>; 746 def int_x86_sse41_round_pd : GCCBuiltin<"__builtin_ia32_roundpd">, 747 Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, 748 llvm_i32_ty], [IntrNoMem]>; 749} 750 751// Vector sign and zero extend 752let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.". 753 def int_x86_sse41_pmovsxbd : GCCBuiltin<"__builtin_ia32_pmovsxbd128">, 754 Intrinsic<[llvm_v4i32_ty], [llvm_v16i8_ty], 755 [IntrNoMem]>; 756 def int_x86_sse41_pmovsxbq : GCCBuiltin<"__builtin_ia32_pmovsxbq128">, 757 Intrinsic<[llvm_v2i64_ty], [llvm_v16i8_ty], 758 [IntrNoMem]>; 759 def int_x86_sse41_pmovsxbw : GCCBuiltin<"__builtin_ia32_pmovsxbw128">, 760 Intrinsic<[llvm_v8i16_ty], [llvm_v16i8_ty], 761 [IntrNoMem]>; 762 def int_x86_sse41_pmovsxdq : GCCBuiltin<"__builtin_ia32_pmovsxdq128">, 763 Intrinsic<[llvm_v2i64_ty], [llvm_v4i32_ty], 764 [IntrNoMem]>; 765 def int_x86_sse41_pmovsxwd : GCCBuiltin<"__builtin_ia32_pmovsxwd128">, 766 Intrinsic<[llvm_v4i32_ty], [llvm_v8i16_ty], 767 [IntrNoMem]>; 768 def int_x86_sse41_pmovsxwq : GCCBuiltin<"__builtin_ia32_pmovsxwq128">, 769 Intrinsic<[llvm_v2i64_ty], [llvm_v8i16_ty], 770 [IntrNoMem]>; 771 def int_x86_sse41_pmovzxbd : GCCBuiltin<"__builtin_ia32_pmovzxbd128">, 772 Intrinsic<[llvm_v4i32_ty], [llvm_v16i8_ty], 773 [IntrNoMem]>; 774 def int_x86_sse41_pmovzxbq : GCCBuiltin<"__builtin_ia32_pmovzxbq128">, 775 Intrinsic<[llvm_v2i64_ty], [llvm_v16i8_ty], 776 [IntrNoMem]>; 777 def int_x86_sse41_pmovzxbw : GCCBuiltin<"__builtin_ia32_pmovzxbw128">, 778 Intrinsic<[llvm_v8i16_ty], [llvm_v16i8_ty], 779 [IntrNoMem]>; 780 def int_x86_sse41_pmovzxdq : GCCBuiltin<"__builtin_ia32_pmovzxdq128">, 781 Intrinsic<[llvm_v2i64_ty], [llvm_v4i32_ty], 782 [IntrNoMem]>; 783 def int_x86_sse41_pmovzxwd : GCCBuiltin<"__builtin_ia32_pmovzxwd128">, 784 Intrinsic<[llvm_v4i32_ty], [llvm_v8i16_ty], 785 [IntrNoMem]>; 786 def int_x86_sse41_pmovzxwq : GCCBuiltin<"__builtin_ia32_pmovzxwq128">, 787 Intrinsic<[llvm_v2i64_ty], [llvm_v8i16_ty], 788 [IntrNoMem]>; 789} 790 791// Vector min element 792let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.". 793 def int_x86_sse41_phminposuw : GCCBuiltin<"__builtin_ia32_phminposuw128">, 794 Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty], 795 [IntrNoMem]>; 796} 797 798// Vector compare, min, max 799let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.". 800 def int_x86_sse41_pmaxsb : GCCBuiltin<"__builtin_ia32_pmaxsb128">, 801 Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_v16i8_ty], 802 [IntrNoMem, Commutative]>; 803 def int_x86_sse41_pmaxsd : GCCBuiltin<"__builtin_ia32_pmaxsd128">, 804 Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty], 805 [IntrNoMem, Commutative]>; 806 def int_x86_sse41_pmaxud : GCCBuiltin<"__builtin_ia32_pmaxud128">, 807 Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty], 808 [IntrNoMem, Commutative]>; 809 def int_x86_sse41_pmaxuw : GCCBuiltin<"__builtin_ia32_pmaxuw128">, 810 Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_v8i16_ty], 811 [IntrNoMem, Commutative]>; 812 def int_x86_sse41_pminsb : GCCBuiltin<"__builtin_ia32_pminsb128">, 813 Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_v16i8_ty], 814 [IntrNoMem, Commutative]>; 815 def int_x86_sse41_pminsd : GCCBuiltin<"__builtin_ia32_pminsd128">, 816 Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty], 817 [IntrNoMem, Commutative]>; 818 def int_x86_sse41_pminud : GCCBuiltin<"__builtin_ia32_pminud128">, 819 Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty], 820 [IntrNoMem, Commutative]>; 821 def int_x86_sse41_pminuw : GCCBuiltin<"__builtin_ia32_pminuw128">, 822 Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_v8i16_ty], 823 [IntrNoMem, Commutative]>; 824} 825 826// Advanced Encryption Standard (AES) Instructions 827let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.". 828 def int_x86_aesni_aesimc : GCCBuiltin<"__builtin_ia32_aesimc128">, 829 Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty], 830 [IntrNoMem]>; 831 def int_x86_aesni_aesenc : GCCBuiltin<"__builtin_ia32_aesenc128">, 832 Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty], 833 [IntrNoMem]>; 834 def int_x86_aesni_aesenclast : GCCBuiltin<"__builtin_ia32_aesenclast128">, 835 Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty], 836 [IntrNoMem]>; 837 def int_x86_aesni_aesdec : GCCBuiltin<"__builtin_ia32_aesdec128">, 838 Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty], 839 [IntrNoMem]>; 840 def int_x86_aesni_aesdeclast : GCCBuiltin<"__builtin_ia32_aesdeclast128">, 841 Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty], 842 [IntrNoMem]>; 843 def int_x86_aesni_aeskeygenassist : 844 GCCBuiltin<"__builtin_ia32_aeskeygenassist128">, 845 Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_i8_ty], 846 [IntrNoMem]>; 847} 848 849// PCLMUL instruction 850let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.". 851 def int_x86_pclmulqdq : GCCBuiltin<"__builtin_ia32_pclmulqdq128">, 852 Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty, llvm_i8_ty], 853 [IntrNoMem]>; 854} 855 856// Vector pack 857let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.". 858 def int_x86_sse41_packusdw : GCCBuiltin<"__builtin_ia32_packusdw128">, 859 Intrinsic<[llvm_v8i16_ty], [llvm_v4i32_ty, llvm_v4i32_ty], 860 [IntrNoMem]>; 861} 862 863// Vector multiply 864let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.". 865 def int_x86_sse41_pmuldq : GCCBuiltin<"__builtin_ia32_pmuldq128">, 866 Intrinsic<[llvm_v2i64_ty], [llvm_v4i32_ty, llvm_v4i32_ty], 867 [IntrNoMem, Commutative]>; 868} 869 870// Vector extract 871let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.". 872 def int_x86_sse41_pextrb : 873 Intrinsic<[llvm_i32_ty], [llvm_v16i8_ty, llvm_i32_ty], 874 [IntrNoMem]>; 875 def int_x86_sse41_pextrd : 876 Intrinsic<[llvm_i32_ty], [llvm_v4i32_ty, llvm_i32_ty], 877 [IntrNoMem]>; 878 def int_x86_sse41_pextrq : 879 Intrinsic<[llvm_i64_ty], [llvm_v2i64_ty, llvm_i32_ty], 880 [IntrNoMem]>; 881 def int_x86_sse41_extractps : GCCBuiltin<"__builtin_ia32_extractps128">, 882 Intrinsic<[llvm_i32_ty], [llvm_v4f32_ty, llvm_i32_ty], 883 [IntrNoMem]>; 884} 885 886// Vector insert 887let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.". 888 def int_x86_sse41_insertps : GCCBuiltin<"__builtin_ia32_insertps128">, 889 Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_v4f32_ty,llvm_i32_ty], 890 [IntrNoMem]>; 891} 892 893// Vector blend 894let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.". 895 def int_x86_sse41_pblendvb : GCCBuiltin<"__builtin_ia32_pblendvb128">, 896 Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_v16i8_ty,llvm_v16i8_ty], 897 [IntrNoMem]>; 898 def int_x86_sse41_pblendw : GCCBuiltin<"__builtin_ia32_pblendw128">, 899 Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_v8i16_ty, llvm_i32_ty], 900 [IntrNoMem]>; 901 def int_x86_sse41_blendpd : GCCBuiltin<"__builtin_ia32_blendpd">, 902 Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, llvm_v2f64_ty, llvm_i32_ty], 903 [IntrNoMem]>; 904 def int_x86_sse41_blendps : GCCBuiltin<"__builtin_ia32_blendps">, 905 Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_v4f32_ty, llvm_i32_ty], 906 [IntrNoMem]>; 907 def int_x86_sse41_blendvpd : GCCBuiltin<"__builtin_ia32_blendvpd">, 908 Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, llvm_v2f64_ty,llvm_v2f64_ty], 909 [IntrNoMem]>; 910 def int_x86_sse41_blendvps : GCCBuiltin<"__builtin_ia32_blendvps">, 911 Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_v4f32_ty,llvm_v4f32_ty], 912 [IntrNoMem]>; 913} 914 915// Vector dot product 916let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.". 917 def int_x86_sse41_dppd : GCCBuiltin<"__builtin_ia32_dppd">, 918 Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, llvm_v2f64_ty,llvm_i32_ty], 919 [IntrNoMem, Commutative]>; 920 def int_x86_sse41_dpps : GCCBuiltin<"__builtin_ia32_dpps">, 921 Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_v4f32_ty,llvm_i32_ty], 922 [IntrNoMem, Commutative]>; 923} 924 925// Vector sum of absolute differences 926let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.". 927 def int_x86_sse41_mpsadbw : GCCBuiltin<"__builtin_ia32_mpsadbw128">, 928 Intrinsic<[llvm_v8i16_ty], [llvm_v16i8_ty, llvm_v16i8_ty,llvm_i32_ty], 929 [IntrNoMem, Commutative]>; 930} 931 932// Cacheability support ops 933let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.". 934 def int_x86_sse41_movntdqa : GCCBuiltin<"__builtin_ia32_movntdqa">, 935 Intrinsic<[llvm_v2i64_ty], [llvm_ptr_ty], [IntrReadMem]>; 936} 937 938// Test instruction with bitwise comparison. 939let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.". 940 def int_x86_sse41_ptestz : GCCBuiltin<"__builtin_ia32_ptestz128">, 941 Intrinsic<[llvm_i32_ty], [llvm_v2i64_ty, llvm_v2i64_ty], 942 [IntrNoMem]>; 943 def int_x86_sse41_ptestc : GCCBuiltin<"__builtin_ia32_ptestc128">, 944 Intrinsic<[llvm_i32_ty], [llvm_v2i64_ty, llvm_v2i64_ty], 945 [IntrNoMem]>; 946 def int_x86_sse41_ptestnzc : GCCBuiltin<"__builtin_ia32_ptestnzc128">, 947 Intrinsic<[llvm_i32_ty], [llvm_v2i64_ty, llvm_v2i64_ty], 948 [IntrNoMem]>; 949} 950 951//===----------------------------------------------------------------------===// 952// SSE4.2 953 954// Miscellaneous 955// CRC Instruction 956let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.". 957 def int_x86_sse42_crc32_32_8 : GCCBuiltin<"__builtin_ia32_crc32qi">, 958 Intrinsic<[llvm_i32_ty], [llvm_i32_ty, llvm_i8_ty], 959 [IntrNoMem]>; 960 def int_x86_sse42_crc32_32_16 : GCCBuiltin<"__builtin_ia32_crc32hi">, 961 Intrinsic<[llvm_i32_ty], [llvm_i32_ty, llvm_i16_ty], 962 [IntrNoMem]>; 963 def int_x86_sse42_crc32_32_32 : GCCBuiltin<"__builtin_ia32_crc32si">, 964 Intrinsic<[llvm_i32_ty], [llvm_i32_ty, llvm_i32_ty], 965 [IntrNoMem]>; 966 def int_x86_sse42_crc32_64_64 : GCCBuiltin<"__builtin_ia32_crc32di">, 967 Intrinsic<[llvm_i64_ty], [llvm_i64_ty, llvm_i64_ty], 968 [IntrNoMem]>; 969} 970 971// String/text processing ops. 972let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.". 973 def int_x86_sse42_pcmpistrm128 : GCCBuiltin<"__builtin_ia32_pcmpistrm128">, 974 Intrinsic<[llvm_v16i8_ty], 975 [llvm_v16i8_ty, llvm_v16i8_ty, llvm_i8_ty], 976 [IntrNoMem]>; 977 def int_x86_sse42_pcmpistri128 : GCCBuiltin<"__builtin_ia32_pcmpistri128">, 978 Intrinsic<[llvm_i32_ty], 979 [llvm_v16i8_ty, llvm_v16i8_ty, llvm_i8_ty], 980 [IntrNoMem]>; 981 def int_x86_sse42_pcmpistria128 : GCCBuiltin<"__builtin_ia32_pcmpistria128">, 982 Intrinsic<[llvm_i32_ty], 983 [llvm_v16i8_ty, llvm_v16i8_ty, llvm_i8_ty], 984 [IntrNoMem]>; 985 def int_x86_sse42_pcmpistric128 : GCCBuiltin<"__builtin_ia32_pcmpistric128">, 986 Intrinsic<[llvm_i32_ty], 987 [llvm_v16i8_ty, llvm_v16i8_ty, llvm_i8_ty], 988 [IntrNoMem]>; 989 def int_x86_sse42_pcmpistrio128 : GCCBuiltin<"__builtin_ia32_pcmpistrio128">, 990 Intrinsic<[llvm_i32_ty], 991 [llvm_v16i8_ty, llvm_v16i8_ty, llvm_i8_ty], 992 [IntrNoMem]>; 993 def int_x86_sse42_pcmpistris128 : GCCBuiltin<"__builtin_ia32_pcmpistris128">, 994 Intrinsic<[llvm_i32_ty], 995 [llvm_v16i8_ty, llvm_v16i8_ty, llvm_i8_ty], 996 [IntrNoMem]>; 997 def int_x86_sse42_pcmpistriz128 : GCCBuiltin<"__builtin_ia32_pcmpistriz128">, 998 Intrinsic<[llvm_i32_ty], 999 [llvm_v16i8_ty, llvm_v16i8_ty, llvm_i8_ty], 1000 [IntrNoMem]>; 1001 def int_x86_sse42_pcmpestrm128 : GCCBuiltin<"__builtin_ia32_pcmpestrm128">, 1002 Intrinsic<[llvm_v16i8_ty], 1003 [llvm_v16i8_ty, llvm_i32_ty, llvm_v16i8_ty, llvm_i32_ty, 1004 llvm_i8_ty], 1005 [IntrNoMem]>; 1006 def int_x86_sse42_pcmpestri128 : GCCBuiltin<"__builtin_ia32_pcmpestri128">, 1007 Intrinsic<[llvm_i32_ty], 1008 [llvm_v16i8_ty, llvm_i32_ty, llvm_v16i8_ty, llvm_i32_ty, 1009 llvm_i8_ty], 1010 [IntrNoMem]>; 1011 def int_x86_sse42_pcmpestria128 : GCCBuiltin<"__builtin_ia32_pcmpestria128">, 1012 Intrinsic<[llvm_i32_ty], 1013 [llvm_v16i8_ty, llvm_i32_ty, llvm_v16i8_ty, llvm_i32_ty, 1014 llvm_i8_ty], 1015 [IntrNoMem]>; 1016 def int_x86_sse42_pcmpestric128 : GCCBuiltin<"__builtin_ia32_pcmpestric128">, 1017 Intrinsic<[llvm_i32_ty], 1018 [llvm_v16i8_ty, llvm_i32_ty, llvm_v16i8_ty, llvm_i32_ty, 1019 llvm_i8_ty], 1020 [IntrNoMem]>; 1021 def int_x86_sse42_pcmpestrio128 : GCCBuiltin<"__builtin_ia32_pcmpestrio128">, 1022 Intrinsic<[llvm_i32_ty], 1023 [llvm_v16i8_ty, llvm_i32_ty, llvm_v16i8_ty, llvm_i32_ty, 1024 llvm_i8_ty], 1025 [IntrNoMem]>; 1026 def int_x86_sse42_pcmpestris128 : GCCBuiltin<"__builtin_ia32_pcmpestris128">, 1027 Intrinsic<[llvm_i32_ty], 1028 [llvm_v16i8_ty, llvm_i32_ty, llvm_v16i8_ty, llvm_i32_ty, 1029 llvm_i8_ty], 1030 [IntrNoMem]>; 1031 def int_x86_sse42_pcmpestriz128 : GCCBuiltin<"__builtin_ia32_pcmpestriz128">, 1032 Intrinsic<[llvm_i32_ty], 1033 [llvm_v16i8_ty, llvm_i32_ty, llvm_v16i8_ty, llvm_i32_ty, 1034 llvm_i8_ty], 1035 [IntrNoMem]>; 1036} 1037 1038//===----------------------------------------------------------------------===// 1039// SSE4A 1040 1041let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.". 1042 def int_x86_sse4a_extrqi : GCCBuiltin<"__builtin_ia32_extrqi">, 1043 Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_i8_ty, llvm_i8_ty], 1044 [IntrNoMem]>; 1045 def int_x86_sse4a_extrq : GCCBuiltin<"__builtin_ia32_extrq">, 1046 Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v16i8_ty], [IntrNoMem]>; 1047 1048 def int_x86_sse4a_insertqi : GCCBuiltin<"__builtin_ia32_insertqi">, 1049 Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty, 1050 llvm_i8_ty, llvm_i8_ty], [IntrNoMem]>; 1051 def int_x86_sse4a_insertq : GCCBuiltin<"__builtin_ia32_insertq">, 1052 Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty], [IntrNoMem]>; 1053 1054 def int_x86_sse4a_movnt_ss : GCCBuiltin<"__builtin_ia32_movntss">, 1055 Intrinsic<[], [llvm_ptr_ty, llvm_v4f32_ty], []>; 1056 def int_x86_sse4a_movnt_sd : GCCBuiltin<"__builtin_ia32_movntsd">, 1057 Intrinsic<[], [llvm_ptr_ty, llvm_v2f64_ty], []>; 1058} 1059 1060//===----------------------------------------------------------------------===// 1061// AVX 1062 1063// Arithmetic ops 1064let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.". 1065 def int_x86_avx_addsub_pd_256 : GCCBuiltin<"__builtin_ia32_addsubpd256">, 1066 Intrinsic<[llvm_v4f64_ty], [llvm_v4f64_ty, 1067 llvm_v4f64_ty], [IntrNoMem]>; 1068 def int_x86_avx_addsub_ps_256 : GCCBuiltin<"__builtin_ia32_addsubps256">, 1069 Intrinsic<[llvm_v8f32_ty], [llvm_v8f32_ty, 1070 llvm_v8f32_ty], [IntrNoMem]>; 1071 def int_x86_avx_max_pd_256 : GCCBuiltin<"__builtin_ia32_maxpd256">, 1072 Intrinsic<[llvm_v4f64_ty], [llvm_v4f64_ty, 1073 llvm_v4f64_ty], [IntrNoMem]>; 1074 def int_x86_avx_max_ps_256 : GCCBuiltin<"__builtin_ia32_maxps256">, 1075 Intrinsic<[llvm_v8f32_ty], [llvm_v8f32_ty, 1076 llvm_v8f32_ty], [IntrNoMem]>; 1077 def int_x86_avx_min_pd_256 : GCCBuiltin<"__builtin_ia32_minpd256">, 1078 Intrinsic<[llvm_v4f64_ty], [llvm_v4f64_ty, 1079 llvm_v4f64_ty], [IntrNoMem]>; 1080 def int_x86_avx_min_ps_256 : GCCBuiltin<"__builtin_ia32_minps256">, 1081 Intrinsic<[llvm_v8f32_ty], [llvm_v8f32_ty, 1082 llvm_v8f32_ty], [IntrNoMem]>; 1083 1084 def int_x86_avx_sqrt_pd_256 : GCCBuiltin<"__builtin_ia32_sqrtpd256">, 1085 Intrinsic<[llvm_v4f64_ty], [llvm_v4f64_ty], [IntrNoMem]>; 1086 def int_x86_avx_sqrt_ps_256 : GCCBuiltin<"__builtin_ia32_sqrtps256">, 1087 Intrinsic<[llvm_v8f32_ty], [llvm_v8f32_ty], [IntrNoMem]>; 1088 1089 def int_x86_avx_rsqrt_ps_256 : GCCBuiltin<"__builtin_ia32_rsqrtps256">, 1090 Intrinsic<[llvm_v8f32_ty], [llvm_v8f32_ty], [IntrNoMem]>; 1091 1092 def int_x86_avx_rcp_ps_256 : GCCBuiltin<"__builtin_ia32_rcpps256">, 1093 Intrinsic<[llvm_v8f32_ty], [llvm_v8f32_ty], [IntrNoMem]>; 1094 1095 def int_x86_avx_round_pd_256 : GCCBuiltin<"__builtin_ia32_roundpd256">, 1096 Intrinsic<[llvm_v4f64_ty], [llvm_v4f64_ty, 1097 llvm_i32_ty], [IntrNoMem]>; 1098 def int_x86_avx_round_ps_256 : GCCBuiltin<"__builtin_ia32_roundps256">, 1099 Intrinsic<[llvm_v8f32_ty], [llvm_v8f32_ty, 1100 llvm_i32_ty], [IntrNoMem]>; 1101} 1102 1103// Horizontal ops 1104let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.". 1105 def int_x86_avx_hadd_pd_256 : GCCBuiltin<"__builtin_ia32_haddpd256">, 1106 Intrinsic<[llvm_v4f64_ty], [llvm_v4f64_ty, 1107 llvm_v4f64_ty], [IntrNoMem]>; 1108 def int_x86_avx_hsub_ps_256 : GCCBuiltin<"__builtin_ia32_hsubps256">, 1109 Intrinsic<[llvm_v8f32_ty], [llvm_v8f32_ty, 1110 llvm_v8f32_ty], [IntrNoMem]>; 1111 def int_x86_avx_hsub_pd_256 : GCCBuiltin<"__builtin_ia32_hsubpd256">, 1112 Intrinsic<[llvm_v4f64_ty], [llvm_v4f64_ty, 1113 llvm_v4f64_ty], [IntrNoMem]>; 1114 def int_x86_avx_hadd_ps_256 : GCCBuiltin<"__builtin_ia32_haddps256">, 1115 Intrinsic<[llvm_v8f32_ty], [llvm_v8f32_ty, 1116 llvm_v8f32_ty], [IntrNoMem]>; 1117} 1118 1119// Vector permutation 1120let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.". 1121 def int_x86_avx_vpermilvar_pd : GCCBuiltin<"__builtin_ia32_vpermilvarpd">, 1122 Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, 1123 llvm_v2i64_ty], [IntrNoMem]>; 1124 def int_x86_avx_vpermilvar_ps : GCCBuiltin<"__builtin_ia32_vpermilvarps">, 1125 Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, 1126 llvm_v4i32_ty], [IntrNoMem]>; 1127 1128 def int_x86_avx_vpermilvar_pd_256 : 1129 GCCBuiltin<"__builtin_ia32_vpermilvarpd256">, 1130 Intrinsic<[llvm_v4f64_ty], [llvm_v4f64_ty, llvm_v4i64_ty], [IntrNoMem]>; 1131 def int_x86_avx_vpermilvar_ps_256 : 1132 GCCBuiltin<"__builtin_ia32_vpermilvarps256">, 1133 Intrinsic<[llvm_v8f32_ty], [llvm_v8f32_ty, llvm_v8i32_ty], [IntrNoMem]>; 1134 1135 def int_x86_avx_vperm2f128_pd_256 : 1136 GCCBuiltin<"__builtin_ia32_vperm2f128_pd256">, 1137 Intrinsic<[llvm_v4f64_ty], [llvm_v4f64_ty, 1138 llvm_v4f64_ty, llvm_i8_ty], [IntrNoMem]>; 1139 def int_x86_avx_vperm2f128_ps_256 : 1140 GCCBuiltin<"__builtin_ia32_vperm2f128_ps256">, 1141 Intrinsic<[llvm_v8f32_ty], [llvm_v8f32_ty, 1142 llvm_v8f32_ty, llvm_i8_ty], [IntrNoMem]>; 1143 def int_x86_avx_vperm2f128_si_256 : 1144 GCCBuiltin<"__builtin_ia32_vperm2f128_si256">, 1145 Intrinsic<[llvm_v8i32_ty], [llvm_v8i32_ty, 1146 llvm_v8i32_ty, llvm_i8_ty], [IntrNoMem]>; 1147 1148 def int_x86_avx512_mask_vpermt_d_512: 1149 GCCBuiltin<"__builtin_ia32_vpermt2vard512_mask">, 1150 Intrinsic<[llvm_v16i32_ty], [llvm_v16i32_ty, 1151 llvm_v16i32_ty, llvm_v16i32_ty, llvm_i16_ty], [IntrNoMem]>; 1152 1153 def int_x86_avx512_mask_vpermt_q_512: 1154 GCCBuiltin<"__builtin_ia32_vpermt2varq512_mask">, 1155 Intrinsic<[llvm_v8i64_ty], [llvm_v8i64_ty, 1156 llvm_v8i64_ty, llvm_v8i64_ty, llvm_i8_ty], [IntrNoMem]>; 1157 1158 def int_x86_avx512_mask_vpermt_ps_512: 1159 GCCBuiltin<"__builtin_ia32_vpermt2varps512_mask">, 1160 Intrinsic<[llvm_v16f32_ty], [llvm_v16i32_ty, 1161 llvm_v16f32_ty, llvm_v16f32_ty, llvm_i16_ty], [IntrNoMem]>; 1162 1163 def int_x86_avx512_mask_vpermt_pd_512: 1164 GCCBuiltin<"__builtin_ia32_vpermt2varpd512_mask">, 1165 Intrinsic<[llvm_v8f64_ty], [llvm_v8i64_ty, 1166 llvm_v8f64_ty, llvm_v8f64_ty, llvm_i8_ty], [IntrNoMem]>; 1167 1168} 1169 1170// Vector blend 1171let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.". 1172 def int_x86_avx_blend_pd_256 : GCCBuiltin<"__builtin_ia32_blendpd256">, 1173 Intrinsic<[llvm_v4f64_ty], [llvm_v4f64_ty, 1174 llvm_v4f64_ty, llvm_i32_ty], [IntrNoMem]>; 1175 def int_x86_avx_blend_ps_256 : GCCBuiltin<"__builtin_ia32_blendps256">, 1176 Intrinsic<[llvm_v8f32_ty], [llvm_v8f32_ty, 1177 llvm_v8f32_ty, llvm_i32_ty], [IntrNoMem]>; 1178 def int_x86_avx_blendv_pd_256 : GCCBuiltin<"__builtin_ia32_blendvpd256">, 1179 Intrinsic<[llvm_v4f64_ty], [llvm_v4f64_ty, 1180 llvm_v4f64_ty, llvm_v4f64_ty], [IntrNoMem]>; 1181 def int_x86_avx_blendv_ps_256 : GCCBuiltin<"__builtin_ia32_blendvps256">, 1182 Intrinsic<[llvm_v8f32_ty], [llvm_v8f32_ty, 1183 llvm_v8f32_ty, llvm_v8f32_ty], [IntrNoMem]>; 1184} 1185 1186// Vector dot product 1187let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.". 1188 def int_x86_avx_dp_ps_256 : GCCBuiltin<"__builtin_ia32_dpps256">, 1189 Intrinsic<[llvm_v8f32_ty], [llvm_v8f32_ty, 1190 llvm_v8f32_ty, llvm_i32_ty], [IntrNoMem]>; 1191} 1192 1193// Vector compare 1194let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.". 1195 def int_x86_avx_cmp_pd_256 : GCCBuiltin<"__builtin_ia32_cmppd256">, 1196 Intrinsic<[llvm_v4f64_ty], [llvm_v4f64_ty, 1197 llvm_v4f64_ty, llvm_i8_ty], [IntrNoMem]>; 1198 def int_x86_avx_cmp_ps_256 : GCCBuiltin<"__builtin_ia32_cmpps256">, 1199 Intrinsic<[llvm_v8f32_ty], [llvm_v8f32_ty, 1200 llvm_v8f32_ty, llvm_i8_ty], [IntrNoMem]>; 1201} 1202 1203// Vector extract and insert 1204let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.". 1205 def int_x86_avx_vextractf128_pd_256 : 1206 GCCBuiltin<"__builtin_ia32_vextractf128_pd256">, 1207 Intrinsic<[llvm_v2f64_ty], [llvm_v4f64_ty, llvm_i8_ty], [IntrNoMem]>; 1208 def int_x86_avx_vextractf128_ps_256 : 1209 GCCBuiltin<"__builtin_ia32_vextractf128_ps256">, 1210 Intrinsic<[llvm_v4f32_ty], [llvm_v8f32_ty, llvm_i8_ty], [IntrNoMem]>; 1211 def int_x86_avx_vextractf128_si_256 : 1212 GCCBuiltin<"__builtin_ia32_vextractf128_si256">, 1213 Intrinsic<[llvm_v4i32_ty], [llvm_v8i32_ty, llvm_i8_ty], [IntrNoMem]>; 1214 1215 def int_x86_avx_vinsertf128_pd_256 : 1216 GCCBuiltin<"__builtin_ia32_vinsertf128_pd256">, 1217 Intrinsic<[llvm_v4f64_ty], [llvm_v4f64_ty, 1218 llvm_v2f64_ty, llvm_i8_ty], [IntrNoMem]>; 1219 def int_x86_avx_vinsertf128_ps_256 : 1220 GCCBuiltin<"__builtin_ia32_vinsertf128_ps256">, 1221 Intrinsic<[llvm_v8f32_ty], [llvm_v8f32_ty, 1222 llvm_v4f32_ty, llvm_i8_ty], [IntrNoMem]>; 1223 def int_x86_avx_vinsertf128_si_256 : 1224 GCCBuiltin<"__builtin_ia32_vinsertf128_si256">, 1225 Intrinsic<[llvm_v8i32_ty], [llvm_v8i32_ty, 1226 llvm_v4i32_ty, llvm_i8_ty], [IntrNoMem]>; 1227} 1228 1229// Vector convert 1230let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.". 1231 def int_x86_avx_cvtdq2_pd_256 : GCCBuiltin<"__builtin_ia32_cvtdq2pd256">, 1232 Intrinsic<[llvm_v4f64_ty], [llvm_v4i32_ty], [IntrNoMem]>; 1233 def int_x86_avx_cvtdq2_ps_256 : GCCBuiltin<"__builtin_ia32_cvtdq2ps256">, 1234 Intrinsic<[llvm_v8f32_ty], [llvm_v8i32_ty], [IntrNoMem]>; 1235 def int_x86_avx_cvt_pd2_ps_256 : GCCBuiltin<"__builtin_ia32_cvtpd2ps256">, 1236 Intrinsic<[llvm_v4f32_ty], [llvm_v4f64_ty], [IntrNoMem]>; 1237 def int_x86_avx_cvt_ps2dq_256 : GCCBuiltin<"__builtin_ia32_cvtps2dq256">, 1238 Intrinsic<[llvm_v8i32_ty], [llvm_v8f32_ty], [IntrNoMem]>; 1239 def int_x86_avx_cvt_ps2_pd_256 : GCCBuiltin<"__builtin_ia32_cvtps2pd256">, 1240 Intrinsic<[llvm_v4f64_ty], [llvm_v4f32_ty], [IntrNoMem]>; 1241 def int_x86_avx_cvtt_pd2dq_256 : GCCBuiltin<"__builtin_ia32_cvttpd2dq256">, 1242 Intrinsic<[llvm_v4i32_ty], [llvm_v4f64_ty], [IntrNoMem]>; 1243 def int_x86_avx_cvt_pd2dq_256 : GCCBuiltin<"__builtin_ia32_cvtpd2dq256">, 1244 Intrinsic<[llvm_v4i32_ty], [llvm_v4f64_ty], [IntrNoMem]>; 1245 def int_x86_avx_cvtt_ps2dq_256 : GCCBuiltin<"__builtin_ia32_cvttps2dq256">, 1246 Intrinsic<[llvm_v8i32_ty], [llvm_v8f32_ty], [IntrNoMem]>; 1247} 1248 1249// Vector bit test 1250let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.". 1251 def int_x86_avx_vtestz_pd : GCCBuiltin<"__builtin_ia32_vtestzpd">, 1252 Intrinsic<[llvm_i32_ty], [llvm_v2f64_ty, 1253 llvm_v2f64_ty], [IntrNoMem]>; 1254 def int_x86_avx_vtestc_pd : GCCBuiltin<"__builtin_ia32_vtestcpd">, 1255 Intrinsic<[llvm_i32_ty], [llvm_v2f64_ty, 1256 llvm_v2f64_ty], [IntrNoMem]>; 1257 def int_x86_avx_vtestnzc_pd : GCCBuiltin<"__builtin_ia32_vtestnzcpd">, 1258 Intrinsic<[llvm_i32_ty], [llvm_v2f64_ty, 1259 llvm_v2f64_ty], [IntrNoMem]>; 1260 def int_x86_avx_vtestz_ps : GCCBuiltin<"__builtin_ia32_vtestzps">, 1261 Intrinsic<[llvm_i32_ty], [llvm_v4f32_ty, 1262 llvm_v4f32_ty], [IntrNoMem]>; 1263 def int_x86_avx_vtestc_ps : GCCBuiltin<"__builtin_ia32_vtestcps">, 1264 Intrinsic<[llvm_i32_ty], [llvm_v4f32_ty, 1265 llvm_v4f32_ty], [IntrNoMem]>; 1266 def int_x86_avx_vtestnzc_ps : GCCBuiltin<"__builtin_ia32_vtestnzcps">, 1267 Intrinsic<[llvm_i32_ty], [llvm_v4f32_ty, 1268 llvm_v4f32_ty], [IntrNoMem]>; 1269 def int_x86_avx_vtestz_pd_256 : GCCBuiltin<"__builtin_ia32_vtestzpd256">, 1270 Intrinsic<[llvm_i32_ty], [llvm_v4f64_ty, 1271 llvm_v4f64_ty], [IntrNoMem]>; 1272 def int_x86_avx_vtestc_pd_256 : GCCBuiltin<"__builtin_ia32_vtestcpd256">, 1273 Intrinsic<[llvm_i32_ty], [llvm_v4f64_ty, 1274 llvm_v4f64_ty], [IntrNoMem]>; 1275 def int_x86_avx_vtestnzc_pd_256 : GCCBuiltin<"__builtin_ia32_vtestnzcpd256">, 1276 Intrinsic<[llvm_i32_ty], [llvm_v4f64_ty, 1277 llvm_v4f64_ty], [IntrNoMem]>; 1278 def int_x86_avx_vtestz_ps_256 : GCCBuiltin<"__builtin_ia32_vtestzps256">, 1279 Intrinsic<[llvm_i32_ty], [llvm_v8f32_ty, 1280 llvm_v8f32_ty], [IntrNoMem]>; 1281 def int_x86_avx_vtestc_ps_256 : GCCBuiltin<"__builtin_ia32_vtestcps256">, 1282 Intrinsic<[llvm_i32_ty], [llvm_v8f32_ty, 1283 llvm_v8f32_ty], [IntrNoMem]>; 1284 def int_x86_avx_vtestnzc_ps_256 : GCCBuiltin<"__builtin_ia32_vtestnzcps256">, 1285 Intrinsic<[llvm_i32_ty], [llvm_v8f32_ty, 1286 llvm_v8f32_ty], [IntrNoMem]>; 1287 def int_x86_avx_ptestz_256 : GCCBuiltin<"__builtin_ia32_ptestz256">, 1288 Intrinsic<[llvm_i32_ty], [llvm_v4i64_ty, 1289 llvm_v4i64_ty], [IntrNoMem]>; 1290 def int_x86_avx_ptestc_256 : GCCBuiltin<"__builtin_ia32_ptestc256">, 1291 Intrinsic<[llvm_i32_ty], [llvm_v4i64_ty, 1292 llvm_v4i64_ty], [IntrNoMem]>; 1293 def int_x86_avx_ptestnzc_256 : GCCBuiltin<"__builtin_ia32_ptestnzc256">, 1294 Intrinsic<[llvm_i32_ty], [llvm_v4i64_ty, 1295 llvm_v4i64_ty], [IntrNoMem]>; 1296 def int_x86_avx512_mask_ptestm_d_512 : GCCBuiltin<"__builtin_ia32_ptestmd512">, 1297 Intrinsic<[llvm_i16_ty], [llvm_v16i32_ty, llvm_v16i32_ty, 1298 llvm_i16_ty], [IntrNoMem]>; 1299 def int_x86_avx512_mask_ptestm_q_512 : GCCBuiltin<"__builtin_ia32_ptestmq512">, 1300 Intrinsic<[llvm_i8_ty], [llvm_v8i64_ty, llvm_v8i64_ty, 1301 llvm_i8_ty], [IntrNoMem]>; 1302} 1303 1304// Vector extract sign mask 1305let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.". 1306 def int_x86_avx_movmsk_pd_256 : GCCBuiltin<"__builtin_ia32_movmskpd256">, 1307 Intrinsic<[llvm_i32_ty], [llvm_v4f64_ty], [IntrNoMem]>; 1308 def int_x86_avx_movmsk_ps_256 : GCCBuiltin<"__builtin_ia32_movmskps256">, 1309 Intrinsic<[llvm_i32_ty], [llvm_v8f32_ty], [IntrNoMem]>; 1310} 1311 1312// Vector zero 1313let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.". 1314 def int_x86_avx_vzeroall : GCCBuiltin<"__builtin_ia32_vzeroall">, 1315 Intrinsic<[], [], []>; 1316 def int_x86_avx_vzeroupper : GCCBuiltin<"__builtin_ia32_vzeroupper">, 1317 Intrinsic<[], [], []>; 1318} 1319 1320// Vector load with broadcast 1321let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.". 1322 def int_x86_avx_vbroadcastf128_pd_256 : 1323 GCCBuiltin<"__builtin_ia32_vbroadcastf128_pd256">, 1324 Intrinsic<[llvm_v4f64_ty], [llvm_ptr_ty], [IntrReadArgMem]>; 1325 def int_x86_avx_vbroadcastf128_ps_256 : 1326 GCCBuiltin<"__builtin_ia32_vbroadcastf128_ps256">, 1327 Intrinsic<[llvm_v8f32_ty], [llvm_ptr_ty], [IntrReadArgMem]>; 1328} 1329 1330// SIMD load ops 1331let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.". 1332 def int_x86_avx_ldu_dq_256 : GCCBuiltin<"__builtin_ia32_lddqu256">, 1333 Intrinsic<[llvm_v32i8_ty], [llvm_ptr_ty], [IntrReadMem]>; 1334} 1335 1336// SIMD store ops 1337let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.". 1338 def int_x86_avx_storeu_pd_256 : GCCBuiltin<"__builtin_ia32_storeupd256">, 1339 Intrinsic<[], [llvm_ptr_ty, llvm_v4f64_ty], [IntrReadWriteArgMem]>; 1340 def int_x86_avx_storeu_ps_256 : GCCBuiltin<"__builtin_ia32_storeups256">, 1341 Intrinsic<[], [llvm_ptr_ty, llvm_v8f32_ty], [IntrReadWriteArgMem]>; 1342 def int_x86_avx_storeu_dq_256 : GCCBuiltin<"__builtin_ia32_storedqu256">, 1343 Intrinsic<[], [llvm_ptr_ty, llvm_v32i8_ty], [IntrReadWriteArgMem]>; 1344} 1345 1346// Conditional load ops 1347let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.". 1348 def int_x86_avx_maskload_pd : GCCBuiltin<"__builtin_ia32_maskloadpd">, 1349 Intrinsic<[llvm_v2f64_ty], [llvm_ptr_ty, llvm_v2f64_ty], 1350 [IntrReadArgMem]>; 1351 def int_x86_avx_maskload_ps : GCCBuiltin<"__builtin_ia32_maskloadps">, 1352 Intrinsic<[llvm_v4f32_ty], [llvm_ptr_ty, llvm_v4f32_ty], 1353 [IntrReadArgMem]>; 1354 def int_x86_avx_maskload_pd_256 : GCCBuiltin<"__builtin_ia32_maskloadpd256">, 1355 Intrinsic<[llvm_v4f64_ty], [llvm_ptr_ty, llvm_v4f64_ty], 1356 [IntrReadArgMem]>; 1357 def int_x86_avx_maskload_ps_256 : GCCBuiltin<"__builtin_ia32_maskloadps256">, 1358 Intrinsic<[llvm_v8f32_ty], [llvm_ptr_ty, llvm_v8f32_ty], 1359 [IntrReadArgMem]>; 1360 def int_x86_avx512_mask_loadu_ps_512 : GCCBuiltin<"__builtin_ia32_loadups512_mask">, 1361 Intrinsic<[llvm_v16f32_ty], [llvm_ptr_ty, llvm_v16f32_ty, llvm_i16_ty], 1362 [IntrReadArgMem]>; 1363 def int_x86_avx512_mask_loadu_pd_512 : GCCBuiltin<"__builtin_ia32_loadupd512_mask">, 1364 Intrinsic<[llvm_v8f64_ty], [llvm_ptr_ty, llvm_v8f64_ty, llvm_i8_ty], 1365 [IntrReadArgMem]>; 1366} 1367 1368// Conditional store ops 1369let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.". 1370 def int_x86_avx_maskstore_pd : GCCBuiltin<"__builtin_ia32_maskstorepd">, 1371 Intrinsic<[], [llvm_ptr_ty, 1372 llvm_v2f64_ty, llvm_v2f64_ty], [IntrReadWriteArgMem]>; 1373 def int_x86_avx_maskstore_ps : GCCBuiltin<"__builtin_ia32_maskstoreps">, 1374 Intrinsic<[], [llvm_ptr_ty, 1375 llvm_v4f32_ty, llvm_v4f32_ty], [IntrReadWriteArgMem]>; 1376 def int_x86_avx_maskstore_pd_256 : 1377 GCCBuiltin<"__builtin_ia32_maskstorepd256">, 1378 Intrinsic<[], [llvm_ptr_ty, 1379 llvm_v4f64_ty, llvm_v4f64_ty], [IntrReadWriteArgMem]>; 1380 def int_x86_avx_maskstore_ps_256 : 1381 GCCBuiltin<"__builtin_ia32_maskstoreps256">, 1382 Intrinsic<[], [llvm_ptr_ty, 1383 llvm_v8f32_ty, llvm_v8f32_ty], [IntrReadWriteArgMem]>; 1384 def int_x86_avx512_mask_storeu_ps_512 : 1385 GCCBuiltin<"__builtin_ia32_storeups512_mask">, 1386 Intrinsic<[], [llvm_ptr_ty, llvm_v16f32_ty, llvm_i16_ty], 1387 [IntrReadWriteArgMem]>; 1388 def int_x86_avx512_mask_storeu_pd_512 : 1389 GCCBuiltin<"__builtin_ia32_storeupd512_mask">, 1390 Intrinsic<[], [llvm_ptr_ty, llvm_v8f64_ty, llvm_i8_ty], 1391 [IntrReadWriteArgMem]>; 1392} 1393 1394//===----------------------------------------------------------------------===// 1395// AVX2 1396 1397// Integer arithmetic ops. 1398let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.". 1399 def int_x86_avx2_padds_b : GCCBuiltin<"__builtin_ia32_paddsb256">, 1400 Intrinsic<[llvm_v32i8_ty], [llvm_v32i8_ty, 1401 llvm_v32i8_ty], [IntrNoMem, Commutative]>; 1402 def int_x86_avx2_padds_w : GCCBuiltin<"__builtin_ia32_paddsw256">, 1403 Intrinsic<[llvm_v16i16_ty], [llvm_v16i16_ty, 1404 llvm_v16i16_ty], [IntrNoMem, Commutative]>; 1405 def int_x86_avx2_paddus_b : GCCBuiltin<"__builtin_ia32_paddusb256">, 1406 Intrinsic<[llvm_v32i8_ty], [llvm_v32i8_ty, 1407 llvm_v32i8_ty], [IntrNoMem, Commutative]>; 1408 def int_x86_avx2_paddus_w : GCCBuiltin<"__builtin_ia32_paddusw256">, 1409 Intrinsic<[llvm_v16i16_ty], [llvm_v16i16_ty, 1410 llvm_v16i16_ty], [IntrNoMem, Commutative]>; 1411 def int_x86_avx2_psubs_b : GCCBuiltin<"__builtin_ia32_psubsb256">, 1412 Intrinsic<[llvm_v32i8_ty], [llvm_v32i8_ty, 1413 llvm_v32i8_ty], [IntrNoMem]>; 1414 def int_x86_avx2_psubs_w : GCCBuiltin<"__builtin_ia32_psubsw256">, 1415 Intrinsic<[llvm_v16i16_ty], [llvm_v16i16_ty, 1416 llvm_v16i16_ty], [IntrNoMem]>; 1417 def int_x86_avx2_psubus_b : GCCBuiltin<"__builtin_ia32_psubusb256">, 1418 Intrinsic<[llvm_v32i8_ty], [llvm_v32i8_ty, 1419 llvm_v32i8_ty], [IntrNoMem]>; 1420 def int_x86_avx2_psubus_w : GCCBuiltin<"__builtin_ia32_psubusw256">, 1421 Intrinsic<[llvm_v16i16_ty], [llvm_v16i16_ty, 1422 llvm_v16i16_ty], [IntrNoMem]>; 1423 def int_x86_avx2_pmulhu_w : GCCBuiltin<"__builtin_ia32_pmulhuw256">, 1424 Intrinsic<[llvm_v16i16_ty], [llvm_v16i16_ty, 1425 llvm_v16i16_ty], [IntrNoMem, Commutative]>; 1426 def int_x86_avx2_pmulh_w : GCCBuiltin<"__builtin_ia32_pmulhw256">, 1427 Intrinsic<[llvm_v16i16_ty], [llvm_v16i16_ty, 1428 llvm_v16i16_ty], [IntrNoMem, Commutative]>; 1429 def int_x86_avx2_pmulu_dq : GCCBuiltin<"__builtin_ia32_pmuludq256">, 1430 Intrinsic<[llvm_v4i64_ty], [llvm_v8i32_ty, 1431 llvm_v8i32_ty], [IntrNoMem, Commutative]>; 1432 def int_x86_avx2_pmul_dq : GCCBuiltin<"__builtin_ia32_pmuldq256">, 1433 Intrinsic<[llvm_v4i64_ty], [llvm_v8i32_ty, 1434 llvm_v8i32_ty], [IntrNoMem, Commutative]>; 1435 def int_x86_avx2_pmadd_wd : GCCBuiltin<"__builtin_ia32_pmaddwd256">, 1436 Intrinsic<[llvm_v8i32_ty], [llvm_v16i16_ty, 1437 llvm_v16i16_ty], [IntrNoMem, Commutative]>; 1438 def int_x86_avx2_pavg_b : GCCBuiltin<"__builtin_ia32_pavgb256">, 1439 Intrinsic<[llvm_v32i8_ty], [llvm_v32i8_ty, 1440 llvm_v32i8_ty], [IntrNoMem, Commutative]>; 1441 def int_x86_avx2_pavg_w : GCCBuiltin<"__builtin_ia32_pavgw256">, 1442 Intrinsic<[llvm_v16i16_ty], [llvm_v16i16_ty, 1443 llvm_v16i16_ty], [IntrNoMem, Commutative]>; 1444 def int_x86_avx2_psad_bw : GCCBuiltin<"__builtin_ia32_psadbw256">, 1445 Intrinsic<[llvm_v4i64_ty], [llvm_v32i8_ty, 1446 llvm_v32i8_ty], [IntrNoMem, Commutative]>; 1447 def int_x86_avx512_mask_pmulu_dq_512 : GCCBuiltin<"__builtin_ia32_pmuludq512_mask">, 1448 Intrinsic<[llvm_v8i64_ty], [llvm_v16i32_ty, llvm_v16i32_ty, 1449 llvm_v8i64_ty, llvm_i8_ty], [IntrNoMem]>; 1450 def int_x86_avx512_mask_pmul_dq_512 : GCCBuiltin<"__builtin_ia32_pmuldq512_mask">, 1451 Intrinsic<[llvm_v8i64_ty], [llvm_v16i32_ty, llvm_v16i32_ty, 1452 llvm_v8i64_ty, llvm_i8_ty], [IntrNoMem]>; 1453} 1454 1455// Vector min, max 1456let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.". 1457 def int_x86_avx2_pmaxu_b : GCCBuiltin<"__builtin_ia32_pmaxub256">, 1458 Intrinsic<[llvm_v32i8_ty], [llvm_v32i8_ty, 1459 llvm_v32i8_ty], [IntrNoMem, Commutative]>; 1460 def int_x86_avx2_pmaxu_w : GCCBuiltin<"__builtin_ia32_pmaxuw256">, 1461 Intrinsic<[llvm_v16i16_ty], [llvm_v16i16_ty, 1462 llvm_v16i16_ty], [IntrNoMem, Commutative]>; 1463 def int_x86_avx2_pmaxu_d : GCCBuiltin<"__builtin_ia32_pmaxud256">, 1464 Intrinsic<[llvm_v8i32_ty], [llvm_v8i32_ty, 1465 llvm_v8i32_ty], [IntrNoMem, Commutative]>; 1466 def int_x86_avx2_pmaxs_b : GCCBuiltin<"__builtin_ia32_pmaxsb256">, 1467 Intrinsic<[llvm_v32i8_ty], [llvm_v32i8_ty, 1468 llvm_v32i8_ty], [IntrNoMem, Commutative]>; 1469 def int_x86_avx2_pmaxs_w : GCCBuiltin<"__builtin_ia32_pmaxsw256">, 1470 Intrinsic<[llvm_v16i16_ty], [llvm_v16i16_ty, 1471 llvm_v16i16_ty], [IntrNoMem, Commutative]>; 1472 def int_x86_avx2_pmaxs_d : GCCBuiltin<"__builtin_ia32_pmaxsd256">, 1473 Intrinsic<[llvm_v8i32_ty], [llvm_v8i32_ty, 1474 llvm_v8i32_ty], [IntrNoMem, Commutative]>; 1475 def int_x86_avx2_pminu_b : GCCBuiltin<"__builtin_ia32_pminub256">, 1476 Intrinsic<[llvm_v32i8_ty], [llvm_v32i8_ty, 1477 llvm_v32i8_ty], [IntrNoMem, Commutative]>; 1478 def int_x86_avx2_pminu_w : GCCBuiltin<"__builtin_ia32_pminuw256">, 1479 Intrinsic<[llvm_v16i16_ty], [llvm_v16i16_ty, 1480 llvm_v16i16_ty], [IntrNoMem, Commutative]>; 1481 def int_x86_avx2_pminu_d : GCCBuiltin<"__builtin_ia32_pminud256">, 1482 Intrinsic<[llvm_v8i32_ty], [llvm_v8i32_ty, 1483 llvm_v8i32_ty], [IntrNoMem, Commutative]>; 1484 def int_x86_avx2_pmins_b : GCCBuiltin<"__builtin_ia32_pminsb256">, 1485 Intrinsic<[llvm_v32i8_ty], [llvm_v32i8_ty, 1486 llvm_v32i8_ty], [IntrNoMem, Commutative]>; 1487 def int_x86_avx2_pmins_w : GCCBuiltin<"__builtin_ia32_pminsw256">, 1488 Intrinsic<[llvm_v16i16_ty], [llvm_v16i16_ty, 1489 llvm_v16i16_ty], [IntrNoMem, Commutative]>; 1490 def int_x86_avx2_pmins_d : GCCBuiltin<"__builtin_ia32_pminsd256">, 1491 Intrinsic<[llvm_v8i32_ty], [llvm_v8i32_ty, 1492 llvm_v8i32_ty], [IntrNoMem, Commutative]>; 1493 def int_x86_avx512_mask_pmaxu_d_512 : GCCBuiltin<"__builtin_ia32_pmaxud512_mask">, 1494 Intrinsic<[llvm_v16i32_ty], [llvm_v16i32_ty, llvm_v16i32_ty, 1495 llvm_v16i32_ty, llvm_i16_ty], [IntrNoMem]>; 1496 def int_x86_avx512_mask_pmaxs_d_512 : GCCBuiltin<"__builtin_ia32_pmaxsd512_mask">, 1497 Intrinsic<[llvm_v16i32_ty], [llvm_v16i32_ty, llvm_v16i32_ty, 1498 llvm_v16i32_ty, llvm_i16_ty], [IntrNoMem]>; 1499 def int_x86_avx512_mask_pmaxu_q_512 : GCCBuiltin<"__builtin_ia32_pmaxuq512_mask">, 1500 Intrinsic<[llvm_v8i64_ty], [llvm_v8i64_ty, llvm_v8i64_ty, 1501 llvm_v8i64_ty, llvm_i8_ty], [IntrNoMem]>; 1502 def int_x86_avx512_mask_pmaxs_q_512 : GCCBuiltin<"__builtin_ia32_pmaxsq512_mask">, 1503 Intrinsic<[llvm_v8i64_ty], [llvm_v8i64_ty, llvm_v8i64_ty, 1504 llvm_v8i64_ty, llvm_i8_ty], [IntrNoMem]>; 1505 def int_x86_avx512_mask_pminu_d_512 : GCCBuiltin<"__builtin_ia32_pminud512_mask">, 1506 Intrinsic<[llvm_v16i32_ty], [llvm_v16i32_ty, llvm_v16i32_ty, 1507 llvm_v16i32_ty, llvm_i16_ty], [IntrNoMem]>; 1508 def int_x86_avx512_mask_pmins_d_512 : GCCBuiltin<"__builtin_ia32_pminsd512_mask">, 1509 Intrinsic<[llvm_v16i32_ty], [llvm_v16i32_ty, llvm_v16i32_ty, 1510 llvm_v16i32_ty, llvm_i16_ty], [IntrNoMem]>; 1511 def int_x86_avx512_mask_pminu_q_512 : GCCBuiltin<"__builtin_ia32_pminuq512_mask">, 1512 Intrinsic<[llvm_v8i64_ty], [llvm_v8i64_ty, llvm_v8i64_ty, 1513 llvm_v8i64_ty, llvm_i8_ty], [IntrNoMem]>; 1514 def int_x86_avx512_mask_pmins_q_512 : GCCBuiltin<"__builtin_ia32_pminsq512_mask">, 1515 Intrinsic<[llvm_v8i64_ty], [llvm_v8i64_ty, llvm_v8i64_ty, 1516 llvm_v8i64_ty, llvm_i8_ty], [IntrNoMem]>; 1517} 1518 1519// Integer shift ops. 1520let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.". 1521 def int_x86_avx2_psll_w : GCCBuiltin<"__builtin_ia32_psllw256">, 1522 Intrinsic<[llvm_v16i16_ty], [llvm_v16i16_ty, 1523 llvm_v8i16_ty], [IntrNoMem]>; 1524 def int_x86_avx2_psll_d : GCCBuiltin<"__builtin_ia32_pslld256">, 1525 Intrinsic<[llvm_v8i32_ty], [llvm_v8i32_ty, 1526 llvm_v4i32_ty], [IntrNoMem]>; 1527 def int_x86_avx2_psll_q : GCCBuiltin<"__builtin_ia32_psllq256">, 1528 Intrinsic<[llvm_v4i64_ty], [llvm_v4i64_ty, 1529 llvm_v2i64_ty], [IntrNoMem]>; 1530 def int_x86_avx2_psrl_w : GCCBuiltin<"__builtin_ia32_psrlw256">, 1531 Intrinsic<[llvm_v16i16_ty], [llvm_v16i16_ty, 1532 llvm_v8i16_ty], [IntrNoMem]>; 1533 def int_x86_avx2_psrl_d : GCCBuiltin<"__builtin_ia32_psrld256">, 1534 Intrinsic<[llvm_v8i32_ty], [llvm_v8i32_ty, 1535 llvm_v4i32_ty], [IntrNoMem]>; 1536 def int_x86_avx2_psrl_q : GCCBuiltin<"__builtin_ia32_psrlq256">, 1537 Intrinsic<[llvm_v4i64_ty], [llvm_v4i64_ty, 1538 llvm_v2i64_ty], [IntrNoMem]>; 1539 def int_x86_avx2_psra_w : GCCBuiltin<"__builtin_ia32_psraw256">, 1540 Intrinsic<[llvm_v16i16_ty], [llvm_v16i16_ty, 1541 llvm_v8i16_ty], [IntrNoMem]>; 1542 def int_x86_avx2_psra_d : GCCBuiltin<"__builtin_ia32_psrad256">, 1543 Intrinsic<[llvm_v8i32_ty], [llvm_v8i32_ty, 1544 llvm_v4i32_ty], [IntrNoMem]>; 1545 1546 def int_x86_avx2_pslli_w : GCCBuiltin<"__builtin_ia32_psllwi256">, 1547 Intrinsic<[llvm_v16i16_ty], [llvm_v16i16_ty, 1548 llvm_i32_ty], [IntrNoMem]>; 1549 def int_x86_avx2_pslli_d : GCCBuiltin<"__builtin_ia32_pslldi256">, 1550 Intrinsic<[llvm_v8i32_ty], [llvm_v8i32_ty, 1551 llvm_i32_ty], [IntrNoMem]>; 1552 def int_x86_avx2_pslli_q : GCCBuiltin<"__builtin_ia32_psllqi256">, 1553 Intrinsic<[llvm_v4i64_ty], [llvm_v4i64_ty, 1554 llvm_i32_ty], [IntrNoMem]>; 1555 def int_x86_avx2_psrli_w : GCCBuiltin<"__builtin_ia32_psrlwi256">, 1556 Intrinsic<[llvm_v16i16_ty], [llvm_v16i16_ty, 1557 llvm_i32_ty], [IntrNoMem]>; 1558 def int_x86_avx2_psrli_d : GCCBuiltin<"__builtin_ia32_psrldi256">, 1559 Intrinsic<[llvm_v8i32_ty], [llvm_v8i32_ty, 1560 llvm_i32_ty], [IntrNoMem]>; 1561 def int_x86_avx2_psrli_q : GCCBuiltin<"__builtin_ia32_psrlqi256">, 1562 Intrinsic<[llvm_v4i64_ty], [llvm_v4i64_ty, 1563 llvm_i32_ty], [IntrNoMem]>; 1564 def int_x86_avx2_psrai_w : GCCBuiltin<"__builtin_ia32_psrawi256">, 1565 Intrinsic<[llvm_v16i16_ty], [llvm_v16i16_ty, 1566 llvm_i32_ty], [IntrNoMem]>; 1567 def int_x86_avx2_psrai_d : GCCBuiltin<"__builtin_ia32_psradi256">, 1568 Intrinsic<[llvm_v8i32_ty], [llvm_v8i32_ty, 1569 llvm_i32_ty], [IntrNoMem]>; 1570 1571 def int_x86_avx2_psll_dq : GCCBuiltin<"__builtin_ia32_pslldqi256">, 1572 Intrinsic<[llvm_v4i64_ty], [llvm_v4i64_ty, 1573 llvm_i32_ty], [IntrNoMem]>; 1574 def int_x86_avx2_psrl_dq : GCCBuiltin<"__builtin_ia32_psrldqi256">, 1575 Intrinsic<[llvm_v4i64_ty], [llvm_v4i64_ty, 1576 llvm_i32_ty], [IntrNoMem]>; 1577 def int_x86_avx2_psll_dq_bs : GCCBuiltin<"__builtin_ia32_pslldqi256_byteshift">, 1578 Intrinsic<[llvm_v4i64_ty], [llvm_v4i64_ty, 1579 llvm_i32_ty], [IntrNoMem]>; 1580 def int_x86_avx2_psrl_dq_bs : GCCBuiltin<"__builtin_ia32_psrldqi256_byteshift">, 1581 Intrinsic<[llvm_v4i64_ty], [llvm_v4i64_ty, 1582 llvm_i32_ty], [IntrNoMem]>; 1583} 1584 1585// Pack ops. 1586let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.". 1587 def int_x86_avx2_packsswb : GCCBuiltin<"__builtin_ia32_packsswb256">, 1588 Intrinsic<[llvm_v32i8_ty], [llvm_v16i16_ty, 1589 llvm_v16i16_ty], [IntrNoMem]>; 1590 def int_x86_avx2_packssdw : GCCBuiltin<"__builtin_ia32_packssdw256">, 1591 Intrinsic<[llvm_v16i16_ty], [llvm_v8i32_ty, 1592 llvm_v8i32_ty], [IntrNoMem]>; 1593 def int_x86_avx2_packuswb : GCCBuiltin<"__builtin_ia32_packuswb256">, 1594 Intrinsic<[llvm_v32i8_ty], [llvm_v16i16_ty, 1595 llvm_v16i16_ty], [IntrNoMem]>; 1596 def int_x86_avx2_packusdw : GCCBuiltin<"__builtin_ia32_packusdw256">, 1597 Intrinsic<[llvm_v16i16_ty], [llvm_v8i32_ty, 1598 llvm_v8i32_ty], [IntrNoMem]>; 1599} 1600 1601// Absolute value ops 1602let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.". 1603 def int_x86_avx2_pabs_b : GCCBuiltin<"__builtin_ia32_pabsb256">, 1604 Intrinsic<[llvm_v32i8_ty], [llvm_v32i8_ty], [IntrNoMem]>; 1605 def int_x86_avx2_pabs_w : GCCBuiltin<"__builtin_ia32_pabsw256">, 1606 Intrinsic<[llvm_v16i16_ty], [llvm_v16i16_ty], [IntrNoMem]>; 1607 def int_x86_avx2_pabs_d : GCCBuiltin<"__builtin_ia32_pabsd256">, 1608 Intrinsic<[llvm_v8i32_ty], [llvm_v8i32_ty], [IntrNoMem]>; 1609 def int_x86_avx512_mask_pabs_d_512 : GCCBuiltin<"__builtin_ia32_pabsd512_mask">, 1610 Intrinsic<[llvm_v16i32_ty], [llvm_v16i32_ty, llvm_v16i32_ty, 1611 llvm_i16_ty], [IntrNoMem]>; 1612 def int_x86_avx512_mask_pabs_q_512 : GCCBuiltin<"__builtin_ia32_pabsq512_mask">, 1613 Intrinsic<[llvm_v8i64_ty], [llvm_v8i64_ty, llvm_v8i64_ty, 1614 llvm_i8_ty], [IntrNoMem]>; 1615} 1616 1617// Horizontal arithmetic ops 1618let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.". 1619 def int_x86_avx2_phadd_w : GCCBuiltin<"__builtin_ia32_phaddw256">, 1620 Intrinsic<[llvm_v16i16_ty], [llvm_v16i16_ty, 1621 llvm_v16i16_ty], [IntrNoMem]>; 1622 def int_x86_avx2_phadd_d : GCCBuiltin<"__builtin_ia32_phaddd256">, 1623 Intrinsic<[llvm_v8i32_ty], [llvm_v8i32_ty, 1624 llvm_v8i32_ty], [IntrNoMem]>; 1625 def int_x86_avx2_phadd_sw : GCCBuiltin<"__builtin_ia32_phaddsw256">, 1626 Intrinsic<[llvm_v16i16_ty], [llvm_v16i16_ty, 1627 llvm_v16i16_ty], [IntrNoMem]>; 1628 def int_x86_avx2_phsub_w : GCCBuiltin<"__builtin_ia32_phsubw256">, 1629 Intrinsic<[llvm_v16i16_ty], [llvm_v16i16_ty, 1630 llvm_v16i16_ty], [IntrNoMem]>; 1631 def int_x86_avx2_phsub_d : GCCBuiltin<"__builtin_ia32_phsubd256">, 1632 Intrinsic<[llvm_v8i32_ty], [llvm_v8i32_ty, 1633 llvm_v8i32_ty], [IntrNoMem]>; 1634 def int_x86_avx2_phsub_sw : GCCBuiltin<"__builtin_ia32_phsubsw256">, 1635 Intrinsic<[llvm_v16i16_ty], [llvm_v16i16_ty, 1636 llvm_v16i16_ty], [IntrNoMem]>; 1637 def int_x86_avx2_pmadd_ub_sw : GCCBuiltin<"__builtin_ia32_pmaddubsw256">, 1638 Intrinsic<[llvm_v16i16_ty], [llvm_v32i8_ty, 1639 llvm_v32i8_ty], [IntrNoMem]>; 1640} 1641 1642// Sign ops 1643let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.". 1644 def int_x86_avx2_psign_b : GCCBuiltin<"__builtin_ia32_psignb256">, 1645 Intrinsic<[llvm_v32i8_ty], [llvm_v32i8_ty, 1646 llvm_v32i8_ty], [IntrNoMem]>; 1647 def int_x86_avx2_psign_w : GCCBuiltin<"__builtin_ia32_psignw256">, 1648 Intrinsic<[llvm_v16i16_ty], [llvm_v16i16_ty, 1649 llvm_v16i16_ty], [IntrNoMem]>; 1650 def int_x86_avx2_psign_d : GCCBuiltin<"__builtin_ia32_psignd256">, 1651 Intrinsic<[llvm_v8i32_ty], [llvm_v8i32_ty, 1652 llvm_v8i32_ty], [IntrNoMem]>; 1653} 1654 1655// Packed multiply high with round and scale 1656let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.". 1657 def int_x86_avx2_pmul_hr_sw : GCCBuiltin<"__builtin_ia32_pmulhrsw256">, 1658 Intrinsic<[llvm_v16i16_ty], [llvm_v16i16_ty, 1659 llvm_v16i16_ty], [IntrNoMem, Commutative]>; 1660} 1661 1662// Vector sign and zero extend 1663let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.". 1664 def int_x86_avx2_pmovsxbd : GCCBuiltin<"__builtin_ia32_pmovsxbd256">, 1665 Intrinsic<[llvm_v8i32_ty], [llvm_v16i8_ty], 1666 [IntrNoMem]>; 1667 def int_x86_avx2_pmovsxbq : GCCBuiltin<"__builtin_ia32_pmovsxbq256">, 1668 Intrinsic<[llvm_v4i64_ty], [llvm_v16i8_ty], 1669 [IntrNoMem]>; 1670 def int_x86_avx2_pmovsxbw : GCCBuiltin<"__builtin_ia32_pmovsxbw256">, 1671 Intrinsic<[llvm_v16i16_ty], [llvm_v16i8_ty], 1672 [IntrNoMem]>; 1673 def int_x86_avx2_pmovsxdq : GCCBuiltin<"__builtin_ia32_pmovsxdq256">, 1674 Intrinsic<[llvm_v4i64_ty], [llvm_v4i32_ty], 1675 [IntrNoMem]>; 1676 def int_x86_avx2_pmovsxwd : GCCBuiltin<"__builtin_ia32_pmovsxwd256">, 1677 Intrinsic<[llvm_v8i32_ty], [llvm_v8i16_ty], 1678 [IntrNoMem]>; 1679 def int_x86_avx2_pmovsxwq : GCCBuiltin<"__builtin_ia32_pmovsxwq256">, 1680 Intrinsic<[llvm_v4i64_ty], [llvm_v8i16_ty], 1681 [IntrNoMem]>; 1682 def int_x86_avx2_pmovzxbd : GCCBuiltin<"__builtin_ia32_pmovzxbd256">, 1683 Intrinsic<[llvm_v8i32_ty], [llvm_v16i8_ty], 1684 [IntrNoMem]>; 1685 def int_x86_avx2_pmovzxbq : GCCBuiltin<"__builtin_ia32_pmovzxbq256">, 1686 Intrinsic<[llvm_v4i64_ty], [llvm_v16i8_ty], 1687 [IntrNoMem]>; 1688 def int_x86_avx2_pmovzxbw : GCCBuiltin<"__builtin_ia32_pmovzxbw256">, 1689 Intrinsic<[llvm_v16i16_ty], [llvm_v16i8_ty], 1690 [IntrNoMem]>; 1691 def int_x86_avx2_pmovzxdq : GCCBuiltin<"__builtin_ia32_pmovzxdq256">, 1692 Intrinsic<[llvm_v4i64_ty], [llvm_v4i32_ty], 1693 [IntrNoMem]>; 1694 def int_x86_avx2_pmovzxwd : GCCBuiltin<"__builtin_ia32_pmovzxwd256">, 1695 Intrinsic<[llvm_v8i32_ty], [llvm_v8i16_ty], 1696 [IntrNoMem]>; 1697 def int_x86_avx2_pmovzxwq : GCCBuiltin<"__builtin_ia32_pmovzxwq256">, 1698 Intrinsic<[llvm_v4i64_ty], [llvm_v8i16_ty], 1699 [IntrNoMem]>; 1700} 1701 1702// Vector blend 1703let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.". 1704 def int_x86_avx2_pblendvb : GCCBuiltin<"__builtin_ia32_pblendvb256">, 1705 Intrinsic<[llvm_v32i8_ty], [llvm_v32i8_ty, llvm_v32i8_ty, 1706 llvm_v32i8_ty], [IntrNoMem]>; 1707 def int_x86_avx2_pblendw : GCCBuiltin<"__builtin_ia32_pblendw256">, 1708 Intrinsic<[llvm_v16i16_ty], [llvm_v16i16_ty, llvm_v16i16_ty, 1709 llvm_i32_ty], [IntrNoMem]>; 1710 def int_x86_avx2_pblendd_128 : GCCBuiltin<"__builtin_ia32_pblendd128">, 1711 Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty, 1712 llvm_i32_ty], [IntrNoMem]>; 1713 def int_x86_avx2_pblendd_256 : GCCBuiltin<"__builtin_ia32_pblendd256">, 1714 Intrinsic<[llvm_v8i32_ty], [llvm_v8i32_ty, llvm_v8i32_ty, 1715 llvm_i32_ty], [IntrNoMem]>; 1716} 1717 1718// Vector load with broadcast 1719let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.". 1720 def int_x86_avx2_vbroadcast_ss_ps : 1721 GCCBuiltin<"__builtin_ia32_vbroadcastss_ps">, 1722 Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty], [IntrNoMem]>; 1723 def int_x86_avx2_vbroadcast_sd_pd_256 : 1724 GCCBuiltin<"__builtin_ia32_vbroadcastsd_pd256">, 1725 Intrinsic<[llvm_v4f64_ty], [llvm_v2f64_ty], [IntrNoMem]>; 1726 def int_x86_avx2_vbroadcast_ss_ps_256 : 1727 GCCBuiltin<"__builtin_ia32_vbroadcastss_ps256">, 1728 Intrinsic<[llvm_v8f32_ty], [llvm_v4f32_ty], [IntrNoMem]>; 1729 def int_x86_avx2_vbroadcasti128 : 1730 Intrinsic<[llvm_v4i64_ty], [llvm_ptr_ty], [IntrReadArgMem]>; 1731 def int_x86_avx2_pbroadcastb_128 : 1732 GCCBuiltin<"__builtin_ia32_pbroadcastb128">, 1733 Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty], [IntrNoMem]>; 1734 def int_x86_avx2_pbroadcastb_256 : 1735 GCCBuiltin<"__builtin_ia32_pbroadcastb256">, 1736 Intrinsic<[llvm_v32i8_ty], [llvm_v16i8_ty], [IntrNoMem]>; 1737 def int_x86_avx2_pbroadcastw_128 : 1738 GCCBuiltin<"__builtin_ia32_pbroadcastw128">, 1739 Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty], [IntrNoMem]>; 1740 def int_x86_avx2_pbroadcastw_256 : 1741 GCCBuiltin<"__builtin_ia32_pbroadcastw256">, 1742 Intrinsic<[llvm_v16i16_ty], [llvm_v8i16_ty], [IntrNoMem]>; 1743 def int_x86_avx2_pbroadcastd_128 : 1744 GCCBuiltin<"__builtin_ia32_pbroadcastd128">, 1745 Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty], [IntrNoMem]>; 1746 def int_x86_avx2_pbroadcastd_256 : 1747 GCCBuiltin<"__builtin_ia32_pbroadcastd256">, 1748 Intrinsic<[llvm_v8i32_ty], [llvm_v4i32_ty], [IntrNoMem]>; 1749 def int_x86_avx2_pbroadcastq_128 : 1750 GCCBuiltin<"__builtin_ia32_pbroadcastq128">, 1751 Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty], [IntrNoMem]>; 1752 def int_x86_avx2_pbroadcastq_256 : 1753 GCCBuiltin<"__builtin_ia32_pbroadcastq256">, 1754 Intrinsic<[llvm_v4i64_ty], [llvm_v2i64_ty], [IntrNoMem]>; 1755 def int_x86_avx512_mask_pbroadcast_d_gpr_512 : 1756 GCCBuiltin<"__builtin_ia32_pbroadcastd512_gpr_mask">, 1757 Intrinsic<[llvm_v16i32_ty], [llvm_i32_ty, llvm_v16i32_ty, 1758 llvm_i16_ty], [IntrNoMem]>; 1759 def int_x86_avx512_mask_pbroadcast_q_gpr_512 : 1760 GCCBuiltin<"__builtin_ia32_pbroadcastq512_gpr_mask">, 1761 Intrinsic<[llvm_v8i64_ty], [llvm_i64_ty, llvm_v8i64_ty, 1762 llvm_i8_ty], [IntrNoMem]>; 1763 def int_x86_avx512_mask_pbroadcast_q_mem_512 : 1764 GCCBuiltin<"__builtin_ia32_pbroadcastq512_mem_mask">, 1765 Intrinsic<[llvm_v8i64_ty], [llvm_i64_ty, llvm_v8i64_ty, 1766 llvm_i8_ty], [IntrNoMem]>; 1767} 1768 1769// Vector permutation 1770let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.". 1771 def int_x86_avx2_permd : GCCBuiltin<"__builtin_ia32_permvarsi256">, 1772 Intrinsic<[llvm_v8i32_ty], [llvm_v8i32_ty, llvm_v8i32_ty], 1773 [IntrNoMem]>; 1774 def int_x86_avx2_permps : GCCBuiltin<"__builtin_ia32_permvarsf256">, 1775 Intrinsic<[llvm_v8f32_ty], [llvm_v8f32_ty, llvm_v8f32_ty], 1776 [IntrNoMem]>; 1777 def int_x86_avx2_vperm2i128 : GCCBuiltin<"__builtin_ia32_permti256">, 1778 Intrinsic<[llvm_v4i64_ty], [llvm_v4i64_ty, 1779 llvm_v4i64_ty, llvm_i8_ty], [IntrNoMem]>; 1780} 1781 1782// Vector extract and insert 1783let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.". 1784 def int_x86_avx2_vextracti128 : GCCBuiltin<"__builtin_ia32_extract128i256">, 1785 Intrinsic<[llvm_v2i64_ty], [llvm_v4i64_ty, 1786 llvm_i8_ty], [IntrNoMem]>; 1787 def int_x86_avx2_vinserti128 : GCCBuiltin<"__builtin_ia32_insert128i256">, 1788 Intrinsic<[llvm_v4i64_ty], [llvm_v4i64_ty, 1789 llvm_v2i64_ty, llvm_i8_ty], [IntrNoMem]>; 1790} 1791 1792// Conditional load ops 1793let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.". 1794 def int_x86_avx2_maskload_d : GCCBuiltin<"__builtin_ia32_maskloadd">, 1795 Intrinsic<[llvm_v4i32_ty], [llvm_ptr_ty, llvm_v4i32_ty], 1796 [IntrReadArgMem]>; 1797 def int_x86_avx2_maskload_q : GCCBuiltin<"__builtin_ia32_maskloadq">, 1798 Intrinsic<[llvm_v2i64_ty], [llvm_ptr_ty, llvm_v2i64_ty], 1799 [IntrReadArgMem]>; 1800 def int_x86_avx2_maskload_d_256 : GCCBuiltin<"__builtin_ia32_maskloadd256">, 1801 Intrinsic<[llvm_v8i32_ty], [llvm_ptr_ty, llvm_v8i32_ty], 1802 [IntrReadArgMem]>; 1803 def int_x86_avx2_maskload_q_256 : GCCBuiltin<"__builtin_ia32_maskloadq256">, 1804 Intrinsic<[llvm_v4i64_ty], [llvm_ptr_ty, llvm_v4i64_ty], 1805 [IntrReadArgMem]>; 1806 def int_x86_avx512_mask_loadu_d_512 : GCCBuiltin<"__builtin_ia32_loaddqusi512_mask">, 1807 Intrinsic<[llvm_v16i32_ty], [llvm_ptr_ty, llvm_v16i32_ty, llvm_i16_ty], 1808 [IntrReadArgMem]>; 1809 def int_x86_avx512_mask_loadu_q_512 : GCCBuiltin<"__builtin_ia32_loaddqudi512_mask">, 1810 Intrinsic<[llvm_v8i64_ty], [llvm_ptr_ty, llvm_v8i64_ty, llvm_i8_ty], 1811 [IntrReadArgMem]>; 1812} 1813 1814// Conditional store ops 1815let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.". 1816 def int_x86_avx2_maskstore_d : GCCBuiltin<"__builtin_ia32_maskstored">, 1817 Intrinsic<[], [llvm_ptr_ty, llvm_v4i32_ty, llvm_v4i32_ty], 1818 [IntrReadWriteArgMem]>; 1819 def int_x86_avx2_maskstore_q : GCCBuiltin<"__builtin_ia32_maskstoreq">, 1820 Intrinsic<[], [llvm_ptr_ty, llvm_v2i64_ty, llvm_v2i64_ty], 1821 [IntrReadWriteArgMem]>; 1822 def int_x86_avx2_maskstore_d_256 : 1823 GCCBuiltin<"__builtin_ia32_maskstored256">, 1824 Intrinsic<[], [llvm_ptr_ty, llvm_v8i32_ty, llvm_v8i32_ty], 1825 [IntrReadWriteArgMem]>; 1826 def int_x86_avx2_maskstore_q_256 : 1827 GCCBuiltin<"__builtin_ia32_maskstoreq256">, 1828 Intrinsic<[], [llvm_ptr_ty, llvm_v4i64_ty, llvm_v4i64_ty], 1829 [IntrReadWriteArgMem]>; 1830 def int_x86_avx512_mask_storeu_d_512 : 1831 GCCBuiltin<"__builtin_ia32_storedqusi512_mask">, 1832 Intrinsic<[], [llvm_ptr_ty, llvm_v16i32_ty, llvm_i16_ty], 1833 [IntrReadWriteArgMem]>; 1834 def int_x86_avx512_mask_storeu_q_512 : 1835 GCCBuiltin<"__builtin_ia32_storedqudi512_mask">, 1836 Intrinsic<[], [llvm_ptr_ty, llvm_v8i64_ty, llvm_i8_ty], 1837 [IntrReadWriteArgMem]>; 1838} 1839 1840// Variable bit shift ops 1841let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.". 1842 def int_x86_avx2_psllv_d : GCCBuiltin<"__builtin_ia32_psllv4si">, 1843 Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty], 1844 [IntrNoMem]>; 1845 def int_x86_avx2_psllv_d_256 : GCCBuiltin<"__builtin_ia32_psllv8si">, 1846 Intrinsic<[llvm_v8i32_ty], [llvm_v8i32_ty, llvm_v8i32_ty], 1847 [IntrNoMem]>; 1848 def int_x86_avx2_psllv_q : GCCBuiltin<"__builtin_ia32_psllv2di">, 1849 Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty], 1850 [IntrNoMem]>; 1851 def int_x86_avx2_psllv_q_256 : GCCBuiltin<"__builtin_ia32_psllv4di">, 1852 Intrinsic<[llvm_v4i64_ty], [llvm_v4i64_ty, llvm_v4i64_ty], 1853 [IntrNoMem]>; 1854 1855 def int_x86_avx2_psrlv_d : GCCBuiltin<"__builtin_ia32_psrlv4si">, 1856 Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty], 1857 [IntrNoMem]>; 1858 def int_x86_avx2_psrlv_d_256 : GCCBuiltin<"__builtin_ia32_psrlv8si">, 1859 Intrinsic<[llvm_v8i32_ty], [llvm_v8i32_ty, llvm_v8i32_ty], 1860 [IntrNoMem]>; 1861 def int_x86_avx2_psrlv_q : GCCBuiltin<"__builtin_ia32_psrlv2di">, 1862 Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty], 1863 [IntrNoMem]>; 1864 def int_x86_avx2_psrlv_q_256 : GCCBuiltin<"__builtin_ia32_psrlv4di">, 1865 Intrinsic<[llvm_v4i64_ty], [llvm_v4i64_ty, llvm_v4i64_ty], 1866 [IntrNoMem]>; 1867 1868 def int_x86_avx2_psrav_d : GCCBuiltin<"__builtin_ia32_psrav4si">, 1869 Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty], 1870 [IntrNoMem]>; 1871 def int_x86_avx2_psrav_d_256 : GCCBuiltin<"__builtin_ia32_psrav8si">, 1872 Intrinsic<[llvm_v8i32_ty], [llvm_v8i32_ty, llvm_v8i32_ty], 1873 [IntrNoMem]>; 1874} 1875 1876// Gather ops 1877let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.". 1878 def int_x86_avx2_gather_d_pd : GCCBuiltin<"__builtin_ia32_gatherd_pd">, 1879 Intrinsic<[llvm_v2f64_ty], 1880 [llvm_v2f64_ty, llvm_ptr_ty, llvm_v4i32_ty, llvm_v2f64_ty, llvm_i8_ty], 1881 [IntrReadArgMem]>; 1882 def int_x86_avx2_gather_d_pd_256 : GCCBuiltin<"__builtin_ia32_gatherd_pd256">, 1883 Intrinsic<[llvm_v4f64_ty], 1884 [llvm_v4f64_ty, llvm_ptr_ty, llvm_v4i32_ty, llvm_v4f64_ty, llvm_i8_ty], 1885 [IntrReadArgMem]>; 1886 def int_x86_avx2_gather_q_pd : GCCBuiltin<"__builtin_ia32_gatherq_pd">, 1887 Intrinsic<[llvm_v2f64_ty], 1888 [llvm_v2f64_ty, llvm_ptr_ty, llvm_v2i64_ty, llvm_v2f64_ty, llvm_i8_ty], 1889 [IntrReadArgMem]>; 1890 def int_x86_avx2_gather_q_pd_256 : GCCBuiltin<"__builtin_ia32_gatherq_pd256">, 1891 Intrinsic<[llvm_v4f64_ty], 1892 [llvm_v4f64_ty, llvm_ptr_ty, llvm_v4i64_ty, llvm_v4f64_ty, llvm_i8_ty], 1893 [IntrReadArgMem]>; 1894 def int_x86_avx2_gather_d_ps : GCCBuiltin<"__builtin_ia32_gatherd_ps">, 1895 Intrinsic<[llvm_v4f32_ty], 1896 [llvm_v4f32_ty, llvm_ptr_ty, llvm_v4i32_ty, llvm_v4f32_ty, llvm_i8_ty], 1897 [IntrReadArgMem]>; 1898 def int_x86_avx2_gather_d_ps_256 : GCCBuiltin<"__builtin_ia32_gatherd_ps256">, 1899 Intrinsic<[llvm_v8f32_ty], 1900 [llvm_v8f32_ty, llvm_ptr_ty, llvm_v8i32_ty, llvm_v8f32_ty, llvm_i8_ty], 1901 [IntrReadArgMem]>; 1902 def int_x86_avx2_gather_q_ps : GCCBuiltin<"__builtin_ia32_gatherq_ps">, 1903 Intrinsic<[llvm_v4f32_ty], 1904 [llvm_v4f32_ty, llvm_ptr_ty, llvm_v2i64_ty, llvm_v4f32_ty, llvm_i8_ty], 1905 [IntrReadArgMem]>; 1906 def int_x86_avx2_gather_q_ps_256 : GCCBuiltin<"__builtin_ia32_gatherq_ps256">, 1907 Intrinsic<[llvm_v4f32_ty], 1908 [llvm_v4f32_ty, llvm_ptr_ty, llvm_v4i64_ty, llvm_v4f32_ty, llvm_i8_ty], 1909 [IntrReadArgMem]>; 1910 1911 def int_x86_avx2_gather_d_q : GCCBuiltin<"__builtin_ia32_gatherd_q">, 1912 Intrinsic<[llvm_v2i64_ty], 1913 [llvm_v2i64_ty, llvm_ptr_ty, llvm_v4i32_ty, llvm_v2i64_ty, llvm_i8_ty], 1914 [IntrReadArgMem]>; 1915 def int_x86_avx2_gather_d_q_256 : GCCBuiltin<"__builtin_ia32_gatherd_q256">, 1916 Intrinsic<[llvm_v4i64_ty], 1917 [llvm_v4i64_ty, llvm_ptr_ty, llvm_v4i32_ty, llvm_v4i64_ty, llvm_i8_ty], 1918 [IntrReadArgMem]>; 1919 def int_x86_avx2_gather_q_q : GCCBuiltin<"__builtin_ia32_gatherq_q">, 1920 Intrinsic<[llvm_v2i64_ty], 1921 [llvm_v2i64_ty, llvm_ptr_ty, llvm_v2i64_ty, llvm_v2i64_ty, llvm_i8_ty], 1922 [IntrReadArgMem]>; 1923 def int_x86_avx2_gather_q_q_256 : GCCBuiltin<"__builtin_ia32_gatherq_q256">, 1924 Intrinsic<[llvm_v4i64_ty], 1925 [llvm_v4i64_ty, llvm_ptr_ty, llvm_v4i64_ty, llvm_v4i64_ty, llvm_i8_ty], 1926 [IntrReadArgMem]>; 1927 def int_x86_avx2_gather_d_d : GCCBuiltin<"__builtin_ia32_gatherd_d">, 1928 Intrinsic<[llvm_v4i32_ty], 1929 [llvm_v4i32_ty, llvm_ptr_ty, llvm_v4i32_ty, llvm_v4i32_ty, llvm_i8_ty], 1930 [IntrReadArgMem]>; 1931 def int_x86_avx2_gather_d_d_256 : GCCBuiltin<"__builtin_ia32_gatherd_d256">, 1932 Intrinsic<[llvm_v8i32_ty], 1933 [llvm_v8i32_ty, llvm_ptr_ty, llvm_v8i32_ty, llvm_v8i32_ty, llvm_i8_ty], 1934 [IntrReadArgMem]>; 1935 def int_x86_avx2_gather_q_d : GCCBuiltin<"__builtin_ia32_gatherq_d">, 1936 Intrinsic<[llvm_v4i32_ty], 1937 [llvm_v4i32_ty, llvm_ptr_ty, llvm_v2i64_ty, llvm_v4i32_ty, llvm_i8_ty], 1938 [IntrReadArgMem]>; 1939 def int_x86_avx2_gather_q_d_256 : GCCBuiltin<"__builtin_ia32_gatherq_d256">, 1940 Intrinsic<[llvm_v4i32_ty], 1941 [llvm_v4i32_ty, llvm_ptr_ty, llvm_v4i64_ty, llvm_v4i32_ty, llvm_i8_ty], 1942 [IntrReadArgMem]>; 1943} 1944 1945// Misc. 1946let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.". 1947 def int_x86_avx2_pmovmskb : GCCBuiltin<"__builtin_ia32_pmovmskb256">, 1948 Intrinsic<[llvm_i32_ty], [llvm_v32i8_ty], [IntrNoMem]>; 1949 def int_x86_avx2_pshuf_b : GCCBuiltin<"__builtin_ia32_pshufb256">, 1950 Intrinsic<[llvm_v32i8_ty], [llvm_v32i8_ty, 1951 llvm_v32i8_ty], [IntrNoMem]>; 1952 def int_x86_avx2_mpsadbw : GCCBuiltin<"__builtin_ia32_mpsadbw256">, 1953 Intrinsic<[llvm_v16i16_ty], [llvm_v32i8_ty, llvm_v32i8_ty, 1954 llvm_i32_ty], [IntrNoMem, Commutative]>; 1955 def int_x86_avx2_movntdqa : GCCBuiltin<"__builtin_ia32_movntdqa256">, 1956 Intrinsic<[llvm_v4i64_ty], [llvm_ptr_ty], [IntrReadMem]>; 1957 def int_x86_avx512_movntdqa : GCCBuiltin<"__builtin_ia32_movntdqa512">, 1958 Intrinsic<[llvm_v8i64_ty], [llvm_ptr_ty], [IntrReadMem]>; 1959} 1960 1961//===----------------------------------------------------------------------===// 1962// FMA3 and FMA4 1963 1964let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.". 1965 def int_x86_fma_vfmadd_ss : GCCBuiltin<"__builtin_ia32_vfmaddss">, 1966 Intrinsic<[llvm_v4f32_ty], 1967 [llvm_v4f32_ty, llvm_v4f32_ty, llvm_v4f32_ty], 1968 [IntrNoMem]>; 1969 def int_x86_fma_vfmadd_sd : GCCBuiltin<"__builtin_ia32_vfmaddsd">, 1970 Intrinsic<[llvm_v2f64_ty], 1971 [llvm_v2f64_ty, llvm_v2f64_ty, llvm_v2f64_ty], 1972 [IntrNoMem]>; 1973 def int_x86_fma_vfmadd_ps : GCCBuiltin<"__builtin_ia32_vfmaddps">, 1974 Intrinsic<[llvm_v4f32_ty], 1975 [llvm_v4f32_ty, llvm_v4f32_ty, llvm_v4f32_ty], 1976 [IntrNoMem]>; 1977 def int_x86_fma_vfmadd_pd : GCCBuiltin<"__builtin_ia32_vfmaddpd">, 1978 Intrinsic<[llvm_v2f64_ty], 1979 [llvm_v2f64_ty, llvm_v2f64_ty, llvm_v2f64_ty], 1980 [IntrNoMem]>; 1981 def int_x86_fma_vfmadd_ps_256 : GCCBuiltin<"__builtin_ia32_vfmaddps256">, 1982 Intrinsic<[llvm_v8f32_ty], 1983 [llvm_v8f32_ty, llvm_v8f32_ty, llvm_v8f32_ty], 1984 [IntrNoMem]>; 1985 def int_x86_fma_vfmadd_pd_256 : GCCBuiltin<"__builtin_ia32_vfmaddpd256">, 1986 Intrinsic<[llvm_v4f64_ty], 1987 [llvm_v4f64_ty, llvm_v4f64_ty, llvm_v4f64_ty], 1988 [IntrNoMem]>; 1989 def int_x86_fma_vfmadd_ps_512 : GCCBuiltin<"__builtin_ia32_vfmaddps512">, 1990 Intrinsic<[llvm_v16f32_ty], 1991 [llvm_v16f32_ty, llvm_v16f32_ty, llvm_v16f32_ty], 1992 [IntrNoMem]>; 1993 def int_x86_fma_vfmadd_pd_512 : GCCBuiltin<"__builtin_ia32_vfmaddpd512">, 1994 Intrinsic<[llvm_v8f64_ty], 1995 [llvm_v8f64_ty, llvm_v8f64_ty, llvm_v8f64_ty], 1996 [IntrNoMem]>; 1997 def int_x86_fma_vfmsub_ss : GCCBuiltin<"__builtin_ia32_vfmsubss">, 1998 Intrinsic<[llvm_v4f32_ty], 1999 [llvm_v4f32_ty, llvm_v4f32_ty, llvm_v4f32_ty], 2000 [IntrNoMem]>; 2001 def int_x86_fma_vfmsub_sd : GCCBuiltin<"__builtin_ia32_vfmsubsd">, 2002 Intrinsic<[llvm_v2f64_ty], 2003 [llvm_v2f64_ty, llvm_v2f64_ty, llvm_v2f64_ty], 2004 [IntrNoMem]>; 2005 def int_x86_fma_vfmsub_ps : GCCBuiltin<"__builtin_ia32_vfmsubps">, 2006 Intrinsic<[llvm_v4f32_ty], 2007 [llvm_v4f32_ty, llvm_v4f32_ty, llvm_v4f32_ty], 2008 [IntrNoMem]>; 2009 def int_x86_fma_vfmsub_pd : GCCBuiltin<"__builtin_ia32_vfmsubpd">, 2010 Intrinsic<[llvm_v2f64_ty], 2011 [llvm_v2f64_ty, llvm_v2f64_ty, llvm_v2f64_ty], 2012 [IntrNoMem]>; 2013 def int_x86_fma_vfmsub_ps_256 : GCCBuiltin<"__builtin_ia32_vfmsubps256">, 2014 Intrinsic<[llvm_v8f32_ty], 2015 [llvm_v8f32_ty, llvm_v8f32_ty, llvm_v8f32_ty], 2016 [IntrNoMem]>; 2017 def int_x86_fma_vfmsub_pd_256 : GCCBuiltin<"__builtin_ia32_vfmsubpd256">, 2018 Intrinsic<[llvm_v4f64_ty], 2019 [llvm_v4f64_ty, llvm_v4f64_ty, llvm_v4f64_ty], 2020 [IntrNoMem]>; 2021 def int_x86_fma_vfmsub_ps_512 : GCCBuiltin<"__builtin_ia32_vfmsubps512">, 2022 Intrinsic<[llvm_v16f32_ty], 2023 [llvm_v16f32_ty, llvm_v16f32_ty, llvm_v16f32_ty], 2024 [IntrNoMem]>; 2025 def int_x86_fma_vfmsub_pd_512 : GCCBuiltin<"__builtin_ia32_vfmsubpd512">, 2026 Intrinsic<[llvm_v8f64_ty], 2027 [llvm_v8f64_ty, llvm_v8f64_ty, llvm_v8f64_ty], 2028 [IntrNoMem]>; 2029 def int_x86_fma_vfnmadd_ss : GCCBuiltin<"__builtin_ia32_vfnmaddss">, 2030 Intrinsic<[llvm_v4f32_ty], 2031 [llvm_v4f32_ty, llvm_v4f32_ty, llvm_v4f32_ty], 2032 [IntrNoMem]>; 2033 def int_x86_fma_vfnmadd_sd : GCCBuiltin<"__builtin_ia32_vfnmaddsd">, 2034 Intrinsic<[llvm_v2f64_ty], 2035 [llvm_v2f64_ty, llvm_v2f64_ty, llvm_v2f64_ty], 2036 [IntrNoMem]>; 2037 def int_x86_fma_vfnmadd_ps : GCCBuiltin<"__builtin_ia32_vfnmaddps">, 2038 Intrinsic<[llvm_v4f32_ty], 2039 [llvm_v4f32_ty, llvm_v4f32_ty, llvm_v4f32_ty], 2040 [IntrNoMem]>; 2041 def int_x86_fma_vfnmadd_pd : GCCBuiltin<"__builtin_ia32_vfnmaddpd">, 2042 Intrinsic<[llvm_v2f64_ty], 2043 [llvm_v2f64_ty, llvm_v2f64_ty, llvm_v2f64_ty], 2044 [IntrNoMem]>; 2045 def int_x86_fma_vfnmadd_ps_256 : GCCBuiltin<"__builtin_ia32_vfnmaddps256">, 2046 Intrinsic<[llvm_v8f32_ty], 2047 [llvm_v8f32_ty, llvm_v8f32_ty, llvm_v8f32_ty], 2048 [IntrNoMem]>; 2049 def int_x86_fma_vfnmadd_pd_256 : GCCBuiltin<"__builtin_ia32_vfnmaddpd256">, 2050 Intrinsic<[llvm_v4f64_ty], 2051 [llvm_v4f64_ty, llvm_v4f64_ty, llvm_v4f64_ty], 2052 [IntrNoMem]>; 2053 def int_x86_fma_vfnmadd_ps_512 : GCCBuiltin<"__builtin_ia32_vfnmaddps512">, 2054 Intrinsic<[llvm_v16f32_ty], 2055 [llvm_v16f32_ty, llvm_v16f32_ty, llvm_v16f32_ty], 2056 [IntrNoMem]>; 2057 def int_x86_fma_vfnmadd_pd_512 : GCCBuiltin<"__builtin_ia32_vfnmaddpd512">, 2058 Intrinsic<[llvm_v8f64_ty], 2059 [llvm_v8f64_ty, llvm_v8f64_ty, llvm_v8f64_ty], 2060 [IntrNoMem]>; 2061 def int_x86_fma_vfnmsub_ss : GCCBuiltin<"__builtin_ia32_vfnmsubss">, 2062 Intrinsic<[llvm_v4f32_ty], 2063 [llvm_v4f32_ty, llvm_v4f32_ty, llvm_v4f32_ty], 2064 [IntrNoMem]>; 2065 def int_x86_fma_vfnmsub_sd : GCCBuiltin<"__builtin_ia32_vfnmsubsd">, 2066 Intrinsic<[llvm_v2f64_ty], 2067 [llvm_v2f64_ty, llvm_v2f64_ty, llvm_v2f64_ty], 2068 [IntrNoMem]>; 2069 def int_x86_fma_vfnmsub_ps : GCCBuiltin<"__builtin_ia32_vfnmsubps">, 2070 Intrinsic<[llvm_v4f32_ty], 2071 [llvm_v4f32_ty, llvm_v4f32_ty, llvm_v4f32_ty], 2072 [IntrNoMem]>; 2073 def int_x86_fma_vfnmsub_pd : GCCBuiltin<"__builtin_ia32_vfnmsubpd">, 2074 Intrinsic<[llvm_v2f64_ty], 2075 [llvm_v2f64_ty, llvm_v2f64_ty, llvm_v2f64_ty], 2076 [IntrNoMem]>; 2077 def int_x86_fma_vfnmsub_ps_256 : GCCBuiltin<"__builtin_ia32_vfnmsubps256">, 2078 Intrinsic<[llvm_v8f32_ty], 2079 [llvm_v8f32_ty, llvm_v8f32_ty, llvm_v8f32_ty], 2080 [IntrNoMem]>; 2081 def int_x86_fma_vfnmsub_pd_256 : GCCBuiltin<"__builtin_ia32_vfnmsubpd256">, 2082 Intrinsic<[llvm_v4f64_ty], 2083 [llvm_v4f64_ty, llvm_v4f64_ty, llvm_v4f64_ty], 2084 [IntrNoMem]>; 2085 def int_x86_fma_vfnmsub_ps_512 : GCCBuiltin<"__builtin_ia32_vfnmsubps512">, 2086 Intrinsic<[llvm_v16f32_ty], 2087 [llvm_v16f32_ty, llvm_v16f32_ty, llvm_v16f32_ty], 2088 [IntrNoMem]>; 2089 def int_x86_fma_vfnmsub_pd_512 : GCCBuiltin<"__builtin_ia32_vfnmsubpd512">, 2090 Intrinsic<[llvm_v8f64_ty], 2091 [llvm_v8f64_ty, llvm_v8f64_ty, llvm_v8f64_ty], 2092 [IntrNoMem]>; 2093 def int_x86_fma_vfmaddsub_ps : GCCBuiltin<"__builtin_ia32_vfmaddsubps">, 2094 Intrinsic<[llvm_v4f32_ty], 2095 [llvm_v4f32_ty, llvm_v4f32_ty, llvm_v4f32_ty], 2096 [IntrNoMem]>; 2097 def int_x86_fma_vfmaddsub_pd : GCCBuiltin<"__builtin_ia32_vfmaddsubpd">, 2098 Intrinsic<[llvm_v2f64_ty], 2099 [llvm_v2f64_ty, llvm_v2f64_ty, llvm_v2f64_ty], 2100 [IntrNoMem]>; 2101 def int_x86_fma_vfmaddsub_ps_256 : 2102 GCCBuiltin<"__builtin_ia32_vfmaddsubps256">, 2103 Intrinsic<[llvm_v8f32_ty], 2104 [llvm_v8f32_ty, llvm_v8f32_ty, llvm_v8f32_ty], 2105 [IntrNoMem]>; 2106 def int_x86_fma_vfmaddsub_pd_256 : 2107 GCCBuiltin<"__builtin_ia32_vfmaddsubpd256">, 2108 Intrinsic<[llvm_v4f64_ty], 2109 [llvm_v4f64_ty, llvm_v4f64_ty, llvm_v4f64_ty], 2110 [IntrNoMem]>; 2111 def int_x86_fma_vfmaddsub_ps_512 : GCCBuiltin<"__builtin_ia32_vfmaddsubps512">, 2112 Intrinsic<[llvm_v16f32_ty], 2113 [llvm_v16f32_ty, llvm_v16f32_ty, llvm_v16f32_ty], 2114 [IntrNoMem]>; 2115 def int_x86_fma_vfmaddsub_pd_512 : GCCBuiltin<"__builtin_ia32_vfmaddsubpd512">, 2116 Intrinsic<[llvm_v8f64_ty], 2117 [llvm_v8f64_ty, llvm_v8f64_ty, llvm_v8f64_ty], 2118 [IntrNoMem]>; 2119 def int_x86_fma_vfmsubadd_ps : GCCBuiltin<"__builtin_ia32_vfmsubaddps">, 2120 Intrinsic<[llvm_v4f32_ty], 2121 [llvm_v4f32_ty, llvm_v4f32_ty, llvm_v4f32_ty], 2122 [IntrNoMem]>; 2123 def int_x86_fma_vfmsubadd_pd : GCCBuiltin<"__builtin_ia32_vfmsubaddpd">, 2124 Intrinsic<[llvm_v2f64_ty], 2125 [llvm_v2f64_ty, llvm_v2f64_ty, llvm_v2f64_ty], 2126 [IntrNoMem]>; 2127 def int_x86_fma_vfmsubadd_ps_256 : 2128 GCCBuiltin<"__builtin_ia32_vfmsubaddps256">, 2129 Intrinsic<[llvm_v8f32_ty], 2130 [llvm_v8f32_ty, llvm_v8f32_ty, llvm_v8f32_ty], 2131 [IntrNoMem]>; 2132 def int_x86_fma_vfmsubadd_pd_256 : 2133 GCCBuiltin<"__builtin_ia32_vfmsubaddpd256">, 2134 Intrinsic<[llvm_v4f64_ty], 2135 [llvm_v4f64_ty, llvm_v4f64_ty, llvm_v4f64_ty], 2136 [IntrNoMem]>; 2137 def int_x86_fma_vfmsubadd_ps_512 : GCCBuiltin<"__builtin_ia32_vfmsubaddps512">, 2138 Intrinsic<[llvm_v16f32_ty], 2139 [llvm_v16f32_ty, llvm_v16f32_ty, llvm_v16f32_ty], 2140 [IntrNoMem]>; 2141 def int_x86_fma_vfmsubadd_pd_512 : GCCBuiltin<"__builtin_ia32_vfmsubaddpd512">, 2142 Intrinsic<[llvm_v8f64_ty], 2143 [llvm_v8f64_ty, llvm_v8f64_ty, llvm_v8f64_ty], 2144 [IntrNoMem]>; 2145} 2146 2147//===----------------------------------------------------------------------===// 2148// XOP 2149 2150 def int_x86_xop_vpermil2pd : GCCBuiltin<"__builtin_ia32_vpermil2pd">, 2151 Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, llvm_v2f64_ty, 2152 llvm_v2f64_ty, llvm_i8_ty], 2153 [IntrNoMem]>; 2154 2155 def int_x86_xop_vpermil2pd_256 : 2156 GCCBuiltin<"__builtin_ia32_vpermil2pd256">, 2157 Intrinsic<[llvm_v4f64_ty], [llvm_v4f64_ty, llvm_v4f64_ty, 2158 llvm_v4f64_ty, llvm_i8_ty], 2159 [IntrNoMem]>; 2160 2161 def int_x86_xop_vpermil2ps : GCCBuiltin<"__builtin_ia32_vpermil2ps">, 2162 Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_v4f32_ty, 2163 llvm_v4f32_ty, llvm_i8_ty], 2164 [IntrNoMem]>; 2165 def int_x86_xop_vpermil2ps_256 : 2166 GCCBuiltin<"__builtin_ia32_vpermil2ps256">, 2167 Intrinsic<[llvm_v8f32_ty], [llvm_v8f32_ty, llvm_v8f32_ty, 2168 llvm_v8f32_ty, llvm_i8_ty], 2169 [IntrNoMem]>; 2170 2171 def int_x86_xop_vfrcz_pd : GCCBuiltin<"__builtin_ia32_vfrczpd">, 2172 Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty], [IntrNoMem]>; 2173 def int_x86_xop_vfrcz_ps : GCCBuiltin<"__builtin_ia32_vfrczps">, 2174 Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty], [IntrNoMem]>; 2175 def int_x86_xop_vfrcz_sd : GCCBuiltin<"__builtin_ia32_vfrczsd">, 2176 Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty], [IntrNoMem]>; 2177 def int_x86_xop_vfrcz_ss : GCCBuiltin<"__builtin_ia32_vfrczss">, 2178 Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty], [IntrNoMem]>; 2179 def int_x86_xop_vfrcz_pd_256 : GCCBuiltin<"__builtin_ia32_vfrczpd256">, 2180 Intrinsic<[llvm_v4f64_ty], [llvm_v4f64_ty], [IntrNoMem]>; 2181 def int_x86_xop_vfrcz_ps_256 : GCCBuiltin<"__builtin_ia32_vfrczps256">, 2182 Intrinsic<[llvm_v8f32_ty], [llvm_v8f32_ty], [IntrNoMem]>; 2183 2184 def int_x86_xop_vpcmov : 2185 GCCBuiltin<"__builtin_ia32_vpcmov">, 2186 Intrinsic<[llvm_v2i64_ty], 2187 [llvm_v2i64_ty, llvm_v2i64_ty, llvm_v2i64_ty], 2188 [IntrNoMem]>; 2189 def int_x86_xop_vpcmov_256 : 2190 GCCBuiltin<"__builtin_ia32_vpcmov_256">, 2191 Intrinsic<[llvm_v4i64_ty], 2192 [llvm_v4i64_ty, llvm_v4i64_ty, llvm_v4i64_ty], 2193 [IntrNoMem]>; 2194 2195 def int_x86_xop_vpcomb : GCCBuiltin<"__builtin_ia32_vpcomb">, 2196 Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_v16i8_ty, 2197 llvm_i8_ty], [IntrNoMem]>; 2198 def int_x86_xop_vpcomw : GCCBuiltin<"__builtin_ia32_vpcomw">, 2199 Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_v8i16_ty, 2200 llvm_i8_ty], [IntrNoMem]>; 2201 def int_x86_xop_vpcomd : GCCBuiltin<"__builtin_ia32_vpcomd">, 2202 Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty, 2203 llvm_i8_ty], [IntrNoMem]>; 2204 def int_x86_xop_vpcomq : GCCBuiltin<"__builtin_ia32_vpcomq">, 2205 Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty, 2206 llvm_i8_ty], [IntrNoMem]>; 2207 def int_x86_xop_vpcomub : GCCBuiltin<"__builtin_ia32_vpcomub">, 2208 Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_v16i8_ty, 2209 llvm_i8_ty], [IntrNoMem]>; 2210 def int_x86_xop_vpcomuw : GCCBuiltin<"__builtin_ia32_vpcomuw">, 2211 Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_v8i16_ty, 2212 llvm_i8_ty], [IntrNoMem]>; 2213 def int_x86_xop_vpcomud : GCCBuiltin<"__builtin_ia32_vpcomud">, 2214 Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty, 2215 llvm_i8_ty], [IntrNoMem]>; 2216 def int_x86_xop_vpcomuq : GCCBuiltin<"__builtin_ia32_vpcomuq">, 2217 Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty, 2218 llvm_i8_ty], [IntrNoMem]>; 2219 2220 def int_x86_xop_vphaddbd : 2221 GCCBuiltin<"__builtin_ia32_vphaddbd">, 2222 Intrinsic<[llvm_v4i32_ty], [llvm_v16i8_ty], [IntrNoMem]>; 2223 def int_x86_xop_vphaddbq : 2224 GCCBuiltin<"__builtin_ia32_vphaddbq">, 2225 Intrinsic<[llvm_v2i64_ty], [llvm_v16i8_ty], [IntrNoMem]>; 2226 def int_x86_xop_vphaddbw : 2227 GCCBuiltin<"__builtin_ia32_vphaddbw">, 2228 Intrinsic<[llvm_v8i16_ty], [llvm_v16i8_ty], [IntrNoMem]>; 2229 def int_x86_xop_vphadddq : 2230 GCCBuiltin<"__builtin_ia32_vphadddq">, 2231 Intrinsic<[llvm_v2i64_ty], [llvm_v4i32_ty], [IntrNoMem]>; 2232 def int_x86_xop_vphaddubd : 2233 GCCBuiltin<"__builtin_ia32_vphaddubd">, 2234 Intrinsic<[llvm_v4i32_ty], [llvm_v16i8_ty], [IntrNoMem]>; 2235 def int_x86_xop_vphaddubq : 2236 GCCBuiltin<"__builtin_ia32_vphaddubq">, 2237 Intrinsic<[llvm_v2i64_ty], [llvm_v16i8_ty], [IntrNoMem]>; 2238 def int_x86_xop_vphaddubw : 2239 GCCBuiltin<"__builtin_ia32_vphaddubw">, 2240 Intrinsic<[llvm_v8i16_ty], [llvm_v16i8_ty], [IntrNoMem]>; 2241 def int_x86_xop_vphaddudq : 2242 GCCBuiltin<"__builtin_ia32_vphaddudq">, 2243 Intrinsic<[llvm_v2i64_ty], [llvm_v4i32_ty], [IntrNoMem]>; 2244 def int_x86_xop_vphadduwd : 2245 GCCBuiltin<"__builtin_ia32_vphadduwd">, 2246 Intrinsic<[llvm_v4i32_ty], [llvm_v8i16_ty], [IntrNoMem]>; 2247 def int_x86_xop_vphadduwq : 2248 GCCBuiltin<"__builtin_ia32_vphadduwq">, 2249 Intrinsic<[llvm_v2i64_ty], [llvm_v8i16_ty], [IntrNoMem]>; 2250 def int_x86_xop_vphaddwd : 2251 GCCBuiltin<"__builtin_ia32_vphaddwd">, 2252 Intrinsic<[llvm_v4i32_ty], [llvm_v8i16_ty], [IntrNoMem]>; 2253 def int_x86_xop_vphaddwq : 2254 GCCBuiltin<"__builtin_ia32_vphaddwq">, 2255 Intrinsic<[llvm_v2i64_ty], [llvm_v8i16_ty], [IntrNoMem]>; 2256 def int_x86_xop_vphsubbw : 2257 GCCBuiltin<"__builtin_ia32_vphsubbw">, 2258 Intrinsic<[llvm_v8i16_ty], [llvm_v16i8_ty], [IntrNoMem]>; 2259 def int_x86_xop_vphsubdq : 2260 GCCBuiltin<"__builtin_ia32_vphsubdq">, 2261 Intrinsic<[llvm_v2i64_ty], [llvm_v4i32_ty], [IntrNoMem]>; 2262 def int_x86_xop_vphsubwd : 2263 GCCBuiltin<"__builtin_ia32_vphsubwd">, 2264 Intrinsic<[llvm_v4i32_ty], [llvm_v8i16_ty], [IntrNoMem]>; 2265 def int_x86_xop_vpmacsdd : 2266 GCCBuiltin<"__builtin_ia32_vpmacsdd">, 2267 Intrinsic<[llvm_v4i32_ty], 2268 [llvm_v4i32_ty, llvm_v4i32_ty, llvm_v4i32_ty], 2269 [IntrNoMem]>; 2270 def int_x86_xop_vpmacsdqh : 2271 GCCBuiltin<"__builtin_ia32_vpmacsdqh">, 2272 Intrinsic<[llvm_v2i64_ty], 2273 [llvm_v4i32_ty, llvm_v4i32_ty, llvm_v2i64_ty], 2274 [IntrNoMem]>; 2275 def int_x86_xop_vpmacsdql : 2276 GCCBuiltin<"__builtin_ia32_vpmacsdql">, 2277 Intrinsic<[llvm_v2i64_ty], 2278 [llvm_v4i32_ty, llvm_v4i32_ty, llvm_v2i64_ty], 2279 [IntrNoMem]>; 2280 def int_x86_xop_vpmacssdd : 2281 GCCBuiltin<"__builtin_ia32_vpmacssdd">, 2282 Intrinsic<[llvm_v4i32_ty], 2283 [llvm_v4i32_ty, llvm_v4i32_ty, llvm_v4i32_ty], 2284 [IntrNoMem]>; 2285 def int_x86_xop_vpmacssdqh : 2286 GCCBuiltin<"__builtin_ia32_vpmacssdqh">, 2287 Intrinsic<[llvm_v2i64_ty], 2288 [llvm_v4i32_ty, llvm_v4i32_ty, llvm_v2i64_ty], 2289 [IntrNoMem]>; 2290 def int_x86_xop_vpmacssdql : 2291 GCCBuiltin<"__builtin_ia32_vpmacssdql">, 2292 Intrinsic<[llvm_v2i64_ty], 2293 [llvm_v4i32_ty, llvm_v4i32_ty, llvm_v2i64_ty], 2294 [IntrNoMem]>; 2295 def int_x86_xop_vpmacsswd : 2296 GCCBuiltin<"__builtin_ia32_vpmacsswd">, 2297 Intrinsic<[llvm_v4i32_ty], 2298 [llvm_v8i16_ty, llvm_v8i16_ty, llvm_v4i32_ty], 2299 [IntrNoMem]>; 2300 def int_x86_xop_vpmacssww : 2301 GCCBuiltin<"__builtin_ia32_vpmacssww">, 2302 Intrinsic<[llvm_v8i16_ty], 2303 [llvm_v8i16_ty, llvm_v8i16_ty, llvm_v8i16_ty], 2304 [IntrNoMem]>; 2305 def int_x86_xop_vpmacswd : 2306 GCCBuiltin<"__builtin_ia32_vpmacswd">, 2307 Intrinsic<[llvm_v4i32_ty], 2308 [llvm_v8i16_ty, llvm_v8i16_ty, llvm_v4i32_ty], 2309 [IntrNoMem]>; 2310 def int_x86_xop_vpmacsww : 2311 GCCBuiltin<"__builtin_ia32_vpmacsww">, 2312 Intrinsic<[llvm_v8i16_ty], 2313 [llvm_v8i16_ty, llvm_v8i16_ty, llvm_v8i16_ty], 2314 [IntrNoMem]>; 2315 def int_x86_xop_vpmadcsswd : 2316 GCCBuiltin<"__builtin_ia32_vpmadcsswd">, 2317 Intrinsic<[llvm_v4i32_ty], 2318 [llvm_v8i16_ty, llvm_v8i16_ty, llvm_v4i32_ty], 2319 [IntrNoMem]>; 2320 def int_x86_xop_vpmadcswd : 2321 GCCBuiltin<"__builtin_ia32_vpmadcswd">, 2322 Intrinsic<[llvm_v4i32_ty], 2323 [llvm_v8i16_ty, llvm_v8i16_ty, llvm_v4i32_ty], 2324 [IntrNoMem]>; 2325 def int_x86_xop_vpperm : 2326 GCCBuiltin<"__builtin_ia32_vpperm">, 2327 Intrinsic<[llvm_v16i8_ty], 2328 [llvm_v16i8_ty, llvm_v16i8_ty, llvm_v16i8_ty], 2329 [IntrNoMem]>; 2330 2331 def int_x86_xop_vprotb : GCCBuiltin<"__builtin_ia32_vprotb">, 2332 Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_v16i8_ty], 2333 [IntrNoMem]>; 2334 def int_x86_xop_vprotd : GCCBuiltin<"__builtin_ia32_vprotd">, 2335 Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty], 2336 [IntrNoMem]>; 2337 def int_x86_xop_vprotq : GCCBuiltin<"__builtin_ia32_vprotq">, 2338 Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty], 2339 [IntrNoMem]>; 2340 def int_x86_xop_vprotw : GCCBuiltin<"__builtin_ia32_vprotw">, 2341 Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_v8i16_ty], 2342 [IntrNoMem]>; 2343 def int_x86_xop_vprotbi : GCCBuiltin<"__builtin_ia32_vprotbi">, 2344 Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_i8_ty], 2345 [IntrNoMem]>; 2346 def int_x86_xop_vprotdi : GCCBuiltin<"__builtin_ia32_vprotdi">, 2347 Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_i8_ty], 2348 [IntrNoMem]>; 2349 def int_x86_xop_vprotqi : GCCBuiltin<"__builtin_ia32_vprotqi">, 2350 Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_i8_ty], 2351 [IntrNoMem]>; 2352 def int_x86_xop_vprotwi : GCCBuiltin<"__builtin_ia32_vprotwi">, 2353 Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_i8_ty], 2354 [IntrNoMem]>; 2355 2356 def int_x86_xop_vpshab : 2357 GCCBuiltin<"__builtin_ia32_vpshab">, 2358 Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_v16i8_ty], 2359 [IntrNoMem]>; 2360 def int_x86_xop_vpshad : 2361 GCCBuiltin<"__builtin_ia32_vpshad">, 2362 Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty], 2363 [IntrNoMem]>; 2364 def int_x86_xop_vpshaq : 2365 GCCBuiltin<"__builtin_ia32_vpshaq">, 2366 Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty], 2367 [IntrNoMem]>; 2368 def int_x86_xop_vpshaw : 2369 GCCBuiltin<"__builtin_ia32_vpshaw">, 2370 Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_v8i16_ty], 2371 [IntrNoMem]>; 2372 def int_x86_xop_vpshlb : 2373 GCCBuiltin<"__builtin_ia32_vpshlb">, 2374 Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_v16i8_ty], 2375 [IntrNoMem]>; 2376 def int_x86_xop_vpshld : 2377 GCCBuiltin<"__builtin_ia32_vpshld">, 2378 Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty], 2379 [IntrNoMem]>; 2380 def int_x86_xop_vpshlq : 2381 GCCBuiltin<"__builtin_ia32_vpshlq">, 2382 Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty], 2383 [IntrNoMem]>; 2384 def int_x86_xop_vpshlw : 2385 GCCBuiltin<"__builtin_ia32_vpshlw">, 2386 Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_v8i16_ty], 2387 [IntrNoMem]>; 2388 2389//===----------------------------------------------------------------------===// 2390// MMX 2391 2392// Empty MMX state op. 2393let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.". 2394 def int_x86_mmx_emms : GCCBuiltin<"__builtin_ia32_emms">, 2395 Intrinsic<[], [], []>; 2396 def int_x86_mmx_femms : GCCBuiltin<"__builtin_ia32_femms">, 2397 Intrinsic<[], [], []>; 2398} 2399 2400// Integer arithmetic ops. 2401let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.". 2402 // Addition 2403 def int_x86_mmx_padd_b : GCCBuiltin<"__builtin_ia32_paddb">, 2404 Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty], 2405 [IntrNoMem]>; 2406 def int_x86_mmx_padd_w : GCCBuiltin<"__builtin_ia32_paddw">, 2407 Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty], 2408 [IntrNoMem]>; 2409 def int_x86_mmx_padd_d : GCCBuiltin<"__builtin_ia32_paddd">, 2410 Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty], 2411 [IntrNoMem]>; 2412 def int_x86_mmx_padd_q : GCCBuiltin<"__builtin_ia32_paddq">, 2413 Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty], 2414 [IntrNoMem]>; 2415 2416 def int_x86_mmx_padds_b : GCCBuiltin<"__builtin_ia32_paddsb">, 2417 Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, 2418 llvm_x86mmx_ty], [IntrNoMem, Commutative]>; 2419 def int_x86_mmx_padds_w : GCCBuiltin<"__builtin_ia32_paddsw">, 2420 Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, 2421 llvm_x86mmx_ty], [IntrNoMem, Commutative]>; 2422 2423 def int_x86_mmx_paddus_b : GCCBuiltin<"__builtin_ia32_paddusb">, 2424 Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, 2425 llvm_x86mmx_ty], [IntrNoMem, Commutative]>; 2426 def int_x86_mmx_paddus_w : GCCBuiltin<"__builtin_ia32_paddusw">, 2427 Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, 2428 llvm_x86mmx_ty], [IntrNoMem, Commutative]>; 2429 2430 // Subtraction 2431 def int_x86_mmx_psub_b : GCCBuiltin<"__builtin_ia32_psubb">, 2432 Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty], 2433 [IntrNoMem]>; 2434 def int_x86_mmx_psub_w : GCCBuiltin<"__builtin_ia32_psubw">, 2435 Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty], 2436 [IntrNoMem]>; 2437 def int_x86_mmx_psub_d : GCCBuiltin<"__builtin_ia32_psubd">, 2438 Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty], 2439 [IntrNoMem]>; 2440 def int_x86_mmx_psub_q : GCCBuiltin<"__builtin_ia32_psubq">, 2441 Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty], 2442 [IntrNoMem]>; 2443 2444 def int_x86_mmx_psubs_b : GCCBuiltin<"__builtin_ia32_psubsb">, 2445 Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, 2446 llvm_x86mmx_ty], [IntrNoMem]>; 2447 def int_x86_mmx_psubs_w : GCCBuiltin<"__builtin_ia32_psubsw">, 2448 Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, 2449 llvm_x86mmx_ty], [IntrNoMem]>; 2450 2451 def int_x86_mmx_psubus_b : GCCBuiltin<"__builtin_ia32_psubusb">, 2452 Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, 2453 llvm_x86mmx_ty], [IntrNoMem]>; 2454 def int_x86_mmx_psubus_w : GCCBuiltin<"__builtin_ia32_psubusw">, 2455 Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, 2456 llvm_x86mmx_ty], [IntrNoMem]>; 2457 2458 // Multiplication 2459 def int_x86_mmx_pmulh_w : GCCBuiltin<"__builtin_ia32_pmulhw">, 2460 Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, 2461 llvm_x86mmx_ty], [IntrNoMem, Commutative]>; 2462 def int_x86_mmx_pmull_w : GCCBuiltin<"__builtin_ia32_pmullw">, 2463 Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, 2464 llvm_x86mmx_ty], [IntrNoMem, Commutative]>; 2465 def int_x86_mmx_pmulhu_w : GCCBuiltin<"__builtin_ia32_pmulhuw">, 2466 Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, 2467 llvm_x86mmx_ty], [IntrNoMem, Commutative]>; 2468 def int_x86_mmx_pmulu_dq : GCCBuiltin<"__builtin_ia32_pmuludq">, 2469 Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, 2470 llvm_x86mmx_ty], [IntrNoMem, Commutative]>; 2471 def int_x86_mmx_pmadd_wd : GCCBuiltin<"__builtin_ia32_pmaddwd">, 2472 Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, 2473 llvm_x86mmx_ty], [IntrNoMem, Commutative]>; 2474 2475 // Bitwise operations 2476 def int_x86_mmx_pand : GCCBuiltin<"__builtin_ia32_pand">, 2477 Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty], 2478 [IntrNoMem]>; 2479 def int_x86_mmx_pandn : GCCBuiltin<"__builtin_ia32_pandn">, 2480 Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty], 2481 [IntrNoMem]>; 2482 def int_x86_mmx_por : GCCBuiltin<"__builtin_ia32_por">, 2483 Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty], 2484 [IntrNoMem]>; 2485 def int_x86_mmx_pxor : GCCBuiltin<"__builtin_ia32_pxor">, 2486 Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty], 2487 [IntrNoMem]>; 2488 2489 // Averages 2490 def int_x86_mmx_pavg_b : GCCBuiltin<"__builtin_ia32_pavgb">, 2491 Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, 2492 llvm_x86mmx_ty], [IntrNoMem, Commutative]>; 2493 def int_x86_mmx_pavg_w : GCCBuiltin<"__builtin_ia32_pavgw">, 2494 Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, 2495 llvm_x86mmx_ty], [IntrNoMem, Commutative]>; 2496 2497 // Maximum 2498 def int_x86_mmx_pmaxu_b : GCCBuiltin<"__builtin_ia32_pmaxub">, 2499 Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, 2500 llvm_x86mmx_ty], [IntrNoMem, Commutative]>; 2501 def int_x86_mmx_pmaxs_w : GCCBuiltin<"__builtin_ia32_pmaxsw">, 2502 Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, 2503 llvm_x86mmx_ty], [IntrNoMem, Commutative]>; 2504 2505 // Minimum 2506 def int_x86_mmx_pminu_b : GCCBuiltin<"__builtin_ia32_pminub">, 2507 Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, 2508 llvm_x86mmx_ty], [IntrNoMem, Commutative]>; 2509 def int_x86_mmx_pmins_w : GCCBuiltin<"__builtin_ia32_pminsw">, 2510 Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, 2511 llvm_x86mmx_ty], [IntrNoMem, Commutative]>; 2512 2513 // Packed sum of absolute differences 2514 def int_x86_mmx_psad_bw : GCCBuiltin<"__builtin_ia32_psadbw">, 2515 Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, 2516 llvm_x86mmx_ty], [IntrNoMem, Commutative]>; 2517} 2518 2519// Integer shift ops. 2520let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.". 2521 // Shift left logical 2522 def int_x86_mmx_psll_w : GCCBuiltin<"__builtin_ia32_psllw">, 2523 Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, 2524 llvm_x86mmx_ty], [IntrNoMem]>; 2525 def int_x86_mmx_psll_d : GCCBuiltin<"__builtin_ia32_pslld">, 2526 Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, 2527 llvm_x86mmx_ty], [IntrNoMem]>; 2528 def int_x86_mmx_psll_q : GCCBuiltin<"__builtin_ia32_psllq">, 2529 Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, 2530 llvm_x86mmx_ty], [IntrNoMem]>; 2531 2532 def int_x86_mmx_psrl_w : GCCBuiltin<"__builtin_ia32_psrlw">, 2533 Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, 2534 llvm_x86mmx_ty], [IntrNoMem]>; 2535 def int_x86_mmx_psrl_d : GCCBuiltin<"__builtin_ia32_psrld">, 2536 Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, 2537 llvm_x86mmx_ty], [IntrNoMem]>; 2538 def int_x86_mmx_psrl_q : GCCBuiltin<"__builtin_ia32_psrlq">, 2539 Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, 2540 llvm_x86mmx_ty], [IntrNoMem]>; 2541 2542 def int_x86_mmx_psra_w : GCCBuiltin<"__builtin_ia32_psraw">, 2543 Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, 2544 llvm_x86mmx_ty], [IntrNoMem]>; 2545 def int_x86_mmx_psra_d : GCCBuiltin<"__builtin_ia32_psrad">, 2546 Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, 2547 llvm_x86mmx_ty], [IntrNoMem]>; 2548 2549 def int_x86_mmx_pslli_w : GCCBuiltin<"__builtin_ia32_psllwi">, 2550 Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, 2551 llvm_i32_ty], [IntrNoMem]>; 2552 def int_x86_mmx_pslli_d : GCCBuiltin<"__builtin_ia32_pslldi">, 2553 Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, 2554 llvm_i32_ty], [IntrNoMem]>; 2555 def int_x86_mmx_pslli_q : GCCBuiltin<"__builtin_ia32_psllqi">, 2556 Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, 2557 llvm_i32_ty], [IntrNoMem]>; 2558 2559 def int_x86_mmx_psrli_w : GCCBuiltin<"__builtin_ia32_psrlwi">, 2560 Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, 2561 llvm_i32_ty], [IntrNoMem]>; 2562 def int_x86_mmx_psrli_d : GCCBuiltin<"__builtin_ia32_psrldi">, 2563 Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, 2564 llvm_i32_ty], [IntrNoMem]>; 2565 def int_x86_mmx_psrli_q : GCCBuiltin<"__builtin_ia32_psrlqi">, 2566 Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, 2567 llvm_i32_ty], [IntrNoMem]>; 2568 2569 def int_x86_mmx_psrai_w : GCCBuiltin<"__builtin_ia32_psrawi">, 2570 Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, 2571 llvm_i32_ty], [IntrNoMem]>; 2572 def int_x86_mmx_psrai_d : GCCBuiltin<"__builtin_ia32_psradi">, 2573 Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, 2574 llvm_i32_ty], [IntrNoMem]>; 2575} 2576 2577// Pack ops. 2578let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.". 2579 def int_x86_mmx_packsswb : GCCBuiltin<"__builtin_ia32_packsswb">, 2580 Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, 2581 llvm_x86mmx_ty], [IntrNoMem]>; 2582 def int_x86_mmx_packssdw : GCCBuiltin<"__builtin_ia32_packssdw">, 2583 Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, 2584 llvm_x86mmx_ty], [IntrNoMem]>; 2585 def int_x86_mmx_packuswb : GCCBuiltin<"__builtin_ia32_packuswb">, 2586 Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, 2587 llvm_x86mmx_ty], [IntrNoMem]>; 2588} 2589 2590// Unpacking ops. 2591let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.". 2592 def int_x86_mmx_punpckhbw : GCCBuiltin<"__builtin_ia32_punpckhbw">, 2593 Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty], 2594 [IntrNoMem]>; 2595 def int_x86_mmx_punpckhwd : GCCBuiltin<"__builtin_ia32_punpckhwd">, 2596 Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty], 2597 [IntrNoMem]>; 2598 def int_x86_mmx_punpckhdq : GCCBuiltin<"__builtin_ia32_punpckhdq">, 2599 Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty], 2600 [IntrNoMem]>; 2601 def int_x86_mmx_punpcklbw : GCCBuiltin<"__builtin_ia32_punpcklbw">, 2602 Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty], 2603 [IntrNoMem]>; 2604 def int_x86_mmx_punpcklwd : GCCBuiltin<"__builtin_ia32_punpcklwd">, 2605 Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty], 2606 [IntrNoMem]>; 2607 def int_x86_mmx_punpckldq : GCCBuiltin<"__builtin_ia32_punpckldq">, 2608 Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty], 2609 [IntrNoMem]>; 2610} 2611 2612// Integer comparison ops 2613let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.". 2614 def int_x86_mmx_pcmpeq_b : GCCBuiltin<"__builtin_ia32_pcmpeqb">, 2615 Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, 2616 llvm_x86mmx_ty], [IntrNoMem, Commutative]>; 2617 def int_x86_mmx_pcmpeq_w : GCCBuiltin<"__builtin_ia32_pcmpeqw">, 2618 Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, 2619 llvm_x86mmx_ty], [IntrNoMem, Commutative]>; 2620 def int_x86_mmx_pcmpeq_d : GCCBuiltin<"__builtin_ia32_pcmpeqd">, 2621 Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, 2622 llvm_x86mmx_ty], [IntrNoMem, Commutative]>; 2623 2624 def int_x86_mmx_pcmpgt_b : GCCBuiltin<"__builtin_ia32_pcmpgtb">, 2625 Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, 2626 llvm_x86mmx_ty], [IntrNoMem]>; 2627 def int_x86_mmx_pcmpgt_w : GCCBuiltin<"__builtin_ia32_pcmpgtw">, 2628 Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, 2629 llvm_x86mmx_ty], [IntrNoMem]>; 2630 def int_x86_mmx_pcmpgt_d : GCCBuiltin<"__builtin_ia32_pcmpgtd">, 2631 Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, 2632 llvm_x86mmx_ty], [IntrNoMem]>; 2633} 2634 2635// Misc. 2636let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.". 2637 def int_x86_mmx_maskmovq : GCCBuiltin<"__builtin_ia32_maskmovq">, 2638 Intrinsic<[], [llvm_x86mmx_ty, llvm_x86mmx_ty, llvm_ptr_ty], []>; 2639 2640 def int_x86_mmx_pmovmskb : GCCBuiltin<"__builtin_ia32_pmovmskb">, 2641 Intrinsic<[llvm_i32_ty], [llvm_x86mmx_ty], [IntrNoMem]>; 2642 2643 def int_x86_mmx_movnt_dq : GCCBuiltin<"__builtin_ia32_movntq">, 2644 Intrinsic<[], [llvm_ptrx86mmx_ty, llvm_x86mmx_ty], []>; 2645 2646 def int_x86_mmx_palignr_b : GCCBuiltin<"__builtin_ia32_palignr">, 2647 Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, 2648 llvm_x86mmx_ty, llvm_i8_ty], [IntrNoMem]>; 2649 2650 def int_x86_mmx_pextr_w : GCCBuiltin<"__builtin_ia32_vec_ext_v4hi">, 2651 Intrinsic<[llvm_i32_ty], [llvm_x86mmx_ty, llvm_i32_ty], 2652 [IntrNoMem]>; 2653 2654 def int_x86_mmx_pinsr_w : GCCBuiltin<"__builtin_ia32_vec_set_v4hi">, 2655 Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, 2656 llvm_i32_ty, llvm_i32_ty], [IntrNoMem]>; 2657} 2658 2659//===----------------------------------------------------------------------===// 2660// BMI 2661 2662let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.". 2663 def int_x86_bmi_bextr_32 : GCCBuiltin<"__builtin_ia32_bextr_u32">, 2664 Intrinsic<[llvm_i32_ty], [llvm_i32_ty, llvm_i32_ty], [IntrNoMem]>; 2665 def int_x86_bmi_bextr_64 : GCCBuiltin<"__builtin_ia32_bextr_u64">, 2666 Intrinsic<[llvm_i64_ty], [llvm_i64_ty, llvm_i64_ty], [IntrNoMem]>; 2667 def int_x86_bmi_bzhi_32 : GCCBuiltin<"__builtin_ia32_bzhi_si">, 2668 Intrinsic<[llvm_i32_ty], [llvm_i32_ty, llvm_i32_ty], [IntrNoMem]>; 2669 def int_x86_bmi_bzhi_64 : GCCBuiltin<"__builtin_ia32_bzhi_di">, 2670 Intrinsic<[llvm_i64_ty], [llvm_i64_ty, llvm_i64_ty], [IntrNoMem]>; 2671 def int_x86_bmi_pdep_32 : GCCBuiltin<"__builtin_ia32_pdep_si">, 2672 Intrinsic<[llvm_i32_ty], [llvm_i32_ty, llvm_i32_ty], [IntrNoMem]>; 2673 def int_x86_bmi_pdep_64 : GCCBuiltin<"__builtin_ia32_pdep_di">, 2674 Intrinsic<[llvm_i64_ty], [llvm_i64_ty, llvm_i64_ty], [IntrNoMem]>; 2675 def int_x86_bmi_pext_32 : GCCBuiltin<"__builtin_ia32_pext_si">, 2676 Intrinsic<[llvm_i32_ty], [llvm_i32_ty, llvm_i32_ty], [IntrNoMem]>; 2677 def int_x86_bmi_pext_64 : GCCBuiltin<"__builtin_ia32_pext_di">, 2678 Intrinsic<[llvm_i64_ty], [llvm_i64_ty, llvm_i64_ty], [IntrNoMem]>; 2679} 2680 2681//===----------------------------------------------------------------------===// 2682// FS/GS Base 2683 2684let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.". 2685 def int_x86_rdfsbase_32 : GCCBuiltin<"__builtin_ia32_rdfsbase32">, 2686 Intrinsic<[llvm_i32_ty], []>; 2687 def int_x86_rdgsbase_32 : GCCBuiltin<"__builtin_ia32_rdgsbase32">, 2688 Intrinsic<[llvm_i32_ty], []>; 2689 def int_x86_rdfsbase_64 : GCCBuiltin<"__builtin_ia32_rdfsbase64">, 2690 Intrinsic<[llvm_i64_ty], []>; 2691 def int_x86_rdgsbase_64 : GCCBuiltin<"__builtin_ia32_rdgsbase64">, 2692 Intrinsic<[llvm_i64_ty], []>; 2693 def int_x86_wrfsbase_32 : GCCBuiltin<"__builtin_ia32_wrfsbase32">, 2694 Intrinsic<[], [llvm_i32_ty]>; 2695 def int_x86_wrgsbase_32 : GCCBuiltin<"__builtin_ia32_wrgsbase32">, 2696 Intrinsic<[], [llvm_i32_ty]>; 2697 def int_x86_wrfsbase_64 : GCCBuiltin<"__builtin_ia32_wrfsbase64">, 2698 Intrinsic<[], [llvm_i64_ty]>; 2699 def int_x86_wrgsbase_64 : GCCBuiltin<"__builtin_ia32_wrgsbase64">, 2700 Intrinsic<[], [llvm_i64_ty]>; 2701} 2702 2703//===----------------------------------------------------------------------===// 2704// Half float conversion 2705 2706let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.". 2707 def int_x86_vcvtph2ps_128 : GCCBuiltin<"__builtin_ia32_vcvtph2ps">, 2708 Intrinsic<[llvm_v4f32_ty], [llvm_v8i16_ty], [IntrNoMem]>; 2709 def int_x86_vcvtph2ps_256 : GCCBuiltin<"__builtin_ia32_vcvtph2ps256">, 2710 Intrinsic<[llvm_v8f32_ty], [llvm_v8i16_ty], [IntrNoMem]>; 2711 def int_x86_vcvtps2ph_128 : GCCBuiltin<"__builtin_ia32_vcvtps2ph">, 2712 Intrinsic<[llvm_v8i16_ty], [llvm_v4f32_ty, llvm_i32_ty], 2713 [IntrNoMem]>; 2714 def int_x86_vcvtps2ph_256 : GCCBuiltin<"__builtin_ia32_vcvtps2ph256">, 2715 Intrinsic<[llvm_v8i16_ty], [llvm_v8f32_ty, llvm_i32_ty], 2716 [IntrNoMem]>; 2717 def int_x86_avx512_mask_vcvtph2ps_512 : GCCBuiltin<"__builtin_ia32_vcvtph2ps512_mask">, 2718 Intrinsic<[llvm_v16f32_ty], [llvm_v16i16_ty, llvm_v16f32_ty, 2719 llvm_i16_ty, llvm_i32_ty], [IntrNoMem]>; 2720 def int_x86_avx512_mask_vcvtps2ph_512 : GCCBuiltin<"__builtin_ia32_vcvtps2ph512_mask">, 2721 Intrinsic<[llvm_v16i16_ty], [llvm_v16f32_ty, llvm_i32_ty, 2722 llvm_v16i16_ty, llvm_i16_ty], [IntrNoMem]>; 2723} 2724 2725//===----------------------------------------------------------------------===// 2726// TBM 2727 2728let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.". 2729 def int_x86_tbm_bextri_u32 : GCCBuiltin<"__builtin_ia32_bextri_u32">, 2730 Intrinsic<[llvm_i32_ty], [llvm_i32_ty, llvm_i32_ty], [IntrNoMem]>; 2731 def int_x86_tbm_bextri_u64 : GCCBuiltin<"__builtin_ia32_bextri_u64">, 2732 Intrinsic<[llvm_i64_ty], [llvm_i64_ty, llvm_i64_ty], [IntrNoMem]>; 2733} 2734 2735//===----------------------------------------------------------------------===// 2736// RDRAND intrinsics - Return a random value and whether it is valid. 2737// RDSEED intrinsics - Return a NIST SP800-90B & C compliant random value and 2738// whether it is valid. 2739 2740let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.". 2741 // These are declared side-effecting so they don't get eliminated by CSE or 2742 // LICM. 2743 def int_x86_rdrand_16 : Intrinsic<[llvm_i16_ty, llvm_i32_ty], [], []>; 2744 def int_x86_rdrand_32 : Intrinsic<[llvm_i32_ty, llvm_i32_ty], [], []>; 2745 def int_x86_rdrand_64 : Intrinsic<[llvm_i64_ty, llvm_i32_ty], [], []>; 2746 def int_x86_rdseed_16 : Intrinsic<[llvm_i16_ty, llvm_i32_ty], [], []>; 2747 def int_x86_rdseed_32 : Intrinsic<[llvm_i32_ty, llvm_i32_ty], [], []>; 2748 def int_x86_rdseed_64 : Intrinsic<[llvm_i64_ty, llvm_i32_ty], [], []>; 2749} 2750 2751//===----------------------------------------------------------------------===// 2752// RTM intrinsics. Transactional Memory support. 2753 2754let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.". 2755 def int_x86_xbegin : GCCBuiltin<"__builtin_ia32_xbegin">, 2756 Intrinsic<[llvm_i32_ty], [], []>; 2757 def int_x86_xend : GCCBuiltin<"__builtin_ia32_xend">, 2758 Intrinsic<[], [], []>; 2759 def int_x86_xabort : GCCBuiltin<"__builtin_ia32_xabort">, 2760 Intrinsic<[], [llvm_i8_ty], [IntrNoReturn]>; 2761 def int_x86_xtest : GCCBuiltin<"__builtin_ia32_xtest">, 2762 Intrinsic<[llvm_i32_ty], [], []>; 2763} 2764 2765//===----------------------------------------------------------------------===// 2766// AVX512 2767 2768// Mask ops 2769let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.". 2770 // Mask instructions 2771 // 16-bit mask 2772 def int_x86_avx512_kand_w : GCCBuiltin<"__builtin_ia32_kandhi">, 2773 Intrinsic<[llvm_i16_ty], [llvm_i16_ty, llvm_i16_ty], 2774 [IntrNoMem]>; 2775 def int_x86_avx512_kandn_w : GCCBuiltin<"__builtin_ia32_kandnhi">, 2776 Intrinsic<[llvm_i16_ty], [llvm_i16_ty, llvm_i16_ty], 2777 [IntrNoMem]>; 2778 def int_x86_avx512_knot_w : GCCBuiltin<"__builtin_ia32_knothi">, 2779 Intrinsic<[llvm_i16_ty], [llvm_i16_ty], [IntrNoMem]>; 2780 def int_x86_avx512_kor_w : GCCBuiltin<"__builtin_ia32_korhi">, 2781 Intrinsic<[llvm_i16_ty], [llvm_i16_ty, llvm_i16_ty], 2782 [IntrNoMem]>; 2783 def int_x86_avx512_kxor_w : GCCBuiltin<"__builtin_ia32_kxorhi">, 2784 Intrinsic<[llvm_i16_ty], [llvm_i16_ty, llvm_i16_ty], 2785 [IntrNoMem]>; 2786 def int_x86_avx512_kxnor_w : GCCBuiltin<"__builtin_ia32_kxnorhi">, 2787 Intrinsic<[llvm_i16_ty], [llvm_i16_ty, llvm_i16_ty], 2788 [IntrNoMem]>; 2789 def int_x86_avx512_kunpck_bw : GCCBuiltin<"__builtin_ia32_kunpckhi">, 2790 Intrinsic<[llvm_i16_ty], [llvm_i16_ty, llvm_i16_ty], 2791 [IntrNoMem]>; 2792 def int_x86_avx512_kortestz_w : GCCBuiltin<"__builtin_ia32_kortestzhi">, 2793 Intrinsic<[llvm_i32_ty], [llvm_i16_ty, llvm_i16_ty], 2794 [IntrNoMem]>; 2795 def int_x86_avx512_kortestc_w : GCCBuiltin<"__builtin_ia32_kortestchi">, 2796 Intrinsic<[llvm_i32_ty], [llvm_i16_ty, llvm_i16_ty], 2797 [IntrNoMem]>; 2798} 2799 2800// Conversion ops 2801let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.". 2802 def int_x86_avx512_cvtss2usi : GCCBuiltin<"__builtin_ia32_cvtss2usi">, 2803 Intrinsic<[llvm_i32_ty], [llvm_v4f32_ty], [IntrNoMem]>; 2804 def int_x86_avx512_cvtss2usi64 : GCCBuiltin<"__builtin_ia32_cvtss2usi64">, 2805 Intrinsic<[llvm_i64_ty], [llvm_v4f32_ty], [IntrNoMem]>; 2806 def int_x86_avx512_cvttss2usi : GCCBuiltin<"__builtin_ia32_cvttss2usi">, 2807 Intrinsic<[llvm_i32_ty], [llvm_v4f32_ty], [IntrNoMem]>; 2808 def int_x86_avx512_cvttss2usi64 : GCCBuiltin<"__builtin_ia32_cvttss2usi64">, 2809 Intrinsic<[llvm_i64_ty], [llvm_v4f32_ty], [IntrNoMem]>; 2810 def int_x86_avx512_cvtusi2ss : GCCBuiltin<"__builtin_ia32_cvtusi2ss">, 2811 Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, 2812 llvm_i32_ty], [IntrNoMem]>; 2813 def int_x86_avx512_cvtusi642ss : GCCBuiltin<"__builtin_ia32_cvtusi642ss">, 2814 Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, 2815 llvm_i64_ty], [IntrNoMem]>; 2816 2817 def int_x86_avx512_cvtsd2usi : GCCBuiltin<"__builtin_ia32_cvtsd2usi">, 2818 Intrinsic<[llvm_i32_ty], [llvm_v2f64_ty], [IntrNoMem]>; 2819 def int_x86_avx512_cvtsd2usi64 : GCCBuiltin<"__builtin_ia32_cvtsd2usi64">, 2820 Intrinsic<[llvm_i64_ty], [llvm_v2f64_ty], [IntrNoMem]>; 2821 def int_x86_avx512_cvttsd2usi : GCCBuiltin<"__builtin_ia32_cvttsd2usi">, 2822 Intrinsic<[llvm_i32_ty], [llvm_v2f64_ty], [IntrNoMem]>; 2823 def int_x86_avx512_cvttsd2usi64 : GCCBuiltin<"__builtin_ia32_cvttsd2usi64">, 2824 Intrinsic<[llvm_i64_ty], [llvm_v2f64_ty], [IntrNoMem]>; 2825 def int_x86_avx512_cvtusi2sd : GCCBuiltin<"__builtin_ia32_cvtusi2sd">, 2826 Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, 2827 llvm_i32_ty], [IntrNoMem]>; 2828 def int_x86_avx512_cvtusi642sd : GCCBuiltin<"__builtin_ia32_cvtusi642sd">, 2829 Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, 2830 llvm_i64_ty], [IntrNoMem]>; 2831} 2832 2833// Vector convert 2834let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.". 2835 def int_x86_avx512_mask_cvttps2dq_512: GCCBuiltin<"__builtin_ia32_cvttps2dq512_mask">, 2836 Intrinsic<[llvm_v16i32_ty], [llvm_v16f32_ty, llvm_v16i32_ty, 2837 llvm_i16_ty, llvm_i32_ty], [IntrNoMem]>; 2838 def int_x86_avx512_mask_cvttps2udq_512: GCCBuiltin<"__builtin_ia32_cvttps2udq512_mask">, 2839 Intrinsic<[llvm_v16i32_ty], [llvm_v16f32_ty, llvm_v16i32_ty, 2840 llvm_i16_ty, llvm_i32_ty], [IntrNoMem]>; 2841 def int_x86_avx512_mask_cvttpd2dq_512: GCCBuiltin<"__builtin_ia32_cvttpd2dq512_mask">, 2842 Intrinsic<[llvm_v8i32_ty], [llvm_v8f64_ty, llvm_v8i32_ty, 2843 llvm_i8_ty, llvm_i32_ty], [IntrNoMem]>; 2844 def int_x86_avx512_mask_cvttpd2udq_512: GCCBuiltin<"__builtin_ia32_cvttpd2udq512_mask">, 2845 Intrinsic<[llvm_v8i32_ty], [llvm_v8f64_ty, llvm_v8i32_ty, 2846 llvm_i8_ty, llvm_i32_ty], [IntrNoMem]>; 2847 def int_x86_avx512_mask_rndscale_ps_512: GCCBuiltin<"__builtin_ia32_rndscaleps_mask">, 2848 Intrinsic<[llvm_v16f32_ty], [llvm_v16f32_ty, llvm_i32_ty, llvm_v16f32_ty, 2849 llvm_i16_ty, llvm_i32_ty], [IntrNoMem]>; 2850 def int_x86_avx512_mask_rndscale_pd_512: GCCBuiltin<"__builtin_ia32_rndscalepd_mask">, 2851 Intrinsic<[llvm_v8f64_ty], [llvm_v8f64_ty, llvm_i32_ty, llvm_v8f64_ty, 2852 llvm_i8_ty, llvm_i32_ty], [IntrNoMem]>; 2853 def int_x86_avx512_mask_cvtps2dq_512: GCCBuiltin<"__builtin_ia32_cvtps2dq512_mask">, 2854 Intrinsic<[llvm_v16i32_ty], [llvm_v16f32_ty, llvm_v16i32_ty, 2855 llvm_i16_ty, llvm_i32_ty], [IntrNoMem]>; 2856 def int_x86_avx512_mask_cvtpd2dq_512: GCCBuiltin<"__builtin_ia32_cvtpd2dq512_mask">, 2857 Intrinsic<[llvm_v8i32_ty], [llvm_v8f64_ty, llvm_v8i32_ty, 2858 llvm_i8_ty, llvm_i32_ty], [IntrNoMem]>; 2859 def int_x86_avx512_mask_cvtps2udq_512: GCCBuiltin<"__builtin_ia32_cvtps2udq512_mask">, 2860 Intrinsic<[llvm_v16i32_ty], [llvm_v16f32_ty, llvm_v16i32_ty, 2861 llvm_i16_ty, llvm_i32_ty], [IntrNoMem]>; 2862 def int_x86_avx512_mask_cvtpd2udq_512: GCCBuiltin<"__builtin_ia32_cvtpd2udq512_mask">, 2863 Intrinsic<[llvm_v8i32_ty], [llvm_v8f64_ty, llvm_v8i32_ty, 2864 llvm_i8_ty, llvm_i32_ty], [IntrNoMem]>; 2865 def int_x86_avx512_mask_cvtdq2ps_512 : GCCBuiltin<"__builtin_ia32_cvtdq2ps512_mask">, 2866 Intrinsic<[llvm_v16f32_ty], [llvm_v16i32_ty, llvm_v16f32_ty, 2867 llvm_i16_ty, llvm_i32_ty], [IntrNoMem]>; 2868 def int_x86_avx512_mask_cvtdq2pd_512 : GCCBuiltin<"__builtin_ia32_cvtdq2pd512_mask">, 2869 Intrinsic<[llvm_v8f64_ty], [llvm_v8i32_ty, llvm_v8f64_ty, 2870 llvm_i8_ty], [IntrNoMem]>; 2871 def int_x86_avx512_mask_cvtudq2ps_512 : GCCBuiltin<"__builtin_ia32_cvtudq2ps512_mask">, 2872 Intrinsic<[llvm_v16f32_ty], [llvm_v16i32_ty, llvm_v16f32_ty, 2873 llvm_i16_ty, llvm_i32_ty], [IntrNoMem]>; 2874 def int_x86_avx512_mask_cvtudq2pd_512 : GCCBuiltin<"__builtin_ia32_cvtudq2pd512_mask">, 2875 Intrinsic<[llvm_v8f64_ty], [llvm_v8i32_ty, llvm_v8f64_ty, 2876 llvm_i8_ty], [IntrNoMem]>; 2877 def int_x86_avx512_mask_cvtpd2ps_512 : GCCBuiltin<"__builtin_ia32_cvtpd2ps512_mask">, 2878 Intrinsic<[llvm_v8f32_ty], [llvm_v8f64_ty, llvm_v8f32_ty, 2879 llvm_i8_ty, llvm_i32_ty], [IntrNoMem]>; 2880} 2881 2882// Vector load with broadcast 2883let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.". 2884 def int_x86_avx512_vbroadcast_ss_512 : 2885 GCCBuiltin<"__builtin_ia32_vbroadcastss512">, 2886 Intrinsic<[llvm_v16f32_ty], [llvm_ptr_ty], [IntrReadArgMem]>; 2887 def int_x86_avx512_vbroadcast_ss_ps_512 : 2888 GCCBuiltin<"__builtin_ia32_vbroadcastss_ps512">, 2889 Intrinsic<[llvm_v16f32_ty], [llvm_v4f32_ty], [IntrNoMem]>; 2890 2891 def int_x86_avx512_vbroadcast_sd_512 : 2892 GCCBuiltin<"__builtin_ia32_vbroadcastsd512">, 2893 Intrinsic<[llvm_v8f64_ty], [llvm_ptr_ty], [IntrReadArgMem]>; 2894 def int_x86_avx512_vbroadcast_sd_pd_512 : 2895 GCCBuiltin<"__builtin_ia32_vbroadcastsd_pd512">, 2896 Intrinsic<[llvm_v8f64_ty], [llvm_v2f64_ty], [IntrNoMem]>; 2897 2898 def int_x86_avx512_pbroadcastd_512 : 2899 GCCBuiltin<"__builtin_ia32_pbroadcastd512">, 2900 Intrinsic<[llvm_v16i32_ty], [llvm_v4i32_ty], [IntrNoMem]>; 2901 def int_x86_avx512_pbroadcastd_i32_512 : 2902 Intrinsic<[llvm_v16i32_ty], [llvm_i32_ty], [IntrNoMem]>; 2903 2904 def int_x86_avx512_pbroadcastq_512 : 2905 GCCBuiltin<"__builtin_ia32_pbroadcastq512">, 2906 Intrinsic<[llvm_v8i64_ty], [llvm_v2i64_ty], [IntrNoMem]>; 2907 def int_x86_avx512_pbroadcastq_i64_512 : 2908 Intrinsic<[llvm_v8i64_ty], [llvm_i64_ty], [IntrNoMem]>; 2909} 2910 2911// Vector sign and zero extend 2912let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.". 2913 def int_x86_avx512_pmovzxbq : GCCBuiltin<"__builtin_ia32_pmovzxbq512">, 2914 Intrinsic<[llvm_v8i64_ty], [llvm_v16i8_ty], 2915 [IntrNoMem]>; 2916 def int_x86_avx512_pmovzxwd : GCCBuiltin<"__builtin_ia32_pmovzxwd512">, 2917 Intrinsic<[llvm_v16i32_ty], [llvm_v16i16_ty], 2918 [IntrNoMem]>; 2919 def int_x86_avx512_pmovzxbd : GCCBuiltin<"__builtin_ia32_pmovzxbd512">, 2920 Intrinsic<[llvm_v16i32_ty], [llvm_v16i8_ty], 2921 [IntrNoMem]>; 2922 def int_x86_avx512_pmovzxwq : GCCBuiltin<"__builtin_ia32_pmovzxwq512">, 2923 Intrinsic<[llvm_v8i64_ty], [llvm_v8i16_ty], 2924 [IntrNoMem]>; 2925 def int_x86_avx512_pmovzxdq : GCCBuiltin<"__builtin_ia32_pmovzxdq512">, 2926 Intrinsic<[llvm_v8i64_ty], [llvm_v8i32_ty], 2927 [IntrNoMem]>; 2928} 2929 2930// Arithmetic ops 2931let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.". 2932 def int_x86_avx512_mask_max_ps_512 : GCCBuiltin<"__builtin_ia32_maxps512_mask">, 2933 Intrinsic<[llvm_v16f32_ty], [llvm_v16f32_ty, llvm_v16f32_ty, 2934 llvm_v16f32_ty, llvm_i16_ty, llvm_i32_ty], [IntrNoMem]>; 2935 def int_x86_avx512_mask_max_pd_512 : GCCBuiltin<"__builtin_ia32_maxpd512_mask">, 2936 Intrinsic<[llvm_v8f64_ty], [llvm_v8f64_ty, llvm_v8f64_ty, 2937 llvm_v8f64_ty, llvm_i8_ty, llvm_i32_ty], [IntrNoMem]>; 2938 def int_x86_avx512_mask_min_ps_512 : GCCBuiltin<"__builtin_ia32_minps512_mask">, 2939 Intrinsic<[llvm_v16f32_ty], [llvm_v16f32_ty, llvm_v16f32_ty, 2940 llvm_v16f32_ty, llvm_i16_ty, llvm_i32_ty], [IntrNoMem]>; 2941 def int_x86_avx512_mask_min_pd_512 : GCCBuiltin<"__builtin_ia32_minpd512_mask">, 2942 Intrinsic<[llvm_v8f64_ty], [llvm_v8f64_ty, llvm_v8f64_ty, 2943 llvm_v8f64_ty, llvm_i8_ty, llvm_i32_ty], [IntrNoMem]>; 2944 2945 def int_x86_avx512_rndscale_ss : GCCBuiltin<"__builtin_ia32_rndscaless">, 2946 Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_v4f32_ty, 2947 llvm_i32_ty], [IntrNoMem]>; 2948 def int_x86_avx512_rndscale_sd : GCCBuiltin<"__builtin_ia32_rndscalesd">, 2949 Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, llvm_v2f64_ty, 2950 llvm_i32_ty], [IntrNoMem]>; 2951 def int_x86_avx512_sqrt_ss : GCCBuiltin<"__builtin_ia32_sqrtrndss">, 2952 Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_v4f32_ty], 2953 [IntrNoMem]>; 2954 def int_x86_avx512_sqrt_sd : GCCBuiltin<"__builtin_ia32_sqrtrndsd">, 2955 Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, llvm_v2f64_ty], 2956 [IntrNoMem]>; 2957 2958 def int_x86_avx512_sqrt_pd_512 : GCCBuiltin<"__builtin_ia32_sqrtpd512">, 2959 Intrinsic<[llvm_v8f64_ty], [llvm_v8f64_ty], [IntrNoMem]>; 2960 def int_x86_avx512_sqrt_ps_512 : GCCBuiltin<"__builtin_ia32_sqrtps512">, 2961 Intrinsic<[llvm_v16f32_ty], [llvm_v16f32_ty], [IntrNoMem]>; 2962 2963 def int_x86_avx512_rsqrt14_ss : GCCBuiltin<"__builtin_ia32_rsqrt14ss_mask">, 2964 Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_v4f32_ty, llvm_v4f32_ty, 2965 llvm_i8_ty], [IntrNoMem]>; 2966 def int_x86_avx512_rsqrt14_sd : GCCBuiltin<"__builtin_ia32_rsqrt14sd_mask">, 2967 Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, llvm_v2f64_ty, llvm_v2f64_ty, 2968 llvm_i8_ty], [IntrNoMem]>; 2969 2970 def int_x86_avx512_rsqrt14_pd_512 : GCCBuiltin<"__builtin_ia32_rsqrt14pd512_mask">, 2971 Intrinsic<[llvm_v8f64_ty], [llvm_v8f64_ty, llvm_v8f64_ty, 2972 llvm_i8_ty], [IntrNoMem]>; 2973 def int_x86_avx512_rsqrt14_ps_512 : GCCBuiltin<"__builtin_ia32_rsqrt14ps512_mask">, 2974 Intrinsic<[llvm_v16f32_ty], [llvm_v16f32_ty, llvm_v16f32_ty, 2975 llvm_i16_ty], [IntrNoMem]>; 2976 def int_x86_avx512_rcp14_ss : GCCBuiltin<"__builtin_ia32_rcp14ss_mask">, 2977 Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_v4f32_ty, llvm_v4f32_ty, 2978 llvm_i8_ty], [IntrNoMem]>; 2979 def int_x86_avx512_rcp14_sd : GCCBuiltin<"__builtin_ia32_rcp14sd_mask">, 2980 Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, llvm_v2f64_ty, llvm_v2f64_ty, 2981 llvm_i8_ty], [IntrNoMem]>; 2982 2983 def int_x86_avx512_rcp14_pd_512 : GCCBuiltin<"__builtin_ia32_rcp14pd512_mask">, 2984 Intrinsic<[llvm_v8f64_ty], [llvm_v8f64_ty, llvm_v8f64_ty, 2985 llvm_i8_ty], [IntrNoMem]>; 2986 def int_x86_avx512_rcp14_ps_512 : GCCBuiltin<"__builtin_ia32_rcp14ps512_mask">, 2987 Intrinsic<[llvm_v16f32_ty], [llvm_v16f32_ty, llvm_v16f32_ty, 2988 llvm_i16_ty], [IntrNoMem]>; 2989 2990 def int_x86_avx512_rcp28_ps : GCCBuiltin<"__builtin_ia32_rcp28ps_mask">, 2991 Intrinsic<[llvm_v16f32_ty], [llvm_v16f32_ty, llvm_v16f32_ty, 2992 llvm_i16_ty, llvm_i32_ty], [IntrNoMem]>; 2993 def int_x86_avx512_rcp28_pd : GCCBuiltin<"__builtin_ia32_rcp28pd_mask">, 2994 Intrinsic<[llvm_v8f64_ty], [llvm_v8f64_ty, llvm_v8f64_ty, 2995 llvm_i8_ty, llvm_i32_ty], [IntrNoMem]>; 2996 def int_x86_avx512_rcp28_ss : GCCBuiltin<"__builtin_ia32_rcp28ss_mask">, 2997 Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_v4f32_ty, 2998 llvm_v4f32_ty, llvm_i8_ty, llvm_i32_ty], 2999 [IntrNoMem]>; 3000 def int_x86_avx512_rcp28_sd : GCCBuiltin<"__builtin_ia32_rcp28sd_mask">, 3001 Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, llvm_v2f64_ty, 3002 llvm_v2f64_ty, llvm_i8_ty, llvm_i32_ty], 3003 [IntrNoMem]>; 3004 def int_x86_avx512_rsqrt28_ps : GCCBuiltin<"__builtin_ia32_rsqrt28ps_mask">, 3005 Intrinsic<[llvm_v16f32_ty], [llvm_v16f32_ty, llvm_v16f32_ty, 3006 llvm_i16_ty, llvm_i32_ty], 3007 [IntrNoMem]>; 3008 def int_x86_avx512_rsqrt28_pd : GCCBuiltin<"__builtin_ia32_rsqrt28pd_mask">, 3009 Intrinsic<[llvm_v8f64_ty], [llvm_v8f64_ty, llvm_v8f64_ty, 3010 llvm_i8_ty, llvm_i32_ty], 3011 [IntrNoMem]>; 3012 def int_x86_avx512_rsqrt28_ss : GCCBuiltin<"__builtin_ia32_rsqrt28ss_mask">, 3013 Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_v4f32_ty, 3014 llvm_v4f32_ty, llvm_i8_ty, llvm_i32_ty], 3015 [IntrNoMem]>; 3016 def int_x86_avx512_rsqrt28_sd : GCCBuiltin<"__builtin_ia32_rsqrt28sd_mask">, 3017 Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, llvm_v2f64_ty, 3018 llvm_v2f64_ty, llvm_i8_ty, llvm_i32_ty], 3019 [IntrNoMem]>; 3020} 3021 3022// Integer shift ops. 3023let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.". 3024 def int_x86_avx512_psll_dq : GCCBuiltin<"__builtin_ia32_pslldqi512">, 3025 Intrinsic<[llvm_v8i64_ty], [llvm_v8i64_ty, 3026 llvm_i32_ty], [IntrNoMem]>; 3027 def int_x86_avx512_psrl_dq : GCCBuiltin<"__builtin_ia32_psrldqi512">, 3028 Intrinsic<[llvm_v8i64_ty], [llvm_v8i64_ty, 3029 llvm_i32_ty], [IntrNoMem]>; 3030 def int_x86_avx512_psll_dq_bs : GCCBuiltin<"__builtin_ia32_pslldqi512_byteshift">, 3031 Intrinsic<[llvm_v8i64_ty], [llvm_v8i64_ty, 3032 llvm_i32_ty], [IntrNoMem]>; 3033 def int_x86_avx512_psrl_dq_bs : GCCBuiltin<"__builtin_ia32_psrldqi512_byteshift">, 3034 Intrinsic<[llvm_v8i64_ty], [llvm_v8i64_ty, 3035 llvm_i32_ty], [IntrNoMem]>; 3036} 3037 3038// Gather and Scatter ops 3039let TargetPrefix = "x86" in { 3040 def int_x86_avx512_gather_dpd_512 : GCCBuiltin<"__builtin_ia32_gathersiv8df">, 3041 Intrinsic<[llvm_v8f64_ty], [llvm_v8f64_ty, llvm_ptr_ty, 3042 llvm_v8i32_ty, llvm_i8_ty, llvm_i32_ty], 3043 [IntrReadArgMem]>; 3044 def int_x86_avx512_gather_dps_512 : GCCBuiltin<"__builtin_ia32_gathersiv16sf">, 3045 Intrinsic<[llvm_v16f32_ty], [llvm_v16f32_ty, llvm_ptr_ty, 3046 llvm_v16i32_ty, llvm_i16_ty, llvm_i32_ty], 3047 [IntrReadArgMem]>; 3048 def int_x86_avx512_gather_qpd_512 : GCCBuiltin<"__builtin_ia32_gatherdiv8df">, 3049 Intrinsic<[llvm_v8f64_ty], [llvm_v8f64_ty, llvm_ptr_ty, 3050 llvm_v8i64_ty, llvm_i8_ty, llvm_i32_ty], 3051 [IntrReadArgMem]>; 3052 def int_x86_avx512_gather_qps_512 : GCCBuiltin<"__builtin_ia32_gatherdiv16sf">, 3053 Intrinsic<[llvm_v8f32_ty], [llvm_v8f32_ty, llvm_ptr_ty, 3054 llvm_v8i64_ty, llvm_i8_ty, llvm_i32_ty], 3055 [IntrReadArgMem]>; 3056 3057 3058 def int_x86_avx512_gather_dpq_512 : GCCBuiltin<"__builtin_ia32_gathersiv8di">, 3059 Intrinsic<[llvm_v8i64_ty], [llvm_v8i64_ty, llvm_ptr_ty, 3060 llvm_v8i32_ty, llvm_i8_ty, llvm_i32_ty], 3061 [IntrReadArgMem]>; 3062 def int_x86_avx512_gather_dpi_512 : GCCBuiltin<"__builtin_ia32_gathersiv16si">, 3063 Intrinsic<[llvm_v16i32_ty], [llvm_v16i32_ty, llvm_ptr_ty, 3064 llvm_v16i32_ty, llvm_i16_ty, llvm_i32_ty], 3065 [IntrReadArgMem]>; 3066 def int_x86_avx512_gather_qpq_512 : GCCBuiltin<"__builtin_ia32_gatherdiv8di">, 3067 Intrinsic<[llvm_v8i64_ty], [llvm_v8i64_ty, llvm_ptr_ty, 3068 llvm_v8i64_ty, llvm_i8_ty, llvm_i32_ty], 3069 [IntrReadArgMem]>; 3070 def int_x86_avx512_gather_qpi_512 : GCCBuiltin<"__builtin_ia32_gatherdiv16si">, 3071 Intrinsic<[llvm_v8i32_ty], [llvm_v8i32_ty, llvm_ptr_ty, 3072 llvm_v8i64_ty, llvm_i8_ty, llvm_i32_ty], 3073 [IntrReadArgMem]>; 3074 3075// scatter 3076 def int_x86_avx512_scatter_dpd_512 : GCCBuiltin<"__builtin_ia32_scattersiv8df">, 3077 Intrinsic<[], [llvm_ptr_ty, llvm_i8_ty, 3078 llvm_v8i32_ty, llvm_v8f64_ty, llvm_i32_ty], 3079 [IntrReadWriteArgMem]>; 3080 def int_x86_avx512_scatter_dps_512 : GCCBuiltin<"__builtin_ia32_scattersiv16sf">, 3081 Intrinsic<[], [llvm_ptr_ty, llvm_i16_ty, 3082 llvm_v16i32_ty, llvm_v16f32_ty, llvm_i32_ty], 3083 [IntrReadWriteArgMem]>; 3084 def int_x86_avx512_scatter_qpd_512 : GCCBuiltin<"__builtin_ia32_scatterdiv8df">, 3085 Intrinsic<[], [llvm_ptr_ty, llvm_i8_ty, 3086 llvm_v8i64_ty, llvm_v8f64_ty, llvm_i32_ty], 3087 [IntrReadWriteArgMem]>; 3088 def int_x86_avx512_scatter_qps_512 : GCCBuiltin<"__builtin_ia32_scatterdiv16sf">, 3089 Intrinsic<[], [llvm_ptr_ty, llvm_i8_ty, 3090 llvm_v8i64_ty, llvm_v8f32_ty, llvm_i32_ty], 3091 [IntrReadWriteArgMem]>; 3092 3093 3094 def int_x86_avx512_scatter_dpq_512 : GCCBuiltin<"__builtin_ia32_scattersiv8di">, 3095 Intrinsic<[], [llvm_ptr_ty, llvm_i8_ty, 3096 llvm_v8i32_ty, llvm_v8i64_ty, llvm_i32_ty], 3097 [IntrReadWriteArgMem]>; 3098 def int_x86_avx512_scatter_dpi_512 : GCCBuiltin<"__builtin_ia32_scattersiv16si">, 3099 Intrinsic<[], [llvm_ptr_ty, llvm_i16_ty, 3100 llvm_v16i32_ty, llvm_v16i32_ty, llvm_i32_ty], 3101 [IntrReadWriteArgMem]>; 3102 def int_x86_avx512_scatter_qpq_512 : GCCBuiltin<"__builtin_ia32_scatterdiv8di">, 3103 Intrinsic<[], [llvm_ptr_ty, llvm_i8_ty,llvm_v8i64_ty, llvm_v8i64_ty, 3104 llvm_i32_ty], 3105 [IntrReadWriteArgMem]>; 3106 def int_x86_avx512_scatter_qpi_512 : GCCBuiltin<"__builtin_ia32_scatterdiv16si">, 3107 Intrinsic<[], [llvm_ptr_ty, llvm_i8_ty, llvm_v8i64_ty, llvm_v8i32_ty, 3108 llvm_i32_ty], 3109 [IntrReadWriteArgMem]>; 3110 3111 // gather prefetch 3112 def int_x86_avx512_gatherpf_dpd_512 : GCCBuiltin<"__builtin_ia32_gatherpfdpd">, 3113 Intrinsic<[], [llvm_i8_ty, llvm_v8i32_ty, llvm_ptr_ty, 3114 llvm_i32_ty, llvm_i32_ty], [IntrReadWriteArgMem]>; 3115 def int_x86_avx512_gatherpf_dps_512 : GCCBuiltin<"__builtin_ia32_gatherpfdps">, 3116 Intrinsic<[], [llvm_i16_ty, llvm_v16i32_ty, llvm_ptr_ty, 3117 llvm_i32_ty, llvm_i32_ty], [IntrReadWriteArgMem]>; 3118 def int_x86_avx512_gatherpf_qpd_512 : GCCBuiltin<"__builtin_ia32_gatherpfqpd">, 3119 Intrinsic<[], [llvm_i8_ty, llvm_v8i64_ty, llvm_ptr_ty, 3120 llvm_i32_ty, llvm_i32_ty], [IntrReadWriteArgMem]>; 3121 def int_x86_avx512_gatherpf_qps_512 : GCCBuiltin<"__builtin_ia32_gatherpfqps">, 3122 Intrinsic<[], [llvm_i8_ty, llvm_v8i64_ty, llvm_ptr_ty, 3123 llvm_i32_ty, llvm_i32_ty], [IntrReadWriteArgMem]>; 3124 3125 // scatter prefetch 3126 def int_x86_avx512_scatterpf_dpd_512 : GCCBuiltin<"__builtin_ia32_scatterpfdpd">, 3127 Intrinsic<[], [llvm_i8_ty, llvm_v8i32_ty, llvm_ptr_ty, 3128 llvm_i32_ty, llvm_i32_ty], [IntrReadWriteArgMem]>; 3129 def int_x86_avx512_scatterpf_dps_512 : GCCBuiltin<"__builtin_ia32_scatterpfdps">, 3130 Intrinsic<[], [llvm_i16_ty, llvm_v16i32_ty, llvm_ptr_ty, 3131 llvm_i32_ty, llvm_i32_ty], [IntrReadWriteArgMem]>; 3132 def int_x86_avx512_scatterpf_qpd_512 : GCCBuiltin<"__builtin_ia32_scatterpfqpd">, 3133 Intrinsic<[], [llvm_i8_ty, llvm_v8i64_ty, llvm_ptr_ty, 3134 llvm_i32_ty, llvm_i32_ty], [IntrReadWriteArgMem]>; 3135 def int_x86_avx512_scatterpf_qps_512 : GCCBuiltin<"__builtin_ia32_scatterpfqps">, 3136 Intrinsic<[], [llvm_i8_ty, llvm_v8i64_ty, llvm_ptr_ty, 3137 llvm_i32_ty, llvm_i32_ty], [IntrReadWriteArgMem]>; 3138} 3139 3140// AVX-512 conflict detection 3141let TargetPrefix = "x86" in { 3142 def int_x86_avx512_mask_conflict_d_512 : 3143 GCCBuiltin<"__builtin_ia32_vpconflictsi_512_mask">, 3144 Intrinsic<[llvm_v16i32_ty], [llvm_v16i32_ty, 3145 llvm_v16i32_ty, llvm_i16_ty], 3146 []>; 3147 def int_x86_avx512_mask_conflict_q_512 : 3148 GCCBuiltin<"__builtin_ia32_vpconflictdi_512_mask">, 3149 Intrinsic<[llvm_v8i64_ty], [llvm_v8i64_ty, 3150 llvm_v8i64_ty, llvm_i8_ty], 3151 []>; 3152 def int_x86_avx512_mask_lzcnt_d_512 : 3153 GCCBuiltin<"__builtin_ia32_vplzcntd_512_mask">, 3154 Intrinsic<[llvm_v16i32_ty], [llvm_v16i32_ty, 3155 llvm_v16i32_ty, llvm_i16_ty], 3156 []>; 3157 def int_x86_avx512_mask_lzcnt_q_512 : 3158 GCCBuiltin<"__builtin_ia32_vplzcntq_512_mask">, 3159 Intrinsic<[llvm_v8i64_ty], [llvm_v8i64_ty, 3160 llvm_v8i64_ty, llvm_i8_ty], 3161 []>; 3162} 3163 3164// Vector blend 3165let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.". 3166 def int_x86_avx512_mask_blend_ps_512 : GCCBuiltin<"__builtin_ia32_blendmps_512_mask">, 3167 Intrinsic<[llvm_v16f32_ty], 3168 [llvm_v16f32_ty, llvm_v16f32_ty, llvm_i16_ty], 3169 [IntrNoMem]>; 3170 def int_x86_avx512_mask_blend_pd_512 : GCCBuiltin<"__builtin_ia32_blendmpd_512_mask">, 3171 Intrinsic<[llvm_v8f64_ty], 3172 [llvm_v8f64_ty, llvm_v8f64_ty, llvm_i8_ty], 3173 [IntrNoMem]>; 3174 3175 def int_x86_avx512_mask_blend_d_512 : GCCBuiltin<"__builtin_ia32_blendmd_512_mask">, 3176 Intrinsic<[llvm_v16i32_ty], 3177 [llvm_v16i32_ty, llvm_v16i32_ty, llvm_i16_ty], 3178 [IntrNoMem]>; 3179 def int_x86_avx512_mask_blend_q_512 : GCCBuiltin<"__builtin_ia32_blendmq_512_mask">, 3180 Intrinsic<[llvm_v8i64_ty], 3181 [llvm_v8i64_ty, llvm_v8i64_ty, llvm_i8_ty], 3182 [IntrNoMem]>; 3183} 3184 3185// Misc. 3186let TargetPrefix = "x86" in { 3187 def int_x86_avx512_mask_cmp_ps_512 : GCCBuiltin<"__builtin_ia32_cmpps512_mask">, 3188 Intrinsic<[llvm_i16_ty], [llvm_v16f32_ty, llvm_v16f32_ty, llvm_i32_ty, 3189 llvm_i16_ty, llvm_i32_ty], [IntrNoMem]>; 3190 def int_x86_avx512_mask_cmp_pd_512 : GCCBuiltin<"__builtin_ia32_cmppd512_mask">, 3191 Intrinsic<[llvm_i8_ty], [llvm_v8f64_ty, llvm_v8f64_ty, llvm_i32_ty, 3192 llvm_i8_ty, llvm_i32_ty], [IntrNoMem]>; 3193 3194 def int_x86_avx512_mask_pcmpeq_d_512 : GCCBuiltin<"__builtin_ia32_pcmpeqd512_mask">, 3195 Intrinsic<[llvm_i16_ty], [llvm_v16i32_ty, llvm_v16i32_ty, llvm_i16_ty], 3196 [IntrNoMem]>; 3197 def int_x86_avx512_mask_pcmpeq_q_512 : GCCBuiltin<"__builtin_ia32_pcmpeqq512_mask">, 3198 Intrinsic<[llvm_i8_ty], [llvm_v8i64_ty, llvm_v8i64_ty, llvm_i8_ty], 3199 [IntrNoMem]>; 3200 def int_x86_avx512_mask_pand_d_512 : GCCBuiltin<"__builtin_ia32_pandd512_mask">, 3201 Intrinsic<[llvm_v16i32_ty], [llvm_v16i32_ty, llvm_v16i32_ty, 3202 llvm_v16i32_ty, llvm_i16_ty], 3203 [IntrNoMem]>; 3204 def int_x86_avx512_mask_pand_q_512 : GCCBuiltin<"__builtin_ia32_pandq512_mask">, 3205 Intrinsic<[llvm_v8i64_ty], [llvm_v8i64_ty, llvm_v8i64_ty, 3206 llvm_v8i64_ty, llvm_i8_ty], 3207 [IntrNoMem]>; 3208} 3209 3210//===----------------------------------------------------------------------===// 3211// SHA intrinsics 3212let TargetPrefix = "x86" in { 3213 def int_x86_sha1rnds4 : GCCBuiltin<"__builtin_ia32_sha1rnds4">, 3214 Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty, llvm_i8_ty], 3215 [IntrNoMem]>; 3216 def int_x86_sha1nexte : GCCBuiltin<"__builtin_ia32_sha1nexte">, 3217 Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty], [IntrNoMem]>; 3218 def int_x86_sha1msg1 : GCCBuiltin<"__builtin_ia32_sha1msg1">, 3219 Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty], [IntrNoMem]>; 3220 def int_x86_sha1msg2 : GCCBuiltin<"__builtin_ia32_sha1msg2">, 3221 Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty], [IntrNoMem]>; 3222 def int_x86_sha256rnds2 : GCCBuiltin<"__builtin_ia32_sha256rnds2">, 3223 Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty, llvm_v4i32_ty], 3224 [IntrNoMem]>; 3225 def int_x86_sha256msg1 : GCCBuiltin<"__builtin_ia32_sha256msg1">, 3226 Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty], [IntrNoMem]>; 3227 def int_x86_sha256msg2 : GCCBuiltin<"__builtin_ia32_sha256msg2">, 3228 Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty], [IntrNoMem]>; 3229} 3230