205 const llvm::Type*
const targetType,
206 const std::string& twine =
"")
209#define BIND_ARITHMETIC_CAST_OP(Function, Twine) \
210 std::bind(&Function, \
211 std::placeholders::_1, \
212 std::placeholders::_2, \
213 std::placeholders::_3, \
216#if LLVM_VERSION_MAJOR >= 19
218#define BIND_ARITHMETIC_CAST_OP_TRUNC(Function, Twine) \
219 std::bind(&Function, \
220 std::placeholders::_1, \
221 std::placeholders::_2, \
222 std::placeholders::_3, \
227#define BIND_ARITHMETIC_CAST_OP_TRUNC(Function, Twine) \
228 std::bind(&Function, \
229 std::placeholders::_1, \
230 std::placeholders::_2, \
231 std::placeholders::_3, \
235#if LLVM_VERSION_MAJOR >= 19
237#define BIND_ARITHMETIC_CAST_OP_UIFP(Function, Twine) \
238 std::bind(&Function, \
239 std::placeholders::_1, \
240 std::placeholders::_2, \
241 std::placeholders::_3, \
245#define BIND_ARITHMETIC_CAST_OP_UIFP(Function, Twine) \
246 std::bind(&Function, \
247 std::placeholders::_1, \
248 std::placeholders::_2, \
249 std::placeholders::_3, \
254#define BIND_ARITHMETIC_CAST_OP_ZEXT(Function, Twine) \
255 std::bind(&Function, \
256 std::placeholders::_1, \
257 std::placeholders::_2, \
258 std::placeholders::_3, \
262#if LLVM_VERSION_MAJOR >= 20
263#define BIND_ARITHMETIC_CAST_OP_FP(Function, Twine) \
264 std::bind(&Function, \
265 std::placeholders::_1, \
266 std::placeholders::_2, \
267 std::placeholders::_3, \
271#define BIND_ARITHMETIC_CAST_OP_FP(Function, Twine) \
272 std::bind(&Function, \
273 std::placeholders::_1, \
274 std::placeholders::_2, \
275 std::placeholders::_3, \
279 if (targetType->isDoubleTy()) {
288 else if (targetType->isFloatTy()) {
297 else if (targetType->isHalfTy()) {
306 else if (targetType->isIntegerTy(64)) {
315 else if (targetType->isIntegerTy(32)) {
324 else if (targetType->isIntegerTy(16)) {
333 else if (targetType->isIntegerTy(8)) {
342 else if (targetType->isIntegerTy(1)) {
352#undef BIND_ARITHMETIC_CAST_OP