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