[committed] d: Use create_tmp_var_raw and get_callee_fndecl
Commit Message
Hi,
A couple of small patterns that repeat are generating a temporary, and
getting a function out of a CALL_EXPR (there are other changes that are
in the works where I ended up adding more repeats of these patterns).
There are convenience functions for these in the common parts of gcc,
use them instead.
Regstrapped on x86_64-linux-gnu, and committed to mainline.
Regards,
Iain.
---
gcc/d/ChangeLog:
* d-codegen.cc: Include gimple-expr.h.
(force_target_expr): Use create_tmp_var_raw.
* decl.cc: Inlucde gimple-expr.h.
(build_local_temp): Use create_tmp_var_raw.
* intrinsics.cc (expand_intrinsic_rotate): Use get_callee_fndecl.
(maybe_expand_intrinsic): Likewise.
---
gcc/d/d-codegen.cc | 6 ++----
gcc/d/decl.cc | 7 ++-----
gcc/d/intrinsics.cc | 13 +++----------
3 files changed, 7 insertions(+), 19 deletions(-)
@@ -38,6 +38,7 @@ along with GCC; see the file COPYING3. If not see
#include "stor-layout.h"
#include "attribs.h"
#include "function.h"
+#include "gimple-expr.h"
#include "d-tree.h"
@@ -623,11 +624,8 @@ build_target_expr (tree decl, tree exp)
tree
force_target_expr (tree exp)
{
- tree decl = build_decl (input_location, VAR_DECL, NULL_TREE,
- TREE_TYPE (exp));
+ tree decl = create_tmp_var_raw (TREE_TYPE (exp));
DECL_CONTEXT (decl) = current_function_decl;
- DECL_ARTIFICIAL (decl) = 1;
- DECL_IGNORED_P (decl) = 1;
layout_decl (decl, 0);
return build_target_expr (decl, exp);
@@ -57,6 +57,7 @@ along with GCC; see the file COPYING3. If not see
#include "alloc-pool.h"
#include "symbol-summary.h"
#include "symtab-thunks.h"
+#include "gimple-expr.h"
#include "d-tree.h"
#include "d-target.h"
@@ -1465,11 +1466,7 @@ declare_local_var (VarDeclaration *var)
tree
build_local_temp (tree type)
{
- tree decl = build_decl (input_location, VAR_DECL, NULL_TREE, type);
-
- DECL_CONTEXT (decl) = current_function_decl;
- DECL_ARTIFICIAL (decl) = 1;
- DECL_IGNORED_P (decl) = 1;
+ tree decl = create_tmp_var_raw (type);
d_pushdecl (decl);
return decl;
@@ -421,12 +421,8 @@ expand_intrinsic_rotate (intrinsic_code intrinsic, tree callexp)
count = CALL_EXPR_ARG (callexp, 1);
else
{
- tree callee = CALL_EXPR_FN (callexp);
-
- if (TREE_CODE (callee) == ADDR_EXPR)
- callee = TREE_OPERAND (callee, 0);
-
/* Retrieve from the encoded template instantation. */
+ tree callee = get_callee_fndecl (callexp);
TemplateInstance *ti = DECL_LANG_FRONTEND (callee)->isInstantiated ();
gcc_assert (ti && ti->tiargs && ti->tiargs->length == 2);
@@ -761,12 +757,9 @@ expand_volatile_store (tree callexp)
tree
maybe_expand_intrinsic (tree callexp)
{
- tree callee = CALL_EXPR_FN (callexp);
-
- if (TREE_CODE (callee) == ADDR_EXPR)
- callee = TREE_OPERAND (callee, 0);
+ tree callee = get_callee_fndecl (callexp);
- if (TREE_CODE (callee) != FUNCTION_DECL)
+ if (callee == NULL_TREE || TREE_CODE (callee) != FUNCTION_DECL)
return callexp;
/* Don't expand CTFE-only intrinsics outside of semantic processing. */