Lines Matching refs:exp

137 					    rtx target, tree exp,
237 get_object_alignment_2 (tree exp, unsigned int *alignp,
249 exp = get_inner_reference (exp, &bitsize, &bitpos, &offset, &mode,
254 if (TREE_CODE (exp) == FUNCTION_DECL)
263 else if (TREE_CODE (exp) == LABEL_DECL)
265 else if (TREE_CODE (exp) == CONST_DECL)
268 exp = DECL_INITIAL (exp);
269 align = TYPE_ALIGN (TREE_TYPE (exp));
270 if (CONSTANT_CLASS_P (exp))
271 align = targetm.constant_alignment (exp, align);
275 else if (DECL_P (exp))
277 align = DECL_ALIGN (exp);
280 else if (TREE_CODE (exp) == INDIRECT_REF
281 || TREE_CODE (exp) == MEM_REF
282 || TREE_CODE (exp) == TARGET_MEM_REF)
284 tree addr = TREE_OPERAND (exp, 0);
308 if (TREE_CODE (exp) == TARGET_MEM_REF)
310 if (TMR_INDEX (exp))
313 if (TMR_STEP (exp))
314 step = TREE_INT_CST_LOW (TMR_STEP (exp));
317 if (TMR_INDEX2 (exp))
329 && (talign = min_align_of_type (TREE_TYPE (exp)) * BITS_PER_UNIT)
336 if (TREE_CODE (exp) == MEM_REF
337 || TREE_CODE (exp) == TARGET_MEM_REF)
338 bitpos += mem_ref_offset (exp).force_shwi () * BITS_PER_UNIT;
341 else if (TREE_CODE (exp) == STRING_CST)
345 align = TYPE_ALIGN (TREE_TYPE (exp));
346 if (CONSTANT_CLASS_P (exp))
347 align = targetm.constant_alignment (exp, align);
385 get_object_alignment_1 (tree exp, unsigned int *alignp,
390 if (TREE_CODE (exp) == WITH_SIZE_EXPR)
391 exp = TREE_OPERAND (exp, 0);
392 return get_object_alignment_2 (exp, alignp, bitposp, false);
398 get_object_alignment (tree exp)
403 get_object_alignment_1 (exp, &align, &bitpos);
421 get_pointer_alignment_1 (tree exp, unsigned int *alignp,
424 STRIP_NOPS (exp);
426 if (TREE_CODE (exp) == ADDR_EXPR)
427 return get_object_alignment_2 (TREE_OPERAND (exp, 0),
429 else if (TREE_CODE (exp) == POINTER_PLUS_EXPR)
433 bool res = get_pointer_alignment_1 (TREE_OPERAND (exp, 0),
435 if (TREE_CODE (TREE_OPERAND (exp, 1)) == INTEGER_CST)
436 bitpos += TREE_INT_CST_LOW (TREE_OPERAND (exp, 1)) * BITS_PER_UNIT;
439 unsigned int trailing_zeros = tree_ctz (TREE_OPERAND (exp, 1));
451 else if (TREE_CODE (exp) == SSA_NAME
452 && POINTER_TYPE_P (TREE_TYPE (exp)))
455 struct ptr_info_def *pi = SSA_NAME_PTR_INFO (exp);
475 else if (TREE_CODE (exp) == INTEGER_CST)
478 *bitposp = ((TREE_INT_CST_LOW (exp) * BITS_PER_UNIT)
496 get_pointer_alignment (tree exp)
501 get_pointer_alignment_1 (exp, &align, &bitpos);
815 builtin_save_expr (tree exp)
817 if (TREE_CODE (exp) == SSA_NAME
818 || (TREE_ADDRESSABLE (exp) == 0
819 && (TREE_CODE (exp) == PARM_DECL
820 || (VAR_P (exp) && !TREE_STATIC (exp)))))
821 return exp;
823 return save_expr (exp);
1173 expand_builtin_nonlocal_goto (tree exp)
1179 if (!validate_arglist (exp, POINTER_TYPE, POINTER_TYPE, VOID_TYPE))
1182 t_label = CALL_EXPR_ARG (exp, 0);
1183 t_save_area = CALL_EXPR_ARG (exp, 1);
1282 expand_builtin_prefetch (tree exp)
1288 if (!validate_arglist (exp, POINTER_TYPE, 0))
1291 arg0 = CALL_EXPR_ARG (exp, 0);
1296 nargs = call_expr_nargs (exp);
1298 arg1 = CALL_EXPR_ARG (exp, 1);
1302 arg2 = CALL_EXPR_ARG (exp, 2);
1361 get_memory_rtx (tree exp, tree len)
1363 tree orig_exp = exp, base;
1368 if (TREE_CODE (exp) == SAVE_EXPR && !SAVE_EXPR_RESOLVED_P (exp))
1369 exp = TREE_OPERAND (exp, 0);
1376 while (CONVERT_EXPR_P (exp)
1377 && POINTER_TYPE_P (TREE_TYPE (TREE_OPERAND (exp, 0))))
1378 exp = TREE_OPERAND (exp, 0);
1382 exp = fold_build2 (MEM_REF,
1386 exp, build_int_cst (ptr_type_node, 0));
1391 if (is_gimple_mem_ref_addr (TREE_OPERAND (exp, 0)))
1392 set_mem_attributes (mem, exp, 0);
1393 else if (TREE_CODE (TREE_OPERAND (exp, 0)) == ADDR_EXPR
1394 && (base = get_base_address (TREE_OPERAND (TREE_OPERAND (exp, 0),
1397 unsigned int align = get_pointer_alignment (TREE_OPERAND (exp, 0));
1398 exp = build_fold_addr_expr (base);
1399 exp = fold_build2 (MEM_REF,
1404 exp, build_int_cst (ptr_type_node, 0));
1405 set_mem_attributes (mem, exp, 0);
1881 expand_builtin_classify_type (tree exp)
1883 if (call_expr_nargs (exp))
1884 return GEN_INT (type_to_class (TREE_TYPE (CALL_EXPR_ARG (exp, 0))));
2250 expand_builtin_mathfn_ternary (tree exp, rtx target, rtx subtarget)
2255 tree fndecl = get_callee_fndecl (exp);
2259 if (!validate_arglist (exp, REAL_TYPE, REAL_TYPE, REAL_TYPE, VOID_TYPE))
2262 arg0 = CALL_EXPR_ARG (exp, 0);
2263 arg1 = CALL_EXPR_ARG (exp, 1);
2264 arg2 = CALL_EXPR_ARG (exp, 2);
2276 mode = TYPE_MODE (TREE_TYPE (exp));
2285 CALL_EXPR_ARG (exp, 0) = arg0 = builtin_save_expr (arg0);
2286 CALL_EXPR_ARG (exp, 1) = arg1 = builtin_save_expr (arg1);
2287 CALL_EXPR_ARG (exp, 2) = arg2 = builtin_save_expr (arg2);
2306 return expand_call (exp, target, target == const0_rtx);
2325 expand_builtin_mathfn_3 (tree exp, rtx target, rtx subtarget)
2330 tree fndecl = get_callee_fndecl (exp);
2334 if (!validate_arglist (exp, REAL_TYPE, VOID_TYPE))
2337 arg = CALL_EXPR_ARG (exp, 0);
2349 mode = TYPE_MODE (TREE_TYPE (exp));
2372 CALL_EXPR_ARG (exp, 0) = arg = builtin_save_expr (arg);
2415 return expand_call (exp, target, target == const0_rtx);
2470 expand_builtin_interclass_mathfn (tree exp, rtx target)
2474 tree fndecl = get_callee_fndecl (exp);
2478 if (!validate_arglist (exp, REAL_TYPE, VOID_TYPE))
2481 arg = CALL_EXPR_ARG (exp, 0);
2494 CALL_EXPR_ARG (exp, 0) = arg = builtin_save_expr (arg);
2501 create_output_operand (&ops[0], target, TYPE_MODE (TREE_TYPE (exp)));
2507 CALL_EXPR_ARG (exp, 0) = orig_arg;
2519 expand_builtin_sincos (tree exp)
2525 location_t loc = EXPR_LOCATION (exp);
2528 if (!validate_arglist (exp, REAL_TYPE,
2532 arg = CALL_EXPR_ARG (exp, 0);
2533 sinp = CALL_EXPR_ARG (exp, 1);
2534 cosp = CALL_EXPR_ARG (exp, 2);
2570 expand_builtin_fegetround (tree exp, rtx target, machine_mode target_mode)
2572 if (!validate_arglist (exp, VOID_TYPE))
2596 expand_builtin_feclear_feraise_except (tree exp, rtx target,
2599 if (!validate_arglist (exp, INTEGER_TYPE, VOID_TYPE))
2601 rtx op0 = expand_normal (CALL_EXPR_ARG (exp, 0));
2628 expand_builtin_cexpi (tree exp, rtx target)
2630 tree fndecl = get_callee_fndecl (exp);
2634 location_t loc = EXPR_LOCATION (exp);
2636 if (!validate_arglist (exp, REAL_TYPE, VOID_TYPE))
2639 arg = CALL_EXPR_ARG (exp, 0);
2759 expand_builtin_int_roundingfn (tree exp, rtx target)
2764 tree fndecl = get_callee_fndecl (exp);
2770 if (!validate_arglist (exp, REAL_TYPE, VOID_TYPE))
2773 arg = CALL_EXPR_ARG (exp, 0);
2796 mode = TYPE_MODE (TREE_TYPE (exp));
2803 CALL_EXPR_ARG (exp, 0) = arg = builtin_save_expr (arg);
2876 exp = build_call_nofold_loc (EXPR_LOCATION (exp), fallback_fndecl, 1, arg);
2878 tmp = expand_normal (exp);
2879 tmp = maybe_emit_group_store (tmp, TREE_TYPE (exp));
2896 expand_builtin_int_roundingfn_2 (tree exp, rtx target)
2901 tree fndecl = get_callee_fndecl (exp);
2906 if (!validate_arglist (exp, REAL_TYPE, VOID_TYPE))
2909 arg = CALL_EXPR_ARG (exp, 0);
2938 mode = TYPE_MODE (TREE_TYPE (exp));
2948 CALL_EXPR_ARG (exp, 0) = arg = builtin_save_expr (arg);
2991 exp = build_call_nofold_loc (EXPR_LOCATION (exp),
2994 target = expand_call (exp, NULL_RTX, target == const0_rtx);
2995 target = maybe_emit_group_store (target, TREE_TYPE (exp));
3000 return expand_call (exp, target, target == const0_rtx);
3009 expand_builtin_powi (tree exp, rtx target)
3016 if (! validate_arglist (exp, REAL_TYPE, INTEGER_TYPE, VOID_TYPE))
3019 arg0 = CALL_EXPR_ARG (exp, 0);
3020 arg1 = CALL_EXPR_ARG (exp, 1);
3021 mode = TYPE_MODE (TREE_TYPE (exp));
3050 expand_builtin_strlen (tree exp, rtx target,
3053 if (!validate_arglist (exp, POINTER_TYPE, VOID_TYPE))
3056 tree src = CALL_EXPR_ARG (exp, 0);
3112 maybe_warn_nonstring_arg (get_callee_fndecl (exp), exp);
3149 expand_builtin_strnlen (tree exp, rtx target, machine_mode target_mode)
3151 if (!validate_arglist (exp, POINTER_TYPE, INTEGER_TYPE, VOID_TYPE))
3154 tree src = CALL_EXPR_ARG (exp, 0);
3155 tree bound = CALL_EXPR_ARG (exp, 1);
3161 if (EXPR_HAS_LOCATION (exp))
3162 loc = EXPR_LOCATION (exp);
3303 expand_builtin_memcpy (tree exp, rtx target)
3305 if (!validate_arglist (exp,
3309 tree dest = CALL_EXPR_ARG (exp, 0);
3310 tree src = CALL_EXPR_ARG (exp, 1);
3311 tree len = CALL_EXPR_ARG (exp, 2);
3313 return expand_builtin_memory_copy_args (dest, src, len, target, exp,
3321 expand_builtin_memmove (tree exp, rtx target)
3323 if (!validate_arglist (exp,
3327 tree dest = CALL_EXPR_ARG (exp, 0);
3328 tree src = CALL_EXPR_ARG (exp, 1);
3329 tree len = CALL_EXPR_ARG (exp, 2);
3331 return expand_builtin_memory_copy_args (dest, src, len, target, exp,
3341 expand_builtin_mempcpy (tree exp, rtx target)
3343 if (!validate_arglist (exp,
3347 tree dest = CALL_EXPR_ARG (exp, 0);
3348 tree src = CALL_EXPR_ARG (exp, 1);
3349 tree len = CALL_EXPR_ARG (exp, 2);
3369 target, exp, /*retmode=*/ RETURN_END);
3379 rtx target, tree exp, memop_ret retmode,
3447 if (CALL_EXPR_TAILCALL (exp)
3548 expand_builtin_strcpy (tree exp, rtx target)
3550 if (!validate_arglist (exp, POINTER_TYPE, POINTER_TYPE, VOID_TYPE))
3553 tree dest = CALL_EXPR_ARG (exp, 0);
3554 tree src = CALL_EXPR_ARG (exp, 1);
3556 return expand_builtin_strcpy_args (exp, dest, src, target);
3577 expand_builtin_stpcpy_1 (tree exp, rtx target, machine_mode mode)
3580 location_t loc = EXPR_LOCATION (exp);
3582 if (!validate_arglist (exp, POINTER_TYPE, POINTER_TYPE, VOID_TYPE))
3585 dst = CALL_EXPR_ARG (exp, 0);
3586 src = CALL_EXPR_ARG (exp, 1);
3612 target, exp,
3624 ret = expand_builtin_strcpy_args (exp, dst, src, target);
3658 expand_builtin_stpcpy (tree exp, rtx target, machine_mode mode)
3660 if (rtx ret = expand_builtin_stpcpy_1 (exp, target, mode))
3664 maybe_warn_nonstring_arg (get_callee_fndecl (exp), exp);
3694 check_strncat_sizes (tree exp, tree objsize)
3696 tree dest = CALL_EXPR_ARG (exp, 0);
3697 tree src = CALL_EXPR_ARG (exp, 1);
3698 tree maxread = CALL_EXPR_ARG (exp, 2);
3708 access_data data (nullptr, exp, access_read_write, maxread, true);
3729 location_t loc = EXPR_LOCATION (exp);
3732 get_callee_fndecl (exp), maxread);
3745 return check_access (exp, /*dstwrite=*/NULL_TREE, maxread, srclen,
3753 expand_builtin_strncpy (tree exp, rtx target)
3755 location_t loc = EXPR_LOCATION (exp);
3757 if (!validate_arglist (exp,
3760 tree dest = CALL_EXPR_ARG (exp, 0);
3761 tree src = CALL_EXPR_ARG (exp, 1);
3763 tree len = CALL_EXPR_ARG (exp, 2);
3979 expand_builtin_memset (tree exp, rtx target, machine_mode mode)
3981 if (!validate_arglist (exp,
3985 tree dest = CALL_EXPR_ARG (exp, 0);
3986 tree val = CALL_EXPR_ARG (exp, 1);
3987 tree len = CALL_EXPR_ARG (exp, 2);
3989 return expand_builtin_memset_args (dest, val, len, target, mode, exp);
4309 expand_builtin_bzero (tree exp)
4311 if (!validate_arglist (exp, POINTER_TYPE, INTEGER_TYPE, VOID_TYPE))
4314 tree dest = CALL_EXPR_ARG (exp, 0);
4315 tree size = CALL_EXPR_ARG (exp, 1);
4322 location_t loc = EXPR_LOCATION (exp);
4327 const0_rtx, VOIDmode, exp);
4359 expand_builtin_memcmp (tree exp, rtx target, bool result_eq)
4361 if (!validate_arglist (exp,
4365 tree arg1 = CALL_EXPR_ARG (exp, 0);
4366 tree arg2 = CALL_EXPR_ARG (exp, 1);
4367 tree len = CALL_EXPR_ARG (exp, 2);
4372 enum built_in_function fcode = DECL_FUNCTION_CODE (get_callee_fndecl (exp));
4375 result = inline_expand_builtin_bytecmp (exp, target);
4380 machine_mode mode = TYPE_MODE (TREE_TYPE (exp));
4381 location_t loc = EXPR_LOCATION (exp);
4453 expand_builtin_strcmp (tree exp, ATTRIBUTE_UNUSED rtx target)
4455 if (!validate_arglist (exp, POINTER_TYPE, POINTER_TYPE, VOID_TYPE))
4458 tree arg1 = CALL_EXPR_ARG (exp, 0);
4459 tree arg2 = CALL_EXPR_ARG (exp, 1);
4463 result = inline_expand_builtin_bytecmp (exp, target);
4539 tree fndecl = get_callee_fndecl (exp);
4543 machine_mode mode = TYPE_MODE (TREE_TYPE (exp));
4554 tree fn = build_call_nofold_loc (EXPR_LOCATION (exp), fndecl, 2, arg1, arg2);
4555 copy_warning (fn, exp);
4557 CALL_EXPR_TAILCALL (fn) = CALL_EXPR_TAILCALL (exp);
4566 expand_builtin_strncmp (tree exp, ATTRIBUTE_UNUSED rtx target,
4569 if (!validate_arglist (exp,
4573 tree arg1 = CALL_EXPR_ARG (exp, 0);
4574 tree arg2 = CALL_EXPR_ARG (exp, 1);
4575 tree arg3 = CALL_EXPR_ARG (exp, 2);
4577 location_t loc = EXPR_LOCATION (exp);
4583 result = inline_expand_builtin_bytecmp (exp, target);
4647 tree fndecl = get_callee_fndecl (exp);
4651 mode = TYPE_MODE (TREE_TYPE (exp));
4663 copy_warning (call, exp);
4665 CALL_EXPR_TAILCALL (call) = CALL_EXPR_TAILCALL (exp);
4828 expand_builtin_va_start (tree exp)
4832 location_t loc = EXPR_LOCATION (exp);
4834 if (call_expr_nargs (exp) < 2)
4840 if (fold_builtin_next_arg (exp, true))
4844 valist = stabilize_va_list_loc (loc, CALL_EXPR_ARG (exp, 0), 1);
4857 expand_builtin_va_end (tree exp)
4859 tree valist = CALL_EXPR_ARG (exp, 0);
4874 expand_builtin_va_copy (tree exp)
4877 location_t loc = EXPR_LOCATION (exp);
4879 dst = CALL_EXPR_ARG (exp, 0);
4880 src = CALL_EXPR_ARG (exp, 1);
4925 expand_builtin_frame_address (tree fndecl, tree exp)
4931 if (call_expr_nargs (exp) == 0)
4934 else if (! tree_fits_uhwi_p (CALL_EXPR_ARG (exp, 0)))
4942 unsigned HOST_WIDE_INT count = tree_to_uhwi (CALL_EXPR_ARG (exp, 0));
4976 expand_builtin_alloca (tree exp)
4981 tree fndecl = get_callee_fndecl (exp);
4984 bool alloca_for_var = CALL_ALLOCA_FOR_VAR_P (exp);
4987 ? validate_arglist (exp, INTEGER_TYPE, INTEGER_TYPE, INTEGER_TYPE,
4990 ? validate_arglist (exp, INTEGER_TYPE, INTEGER_TYPE, VOID_TYPE)
4991 : validate_arglist (exp, INTEGER_TYPE, VOID_TYPE));
4997 op0 = expand_normal (CALL_EXPR_ARG (exp, 0));
5002 : TREE_INT_CST_LOW (CALL_EXPR_ARG (exp, 1)));
5006 ? TREE_INT_CST_LOW (CALL_EXPR_ARG (exp, 2))
5017 record_dynamic_alloc (exp);
5028 expand_asan_emit_allocas_unpoison (tree exp)
5030 tree arg0 = CALL_EXPR_ARG (exp, 0);
5031 tree arg1 = CALL_EXPR_ARG (exp, 1);
5052 expand_builtin_bswap (machine_mode target_mode, tree exp, rtx target,
5058 if (!validate_arglist (exp, INTEGER_TYPE, VOID_TYPE))
5061 arg = CALL_EXPR_ARG (exp, 0);
5082 expand_builtin_unop (machine_mode target_mode, tree exp, rtx target,
5087 if (!validate_arglist (exp, INTEGER_TYPE, VOID_TYPE))
5091 op0 = expand_expr (CALL_EXPR_ARG (exp, 0),
5093 && (TYPE_MODE (TREE_TYPE (CALL_EXPR_ARG (exp, 0)))
5098 target = expand_unop (TYPE_MODE (TREE_TYPE (CALL_EXPR_ARG (exp, 0))),
5110 expand_builtin_expect (tree exp, rtx target)
5114 if (call_expr_nargs (exp) < 2)
5116 arg = CALL_EXPR_ARG (exp, 0);
5130 expand_builtin_expect_with_probability (tree exp, rtx target)
5134 if (call_expr_nargs (exp) < 3)
5136 arg = CALL_EXPR_ARG (exp, 0);
5151 expand_builtin_assume_aligned (tree exp, rtx target)
5153 if (call_expr_nargs (exp) < 2)
5155 target = expand_expr (CALL_EXPR_ARG (exp, 0), target, VOIDmode,
5157 gcc_assert (!TREE_SIDE_EFFECTS (CALL_EXPR_ARG (exp, 1))
5158 && (call_expr_nargs (exp) < 3
5159 || !TREE_SIDE_EFFECTS (CALL_EXPR_ARG (exp, 2))));
5203 expand_builtin_fabs (tree exp, rtx target, rtx subtarget)
5209 if (!validate_arglist (exp, REAL_TYPE, VOID_TYPE))
5212 arg = CALL_EXPR_ARG (exp, 0);
5213 CALL_EXPR_ARG (exp, 0) = arg = builtin_save_expr (arg);
5225 expand_builtin_copysign (tree exp, rtx target, rtx subtarget)
5230 if (!validate_arglist (exp, REAL_TYPE, REAL_TYPE, VOID_TYPE))
5233 arg = CALL_EXPR_ARG (exp, 0);
5236 arg = CALL_EXPR_ARG (exp, 1);
5296 expand_builtin___clear_cache (tree exp)
5304 if (!validate_arglist (exp, POINTER_TYPE, POINTER_TYPE, VOID_TYPE))
5310 begin = CALL_EXPR_ARG (exp, 0);
5313 end = CALL_EXPR_ARG (exp, 1);
5345 expand_builtin_init_trampoline (tree exp, bool onstack)
5350 if (!validate_arglist (exp, POINTER_TYPE, POINTER_TYPE,
5354 t_tramp = CALL_EXPR_ARG (exp, 0);
5355 t_func = CALL_EXPR_ARG (exp, 1);
5356 t_chain = CALL_EXPR_ARG (exp, 2);
5403 expand_builtin_adjust_trampoline (tree exp)
5407 if (!validate_arglist (exp, POINTER_TYPE, VOID_TYPE))
5410 tramp = expand_normal (CALL_EXPR_ARG (exp, 0));
5423 expand_builtin_init_descriptor (tree exp)
5428 if (!validate_arglist (exp, POINTER_TYPE, POINTER_TYPE, POINTER_TYPE,
5432 t_descr = CALL_EXPR_ARG (exp, 0);
5433 t_func = CALL_EXPR_ARG (exp, 1);
5434 t_chain = CALL_EXPR_ARG (exp, 2);
5455 expand_builtin_adjust_descriptor (tree exp)
5459 if (!validate_arglist (exp, POINTER_TYPE, VOID_TYPE))
5462 tramp = expand_normal (CALL_EXPR_ARG (exp, 0));
5479 expand_builtin_signbit (tree exp, rtx target)
5488 location_t loc = EXPR_LOCATION (exp);
5490 if (!validate_arglist (exp, REAL_TYPE, VOID_TYPE))
5493 arg = CALL_EXPR_ARG (exp, 0);
5495 rmode = SCALAR_INT_TYPE_MODE (TREE_TYPE (exp));
5509 target = gen_reg_rtx (TYPE_MODE (TREE_TYPE (exp)));
5523 arg = fold_build2_loc (loc, LT_EXPR, TREE_TYPE (exp), arg,
5584 expand_builtin_fork_or_exec (tree fn, tree exp, rtx target, int ignore)
5639 call = rewrite_call_expr (EXPR_LOCATION (exp), exp, 0, decl, 0);
5700 expand_expr_force_mode (tree exp, machine_mode mode)
5705 if (TREE_CODE (exp) == SSA_NAME
5706 && TYPE_MODE (TREE_TYPE (exp)) != mode)
5711 gimple *g = get_gimple_for_ssa_name (exp);
5718 && INTEGRAL_TYPE_P (TREE_TYPE (exp))
5720 && (TYPE_PRECISION (TREE_TYPE (exp))
5722 exp = rhs;
5726 val = expand_expr (exp, NULL_RTX, mode, EXPAND_NORMAL);
5732 old_mode = TYPE_MODE (TREE_TYPE (exp));
5746 expand_builtin_sync_operation (machine_mode mode, tree exp,
5751 location_t loc = EXPR_LOCATION (exp);
5755 tree fndecl = get_callee_fndecl (exp);
5794 mem = get_builtin_sync_mem (CALL_EXPR_ARG (exp, 0), mode);
5795 val = expand_expr_force_mode (CALL_EXPR_ARG (exp, 1), mode);
5807 expand_builtin_compare_and_swap (machine_mode mode, tree exp,
5814 mem = get_builtin_sync_mem (CALL_EXPR_ARG (exp, 0), mode);
5815 old_val = expand_expr_force_mode (CALL_EXPR_ARG (exp, 1), mode);
5816 new_val = expand_expr_force_mode (CALL_EXPR_ARG (exp, 2), mode);
5841 expand_builtin_sync_lock_test_and_set (machine_mode mode, tree exp,
5847 mem = get_builtin_sync_mem (CALL_EXPR_ARG (exp, 0), mode);
5848 val = expand_expr_force_mode (CALL_EXPR_ARG (exp, 1), mode);
5856 expand_builtin_sync_lock_release (machine_mode mode, tree exp)
5861 mem = get_builtin_sync_mem (CALL_EXPR_ARG (exp, 0), mode);
5870 get_memmodel (tree exp)
5874 if (TREE_CODE (exp) != INTEGER_CST)
5877 rtx op = expand_normal (exp);
5903 expand_builtin_atomic_exchange (machine_mode mode, tree exp, rtx target)
5908 model = get_memmodel (CALL_EXPR_ARG (exp, 2));
5914 mem = get_builtin_sync_mem (CALL_EXPR_ARG (exp, 0), mode);
5915 val = expand_expr_force_mode (CALL_EXPR_ARG (exp, 1), mode);
5929 expand_builtin_atomic_compare_exchange (machine_mode mode, tree exp,
5937 memmodel success = get_memmodel (CALL_EXPR_ARG (exp, 4));
5938 memmodel failure = get_memmodel (CALL_EXPR_ARG (exp, 5));
5954 mem = get_builtin_sync_mem (CALL_EXPR_ARG (exp, 0), mode);
5956 expect = expand_normal (CALL_EXPR_ARG (exp, 1));
5959 desired = expand_expr_force_mode (CALL_EXPR_ARG (exp, 2), mode);
5961 weak = CALL_EXPR_ARG (exp, 3);
6027 tree exp = build_call_vec (boolean_type_node, fn, vec);
6029 rtx boolret = expand_call (exp, NULL_RTX, lhs == NULL_TREE);
6103 expand_builtin_atomic_load (machine_mode mode, tree exp, rtx target)
6105 memmodel model = get_memmodel (CALL_EXPR_ARG (exp, 1));
6113 rtx mem = get_builtin_sync_mem (CALL_EXPR_ARG (exp, 0), mode);
6125 expand_builtin_atomic_store (machine_mode mode, tree exp)
6127 memmodel model = get_memmodel (CALL_EXPR_ARG (exp, 2));
6136 rtx mem = get_builtin_sync_mem (CALL_EXPR_ARG (exp, 0), mode);
6137 rtx val = expand_expr_force_mode (CALL_EXPR_ARG (exp, 1), mode);
6154 expand_builtin_atomic_fetch_op (machine_mode mode, tree exp, rtx target,
6163 model = get_memmodel (CALL_EXPR_ARG (exp, 2));
6166 mem = get_builtin_sync_mem (CALL_EXPR_ARG (exp, 0), mode);
6167 val = expand_expr_force_mode (CALL_EXPR_ARG (exp, 1), mode);
6182 fndecl = get_callee_fndecl (exp);
6183 addr = CALL_EXPR_FN (exp);
6193 CALL_EXPR_TAILCALL (exp) = 0;
6196 ret = expand_call (exp, target, ignore);
6297 tree exp = build_call_nary (type, tcall, 2 + is_atomic, ptr,
6302 result = expand_builtin (exp, gen_reg_rtx (mode), NULL_RTX,
6405 tree exp = build_call_nary (type, tcall,
6410 result = expand_builtin (exp, gen_reg_rtx (mode), NULL_RTX,
6428 expand_builtin_atomic_clear (tree exp)
6431 rtx mem = get_builtin_sync_mem (CALL_EXPR_ARG (exp, 0), mode);
6432 memmodel model = get_memmodel (CALL_EXPR_ARG (exp, 1));
6453 expand_builtin_atomic_test_and_set (tree exp, rtx target)
6460 mem = get_builtin_sync_mem (CALL_EXPR_ARG (exp, 0), mode);
6461 model = get_memmodel (CALL_EXPR_ARG (exp, 1));
6546 expand_builtin_atomic_always_lock_free (tree exp)
6549 tree arg0 = CALL_EXPR_ARG (exp, 0);
6550 tree arg1 = CALL_EXPR_ARG (exp, 1);
6588 expand_builtin_atomic_is_lock_free (tree exp)
6591 tree arg0 = CALL_EXPR_ARG (exp, 0);
6592 tree arg1 = CALL_EXPR_ARG (exp, 1);
6616 expand_builtin_atomic_thread_fence (tree exp)
6618 enum memmodel model = get_memmodel (CALL_EXPR_ARG (exp, 0));
6627 expand_builtin_atomic_signal_fence (tree exp)
6629 enum memmodel model = get_memmodel (CALL_EXPR_ARG (exp, 0));
6642 expand_builtin_thread_pointer (tree exp, rtx target)
6645 if (!validate_arglist (exp, VOID_TYPE))
6665 expand_builtin_set_thread_pointer (tree exp)
6668 if (!validate_arglist (exp, POINTER_TYPE, VOID_TYPE))
6674 rtx val = expand_expr (CALL_EXPR_ARG (exp, 0), NULL_RTX,
6717 expand_builtin_goacc_parlevel_id_size (tree exp, rtx target, int ignore)
6722 switch (DECL_FUNCTION_CODE (get_callee_fndecl (exp)))
6744 tree arg = CALL_EXPR_ARG (exp, 0);
6767 target = gen_reg_rtx (TYPE_MODE (TREE_TYPE (exp)));
6858 inline_expand_builtin_bytecmp (tree exp, rtx target)
6860 tree fndecl = get_callee_fndecl (exp);
6876 >= TYPE_PRECISION (TREE_TYPE (exp)))
6879 tree arg1 = CALL_EXPR_ARG (exp, 0);
6880 tree arg2 = CALL_EXPR_ARG (exp, 1);
6881 tree len3_tree = is_ncmp ? CALL_EXPR_ARG (exp, 2) : NULL_TREE;
6949 machine_mode mode = TYPE_MODE (TREE_TYPE (exp));
6962 expand_speculation_safe_value (machine_mode mode, tree exp, rtx target,
6966 unsigned nargs = call_expr_nargs (exp);
6968 tree arg0 = CALL_EXPR_ARG (exp, 0);
6983 tree arg1 = CALL_EXPR_ARG (exp, 1);
7013 expand_builtin (tree exp, rtx target, rtx subtarget, machine_mode mode,
7016 tree fndecl = get_callee_fndecl (exp);
7017 machine_mode target_mode = TYPE_MODE (TREE_TYPE (exp));
7021 return targetm.expand_builtin (exp, target, subtarget, mode, ignore);
7030 return expand_call (exp, target, ignore);
7046 return expand_call (exp, target, ignore);
7064 FOR_EACH_CALL_EXPR_ARG (arg, iter, exp)
7073 FOR_EACH_CALL_EXPR_ARG (arg, iter, exp)
7086 target = expand_builtin_fabs (exp, target, subtarget);
7093 target = expand_builtin_copysign (exp, target, subtarget);
7105 target = expand_builtin_mathfn_ternary (exp, target, subtarget);
7118 target = expand_builtin_interclass_mathfn (exp, target);
7129 target = expand_builtin_int_roundingfn (exp, target);
7140 target = expand_builtin_int_roundingfn_2 (exp, target);
7146 target = expand_builtin_powi (exp, target);
7152 target = expand_builtin_cexpi (exp, target);
7160 target = expand_builtin_mathfn_3 (exp, target, subtarget);
7168 target = expand_builtin_sincos (exp);
7174 target = expand_builtin_fegetround (exp, target, target_mode);
7180 target = expand_builtin_feclear_feraise_except (exp, target, target_mode,
7187 target = expand_builtin_feclear_feraise_except (exp, target, target_mode,
7207 if (!validate_arglist (exp, POINTER_TYPE,
7209 && !validate_arglist (exp, REFERENCE_TYPE,
7216 ops[0] = expand_normal (CALL_EXPR_ARG (exp, 0));
7217 ops[1] = expand_normal (CALL_EXPR_ARG (exp, 1));
7218 ops[2] = expand_normal (CALL_EXPR_ARG (exp, 2));
7227 if (validate_arglist (exp, POINTER_TYPE, VOID_TYPE))
7228 expand_builtin_return (expand_normal (CALL_EXPR_ARG (exp, 0)));
7248 if (fold_builtin_next_arg (exp, false))
7253 expand_builtin___clear_cache (exp);
7257 return expand_builtin_classify_type (exp);
7264 return expand_builtin_frame_address (fndecl, exp);
7269 if (call_expr_nargs (exp) != 0
7277 target = expand_builtin_alloca (exp);
7283 return expand_asan_emit_allocas_unpoison (exp);
7289 expand_stack_restore (CALL_EXPR_ARG (exp, 0));
7296 target = expand_builtin_bswap (target_mode, exp, target, subtarget);
7302 target = expand_builtin_unop (target_mode, exp, target,
7309 target = expand_builtin_unop (target_mode, exp, target,
7316 target = expand_builtin_unop (target_mode, exp, target,
7323 target = expand_builtin_unop (target_mode, exp, target,
7330 target = expand_builtin_unop (target_mode, exp, target,
7337 target = expand_builtin_unop (target_mode, exp, target,
7344 target = expand_builtin_strlen (exp, target, target_mode);
7350 target = expand_builtin_strnlen (exp, target, target_mode);
7356 target = expand_builtin_strcpy (exp, target);
7362 target = expand_builtin_strncpy (exp, target);
7368 target = expand_builtin_stpcpy (exp, target, mode);
7374 target = expand_builtin_memcpy (exp, target);
7380 target = expand_builtin_memmove (exp, target);
7386 target = expand_builtin_mempcpy (exp, target);
7392 target = expand_builtin_memset (exp, target, mode);
7398 target = expand_builtin_bzero (exp);
7407 target = expand_builtin_memcmp (exp, target, true);
7412 TREE_OPERAND (exp, 1)
7420 arg_vec->quick_push (CALL_EXPR_ARG (exp, i));
7421 exp = build_call_vec (TREE_TYPE (exp), CALL_EXPR_FN (exp), arg_vec);
7425 target = expand_builtin_strcmp (exp, target);
7433 target = expand_builtin_memcmp (exp, target, true);
7438 TREE_OPERAND (exp, 1)
7443 target = expand_builtin_strncmp (exp, target, mode);
7451 target = expand_builtin_memcmp (exp, target, fcode == BUILT_IN_MEMCMP_EQ);
7457 TREE_OPERAND (exp, 1) = build_fold_addr_expr (newdecl);
7468 if (validate_arglist (exp, POINTER_TYPE, POINTER_TYPE, VOID_TYPE))
7470 rtx buf_addr = expand_expr (CALL_EXPR_ARG (exp, 0), subtarget,
7472 tree label = TREE_OPERAND (CALL_EXPR_ARG (exp, 1), 0);
7490 if (validate_arglist (exp, POINTER_TYPE, VOID_TYPE))
7492 tree label = TREE_OPERAND (CALL_EXPR_ARG (exp, 0), 0);
7504 if (validate_arglist (exp, POINTER_TYPE, INTEGER_TYPE, VOID_TYPE))
7506 rtx buf_addr = expand_expr (CALL_EXPR_ARG (exp, 0), subtarget,
7508 rtx value = expand_normal (CALL_EXPR_ARG (exp, 1));
7522 target = expand_builtin_nonlocal_goto (exp);
7530 if (validate_arglist (exp, POINTER_TYPE, VOID_TYPE))
7533 = expand_normal (CALL_EXPR_ARG (exp, 0));
7552 target = expand_builtin_signbit (exp, target);
7567 expand_builtin_init_dwarf_reg_sizes (CALL_EXPR_ARG (exp, 0));
7571 return expand_builtin_frob_return_addr (CALL_EXPR_ARG (exp, 0));
7573 return expand_builtin_extract_return_addr (CALL_EXPR_ARG (exp, 0));
7575 expand_builtin_eh_return (CALL_EXPR_ARG (exp, 0),
7576 CALL_EXPR_ARG (exp, 1));
7579 return expand_builtin_eh_return_data_regno (exp);
7581 return expand_builtin_extend_pointer (CALL_EXPR_ARG (exp, 0));
7583 return expand_builtin_eh_pointer (exp);
7585 return expand_builtin_eh_filter (exp);
7587 return expand_builtin_eh_copy_values (exp);
7590 return expand_builtin_va_start (exp);
7592 return expand_builtin_va_end (exp);
7594 return expand_builtin_va_copy (exp);
7596 return expand_builtin_expect (exp, target);
7598 return expand_builtin_expect_with_probability (exp, target);
7600 return expand_builtin_assume_aligned (exp, target);
7602 expand_builtin_prefetch (exp);
7606 return expand_builtin_init_trampoline (exp, true);
7608 return expand_builtin_init_trampoline (exp, false);
7610 return expand_builtin_adjust_trampoline (exp);
7613 return expand_builtin_init_descriptor (exp);
7615 return expand_builtin_adjust_descriptor (exp);
7624 target = expand_builtin_fork_or_exec (fndecl, exp, target, ignore);
7635 target = expand_builtin_sync_operation (mode, exp, PLUS, false, target);
7646 target = expand_builtin_sync_operation (mode, exp, MINUS, false, target);
7657 target = expand_builtin_sync_operation (mode, exp, IOR, false, target);
7668 target = expand_builtin_sync_operation (mode, exp, AND, false, target);
7679 target = expand_builtin_sync_operation (mode, exp, XOR, false, target);
7690 target = expand_builtin_sync_operation (mode, exp, NOT, false, target);
7701 target = expand_builtin_sync_operation (mode, exp, PLUS, true, target);
7712 target = expand_builtin_sync_operation (mode, exp, MINUS, true, target);
7723 target = expand_builtin_sync_operation (mode, exp, IOR, true, target);
7734 target = expand_builtin_sync_operation (mode, exp, AND, true, target);
7745 target = expand_builtin_sync_operation (mode, exp, XOR, true, target);
7756 target = expand_builtin_sync_operation (mode, exp, NOT, true, target);
7773 target = expand_builtin_compare_and_swap (mode, exp, true, target);
7785 target = expand_builtin_compare_and_swap (mode, exp, false, target);
7796 target = expand_builtin_sync_lock_test_and_set (mode, exp, target);
7807 expand_builtin_sync_lock_release (mode, exp);
7820 target = expand_builtin_atomic_exchange (mode, exp, target);
7836 target = expand_builtin_atomic_compare_exchange (mode, exp, target);
7842 nargs = call_expr_nargs (exp);
7845 vec->quick_push (CALL_EXPR_ARG (exp, z));
7848 vec->quick_push (CALL_EXPR_ARG (exp, z));
7849 exp = build_call_vec (TREE_TYPE (exp), CALL_EXPR_FN (exp), vec);
7859 target = expand_builtin_atomic_load (mode, exp, target);
7870 target = expand_builtin_atomic_store (mode, exp);
7885 target = expand_builtin_atomic_fetch_op (mode, exp, target, PLUS, true,
7901 target = expand_builtin_atomic_fetch_op (mode, exp, target, MINUS, true,
7917 target = expand_builtin_atomic_fetch_op (mode, exp, target, AND, true,
7933 target = expand_builtin_atomic_fetch_op (mode, exp, target, NOT, true,
7949 target = expand_builtin_atomic_fetch_op (mode, exp, target, XOR, true,
7965 target = expand_builtin_atomic_fetch_op (mode, exp, target, IOR, true,
7977 target = expand_builtin_atomic_fetch_op (mode, exp, target, PLUS, false,
7989 target = expand_builtin_atomic_fetch_op (mode, exp, target, MINUS, false,
8001 target = expand_builtin_atomic_fetch_op (mode, exp, target, AND, false,
8013 target = expand_builtin_atomic_fetch_op (mode, exp, target, NOT, false,
8025 target = expand_builtin_atomic_fetch_op (mode, exp, target, XOR, false,
8037 target = expand_builtin_atomic_fetch_op (mode, exp, target, IOR, false,
8044 return expand_builtin_atomic_test_and_set (exp, target);
8047 return expand_builtin_atomic_clear (exp);
8050 return expand_builtin_atomic_always_lock_free (exp);
8053 target = expand_builtin_atomic_is_lock_free (exp);
8059 expand_builtin_atomic_thread_fence (exp);
8063 expand_builtin_atomic_signal_fence (exp);
8068 return expand_builtin_object_size (exp);
8074 target = expand_builtin_memory_chk (exp, target, mode, fcode);
8087 maybe_emit_chk_warning (exp, fcode);
8092 maybe_emit_sprintf_chk_warning (exp, fcode);
8096 return expand_builtin_thread_pointer (exp, target);
8099 expand_builtin_set_thread_pointer (exp);
8109 return expand_builtin_goacc_parlevel_id_size (exp, target, ignore);
8112 return expand_speculation_safe_value (VOIDmode, exp, target, ignore);
8120 return expand_speculation_safe_value (mode, exp, target, ignore);
8128 return expand_call (exp, target, ignore);
8633 tree frac, exp;
8638 /* For +-0, return (*exp = 0, +-0). */
8639 exp = integer_zero_node;
8644 /* For +-NaN or +-Inf, *exp is unspecified, return arg0. */
8654 exp = build_int_cst (integer_type_node, REAL_EXP (value));
8662 arg1 = fold_build2_loc (loc, MODIFY_EXPR, rettype, arg1, exp);
9664 fold_call_expr (location_t loc, tree exp, bool ignore)
9667 tree fndecl = get_callee_fndecl (exp);
9672 && !CALL_EXPR_VA_ARG_PACK (exp))
9674 int nargs = call_expr_nargs (exp);
9679 if (nargs && TREE_CODE (CALL_EXPR_ARG (exp, nargs - 1)) == CALL_EXPR)
9681 tree fndecl2 = get_callee_fndecl (CALL_EXPR_ARG (exp, nargs - 1));
9690 return targetm.fold_builtin (fndecl, call_expr_nargs (exp),
9691 CALL_EXPR_ARGP (exp), ignore);
9694 tree *args = CALL_EXPR_ARGP (exp);
9695 ret = fold_builtin_n (loc, exp, fndecl, args, nargs, ignore);
9745 rewrite_call_expr (location_t loc, tree exp, int skip, tree fndecl, int n, ...)
9751 t = rewrite_call_expr_valist (loc, call_expr_nargs (exp),
9752 CALL_EXPR_ARGP (exp), skip, fndecl, n, ap);
9831 default_expand_builtin (tree exp ATTRIBUTE_UNUSED,
9844 readonly_data_expr (tree exp)
9846 STRIP_NOPS (exp);
9848 if (TREE_CODE (exp) != ADDR_EXPR)
9851 exp = get_base_address (TREE_OPERAND (exp, 0));
9852 if (!exp)
9858 if (TREE_CODE (exp) == STRING_CST
9859 || TREE_CODE (exp) == CONSTRUCTOR
9860 || (VAR_P (exp) && TREE_STATIC (exp)))
9861 return decl_readonly_section (exp, 0);
10030 fold_builtin_next_arg (tree exp, bool va_start_p)
10033 int nargs = call_expr_nargs (exp);
10056 arg = CALL_EXPR_ARG (exp, 1);
10076 arg = CALL_EXPR_ARG (exp, 0);
10129 CALL_EXPR_ARG (exp, 1) = integer_zero_node;
10131 CALL_EXPR_ARG (exp, 0) = integer_zero_node;
10140 expand_builtin_object_size (tree exp)
10144 tree fndecl = get_callee_fndecl (exp);
10146 if (!validate_arglist (exp, POINTER_TYPE, INTEGER_TYPE, VOID_TYPE))
10154 ost = CALL_EXPR_ARG (exp, 1);
10179 expand_builtin_memory_chk (tree exp, rtx target, machine_mode mode,
10182 if (!validate_arglist (exp,
10189 tree dest = CALL_EXPR_ARG (exp, 0);
10190 tree src = CALL_EXPR_ARG (exp, 1);
10191 tree len = CALL_EXPR_ARG (exp, 2);
10192 tree size = CALL_EXPR_ARG (exp, 3);
10195 bool sizes_ok = check_access (exp, len, /*maxread=*/NULL_TREE,
10233 fn = build_call_nofold_loc (EXPR_LOCATION (exp), fn, 3, dest, src, len);
10235 CALL_EXPR_TAILCALL (fn) = CALL_EXPR_TAILCALL (exp);
10279 fn = build_call_nofold_loc (EXPR_LOCATION (exp), fn, 4,
10282 CALL_EXPR_TAILCALL (fn) = CALL_EXPR_TAILCALL (exp);
10293 maybe_emit_chk_warning (tree exp, enum built_in_function fcode)
10316 srcstr = CALL_EXPR_ARG (exp, 1);
10317 objsize = CALL_EXPR_ARG (exp, 2);
10323 catstr = CALL_EXPR_ARG (exp, 0);
10324 srcstr = CALL_EXPR_ARG (exp, 1);
10325 objsize = CALL_EXPR_ARG (exp, 2);
10329 catstr = CALL_EXPR_ARG (exp, 0);
10330 srcstr = CALL_EXPR_ARG (exp, 1);
10331 maxread = CALL_EXPR_ARG (exp, 2);
10332 objsize = CALL_EXPR_ARG (exp, 3);
10337 srcstr = CALL_EXPR_ARG (exp, 1);
10338 size = CALL_EXPR_ARG (exp, 2);
10339 objsize = CALL_EXPR_ARG (exp, 3);
10344 maxread = CALL_EXPR_ARG (exp, 1);
10345 objsize = CALL_EXPR_ARG (exp, 3);
10358 check_strncat_sizes (exp, objsize);
10362 check_access (exp, size, maxread, srcstr, objsize, mode);
10369 maybe_emit_sprintf_chk_warning (tree exp, enum built_in_function fcode)
10373 int nargs = call_expr_nargs (exp);
10379 size = CALL_EXPR_ARG (exp, 2);
10380 fmt = CALL_EXPR_ARG (exp, 3);
10405 arg = CALL_EXPR_ARG (exp, 4);
10419 check_access (exp, /*size=*/NULL_TREE, /*maxread=*/NULL_TREE, len, size,