IntrinsicsNVVM.td revision 263508
1//===- IntrinsicsNVVM.td - Defines NVVM 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 NVVM-specific intrinsics for use with NVPTX. 11// 12//===----------------------------------------------------------------------===// 13 14def llvm_anyi64ptr_ty : LLVMAnyPointerType<llvm_i64_ty>; // (space)i64* 15 16// 17// MISC 18// 19 20 def int_nvvm_clz_i : GCCBuiltin<"__nvvm_clz_i">, 21 Intrinsic<[llvm_i32_ty], [llvm_i32_ty], [IntrNoMem]>; 22 def int_nvvm_clz_ll : GCCBuiltin<"__nvvm_clz_ll">, 23 Intrinsic<[llvm_i32_ty], [llvm_i64_ty], [IntrNoMem]>; 24 25 def int_nvvm_popc_i : GCCBuiltin<"__nvvm_popc_i">, 26 Intrinsic<[llvm_i32_ty], [llvm_i32_ty], [IntrNoMem]>; 27 def int_nvvm_popc_ll : GCCBuiltin<"__nvvm_popc_ll">, 28 Intrinsic<[llvm_i32_ty], [llvm_i64_ty], [IntrNoMem]>; 29 30 def int_nvvm_prmt : GCCBuiltin<"__nvvm_prmt">, 31 Intrinsic<[llvm_i32_ty], [llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], 32 [IntrNoMem, Commutative]>; 33 34// 35// Min Max 36// 37 38 def int_nvvm_min_i : GCCBuiltin<"__nvvm_min_i">, 39 Intrinsic<[llvm_i32_ty], [llvm_i32_ty, llvm_i32_ty], 40 [IntrNoMem, Commutative]>; 41 def int_nvvm_min_ui : GCCBuiltin<"__nvvm_min_ui">, 42 Intrinsic<[llvm_i32_ty], [llvm_i32_ty, llvm_i32_ty], 43 [IntrNoMem, Commutative]>; 44 45 def int_nvvm_min_ll : GCCBuiltin<"__nvvm_min_ll">, 46 Intrinsic<[llvm_i64_ty], [llvm_i64_ty, llvm_i64_ty], 47 [IntrNoMem, Commutative]>; 48 def int_nvvm_min_ull : GCCBuiltin<"__nvvm_min_ull">, 49 Intrinsic<[llvm_i64_ty], [llvm_i64_ty, llvm_i64_ty], 50 [IntrNoMem, Commutative]>; 51 52 def int_nvvm_max_i : GCCBuiltin<"__nvvm_max_i">, 53 Intrinsic<[llvm_i32_ty], [llvm_i32_ty, llvm_i32_ty], 54 [IntrNoMem, Commutative]>; 55 def int_nvvm_max_ui : GCCBuiltin<"__nvvm_max_ui">, 56 Intrinsic<[llvm_i32_ty], [llvm_i32_ty, llvm_i32_ty], 57 [IntrNoMem, Commutative]>; 58 59 def int_nvvm_max_ll : GCCBuiltin<"__nvvm_max_ll">, 60 Intrinsic<[llvm_i64_ty], [llvm_i64_ty, llvm_i64_ty], 61 [IntrNoMem, Commutative]>; 62 def int_nvvm_max_ull : GCCBuiltin<"__nvvm_max_ull">, 63 Intrinsic<[llvm_i64_ty], [llvm_i64_ty, llvm_i64_ty], 64 [IntrNoMem, Commutative]>; 65 66 def int_nvvm_fmin_f : GCCBuiltin<"__nvvm_fmin_f">, 67 Intrinsic<[llvm_float_ty], [llvm_float_ty, llvm_float_ty], 68 [IntrNoMem, Commutative]>; 69 def int_nvvm_fmin_ftz_f : GCCBuiltin<"__nvvm_fmin_ftz_f">, 70 Intrinsic<[llvm_float_ty], [llvm_float_ty, llvm_float_ty], 71 [IntrNoMem, Commutative]>; 72 73 def int_nvvm_fmax_f : GCCBuiltin<"__nvvm_fmax_f">, 74 Intrinsic<[llvm_float_ty], [llvm_float_ty, llvm_float_ty] 75 , [IntrNoMem, Commutative]>; 76 def int_nvvm_fmax_ftz_f : GCCBuiltin<"__nvvm_fmax_ftz_f">, 77 Intrinsic<[llvm_float_ty], [llvm_float_ty, llvm_float_ty], 78 [IntrNoMem, Commutative]>; 79 80 def int_nvvm_fmin_d : GCCBuiltin<"__nvvm_fmin_d">, 81 Intrinsic<[llvm_double_ty], [llvm_double_ty, llvm_double_ty], 82 [IntrNoMem, Commutative]>; 83 def int_nvvm_fmax_d : GCCBuiltin<"__nvvm_fmax_d">, 84 Intrinsic<[llvm_double_ty], [llvm_double_ty, llvm_double_ty], 85 [IntrNoMem, Commutative]>; 86 87// 88// Multiplication 89// 90 91 def int_nvvm_mulhi_i : GCCBuiltin<"__nvvm_mulhi_i">, 92 Intrinsic<[llvm_i32_ty], [llvm_i32_ty, llvm_i32_ty], 93 [IntrNoMem, Commutative]>; 94 def int_nvvm_mulhi_ui : GCCBuiltin<"__nvvm_mulhi_ui">, 95 Intrinsic<[llvm_i32_ty], [llvm_i32_ty, llvm_i32_ty], 96 [IntrNoMem, Commutative]>; 97 98 def int_nvvm_mulhi_ll : GCCBuiltin<"__nvvm_mulhi_ll">, 99 Intrinsic<[llvm_i64_ty], [llvm_i64_ty, llvm_i64_ty], 100 [IntrNoMem, Commutative]>; 101 def int_nvvm_mulhi_ull : GCCBuiltin<"__nvvm_mulhi_ull">, 102 Intrinsic<[llvm_i64_ty], [llvm_i64_ty, llvm_i64_ty], 103 [IntrNoMem, Commutative]>; 104 105 def int_nvvm_mul_rn_ftz_f : GCCBuiltin<"__nvvm_mul_rn_ftz_f">, 106 Intrinsic<[llvm_float_ty], [llvm_float_ty, llvm_float_ty], 107 [IntrNoMem, Commutative]>; 108 def int_nvvm_mul_rn_f : GCCBuiltin<"__nvvm_mul_rn_f">, 109 Intrinsic<[llvm_float_ty], [llvm_float_ty, llvm_float_ty], 110 [IntrNoMem, Commutative]>; 111 def int_nvvm_mul_rz_ftz_f : GCCBuiltin<"__nvvm_mul_rz_ftz_f">, 112 Intrinsic<[llvm_float_ty], [llvm_float_ty, llvm_float_ty], 113 [IntrNoMem, Commutative]>; 114 def int_nvvm_mul_rz_f : GCCBuiltin<"__nvvm_mul_rz_f">, 115 Intrinsic<[llvm_float_ty], [llvm_float_ty, llvm_float_ty], 116 [IntrNoMem, Commutative]>; 117 def int_nvvm_mul_rm_ftz_f : GCCBuiltin<"__nvvm_mul_rm_ftz_f">, 118 Intrinsic<[llvm_float_ty], [llvm_float_ty, llvm_float_ty], 119 [IntrNoMem, Commutative]>; 120 def int_nvvm_mul_rm_f : GCCBuiltin<"__nvvm_mul_rm_f">, 121 Intrinsic<[llvm_float_ty], [llvm_float_ty, llvm_float_ty], 122 [IntrNoMem, Commutative]>; 123 def int_nvvm_mul_rp_ftz_f : GCCBuiltin<"__nvvm_mul_rp_ftz_f">, 124 Intrinsic<[llvm_float_ty], [llvm_float_ty, llvm_float_ty], 125 [IntrNoMem, Commutative]>; 126 def int_nvvm_mul_rp_f : GCCBuiltin<"__nvvm_mul_rp_f">, 127 Intrinsic<[llvm_float_ty], [llvm_float_ty, llvm_float_ty], 128 [IntrNoMem, Commutative]>; 129 130 def int_nvvm_mul_rn_d : GCCBuiltin<"__nvvm_mul_rn_d">, 131 Intrinsic<[llvm_double_ty], [llvm_double_ty, llvm_double_ty], 132 [IntrNoMem, Commutative]>; 133 def int_nvvm_mul_rz_d : GCCBuiltin<"__nvvm_mul_rz_d">, 134 Intrinsic<[llvm_double_ty], [llvm_double_ty, llvm_double_ty], 135 [IntrNoMem, Commutative]>; 136 def int_nvvm_mul_rm_d : GCCBuiltin<"__nvvm_mul_rm_d">, 137 Intrinsic<[llvm_double_ty], [llvm_double_ty, llvm_double_ty], 138 [IntrNoMem, Commutative]>; 139 def int_nvvm_mul_rp_d : GCCBuiltin<"__nvvm_mul_rp_d">, 140 Intrinsic<[llvm_double_ty], [llvm_double_ty, llvm_double_ty], 141 [IntrNoMem, Commutative]>; 142 143 def int_nvvm_mul24_i : GCCBuiltin<"__nvvm_mul24_i">, 144 Intrinsic<[llvm_i32_ty], [llvm_i32_ty, llvm_i32_ty], 145 [IntrNoMem, Commutative]>; 146 def int_nvvm_mul24_ui : GCCBuiltin<"__nvvm_mul24_ui">, 147 Intrinsic<[llvm_i32_ty], [llvm_i32_ty, llvm_i32_ty], 148 [IntrNoMem, Commutative]>; 149 150// 151// Div 152// 153 154 def int_nvvm_div_approx_ftz_f : GCCBuiltin<"__nvvm_div_approx_ftz_f">, 155 Intrinsic<[llvm_float_ty], [llvm_float_ty, llvm_float_ty], 156 [IntrNoMem, Commutative]>; 157 def int_nvvm_div_approx_f : GCCBuiltin<"__nvvm_div_approx_f">, 158 Intrinsic<[llvm_float_ty], [llvm_float_ty, llvm_float_ty], 159 [IntrNoMem, Commutative]>; 160 161 def int_nvvm_div_rn_ftz_f : GCCBuiltin<"__nvvm_div_rn_ftz_f">, 162 Intrinsic<[llvm_float_ty], [llvm_float_ty, llvm_float_ty], 163 [IntrNoMem, Commutative]>; 164 def int_nvvm_div_rn_f : GCCBuiltin<"__nvvm_div_rn_f">, 165 Intrinsic<[llvm_float_ty], [llvm_float_ty, llvm_float_ty], 166 [IntrNoMem, Commutative]>; 167 168 def int_nvvm_div_rz_ftz_f : GCCBuiltin<"__nvvm_div_rz_ftz_f">, 169 Intrinsic<[llvm_float_ty], [llvm_float_ty, llvm_float_ty], 170 [IntrNoMem, Commutative]>; 171 def int_nvvm_div_rz_f : GCCBuiltin<"__nvvm_div_rz_f">, 172 Intrinsic<[llvm_float_ty], [llvm_float_ty, llvm_float_ty], 173 [IntrNoMem, Commutative]>; 174 175 def int_nvvm_div_rm_ftz_f : GCCBuiltin<"__nvvm_div_rm_ftz_f">, 176 Intrinsic<[llvm_float_ty], [llvm_float_ty, llvm_float_ty], 177 [IntrNoMem, Commutative]>; 178 def int_nvvm_div_rm_f : GCCBuiltin<"__nvvm_div_rm_f">, 179 Intrinsic<[llvm_float_ty], [llvm_float_ty, llvm_float_ty], 180 [IntrNoMem, Commutative]>; 181 182 def int_nvvm_div_rp_ftz_f : GCCBuiltin<"__nvvm_div_rp_ftz_f">, 183 Intrinsic<[llvm_float_ty], [llvm_float_ty, llvm_float_ty], 184 [IntrNoMem, Commutative]>; 185 def int_nvvm_div_rp_f : GCCBuiltin<"__nvvm_div_rp_f">, 186 Intrinsic<[llvm_float_ty], [llvm_float_ty, llvm_float_ty], 187 [IntrNoMem, Commutative]>; 188 189 def int_nvvm_div_rn_d : GCCBuiltin<"__nvvm_div_rn_d">, 190 Intrinsic<[llvm_double_ty], [llvm_double_ty, llvm_double_ty], 191 [IntrNoMem, Commutative]>; 192 def int_nvvm_div_rz_d : GCCBuiltin<"__nvvm_div_rz_d">, 193 Intrinsic<[llvm_double_ty], [llvm_double_ty, llvm_double_ty], 194 [IntrNoMem, Commutative]>; 195 def int_nvvm_div_rm_d : GCCBuiltin<"__nvvm_div_rm_d">, 196 Intrinsic<[llvm_double_ty], [llvm_double_ty, llvm_double_ty], 197 [IntrNoMem, Commutative]>; 198 def int_nvvm_div_rp_d : GCCBuiltin<"__nvvm_div_rp_d">, 199 Intrinsic<[llvm_double_ty], [llvm_double_ty, llvm_double_ty], 200 [IntrNoMem, Commutative]>; 201 202// 203// Brev 204// 205 206 def int_nvvm_brev32 : GCCBuiltin<"__nvvm_brev32">, 207 Intrinsic<[llvm_i32_ty], [llvm_i32_ty], [IntrNoMem]>; 208 def int_nvvm_brev64 : GCCBuiltin<"__nvvm_brev64">, 209 Intrinsic<[llvm_i64_ty], [llvm_i64_ty], [IntrNoMem]>; 210 211// 212// Sad 213// 214 215 def int_nvvm_sad_i : GCCBuiltin<"__nvvm_sad_i">, 216 Intrinsic<[llvm_i32_ty], [llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], 217 [IntrNoMem, Commutative]>; 218 def int_nvvm_sad_ui : GCCBuiltin<"__nvvm_sad_ui">, 219 Intrinsic<[llvm_i32_ty], [llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], 220 [IntrNoMem, Commutative]>; 221 222// 223// Floor Ceil 224// 225 226 def int_nvvm_floor_ftz_f : GCCBuiltin<"__nvvm_floor_ftz_f">, 227 Intrinsic<[llvm_float_ty], [llvm_float_ty], [IntrNoMem]>; 228 def int_nvvm_floor_f : GCCBuiltin<"__nvvm_floor_f">, 229 Intrinsic<[llvm_float_ty], [llvm_float_ty], [IntrNoMem]>; 230 def int_nvvm_floor_d : GCCBuiltin<"__nvvm_floor_d">, 231 Intrinsic<[llvm_double_ty], [llvm_double_ty], [IntrNoMem]>; 232 233 def int_nvvm_ceil_ftz_f : GCCBuiltin<"__nvvm_ceil_ftz_f">, 234 Intrinsic<[llvm_float_ty], [llvm_float_ty], [IntrNoMem]>; 235 def int_nvvm_ceil_f : GCCBuiltin<"__nvvm_ceil_f">, 236 Intrinsic<[llvm_float_ty], [llvm_float_ty], [IntrNoMem]>; 237 def int_nvvm_ceil_d : GCCBuiltin<"__nvvm_ceil_d">, 238 Intrinsic<[llvm_double_ty], [llvm_double_ty], [IntrNoMem]>; 239 240// 241// Abs 242// 243 244 def int_nvvm_abs_i : GCCBuiltin<"__nvvm_abs_i">, 245 Intrinsic<[llvm_i32_ty], [llvm_i32_ty], [IntrNoMem]>; 246 def int_nvvm_abs_ll : GCCBuiltin<"__nvvm_abs_ll">, 247 Intrinsic<[llvm_i64_ty], [llvm_i64_ty], [IntrNoMem]>; 248 249 def int_nvvm_fabs_ftz_f : GCCBuiltin<"__nvvm_fabs_ftz_f">, 250 Intrinsic<[llvm_float_ty], [llvm_float_ty], [IntrNoMem]>; 251 def int_nvvm_fabs_f : GCCBuiltin<"__nvvm_fabs_f">, 252 Intrinsic<[llvm_float_ty], [llvm_float_ty], [IntrNoMem]>; 253 254 def int_nvvm_fabs_d : GCCBuiltin<"__nvvm_fabs_d">, 255 Intrinsic<[llvm_double_ty], [llvm_double_ty], [IntrNoMem]>; 256 257// 258// Round 259// 260 261 def int_nvvm_round_ftz_f : GCCBuiltin<"__nvvm_round_ftz_f">, 262 Intrinsic<[llvm_float_ty], [llvm_float_ty], [IntrNoMem]>; 263 def int_nvvm_round_f : GCCBuiltin<"__nvvm_round_f">, 264 Intrinsic<[llvm_float_ty], [llvm_float_ty], [IntrNoMem]>; 265 266 def int_nvvm_round_d : GCCBuiltin<"__nvvm_round_d">, 267 Intrinsic<[llvm_double_ty], [llvm_double_ty], [IntrNoMem]>; 268 269// 270// Trunc 271// 272 273 def int_nvvm_trunc_ftz_f : GCCBuiltin<"__nvvm_trunc_ftz_f">, 274 Intrinsic<[llvm_float_ty], [llvm_float_ty], [IntrNoMem]>; 275 def int_nvvm_trunc_f : GCCBuiltin<"__nvvm_trunc_f">, 276 Intrinsic<[llvm_float_ty], [llvm_float_ty], [IntrNoMem]>; 277 278 def int_nvvm_trunc_d : GCCBuiltin<"__nvvm_trunc_d">, 279 Intrinsic<[llvm_double_ty], [llvm_double_ty], [IntrNoMem]>; 280 281// 282// Saturate 283// 284 285 def int_nvvm_saturate_ftz_f : GCCBuiltin<"__nvvm_saturate_ftz_f">, 286 Intrinsic<[llvm_float_ty], [llvm_float_ty], [IntrNoMem]>; 287 def int_nvvm_saturate_f : GCCBuiltin<"__nvvm_saturate_f">, 288 Intrinsic<[llvm_float_ty], [llvm_float_ty], [IntrNoMem]>; 289 290 def int_nvvm_saturate_d : GCCBuiltin<"__nvvm_saturate_d">, 291 Intrinsic<[llvm_double_ty], [llvm_double_ty], [IntrNoMem]>; 292 293// 294// Exp2 Log2 295// 296 297 def int_nvvm_ex2_approx_ftz_f : GCCBuiltin<"__nvvm_ex2_approx_ftz_f">, 298 Intrinsic<[llvm_float_ty], [llvm_float_ty], [IntrNoMem]>; 299 def int_nvvm_ex2_approx_f : GCCBuiltin<"__nvvm_ex2_approx_f">, 300 Intrinsic<[llvm_float_ty], [llvm_float_ty], [IntrNoMem]>; 301 def int_nvvm_ex2_approx_d : GCCBuiltin<"__nvvm_ex2_approx_d">, 302 Intrinsic<[llvm_double_ty], [llvm_double_ty], [IntrNoMem]>; 303 304 def int_nvvm_lg2_approx_ftz_f : GCCBuiltin<"__nvvm_lg2_approx_ftz_f">, 305 Intrinsic<[llvm_float_ty], [llvm_float_ty], [IntrNoMem]>; 306 def int_nvvm_lg2_approx_f : GCCBuiltin<"__nvvm_lg2_approx_f">, 307 Intrinsic<[llvm_float_ty], [llvm_float_ty], [IntrNoMem]>; 308 def int_nvvm_lg2_approx_d : GCCBuiltin<"__nvvm_lg2_approx_d">, 309 Intrinsic<[llvm_double_ty], [llvm_double_ty], [IntrNoMem]>; 310 311// 312// Sin Cos 313// 314 315 def int_nvvm_sin_approx_ftz_f : GCCBuiltin<"__nvvm_sin_approx_ftz_f">, 316 Intrinsic<[llvm_float_ty], [llvm_float_ty], [IntrNoMem]>; 317 def int_nvvm_sin_approx_f : GCCBuiltin<"__nvvm_sin_approx_f">, 318 Intrinsic<[llvm_float_ty], [llvm_float_ty], [IntrNoMem]>; 319 320 def int_nvvm_cos_approx_ftz_f : GCCBuiltin<"__nvvm_cos_approx_ftz_f">, 321 Intrinsic<[llvm_float_ty], [llvm_float_ty], [IntrNoMem]>; 322 def int_nvvm_cos_approx_f : GCCBuiltin<"__nvvm_cos_approx_f">, 323 Intrinsic<[llvm_float_ty], [llvm_float_ty], [IntrNoMem]>; 324 325// 326// Fma 327// 328 329 def int_nvvm_fma_rn_ftz_f : GCCBuiltin<"__nvvm_fma_rn_ftz_f">, 330 Intrinsic<[llvm_float_ty], [llvm_float_ty, llvm_float_ty, llvm_float_ty], 331 [IntrNoMem, Commutative]>; 332 def int_nvvm_fma_rn_f : GCCBuiltin<"__nvvm_fma_rn_f">, 333 Intrinsic<[llvm_float_ty], [llvm_float_ty, llvm_float_ty, llvm_float_ty], 334 [IntrNoMem, Commutative]>; 335 def int_nvvm_fma_rz_ftz_f : GCCBuiltin<"__nvvm_fma_rz_ftz_f">, 336 Intrinsic<[llvm_float_ty], [llvm_float_ty, llvm_float_ty, llvm_float_ty], 337 [IntrNoMem, Commutative]>; 338 def int_nvvm_fma_rz_f : GCCBuiltin<"__nvvm_fma_rz_f">, 339 Intrinsic<[llvm_float_ty], [llvm_float_ty, llvm_float_ty, llvm_float_ty], 340 [IntrNoMem, Commutative]>; 341 def int_nvvm_fma_rm_ftz_f : GCCBuiltin<"__nvvm_fma_rm_ftz_f">, 342 Intrinsic<[llvm_float_ty], [llvm_float_ty, llvm_float_ty, llvm_float_ty], 343 [IntrNoMem, Commutative]>; 344 def int_nvvm_fma_rm_f : GCCBuiltin<"__nvvm_fma_rm_f">, 345 Intrinsic<[llvm_float_ty], [llvm_float_ty, llvm_float_ty, llvm_float_ty], 346 [IntrNoMem, Commutative]>; 347 def int_nvvm_fma_rp_ftz_f : GCCBuiltin<"__nvvm_fma_rp_ftz_f">, 348 Intrinsic<[llvm_float_ty], [llvm_float_ty, llvm_float_ty, llvm_float_ty], 349 [IntrNoMem, Commutative]>; 350 def int_nvvm_fma_rp_f : GCCBuiltin<"__nvvm_fma_rp_f">, 351 Intrinsic<[llvm_float_ty], [llvm_float_ty, llvm_float_ty, llvm_float_ty], 352 [IntrNoMem, Commutative]>; 353 354 def int_nvvm_fma_rn_d : GCCBuiltin<"__nvvm_fma_rn_d">, 355 Intrinsic<[llvm_double_ty], 356 [llvm_double_ty, llvm_double_ty, llvm_double_ty], 357 [IntrNoMem, Commutative]>; 358 def int_nvvm_fma_rz_d : GCCBuiltin<"__nvvm_fma_rz_d">, 359 Intrinsic<[llvm_double_ty], 360 [llvm_double_ty, llvm_double_ty, llvm_double_ty], 361 [IntrNoMem, Commutative]>; 362 def int_nvvm_fma_rm_d : GCCBuiltin<"__nvvm_fma_rm_d">, 363 Intrinsic<[llvm_double_ty], 364 [llvm_double_ty, llvm_double_ty, llvm_double_ty], 365 [IntrNoMem, Commutative]>; 366 def int_nvvm_fma_rp_d : GCCBuiltin<"__nvvm_fma_rp_d">, 367 Intrinsic<[llvm_double_ty], 368 [llvm_double_ty, llvm_double_ty, llvm_double_ty], 369 [IntrNoMem, Commutative]>; 370 371// 372// Rcp 373// 374 375 def int_nvvm_rcp_rn_ftz_f : GCCBuiltin<"__nvvm_rcp_rn_ftz_f">, 376 Intrinsic<[llvm_float_ty], [llvm_float_ty], [IntrNoMem]>; 377 def int_nvvm_rcp_rn_f : GCCBuiltin<"__nvvm_rcp_rn_f">, 378 Intrinsic<[llvm_float_ty], [llvm_float_ty], [IntrNoMem]>; 379 def int_nvvm_rcp_rz_ftz_f : GCCBuiltin<"__nvvm_rcp_rz_ftz_f">, 380 Intrinsic<[llvm_float_ty], [llvm_float_ty], [IntrNoMem]>; 381 def int_nvvm_rcp_rz_f : GCCBuiltin<"__nvvm_rcp_rz_f">, 382 Intrinsic<[llvm_float_ty], [llvm_float_ty], [IntrNoMem]>; 383 def int_nvvm_rcp_rm_ftz_f : GCCBuiltin<"__nvvm_rcp_rm_ftz_f">, 384 Intrinsic<[llvm_float_ty], [llvm_float_ty], [IntrNoMem]>; 385 def int_nvvm_rcp_rm_f : GCCBuiltin<"__nvvm_rcp_rm_f">, 386 Intrinsic<[llvm_float_ty], [llvm_float_ty], [IntrNoMem]>; 387 def int_nvvm_rcp_rp_ftz_f : GCCBuiltin<"__nvvm_rcp_rp_ftz_f">, 388 Intrinsic<[llvm_float_ty], [llvm_float_ty], [IntrNoMem]>; 389 def int_nvvm_rcp_rp_f : GCCBuiltin<"__nvvm_rcp_rp_f">, 390 Intrinsic<[llvm_float_ty], [llvm_float_ty], [IntrNoMem]>; 391 392 def int_nvvm_rcp_rn_d : GCCBuiltin<"__nvvm_rcp_rn_d">, 393 Intrinsic<[llvm_double_ty], [llvm_double_ty], [IntrNoMem]>; 394 def int_nvvm_rcp_rz_d : GCCBuiltin<"__nvvm_rcp_rz_d">, 395 Intrinsic<[llvm_double_ty], [llvm_double_ty], [IntrNoMem]>; 396 def int_nvvm_rcp_rm_d : GCCBuiltin<"__nvvm_rcp_rm_d">, 397 Intrinsic<[llvm_double_ty], [llvm_double_ty], [IntrNoMem]>; 398 def int_nvvm_rcp_rp_d : GCCBuiltin<"__nvvm_rcp_rp_d">, 399 Intrinsic<[llvm_double_ty], [llvm_double_ty], [IntrNoMem]>; 400 401 def int_nvvm_rcp_approx_ftz_d : GCCBuiltin<"__nvvm_rcp_approx_ftz_d">, 402 Intrinsic<[llvm_double_ty], [llvm_double_ty], [IntrNoMem]>; 403 404// 405// Sqrt 406// 407 408 def int_nvvm_sqrt_f : GCCBuiltin<"__nvvm_sqrt_f">, 409 Intrinsic<[llvm_float_ty], [llvm_float_ty], [IntrNoMem]>; 410 def int_nvvm_sqrt_rn_ftz_f : GCCBuiltin<"__nvvm_sqrt_rn_ftz_f">, 411 Intrinsic<[llvm_float_ty], [llvm_float_ty], [IntrNoMem]>; 412 def int_nvvm_sqrt_rn_f : GCCBuiltin<"__nvvm_sqrt_rn_f">, 413 Intrinsic<[llvm_float_ty], [llvm_float_ty], [IntrNoMem]>; 414 def int_nvvm_sqrt_rz_ftz_f : GCCBuiltin<"__nvvm_sqrt_rz_ftz_f">, 415 Intrinsic<[llvm_float_ty], [llvm_float_ty], [IntrNoMem]>; 416 def int_nvvm_sqrt_rz_f : GCCBuiltin<"__nvvm_sqrt_rz_f">, 417 Intrinsic<[llvm_float_ty], [llvm_float_ty], [IntrNoMem]>; 418 def int_nvvm_sqrt_rm_ftz_f : GCCBuiltin<"__nvvm_sqrt_rm_ftz_f">, 419 Intrinsic<[llvm_float_ty], [llvm_float_ty], [IntrNoMem]>; 420 def int_nvvm_sqrt_rm_f : GCCBuiltin<"__nvvm_sqrt_rm_f">, 421 Intrinsic<[llvm_float_ty], [llvm_float_ty], [IntrNoMem]>; 422 def int_nvvm_sqrt_rp_ftz_f : GCCBuiltin<"__nvvm_sqrt_rp_ftz_f">, 423 Intrinsic<[llvm_float_ty], [llvm_float_ty], [IntrNoMem]>; 424 def int_nvvm_sqrt_rp_f : GCCBuiltin<"__nvvm_sqrt_rp_f">, 425 Intrinsic<[llvm_float_ty], [llvm_float_ty], [IntrNoMem]>; 426 def int_nvvm_sqrt_approx_ftz_f : GCCBuiltin<"__nvvm_sqrt_approx_ftz_f">, 427 Intrinsic<[llvm_float_ty], [llvm_float_ty], [IntrNoMem]>; 428 def int_nvvm_sqrt_approx_f : GCCBuiltin<"__nvvm_sqrt_approx_f">, 429 Intrinsic<[llvm_float_ty], [llvm_float_ty], [IntrNoMem]>; 430 431 def int_nvvm_sqrt_rn_d : GCCBuiltin<"__nvvm_sqrt_rn_d">, 432 Intrinsic<[llvm_double_ty], [llvm_double_ty], [IntrNoMem]>; 433 def int_nvvm_sqrt_rz_d : GCCBuiltin<"__nvvm_sqrt_rz_d">, 434 Intrinsic<[llvm_double_ty], [llvm_double_ty], [IntrNoMem]>; 435 def int_nvvm_sqrt_rm_d : GCCBuiltin<"__nvvm_sqrt_rm_d">, 436 Intrinsic<[llvm_double_ty], [llvm_double_ty], [IntrNoMem]>; 437 def int_nvvm_sqrt_rp_d : GCCBuiltin<"__nvvm_sqrt_rp_d">, 438 Intrinsic<[llvm_double_ty], [llvm_double_ty], [IntrNoMem]>; 439 440// 441// Rsqrt 442// 443 444 def int_nvvm_rsqrt_approx_ftz_f : GCCBuiltin<"__nvvm_rsqrt_approx_ftz_f">, 445 Intrinsic<[llvm_float_ty], [llvm_float_ty], [IntrNoMem]>; 446 def int_nvvm_rsqrt_approx_f : GCCBuiltin<"__nvvm_rsqrt_approx_f">, 447 Intrinsic<[llvm_float_ty], [llvm_float_ty], [IntrNoMem]>; 448 def int_nvvm_rsqrt_approx_d : GCCBuiltin<"__nvvm_rsqrt_approx_d">, 449 Intrinsic<[llvm_double_ty], [llvm_double_ty], [IntrNoMem]>; 450 451// 452// Add 453// 454 455 def int_nvvm_add_rn_ftz_f : GCCBuiltin<"__nvvm_add_rn_ftz_f">, 456 Intrinsic<[llvm_float_ty], [llvm_float_ty, llvm_float_ty], 457 [IntrNoMem, Commutative]>; 458 def int_nvvm_add_rn_f : GCCBuiltin<"__nvvm_add_rn_f">, 459 Intrinsic<[llvm_float_ty], [llvm_float_ty, llvm_float_ty], 460 [IntrNoMem, Commutative]>; 461 def int_nvvm_add_rz_ftz_f : GCCBuiltin<"__nvvm_add_rz_ftz_f">, 462 Intrinsic<[llvm_float_ty], [llvm_float_ty, llvm_float_ty], 463 [IntrNoMem, Commutative]>; 464 def int_nvvm_add_rz_f : GCCBuiltin<"__nvvm_add_rz_f">, 465 Intrinsic<[llvm_float_ty], [llvm_float_ty, llvm_float_ty], 466 [IntrNoMem, Commutative]>; 467 def int_nvvm_add_rm_ftz_f : GCCBuiltin<"__nvvm_add_rm_ftz_f">, 468 Intrinsic<[llvm_float_ty], [llvm_float_ty, llvm_float_ty], 469 [IntrNoMem, Commutative]>; 470 def int_nvvm_add_rm_f : GCCBuiltin<"__nvvm_add_rm_f">, 471 Intrinsic<[llvm_float_ty], [llvm_float_ty, llvm_float_ty], 472 [IntrNoMem, Commutative]>; 473 def int_nvvm_add_rp_ftz_f : GCCBuiltin<"__nvvm_add_rp_ftz_f">, 474 Intrinsic<[llvm_float_ty], [llvm_float_ty, llvm_float_ty], 475 [IntrNoMem, Commutative]>; 476 def int_nvvm_add_rp_f : GCCBuiltin<"__nvvm_add_rp_f">, 477 Intrinsic<[llvm_float_ty], [llvm_float_ty, llvm_float_ty], 478 [IntrNoMem, Commutative]>; 479 480 def int_nvvm_add_rn_d : GCCBuiltin<"__nvvm_add_rn_d">, 481 Intrinsic<[llvm_double_ty], [llvm_double_ty, llvm_double_ty], 482 [IntrNoMem, Commutative]>; 483 def int_nvvm_add_rz_d : GCCBuiltin<"__nvvm_add_rz_d">, 484 Intrinsic<[llvm_double_ty], [llvm_double_ty, llvm_double_ty], 485 [IntrNoMem, Commutative]>; 486 def int_nvvm_add_rm_d : GCCBuiltin<"__nvvm_add_rm_d">, 487 Intrinsic<[llvm_double_ty], [llvm_double_ty, llvm_double_ty], 488 [IntrNoMem, Commutative]>; 489 def int_nvvm_add_rp_d : GCCBuiltin<"__nvvm_add_rp_d">, 490 Intrinsic<[llvm_double_ty], [llvm_double_ty, llvm_double_ty], 491 [IntrNoMem, Commutative]>; 492 493// 494// Convert 495// 496 497 def int_nvvm_d2f_rn_ftz : GCCBuiltin<"__nvvm_d2f_rn_ftz">, 498 Intrinsic<[llvm_float_ty], [llvm_double_ty], [IntrNoMem]>; 499 def int_nvvm_d2f_rn : GCCBuiltin<"__nvvm_d2f_rn">, 500 Intrinsic<[llvm_float_ty], [llvm_double_ty], [IntrNoMem]>; 501 def int_nvvm_d2f_rz_ftz : GCCBuiltin<"__nvvm_d2f_rz_ftz">, 502 Intrinsic<[llvm_float_ty], [llvm_double_ty], [IntrNoMem]>; 503 def int_nvvm_d2f_rz : GCCBuiltin<"__nvvm_d2f_rz">, 504 Intrinsic<[llvm_float_ty], [llvm_double_ty], [IntrNoMem]>; 505 def int_nvvm_d2f_rm_ftz : GCCBuiltin<"__nvvm_d2f_rm_ftz">, 506 Intrinsic<[llvm_float_ty], [llvm_double_ty], [IntrNoMem]>; 507 def int_nvvm_d2f_rm : GCCBuiltin<"__nvvm_d2f_rm">, 508 Intrinsic<[llvm_float_ty], [llvm_double_ty], [IntrNoMem]>; 509 def int_nvvm_d2f_rp_ftz : GCCBuiltin<"__nvvm_d2f_rp_ftz">, 510 Intrinsic<[llvm_float_ty], [llvm_double_ty], [IntrNoMem]>; 511 def int_nvvm_d2f_rp : GCCBuiltin<"__nvvm_d2f_rp">, 512 Intrinsic<[llvm_float_ty], [llvm_double_ty], [IntrNoMem]>; 513 514 def int_nvvm_d2i_rn : GCCBuiltin<"__nvvm_d2i_rn">, 515 Intrinsic<[llvm_i32_ty], [llvm_double_ty], [IntrNoMem]>; 516 def int_nvvm_d2i_rz : GCCBuiltin<"__nvvm_d2i_rz">, 517 Intrinsic<[llvm_i32_ty], [llvm_double_ty], [IntrNoMem]>; 518 def int_nvvm_d2i_rm : GCCBuiltin<"__nvvm_d2i_rm">, 519 Intrinsic<[llvm_i32_ty], [llvm_double_ty], [IntrNoMem]>; 520 def int_nvvm_d2i_rp : GCCBuiltin<"__nvvm_d2i_rp">, 521 Intrinsic<[llvm_i32_ty], [llvm_double_ty], [IntrNoMem]>; 522 523 def int_nvvm_d2ui_rn : GCCBuiltin<"__nvvm_d2ui_rn">, 524 Intrinsic<[llvm_i32_ty], [llvm_double_ty], [IntrNoMem]>; 525 def int_nvvm_d2ui_rz : GCCBuiltin<"__nvvm_d2ui_rz">, 526 Intrinsic<[llvm_i32_ty], [llvm_double_ty], [IntrNoMem]>; 527 def int_nvvm_d2ui_rm : GCCBuiltin<"__nvvm_d2ui_rm">, 528 Intrinsic<[llvm_i32_ty], [llvm_double_ty], [IntrNoMem]>; 529 def int_nvvm_d2ui_rp : GCCBuiltin<"__nvvm_d2ui_rp">, 530 Intrinsic<[llvm_i32_ty], [llvm_double_ty], [IntrNoMem]>; 531 532 def int_nvvm_i2d_rn : GCCBuiltin<"__nvvm_i2d_rn">, 533 Intrinsic<[llvm_double_ty], [llvm_i32_ty], [IntrNoMem]>; 534 def int_nvvm_i2d_rz : GCCBuiltin<"__nvvm_i2d_rz">, 535 Intrinsic<[llvm_double_ty], [llvm_i32_ty], [IntrNoMem]>; 536 def int_nvvm_i2d_rm : GCCBuiltin<"__nvvm_i2d_rm">, 537 Intrinsic<[llvm_double_ty], [llvm_i32_ty], [IntrNoMem]>; 538 def int_nvvm_i2d_rp : GCCBuiltin<"__nvvm_i2d_rp">, 539 Intrinsic<[llvm_double_ty], [llvm_i32_ty], [IntrNoMem]>; 540 541 def int_nvvm_ui2d_rn : GCCBuiltin<"__nvvm_ui2d_rn">, 542 Intrinsic<[llvm_double_ty], [llvm_i32_ty], [IntrNoMem]>; 543 def int_nvvm_ui2d_rz : GCCBuiltin<"__nvvm_ui2d_rz">, 544 Intrinsic<[llvm_double_ty], [llvm_i32_ty], [IntrNoMem]>; 545 def int_nvvm_ui2d_rm : GCCBuiltin<"__nvvm_ui2d_rm">, 546 Intrinsic<[llvm_double_ty], [llvm_i32_ty], [IntrNoMem]>; 547 def int_nvvm_ui2d_rp : GCCBuiltin<"__nvvm_ui2d_rp">, 548 Intrinsic<[llvm_double_ty], [llvm_i32_ty], [IntrNoMem]>; 549 550 def int_nvvm_f2i_rn_ftz : GCCBuiltin<"__nvvm_f2i_rn_ftz">, 551 Intrinsic<[llvm_i32_ty], [llvm_float_ty], [IntrNoMem]>; 552 def int_nvvm_f2i_rn : GCCBuiltin<"__nvvm_f2i_rn">, 553 Intrinsic<[llvm_i32_ty], [llvm_float_ty], [IntrNoMem]>; 554 def int_nvvm_f2i_rz_ftz : GCCBuiltin<"__nvvm_f2i_rz_ftz">, 555 Intrinsic<[llvm_i32_ty], [llvm_float_ty], [IntrNoMem]>; 556 def int_nvvm_f2i_rz : GCCBuiltin<"__nvvm_f2i_rz">, 557 Intrinsic<[llvm_i32_ty], [llvm_float_ty], [IntrNoMem]>; 558 def int_nvvm_f2i_rm_ftz : GCCBuiltin<"__nvvm_f2i_rm_ftz">, 559 Intrinsic<[llvm_i32_ty], [llvm_float_ty], [IntrNoMem]>; 560 def int_nvvm_f2i_rm : GCCBuiltin<"__nvvm_f2i_rm">, 561 Intrinsic<[llvm_i32_ty], [llvm_float_ty], [IntrNoMem]>; 562 def int_nvvm_f2i_rp_ftz : GCCBuiltin<"__nvvm_f2i_rp_ftz">, 563 Intrinsic<[llvm_i32_ty], [llvm_float_ty], [IntrNoMem]>; 564 def int_nvvm_f2i_rp : GCCBuiltin<"__nvvm_f2i_rp">, 565 Intrinsic<[llvm_i32_ty], [llvm_float_ty], [IntrNoMem]>; 566 567 def int_nvvm_f2ui_rn_ftz : GCCBuiltin<"__nvvm_f2ui_rn_ftz">, 568 Intrinsic<[llvm_i32_ty], [llvm_float_ty], [IntrNoMem]>; 569 def int_nvvm_f2ui_rn : GCCBuiltin<"__nvvm_f2ui_rn">, 570 Intrinsic<[llvm_i32_ty], [llvm_float_ty], [IntrNoMem]>; 571 def int_nvvm_f2ui_rz_ftz : GCCBuiltin<"__nvvm_f2ui_rz_ftz">, 572 Intrinsic<[llvm_i32_ty], [llvm_float_ty], [IntrNoMem]>; 573 def int_nvvm_f2ui_rz : GCCBuiltin<"__nvvm_f2ui_rz">, 574 Intrinsic<[llvm_i32_ty], [llvm_float_ty], [IntrNoMem]>; 575 def int_nvvm_f2ui_rm_ftz : GCCBuiltin<"__nvvm_f2ui_rm_ftz">, 576 Intrinsic<[llvm_i32_ty], [llvm_float_ty], [IntrNoMem]>; 577 def int_nvvm_f2ui_rm : GCCBuiltin<"__nvvm_f2ui_rm">, 578 Intrinsic<[llvm_i32_ty], [llvm_float_ty], [IntrNoMem]>; 579 def int_nvvm_f2ui_rp_ftz : GCCBuiltin<"__nvvm_f2ui_rp_ftz">, 580 Intrinsic<[llvm_i32_ty], [llvm_float_ty], [IntrNoMem]>; 581 def int_nvvm_f2ui_rp : GCCBuiltin<"__nvvm_f2ui_rp">, 582 Intrinsic<[llvm_i32_ty], [llvm_float_ty], [IntrNoMem]>; 583 584 def int_nvvm_i2f_rn : GCCBuiltin<"__nvvm_i2f_rn">, 585 Intrinsic<[llvm_float_ty], [llvm_i32_ty], [IntrNoMem]>; 586 def int_nvvm_i2f_rz : GCCBuiltin<"__nvvm_i2f_rz">, 587 Intrinsic<[llvm_float_ty], [llvm_i32_ty], [IntrNoMem]>; 588 def int_nvvm_i2f_rm : GCCBuiltin<"__nvvm_i2f_rm">, 589 Intrinsic<[llvm_float_ty], [llvm_i32_ty], [IntrNoMem]>; 590 def int_nvvm_i2f_rp : GCCBuiltin<"__nvvm_i2f_rp">, 591 Intrinsic<[llvm_float_ty], [llvm_i32_ty], [IntrNoMem]>; 592 593 def int_nvvm_ui2f_rn : GCCBuiltin<"__nvvm_ui2f_rn">, 594 Intrinsic<[llvm_float_ty], [llvm_i32_ty], [IntrNoMem]>; 595 def int_nvvm_ui2f_rz : GCCBuiltin<"__nvvm_ui2f_rz">, 596 Intrinsic<[llvm_float_ty], [llvm_i32_ty], [IntrNoMem]>; 597 def int_nvvm_ui2f_rm : GCCBuiltin<"__nvvm_ui2f_rm">, 598 Intrinsic<[llvm_float_ty], [llvm_i32_ty], [IntrNoMem]>; 599 def int_nvvm_ui2f_rp : GCCBuiltin<"__nvvm_ui2f_rp">, 600 Intrinsic<[llvm_float_ty], [llvm_i32_ty], [IntrNoMem]>; 601 602 def int_nvvm_lohi_i2d : GCCBuiltin<"__nvvm_lohi_i2d">, 603 Intrinsic<[llvm_double_ty], [llvm_i32_ty, llvm_i32_ty], 604 [IntrNoMem, Commutative]>; 605 606 def int_nvvm_d2i_lo : GCCBuiltin<"__nvvm_d2i_lo">, 607 Intrinsic<[llvm_i32_ty], [llvm_double_ty], [IntrNoMem]>; 608 def int_nvvm_d2i_hi : GCCBuiltin<"__nvvm_d2i_hi">, 609 Intrinsic<[llvm_i32_ty], [llvm_double_ty], [IntrNoMem]>; 610 611 def int_nvvm_f2ll_rn_ftz : GCCBuiltin<"__nvvm_f2ll_rn_ftz">, 612 Intrinsic<[llvm_i64_ty], [llvm_float_ty], [IntrNoMem]>; 613 def int_nvvm_f2ll_rn : GCCBuiltin<"__nvvm_f2ll_rn">, 614 Intrinsic<[llvm_i64_ty], [llvm_float_ty], [IntrNoMem]>; 615 def int_nvvm_f2ll_rz_ftz : GCCBuiltin<"__nvvm_f2ll_rz_ftz">, 616 Intrinsic<[llvm_i64_ty], [llvm_float_ty], [IntrNoMem]>; 617 def int_nvvm_f2ll_rz : GCCBuiltin<"__nvvm_f2ll_rz">, 618 Intrinsic<[llvm_i64_ty], [llvm_float_ty], [IntrNoMem]>; 619 def int_nvvm_f2ll_rm_ftz : GCCBuiltin<"__nvvm_f2ll_rm_ftz">, 620 Intrinsic<[llvm_i64_ty], [llvm_float_ty], [IntrNoMem]>; 621 def int_nvvm_f2ll_rm : GCCBuiltin<"__nvvm_f2ll_rm">, 622 Intrinsic<[llvm_i64_ty], [llvm_float_ty], [IntrNoMem]>; 623 def int_nvvm_f2ll_rp_ftz : GCCBuiltin<"__nvvm_f2ll_rp_ftz">, 624 Intrinsic<[llvm_i64_ty], [llvm_float_ty], [IntrNoMem]>; 625 def int_nvvm_f2ll_rp : GCCBuiltin<"__nvvm_f2ll_rp">, 626 Intrinsic<[llvm_i64_ty], [llvm_float_ty], [IntrNoMem]>; 627 628 def int_nvvm_f2ull_rn_ftz : GCCBuiltin<"__nvvm_f2ull_rn_ftz">, 629 Intrinsic<[llvm_i64_ty], [llvm_float_ty], [IntrNoMem]>; 630 def int_nvvm_f2ull_rn : GCCBuiltin<"__nvvm_f2ull_rn">, 631 Intrinsic<[llvm_i64_ty], [llvm_float_ty], [IntrNoMem]>; 632 def int_nvvm_f2ull_rz_ftz : GCCBuiltin<"__nvvm_f2ull_rz_ftz">, 633 Intrinsic<[llvm_i64_ty], [llvm_float_ty], [IntrNoMem]>; 634 def int_nvvm_f2ull_rz : GCCBuiltin<"__nvvm_f2ull_rz">, 635 Intrinsic<[llvm_i64_ty], [llvm_float_ty], [IntrNoMem]>; 636 def int_nvvm_f2ull_rm_ftz : GCCBuiltin<"__nvvm_f2ull_rm_ftz">, 637 Intrinsic<[llvm_i64_ty], [llvm_float_ty], [IntrNoMem]>; 638 def int_nvvm_f2ull_rm : GCCBuiltin<"__nvvm_f2ull_rm">, 639 Intrinsic<[llvm_i64_ty], [llvm_float_ty], [IntrNoMem]>; 640 def int_nvvm_f2ull_rp_ftz : GCCBuiltin<"__nvvm_f2ull_rp_ftz">, 641 Intrinsic<[llvm_i64_ty], [llvm_float_ty], [IntrNoMem]>; 642 def int_nvvm_f2ull_rp : GCCBuiltin<"__nvvm_f2ull_rp">, 643 Intrinsic<[llvm_i64_ty], [llvm_float_ty], [IntrNoMem]>; 644 645 def int_nvvm_d2ll_rn : GCCBuiltin<"__nvvm_d2ll_rn">, 646 Intrinsic<[llvm_i64_ty], [llvm_double_ty], [IntrNoMem]>; 647 def int_nvvm_d2ll_rz : GCCBuiltin<"__nvvm_d2ll_rz">, 648 Intrinsic<[llvm_i64_ty], [llvm_double_ty], [IntrNoMem]>; 649 def int_nvvm_d2ll_rm : GCCBuiltin<"__nvvm_d2ll_rm">, 650 Intrinsic<[llvm_i64_ty], [llvm_double_ty], [IntrNoMem]>; 651 def int_nvvm_d2ll_rp : GCCBuiltin<"__nvvm_d2ll_rp">, 652 Intrinsic<[llvm_i64_ty], [llvm_double_ty], [IntrNoMem]>; 653 654 def int_nvvm_d2ull_rn : GCCBuiltin<"__nvvm_d2ull_rn">, 655 Intrinsic<[llvm_i64_ty], [llvm_double_ty], [IntrNoMem]>; 656 def int_nvvm_d2ull_rz : GCCBuiltin<"__nvvm_d2ull_rz">, 657 Intrinsic<[llvm_i64_ty], [llvm_double_ty], [IntrNoMem]>; 658 def int_nvvm_d2ull_rm : GCCBuiltin<"__nvvm_d2ull_rm">, 659 Intrinsic<[llvm_i64_ty], [llvm_double_ty], [IntrNoMem]>; 660 def int_nvvm_d2ull_rp : GCCBuiltin<"__nvvm_d2ull_rp">, 661 Intrinsic<[llvm_i64_ty], [llvm_double_ty], [IntrNoMem]>; 662 663 def int_nvvm_ll2f_rn : GCCBuiltin<"__nvvm_ll2f_rn">, 664 Intrinsic<[llvm_float_ty], [llvm_i64_ty], [IntrNoMem]>; 665 def int_nvvm_ll2f_rz : GCCBuiltin<"__nvvm_ll2f_rz">, 666 Intrinsic<[llvm_float_ty], [llvm_i64_ty], [IntrNoMem]>; 667 def int_nvvm_ll2f_rm : GCCBuiltin<"__nvvm_ll2f_rm">, 668 Intrinsic<[llvm_float_ty], [llvm_i64_ty], [IntrNoMem]>; 669 def int_nvvm_ll2f_rp : GCCBuiltin<"__nvvm_ll2f_rp">, 670 Intrinsic<[llvm_float_ty], [llvm_i64_ty], [IntrNoMem]>; 671 def int_nvvm_ull2f_rn : GCCBuiltin<"__nvvm_ull2f_rn">, 672 Intrinsic<[llvm_float_ty], [llvm_i64_ty], [IntrNoMem]>; 673 def int_nvvm_ull2f_rz : GCCBuiltin<"__nvvm_ull2f_rz">, 674 Intrinsic<[llvm_float_ty], [llvm_i64_ty], [IntrNoMem]>; 675 def int_nvvm_ull2f_rm : GCCBuiltin<"__nvvm_ull2f_rm">, 676 Intrinsic<[llvm_float_ty], [llvm_i64_ty], [IntrNoMem]>; 677 def int_nvvm_ull2f_rp : GCCBuiltin<"__nvvm_ull2f_rp">, 678 Intrinsic<[llvm_float_ty], [llvm_i64_ty], [IntrNoMem]>; 679 680 def int_nvvm_ll2d_rn : GCCBuiltin<"__nvvm_ll2d_rn">, 681 Intrinsic<[llvm_double_ty], [llvm_i64_ty], [IntrNoMem]>; 682 def int_nvvm_ll2d_rz : GCCBuiltin<"__nvvm_ll2d_rz">, 683 Intrinsic<[llvm_double_ty], [llvm_i64_ty], [IntrNoMem]>; 684 def int_nvvm_ll2d_rm : GCCBuiltin<"__nvvm_ll2d_rm">, 685 Intrinsic<[llvm_double_ty], [llvm_i64_ty], [IntrNoMem]>; 686 def int_nvvm_ll2d_rp : GCCBuiltin<"__nvvm_ll2d_rp">, 687 Intrinsic<[llvm_double_ty], [llvm_i64_ty], [IntrNoMem]>; 688 def int_nvvm_ull2d_rn : GCCBuiltin<"__nvvm_ull2d_rn">, 689 Intrinsic<[llvm_double_ty], [llvm_i64_ty], [IntrNoMem]>; 690 def int_nvvm_ull2d_rz : GCCBuiltin<"__nvvm_ull2d_rz">, 691 Intrinsic<[llvm_double_ty], [llvm_i64_ty], [IntrNoMem]>; 692 def int_nvvm_ull2d_rm : GCCBuiltin<"__nvvm_ull2d_rm">, 693 Intrinsic<[llvm_double_ty], [llvm_i64_ty], [IntrNoMem]>; 694 def int_nvvm_ull2d_rp : GCCBuiltin<"__nvvm_ull2d_rp">, 695 Intrinsic<[llvm_double_ty], [llvm_i64_ty], [IntrNoMem]>; 696 697 def int_nvvm_f2h_rn_ftz : GCCBuiltin<"__nvvm_f2h_rn_ftz">, 698 Intrinsic<[llvm_i16_ty], [llvm_float_ty], [IntrNoMem]>; 699 def int_nvvm_f2h_rn : GCCBuiltin<"__nvvm_f2h_rn">, 700 Intrinsic<[llvm_i16_ty], [llvm_float_ty], [IntrNoMem]>; 701 702 def int_nvvm_h2f : GCCBuiltin<"__nvvm_h2f">, 703 Intrinsic<[llvm_float_ty], [llvm_i16_ty], [IntrNoMem]>; 704 705// 706// Bitcast 707// 708 709 def int_nvvm_bitcast_f2i : GCCBuiltin<"__nvvm_bitcast_f2i">, 710 Intrinsic<[llvm_i32_ty], [llvm_float_ty], [IntrNoMem]>; 711 def int_nvvm_bitcast_i2f : GCCBuiltin<"__nvvm_bitcast_i2f">, 712 Intrinsic<[llvm_float_ty], [llvm_i32_ty], [IntrNoMem]>; 713 714 def int_nvvm_bitcast_ll2d : GCCBuiltin<"__nvvm_bitcast_ll2d">, 715 Intrinsic<[llvm_double_ty], [llvm_i64_ty], [IntrNoMem]>; 716 def int_nvvm_bitcast_d2ll : GCCBuiltin<"__nvvm_bitcast_d2ll">, 717 Intrinsic<[llvm_i64_ty], [llvm_double_ty], [IntrNoMem]>; 718 719 720// Atomic not available as an llvm intrinsic. 721 def int_nvvm_atomic_load_add_f32 : Intrinsic<[llvm_float_ty], 722 [LLVMAnyPointerType<llvm_float_ty>, llvm_float_ty], 723 [IntrReadWriteArgMem, NoCapture<0>]>; 724 def int_nvvm_atomic_load_inc_32 : Intrinsic<[llvm_i32_ty], 725 [LLVMAnyPointerType<llvm_i32_ty>, llvm_i32_ty], 726 [IntrReadWriteArgMem, NoCapture<0>]>; 727 def int_nvvm_atomic_load_dec_32 : Intrinsic<[llvm_i32_ty], 728 [LLVMAnyPointerType<llvm_i32_ty>, llvm_i32_ty], 729 [IntrReadWriteArgMem, NoCapture<0>]>; 730 731// Bar.Sync 732 def int_cuda_syncthreads : GCCBuiltin<"__syncthreads">, 733 Intrinsic<[], [], []>; 734 def int_nvvm_barrier0 : GCCBuiltin<"__nvvm_bar0">, 735 Intrinsic<[], [], []>; 736 def int_nvvm_barrier0_popc : GCCBuiltin<"__nvvm_bar0_popc">, 737 Intrinsic<[llvm_i32_ty], [llvm_i32_ty], []>; 738 def int_nvvm_barrier0_and : GCCBuiltin<"__nvvm_bar0_and">, 739 Intrinsic<[llvm_i32_ty], [llvm_i32_ty], []>; 740 def int_nvvm_barrier0_or : GCCBuiltin<"__nvvm_bar0_or">, 741 Intrinsic<[llvm_i32_ty], [llvm_i32_ty], []>; 742 743 // Membar 744 def int_nvvm_membar_cta : GCCBuiltin<"__nvvm_membar_cta">, 745 Intrinsic<[], [], []>; 746 def int_nvvm_membar_gl : GCCBuiltin<"__nvvm_membar_gl">, 747 Intrinsic<[], [], []>; 748 def int_nvvm_membar_sys : GCCBuiltin<"__nvvm_membar_sys">, 749 Intrinsic<[], [], []>; 750 751 752// Accessing special registers 753 def int_nvvm_read_ptx_sreg_tid_x : 754 Intrinsic<[llvm_i32_ty], [], [IntrNoMem]>, 755 GCCBuiltin<"__nvvm_read_ptx_sreg_tid_x">; 756 def int_nvvm_read_ptx_sreg_tid_y : 757 Intrinsic<[llvm_i32_ty], [], [IntrNoMem]>, 758 GCCBuiltin<"__nvvm_read_ptx_sreg_tid_y">; 759 def int_nvvm_read_ptx_sreg_tid_z : 760 Intrinsic<[llvm_i32_ty], [], [IntrNoMem]>, 761 GCCBuiltin<"__nvvm_read_ptx_sreg_tid_z">; 762 763 def int_nvvm_read_ptx_sreg_ntid_x : 764 Intrinsic<[llvm_i32_ty], [], [IntrNoMem]>, 765 GCCBuiltin<"__nvvm_read_ptx_sreg_ntid_x">; 766 def int_nvvm_read_ptx_sreg_ntid_y : 767 Intrinsic<[llvm_i32_ty], [], [IntrNoMem]>, 768 GCCBuiltin<"__nvvm_read_ptx_sreg_ntid_y">; 769 def int_nvvm_read_ptx_sreg_ntid_z : 770 Intrinsic<[llvm_i32_ty], [], [IntrNoMem]>, 771 GCCBuiltin<"__nvvm_read_ptx_sreg_ntid_z">; 772 773 def int_nvvm_read_ptx_sreg_ctaid_x : 774 Intrinsic<[llvm_i32_ty], [], [IntrNoMem]>, 775 GCCBuiltin<"__nvvm_read_ptx_sreg_ctaid_x">; 776 def int_nvvm_read_ptx_sreg_ctaid_y : 777 Intrinsic<[llvm_i32_ty], [], [IntrNoMem]>, 778 GCCBuiltin<"__nvvm_read_ptx_sreg_ctaid_y">; 779 def int_nvvm_read_ptx_sreg_ctaid_z : 780 Intrinsic<[llvm_i32_ty], [], [IntrNoMem]>, 781 GCCBuiltin<"__nvvm_read_ptx_sreg_ctaid_z">; 782 783 def int_nvvm_read_ptx_sreg_nctaid_x : 784 Intrinsic<[llvm_i32_ty], [], [IntrNoMem]>, 785 GCCBuiltin<"__nvvm_read_ptx_sreg_nctaid_x">; 786 def int_nvvm_read_ptx_sreg_nctaid_y : 787 Intrinsic<[llvm_i32_ty], [], [IntrNoMem]>, 788 GCCBuiltin<"__nvvm_read_ptx_sreg_nctaid_y">; 789 def int_nvvm_read_ptx_sreg_nctaid_z : 790 Intrinsic<[llvm_i32_ty], [], [IntrNoMem]>, 791 GCCBuiltin<"__nvvm_read_ptx_sreg_nctaid_z">; 792 793 def int_nvvm_read_ptx_sreg_warpsize : 794 Intrinsic<[llvm_i32_ty], [], [IntrNoMem]>, 795 GCCBuiltin<"__nvvm_read_ptx_sreg_warpsize">; 796 797 798// Generated within nvvm. Use for ldu on sm_20 or later 799// @TODO: Revisit this, Changed LLVMAnyPointerType to LLVMPointerType 800def int_nvvm_ldu_global_i : Intrinsic<[llvm_anyint_ty], 801 [LLVMPointerType<LLVMMatchType<0>>], [IntrReadMem, NoCapture<0>], 802 "llvm.nvvm.ldu.global.i">; 803def int_nvvm_ldu_global_f : Intrinsic<[llvm_anyfloat_ty], 804 [LLVMPointerType<LLVMMatchType<0>>], [IntrReadMem, NoCapture<0>], 805 "llvm.nvvm.ldu.global.f">; 806def int_nvvm_ldu_global_p : Intrinsic<[llvm_anyptr_ty], 807 [LLVMPointerType<LLVMMatchType<0>>], [IntrReadMem, NoCapture<0>], 808 "llvm.nvvm.ldu.global.p">; 809 810// Generated within nvvm. Use for ldg on sm_35 or later 811def int_nvvm_ldg_global_i : Intrinsic<[llvm_anyint_ty], 812 [LLVMPointerType<LLVMMatchType<0>>], [IntrReadMem, NoCapture<0>], 813 "llvm.nvvm.ldg.global.i">; 814def int_nvvm_ldg_global_f : Intrinsic<[llvm_anyfloat_ty], 815 [LLVMPointerType<LLVMMatchType<0>>], [IntrReadMem, NoCapture<0>], 816 "llvm.nvvm.ldg.global.f">; 817def int_nvvm_ldg_global_p : Intrinsic<[llvm_anyptr_ty], 818 [LLVMPointerType<LLVMMatchType<0>>], [IntrReadMem, NoCapture<0>], 819 "llvm.nvvm.ldg.global.p">; 820 821// Use for generic pointers 822// - These intrinsics are used to convert address spaces. 823// - The input pointer and output pointer must have the same type, except for 824// the address-space. (This restriction is not enforced here as there is 825// currently no way to describe it). 826// - This complements the llvm bitcast, which can be used to cast one type 827// of pointer to another type of pointer, while the address space remains 828// the same. 829def int_nvvm_ptr_local_to_gen: Intrinsic<[llvm_anyptr_ty], 830 [llvm_anyptr_ty], [IntrNoMem], 831 "llvm.nvvm.ptr.local.to.gen">; 832def int_nvvm_ptr_shared_to_gen: Intrinsic<[llvm_anyptr_ty], 833 [llvm_anyptr_ty], [IntrNoMem], 834 "llvm.nvvm.ptr.shared.to.gen">; 835def int_nvvm_ptr_global_to_gen: Intrinsic<[llvm_anyptr_ty], 836 [llvm_anyptr_ty], [IntrNoMem], 837 "llvm.nvvm.ptr.global.to.gen">; 838def int_nvvm_ptr_constant_to_gen: Intrinsic<[llvm_anyptr_ty], 839 [llvm_anyptr_ty], [IntrNoMem], 840 "llvm.nvvm.ptr.constant.to.gen">; 841 842def int_nvvm_ptr_gen_to_global: Intrinsic<[llvm_anyptr_ty], 843 [llvm_anyptr_ty], [IntrNoMem], 844 "llvm.nvvm.ptr.gen.to.global">; 845def int_nvvm_ptr_gen_to_shared: Intrinsic<[llvm_anyptr_ty], 846 [llvm_anyptr_ty], [IntrNoMem], 847 "llvm.nvvm.ptr.gen.to.shared">; 848def int_nvvm_ptr_gen_to_local: Intrinsic<[llvm_anyptr_ty], 849 [llvm_anyptr_ty], [IntrNoMem], 850 "llvm.nvvm.ptr.gen.to.local">; 851def int_nvvm_ptr_gen_to_constant: Intrinsic<[llvm_anyptr_ty], 852 [llvm_anyptr_ty], [IntrNoMem], 853 "llvm.nvvm.ptr.gen.to.constant">; 854 855// Used in nvvm internally to help address space opt and ptx code generation 856// This is for params that are passed to kernel functions by pointer by-val. 857def int_nvvm_ptr_gen_to_param: Intrinsic<[llvm_anyptr_ty], 858 [llvm_anyptr_ty], 859 [IntrNoMem], 860 "llvm.nvvm.ptr.gen.to.param">; 861 862// Move intrinsics, used in nvvm internally 863 864def int_nvvm_move_i16 : Intrinsic<[llvm_i16_ty], [llvm_i16_ty], [IntrNoMem], 865 "llvm.nvvm.move.i16">; 866def int_nvvm_move_i32 : Intrinsic<[llvm_i32_ty], [llvm_i32_ty], [IntrNoMem], 867 "llvm.nvvm.move.i32">; 868def int_nvvm_move_i64 : Intrinsic<[llvm_i64_ty], [llvm_i64_ty], [IntrNoMem], 869 "llvm.nvvm.move.i64">; 870def int_nvvm_move_float : Intrinsic<[llvm_float_ty], [llvm_float_ty], 871 [IntrNoMem], "llvm.nvvm.move.float">; 872def int_nvvm_move_double : Intrinsic<[llvm_double_ty], [llvm_double_ty], 873 [IntrNoMem], "llvm.nvvm.move.double">; 874def int_nvvm_move_ptr : Intrinsic<[llvm_anyptr_ty], [llvm_anyptr_ty], 875 [IntrNoMem, NoCapture<0>], "llvm.nvvm.move.ptr">; 876 877 878/// Error / Warn 879def int_nvvm_compiler_error : 880 Intrinsic<[], [llvm_anyptr_ty], [], "llvm.nvvm.compiler.error">; 881def int_nvvm_compiler_warn : 882 Intrinsic<[], [llvm_anyptr_ty], [], "llvm.nvvm.compiler.warn">; 883 884 885// Old PTX back-end intrinsics retained here for backwards-compatibility 886 887multiclass PTXReadSpecialRegisterIntrinsic_v4i32<string prefix> { 888// FIXME: Do we need the 128-bit integer type version? 889// def _r64 : Intrinsic<[llvm_i128_ty], [], [IntrNoMem]>; 890 891// FIXME: Enable this once v4i32 support is enabled in back-end. 892// def _v4i16 : Intrinsic<[llvm_v4i32_ty], [], [IntrNoMem]>; 893 894 def _x : Intrinsic<[llvm_i32_ty], [], [IntrNoMem]>, 895 GCCBuiltin<!strconcat(prefix, "_x")>; 896 def _y : Intrinsic<[llvm_i32_ty], [], [IntrNoMem]>, 897 GCCBuiltin<!strconcat(prefix, "_y")>; 898 def _z : Intrinsic<[llvm_i32_ty], [], [IntrNoMem]>, 899 GCCBuiltin<!strconcat(prefix, "_z")>; 900 def _w : Intrinsic<[llvm_i32_ty], [], [IntrNoMem]>, 901 GCCBuiltin<!strconcat(prefix, "_w")>; 902} 903 904class PTXReadSpecialRegisterIntrinsic_r32<string name> 905 : Intrinsic<[llvm_i32_ty], [], [IntrNoMem]>, 906 GCCBuiltin<name>; 907 908class PTXReadSpecialRegisterIntrinsic_r64<string name> 909 : Intrinsic<[llvm_i64_ty], [], [IntrNoMem]>, 910 GCCBuiltin<name>; 911 912defm int_ptx_read_tid : PTXReadSpecialRegisterIntrinsic_v4i32 913 <"__builtin_ptx_read_tid">; 914defm int_ptx_read_ntid : PTXReadSpecialRegisterIntrinsic_v4i32 915 <"__builtin_ptx_read_ntid">; 916 917def int_ptx_read_laneid : PTXReadSpecialRegisterIntrinsic_r32 918 <"__builtin_ptx_read_laneid">; 919def int_ptx_read_warpid : PTXReadSpecialRegisterIntrinsic_r32 920 <"__builtin_ptx_read_warpid">; 921def int_ptx_read_nwarpid : PTXReadSpecialRegisterIntrinsic_r32 922 <"__builtin_ptx_read_nwarpid">; 923 924defm int_ptx_read_ctaid : PTXReadSpecialRegisterIntrinsic_v4i32 925 <"__builtin_ptx_read_ctaid">; 926defm int_ptx_read_nctaid : PTXReadSpecialRegisterIntrinsic_v4i32 927 <"__builtin_ptx_read_nctaid">; 928 929def int_ptx_read_smid : PTXReadSpecialRegisterIntrinsic_r32 930 <"__builtin_ptx_read_smid">; 931def int_ptx_read_nsmid : PTXReadSpecialRegisterIntrinsic_r32 932 <"__builtin_ptx_read_nsmid">; 933def int_ptx_read_gridid : PTXReadSpecialRegisterIntrinsic_r32 934 <"__builtin_ptx_read_gridid">; 935 936def int_ptx_read_lanemask_eq : PTXReadSpecialRegisterIntrinsic_r32 937 <"__builtin_ptx_read_lanemask_eq">; 938def int_ptx_read_lanemask_le : PTXReadSpecialRegisterIntrinsic_r32 939 <"__builtin_ptx_read_lanemask_le">; 940def int_ptx_read_lanemask_lt : PTXReadSpecialRegisterIntrinsic_r32 941 <"__builtin_ptx_read_lanemask_lt">; 942def int_ptx_read_lanemask_ge : PTXReadSpecialRegisterIntrinsic_r32 943 <"__builtin_ptx_read_lanemask_ge">; 944def int_ptx_read_lanemask_gt : PTXReadSpecialRegisterIntrinsic_r32 945 <"__builtin_ptx_read_lanemask_gt">; 946 947def int_ptx_read_clock : PTXReadSpecialRegisterIntrinsic_r32 948 <"__builtin_ptx_read_clock">; 949def int_ptx_read_clock64 : PTXReadSpecialRegisterIntrinsic_r64 950 <"__builtin_ptx_read_clock64">; 951 952def int_ptx_read_pm0 : PTXReadSpecialRegisterIntrinsic_r32 953 <"__builtin_ptx_read_pm0">; 954def int_ptx_read_pm1 : PTXReadSpecialRegisterIntrinsic_r32 955 <"__builtin_ptx_read_pm1">; 956def int_ptx_read_pm2 : PTXReadSpecialRegisterIntrinsic_r32 957 <"__builtin_ptx_read_pm2">; 958def int_ptx_read_pm3 : PTXReadSpecialRegisterIntrinsic_r32 959 <"__builtin_ptx_read_pm3">; 960 961def int_ptx_bar_sync : Intrinsic<[], [llvm_i32_ty], []>, 962 GCCBuiltin<"__builtin_ptx_bar_sync">; 963