Changeset View
Changeset View
Standalone View
Standalone View
include/llvm/IR/IntrinsicsX86.td
- This file is larger than 256 KB, so syntax highlighting is disabled by default.
Show First 20 Lines • Show All 358 Lines • ▼ Show 20 Lines | def int_x86_sse2_ucomige_sd : GCCBuiltin<"__builtin_ia32_ucomisdge">, | ||||
llvm_v2f64_ty], [IntrNoMem]>; | llvm_v2f64_ty], [IntrNoMem]>; | ||||
def int_x86_sse2_ucomineq_sd : GCCBuiltin<"__builtin_ia32_ucomisdneq">, | def int_x86_sse2_ucomineq_sd : GCCBuiltin<"__builtin_ia32_ucomisdneq">, | ||||
Intrinsic<[llvm_i32_ty], [llvm_v2f64_ty, | Intrinsic<[llvm_i32_ty], [llvm_v2f64_ty, | ||||
llvm_v2f64_ty], [IntrNoMem]>; | llvm_v2f64_ty], [IntrNoMem]>; | ||||
} | } | ||||
// Integer arithmetic ops. | // Integer arithmetic ops. | ||||
let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.". | let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.". | ||||
def int_x86_sse2_padds_b : GCCBuiltin<"__builtin_ia32_paddsb128">, | def int_x86_sse2_padds_b : // FIXME: remove this intrinsic | ||||
sroland: FWIW I don't quite agree this is really a FIXME (not without having some appropriate… | |||||
Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, | Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, | ||||
llvm_v16i8_ty], [IntrNoMem, Commutative]>; | llvm_v16i8_ty], [IntrNoMem, Commutative]>; | ||||
def int_x86_sse2_padds_w : GCCBuiltin<"__builtin_ia32_paddsw128">, | def int_x86_sse2_padds_w : // FIXME: remove this intrinsic | ||||
Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, | Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, | ||||
llvm_v8i16_ty], [IntrNoMem, Commutative]>; | llvm_v8i16_ty], [IntrNoMem, Commutative]>; | ||||
def int_x86_sse2_paddus_b : GCCBuiltin<"__builtin_ia32_paddusb128">, | def int_x86_sse2_psubs_b : // FIXME: remove this intrinsic | ||||
Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, | |||||
llvm_v16i8_ty], [IntrNoMem, Commutative]>; | |||||
def int_x86_sse2_paddus_w : GCCBuiltin<"__builtin_ia32_paddusw128">, | |||||
Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, | |||||
llvm_v8i16_ty], [IntrNoMem, Commutative]>; | |||||
def int_x86_sse2_psubs_b : GCCBuiltin<"__builtin_ia32_psubsb128">, | |||||
Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, | |||||
llvm_v16i8_ty], [IntrNoMem]>; | |||||
def int_x86_sse2_psubs_w : GCCBuiltin<"__builtin_ia32_psubsw128">, | |||||
Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, | |||||
llvm_v8i16_ty], [IntrNoMem]>; | |||||
def int_x86_sse2_psubus_b : GCCBuiltin<"__builtin_ia32_psubusb128">, | |||||
Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, | Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, | ||||
llvm_v16i8_ty], [IntrNoMem]>; | llvm_v16i8_ty], [IntrNoMem]>; | ||||
def int_x86_sse2_psubus_w : GCCBuiltin<"__builtin_ia32_psubusw128">, | def int_x86_sse2_psubs_w : // FIXME: remove this intrinsic | ||||
Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, | Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, | ||||
llvm_v8i16_ty], [IntrNoMem]>; | llvm_v8i16_ty], [IntrNoMem]>; | ||||
def int_x86_sse2_pmulhu_w : GCCBuiltin<"__builtin_ia32_pmulhuw128">, | def int_x86_sse2_pmulhu_w : GCCBuiltin<"__builtin_ia32_pmulhuw128">, | ||||
Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, | Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, | ||||
llvm_v8i16_ty], [IntrNoMem, Commutative]>; | llvm_v8i16_ty], [IntrNoMem, Commutative]>; | ||||
def int_x86_sse2_pmulh_w : GCCBuiltin<"__builtin_ia32_pmulhw128">, | def int_x86_sse2_pmulh_w : GCCBuiltin<"__builtin_ia32_pmulhw128">, | ||||
Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, | Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, | ||||
llvm_v8i16_ty], [IntrNoMem, Commutative]>; | llvm_v8i16_ty], [IntrNoMem, Commutative]>; | ||||
▲ Show 20 Lines • Show All 956 Lines • ▼ Show 20 Lines | Intrinsic<[llvm_i64_ty], | ||||
[IntrNoMem]>; | [IntrNoMem]>; | ||||
} | } | ||||
//===----------------------------------------------------------------------===// | //===----------------------------------------------------------------------===// | ||||
// AVX2 | // AVX2 | ||||
// Integer arithmetic ops. | // Integer arithmetic ops. | ||||
let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.". | let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.". | ||||
def int_x86_avx2_padds_b : GCCBuiltin<"__builtin_ia32_paddsb256">, | def int_x86_avx2_padds_b : // FIXME: remove this intrinsic | ||||
Intrinsic<[llvm_v32i8_ty], [llvm_v32i8_ty, | |||||
llvm_v32i8_ty], [IntrNoMem, Commutative]>; | |||||
def int_x86_avx2_padds_w : GCCBuiltin<"__builtin_ia32_paddsw256">, | |||||
Intrinsic<[llvm_v16i16_ty], [llvm_v16i16_ty, | |||||
llvm_v16i16_ty], [IntrNoMem, Commutative]>; | |||||
def int_x86_avx2_paddus_b : GCCBuiltin<"__builtin_ia32_paddusb256">, | |||||
Intrinsic<[llvm_v32i8_ty], [llvm_v32i8_ty, | Intrinsic<[llvm_v32i8_ty], [llvm_v32i8_ty, | ||||
llvm_v32i8_ty], [IntrNoMem, Commutative]>; | llvm_v32i8_ty], [IntrNoMem, Commutative]>; | ||||
def int_x86_avx2_paddus_w : GCCBuiltin<"__builtin_ia32_paddusw256">, | def int_x86_avx2_padds_w : // FIXME: remove this intrinsic | ||||
Intrinsic<[llvm_v16i16_ty], [llvm_v16i16_ty, | Intrinsic<[llvm_v16i16_ty], [llvm_v16i16_ty, | ||||
llvm_v16i16_ty], [IntrNoMem, Commutative]>; | llvm_v16i16_ty], [IntrNoMem, Commutative]>; | ||||
def int_x86_avx2_psubs_b : GCCBuiltin<"__builtin_ia32_psubsb256">, | def int_x86_avx2_psubs_b : // FIXME: remove this intrinsic | ||||
Intrinsic<[llvm_v32i8_ty], [llvm_v32i8_ty, | |||||
llvm_v32i8_ty], [IntrNoMem]>; | |||||
def int_x86_avx2_psubs_w : GCCBuiltin<"__builtin_ia32_psubsw256">, | |||||
Intrinsic<[llvm_v16i16_ty], [llvm_v16i16_ty, | |||||
llvm_v16i16_ty], [IntrNoMem]>; | |||||
def int_x86_avx2_psubus_b : GCCBuiltin<"__builtin_ia32_psubusb256">, | |||||
Intrinsic<[llvm_v32i8_ty], [llvm_v32i8_ty, | Intrinsic<[llvm_v32i8_ty], [llvm_v32i8_ty, | ||||
llvm_v32i8_ty], [IntrNoMem]>; | llvm_v32i8_ty], [IntrNoMem]>; | ||||
def int_x86_avx2_psubus_w : GCCBuiltin<"__builtin_ia32_psubusw256">, | def int_x86_avx2_psubs_w : // FIXME: remove this intrinsic | ||||
Intrinsic<[llvm_v16i16_ty], [llvm_v16i16_ty, | Intrinsic<[llvm_v16i16_ty], [llvm_v16i16_ty, | ||||
llvm_v16i16_ty], [IntrNoMem]>; | llvm_v16i16_ty], [IntrNoMem]>; | ||||
def int_x86_avx2_pmulhu_w : GCCBuiltin<"__builtin_ia32_pmulhuw256">, | def int_x86_avx2_pmulhu_w : GCCBuiltin<"__builtin_ia32_pmulhuw256">, | ||||
Intrinsic<[llvm_v16i16_ty], [llvm_v16i16_ty, | Intrinsic<[llvm_v16i16_ty], [llvm_v16i16_ty, | ||||
llvm_v16i16_ty], [IntrNoMem, Commutative]>; | llvm_v16i16_ty], [IntrNoMem, Commutative]>; | ||||
def int_x86_avx2_pmulh_w : GCCBuiltin<"__builtin_ia32_pmulhw256">, | def int_x86_avx2_pmulh_w : GCCBuiltin<"__builtin_ia32_pmulhw256">, | ||||
Intrinsic<[llvm_v16i16_ty], [llvm_v16i16_ty, | Intrinsic<[llvm_v16i16_ty], [llvm_v16i16_ty, | ||||
llvm_v16i16_ty], [IntrNoMem, Commutative]>; | llvm_v16i16_ty], [IntrNoMem, Commutative]>; | ||||
▲ Show 20 Lines • Show All 2,287 Lines • ▼ Show 20 Lines | |||||
// Integer arithmetic ops | // Integer arithmetic ops | ||||
let TargetPrefix = "x86" in { | let TargetPrefix = "x86" in { | ||||
def int_x86_avx512_mask_padds_b_128 : // FIXME: remove this intrinsic | def int_x86_avx512_mask_padds_b_128 : // FIXME: remove this intrinsic | ||||
Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_v16i8_ty, | Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_v16i8_ty, | ||||
llvm_v16i8_ty, llvm_i16_ty], [IntrNoMem]>; | llvm_v16i8_ty, llvm_i16_ty], [IntrNoMem]>; | ||||
def int_x86_avx512_mask_padds_b_256 : // FIXME: remove this intrinsic | def int_x86_avx512_mask_padds_b_256 : // FIXME: remove this intrinsic | ||||
Intrinsic<[llvm_v32i8_ty], [llvm_v32i8_ty, llvm_v32i8_ty, | Intrinsic<[llvm_v32i8_ty], [llvm_v32i8_ty, llvm_v32i8_ty, | ||||
llvm_v32i8_ty, llvm_i32_ty], [IntrNoMem]>; | llvm_v32i8_ty, llvm_i32_ty], [IntrNoMem]>; | ||||
def int_x86_avx512_mask_padds_b_512 : GCCBuiltin<"__builtin_ia32_paddsb512_mask">, | def int_x86_avx512_mask_padds_b_512 : // FIXME: remove this intrinsic | ||||
Intrinsic<[llvm_v64i8_ty], [llvm_v64i8_ty, llvm_v64i8_ty, | Intrinsic<[llvm_v64i8_ty], [llvm_v64i8_ty, llvm_v64i8_ty, | ||||
llvm_v64i8_ty, llvm_i64_ty], [IntrNoMem]>; | llvm_v64i8_ty, llvm_i64_ty], [IntrNoMem]>; | ||||
def int_x86_avx512_mask_padds_w_128 : // FIXME: remove this intrinsic | def int_x86_avx512_mask_padds_w_128 : // FIXME: remove this intrinsic | ||||
Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_v8i16_ty, | Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_v8i16_ty, | ||||
llvm_v8i16_ty, llvm_i8_ty], [IntrNoMem]>; | llvm_v8i16_ty, llvm_i8_ty], [IntrNoMem]>; | ||||
def int_x86_avx512_mask_padds_w_256 : // FIXME: remove this intrinsic | def int_x86_avx512_mask_padds_w_256 : // FIXME: remove this intrinsic | ||||
Intrinsic<[llvm_v16i16_ty], [llvm_v16i16_ty, llvm_v16i16_ty, | Intrinsic<[llvm_v16i16_ty], [llvm_v16i16_ty, llvm_v16i16_ty, | ||||
llvm_v16i16_ty, llvm_i16_ty], [IntrNoMem]>; | llvm_v16i16_ty, llvm_i16_ty], [IntrNoMem]>; | ||||
def int_x86_avx512_mask_padds_w_512 : GCCBuiltin<"__builtin_ia32_paddsw512_mask">, | def int_x86_avx512_mask_padds_w_512 : // FIXME: remove this intrinsic | ||||
Intrinsic<[llvm_v32i16_ty], [llvm_v32i16_ty, llvm_v32i16_ty, | |||||
llvm_v32i16_ty, llvm_i32_ty], [IntrNoMem]>; | |||||
def int_x86_avx512_mask_paddus_b_128 : // FIXME: remove this intrinsic | |||||
Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_v16i8_ty, | |||||
llvm_v16i8_ty, llvm_i16_ty], [IntrNoMem]>; | |||||
def int_x86_avx512_mask_paddus_b_256 : // FIXME: remove this intrinsic | |||||
Intrinsic<[llvm_v32i8_ty], [llvm_v32i8_ty, llvm_v32i8_ty, | |||||
llvm_v32i8_ty, llvm_i32_ty], [IntrNoMem]>; | |||||
def int_x86_avx512_mask_paddus_b_512 : GCCBuiltin<"__builtin_ia32_paddusb512_mask">, | |||||
Intrinsic<[llvm_v64i8_ty], [llvm_v64i8_ty, llvm_v64i8_ty, | |||||
llvm_v64i8_ty, llvm_i64_ty], [IntrNoMem]>; | |||||
def int_x86_avx512_mask_paddus_w_128 : // FIXME: remove this intrinsic | |||||
Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_v8i16_ty, | |||||
llvm_v8i16_ty, llvm_i8_ty], [IntrNoMem]>; | |||||
def int_x86_avx512_mask_paddus_w_256 : // FIXME: remove this intrinsic | |||||
Intrinsic<[llvm_v16i16_ty], [llvm_v16i16_ty, llvm_v16i16_ty, | |||||
llvm_v16i16_ty, llvm_i16_ty], [IntrNoMem]>; | |||||
def int_x86_avx512_mask_paddus_w_512 : GCCBuiltin<"__builtin_ia32_paddusw512_mask">, | |||||
Intrinsic<[llvm_v32i16_ty], [llvm_v32i16_ty, llvm_v32i16_ty, | Intrinsic<[llvm_v32i16_ty], [llvm_v32i16_ty, llvm_v32i16_ty, | ||||
llvm_v32i16_ty, llvm_i32_ty], [IntrNoMem]>; | llvm_v32i16_ty, llvm_i32_ty], [IntrNoMem]>; | ||||
def int_x86_avx512_mask_psubs_b_128 : // FIXME: remove this intrinsic | def int_x86_avx512_mask_psubs_b_128 : // FIXME: remove this intrinsic | ||||
Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_v16i8_ty, | Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_v16i8_ty, | ||||
llvm_v16i8_ty, llvm_i16_ty], [IntrNoMem]>; | llvm_v16i8_ty, llvm_i16_ty], [IntrNoMem]>; | ||||
def int_x86_avx512_mask_psubs_b_256 : // FIXME: remove this intrinsic | def int_x86_avx512_mask_psubs_b_256 : // FIXME: remove this intrinsic | ||||
Intrinsic<[llvm_v32i8_ty], [llvm_v32i8_ty, llvm_v32i8_ty, | Intrinsic<[llvm_v32i8_ty], [llvm_v32i8_ty, llvm_v32i8_ty, | ||||
llvm_v32i8_ty, llvm_i32_ty], [IntrNoMem]>; | llvm_v32i8_ty, llvm_i32_ty], [IntrNoMem]>; | ||||
def int_x86_avx512_mask_psubs_b_512 : GCCBuiltin<"__builtin_ia32_psubsb512_mask">, | def int_x86_avx512_mask_psubs_b_512 : // FIXME: remove this intrinsic | ||||
Intrinsic<[llvm_v64i8_ty], [llvm_v64i8_ty, llvm_v64i8_ty, | Intrinsic<[llvm_v64i8_ty], [llvm_v64i8_ty, llvm_v64i8_ty, | ||||
llvm_v64i8_ty, llvm_i64_ty], [IntrNoMem]>; | llvm_v64i8_ty, llvm_i64_ty], [IntrNoMem]>; | ||||
def int_x86_avx512_mask_psubs_w_128 : // FIXME: remove this intrinsic | def int_x86_avx512_mask_psubs_w_128 : // FIXME: remove this intrinsic | ||||
Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_v8i16_ty, | Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_v8i16_ty, | ||||
llvm_v8i16_ty, llvm_i8_ty], [IntrNoMem]>; | llvm_v8i16_ty, llvm_i8_ty], [IntrNoMem]>; | ||||
def int_x86_avx512_mask_psubs_w_256 : // FIXME: remove this intrinsic | def int_x86_avx512_mask_psubs_w_256 : // FIXME: remove this intrinsic | ||||
Intrinsic<[llvm_v16i16_ty], [llvm_v16i16_ty, llvm_v16i16_ty, | Intrinsic<[llvm_v16i16_ty], [llvm_v16i16_ty, llvm_v16i16_ty, | ||||
llvm_v16i16_ty, llvm_i16_ty], [IntrNoMem]>; | llvm_v16i16_ty, llvm_i16_ty], [IntrNoMem]>; | ||||
def int_x86_avx512_mask_psubs_w_512 : GCCBuiltin<"__builtin_ia32_psubsw512_mask">, | def int_x86_avx512_mask_psubs_w_512 : // FIXME: remove this intrinsic | ||||
Intrinsic<[llvm_v32i16_ty], [llvm_v32i16_ty, llvm_v32i16_ty, | |||||
llvm_v32i16_ty, llvm_i32_ty], [IntrNoMem]>; | |||||
def int_x86_avx512_mask_psubus_b_128 : // FIXME: remove this intrinsic | |||||
Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_v16i8_ty, | |||||
llvm_v16i8_ty, llvm_i16_ty], [IntrNoMem]>; | |||||
def int_x86_avx512_mask_psubus_b_256 : // FIXME: remove this intrinsic | |||||
Intrinsic<[llvm_v32i8_ty], [llvm_v32i8_ty, llvm_v32i8_ty, | |||||
llvm_v32i8_ty, llvm_i32_ty], [IntrNoMem]>; | |||||
def int_x86_avx512_mask_psubus_b_512 : GCCBuiltin<"__builtin_ia32_psubusb512_mask">, | |||||
Intrinsic<[llvm_v64i8_ty], [llvm_v64i8_ty, llvm_v64i8_ty, | |||||
llvm_v64i8_ty, llvm_i64_ty], [IntrNoMem]>; | |||||
def int_x86_avx512_mask_psubus_w_128 : // FIXME: remove this intrinsic | |||||
Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_v8i16_ty, | |||||
llvm_v8i16_ty, llvm_i8_ty], [IntrNoMem]>; | |||||
def int_x86_avx512_mask_psubus_w_256 : // FIXME: remove this intrinsic | |||||
Intrinsic<[llvm_v16i16_ty], [llvm_v16i16_ty, llvm_v16i16_ty, | |||||
llvm_v16i16_ty, llvm_i16_ty], [IntrNoMem]>; | |||||
def int_x86_avx512_mask_psubus_w_512 : GCCBuiltin<"__builtin_ia32_psubusw512_mask">, | |||||
Intrinsic<[llvm_v32i16_ty], [llvm_v32i16_ty, llvm_v32i16_ty, | Intrinsic<[llvm_v32i16_ty], [llvm_v32i16_ty, llvm_v32i16_ty, | ||||
llvm_v32i16_ty, llvm_i32_ty], [IntrNoMem]>; | llvm_v32i16_ty, llvm_i32_ty], [IntrNoMem]>; | ||||
def int_x86_avx512_pmulhu_w_512 : GCCBuiltin<"__builtin_ia32_pmulhuw512">, | def int_x86_avx512_pmulhu_w_512 : GCCBuiltin<"__builtin_ia32_pmulhuw512">, | ||||
Intrinsic<[llvm_v32i16_ty], [llvm_v32i16_ty, | Intrinsic<[llvm_v32i16_ty], [llvm_v32i16_ty, | ||||
llvm_v32i16_ty], [IntrNoMem, Commutative]>; | llvm_v32i16_ty], [IntrNoMem, Commutative]>; | ||||
def int_x86_avx512_pmulh_w_512 : GCCBuiltin<"__builtin_ia32_pmulhw512">, | def int_x86_avx512_pmulh_w_512 : GCCBuiltin<"__builtin_ia32_pmulhw512">, | ||||
Intrinsic<[llvm_v32i16_ty], [llvm_v32i16_ty, | Intrinsic<[llvm_v32i16_ty], [llvm_v32i16_ty, | ||||
llvm_v32i16_ty], [IntrNoMem, Commutative]>; | llvm_v32i16_ty], [IntrNoMem, Commutative]>; | ||||
▲ Show 20 Lines • Show All 1,458 Lines • Show Last 20 Lines |
FWIW I don't quite agree this is really a FIXME (not without having some appropriate replacement, like a generic llvm intrinsic for saturate arithmetic).
I'd take an intrinsic over tons of simple ir ops (on the vague hope it will get recognized again unless some other optimization messed it up) any day of the week.
But otherwise looks alright to me.