void needPassByRef(AbiState *state, jl_datatype_t *dt, bool *byRef, bool *inReg) { size_t size = jl_datatype_size(dt); if (is_complex64(dt) || is_complex128(dt) || (jl_is_bitstype(dt) && size <= 8)) return; *byRef = true; }
bool needPassByRef(jl_datatype_t *dt, AttrBuilder &ab) override { size_t size = jl_datatype_size(dt); if (is_complex64(dt) || is_complex128(dt) || (jl_is_primitivetype(dt) && size <= 8)) return false; ab.addAttribute(Attribute::ByVal); return true; }
Type *preferred_llvm_type(jl_datatype_t *dt, bool isret) { if (!isret) return NULL; // special case Complex{Float32} as a return type if (is_complex64(dt)) return T_int64; return NULL; }
bool use_sret(AbiState *state, jl_datatype_t *dt) { size_t size = jl_datatype_size(dt); if (size == 0) return false; if (is_complex64(dt) || (jl_is_bitstype(dt) && size <= 8)) return false; return true; }
bool use_sret(jl_datatype_t *dt) override { size_t size = jl_datatype_size(dt); if (size == 0) return false; if (is_complex64(dt) || (jl_is_primitivetype(dt) && size <= 8)) return false; return true; }