On 12/7/18 8:05 PM, Andreas Krebbel wrote:
> On 07/12/2012 08:52 AM, Chung-Lin Tang wrote:
>>         * config/s390/s390.c (s390_builtin,code_for_builtin_64,
>>         code_for_builtin_31,s390_init_builtins,s390_expand_builtin):
>>         Remove.
>>         (s390_expand_builtin_thread_pointer): Add hook function for
>>         TARGET_EXPAND_BUILTIN_THREAD_POINTER.
>>         (s390_expand_builtin_set_thread_pointer): Add hook function for
>>         TARGET_EXPAND_BUILTIN_SET_THREAD_POINTER.
> 
> I've tested your patches on s390x. No regressions.
> 
> The patch is ok.
> 
> Bye,
> 
> -Andreas-
> 

S390 parts updated to use MD pattern. Sorry Andreas, would you mind
testing the updated patches again?

Thanks,
Chung-Lin

        * config/s390/s390.c (s390_builtin,code_for_builtin_64,
        code_for_builtin_31,s390_init_builtins,s390_expand_builtin): Remove.
        * config/s390/s390.md (get_tp_64,get_tp_31,set_tp_64,set_tp_31):
Remove.
        (get_thread_pointer<mode>,set_thread_pointer<mode>): New,
adapted from
        removed patterns.

Index: config/s390/s390.c
===================================================================
--- config/s390/s390.c  (revision 190742)
+++ config/s390/s390.c  (working copy)
@@ -9217,132 +9217,6 @@ s390_gimplify_va_arg (tree valist, tree type, gimp
   return build_va_arg_indirect_ref (addr);
 }
 
-
-/* Builtins.  */
-
-enum s390_builtin
-{
-  S390_BUILTIN_THREAD_POINTER,
-  S390_BUILTIN_SET_THREAD_POINTER,
-
-  S390_BUILTIN_max
-};
-
-static enum insn_code const code_for_builtin_64[S390_BUILTIN_max] = {
-  CODE_FOR_get_tp_64,
-  CODE_FOR_set_tp_64
-};
-
-static enum insn_code const code_for_builtin_31[S390_BUILTIN_max] = {
-  CODE_FOR_get_tp_31,
-  CODE_FOR_set_tp_31
-};
-
-static void
-s390_init_builtins (void)
-{
-  tree ftype;
-
-  ftype = build_function_type_list (ptr_type_node, NULL_TREE);
-  add_builtin_function ("__builtin_thread_pointer", ftype,
-                       S390_BUILTIN_THREAD_POINTER, BUILT_IN_MD,
-                       NULL, NULL_TREE);
-
-  ftype = build_function_type_list (void_type_node, ptr_type_node, NULL_TREE);
-  add_builtin_function ("__builtin_set_thread_pointer", ftype,
-                       S390_BUILTIN_SET_THREAD_POINTER, BUILT_IN_MD,
-                       NULL, NULL_TREE);
-}
-
-/* Expand an expression EXP that calls a built-in function,
-   with result going to TARGET if that's convenient
-   (and in mode MODE if that's convenient).
-   SUBTARGET may be used as the target for computing one of EXP's operands.
-   IGNORE is nonzero if the value is to be ignored.  */
-
-static rtx
-s390_expand_builtin (tree exp, rtx target, rtx subtarget ATTRIBUTE_UNUSED,
-                    enum machine_mode mode ATTRIBUTE_UNUSED,
-                    int ignore ATTRIBUTE_UNUSED)
-{
-#define MAX_ARGS 2
-
-  enum insn_code const *code_for_builtin =
-    TARGET_64BIT ? code_for_builtin_64 : code_for_builtin_31;
-
-  tree fndecl = TREE_OPERAND (CALL_EXPR_FN (exp), 0);
-  unsigned int fcode = DECL_FUNCTION_CODE (fndecl);
-  enum insn_code icode;
-  rtx op[MAX_ARGS], pat;
-  int arity;
-  bool nonvoid;
-  tree arg;
-  call_expr_arg_iterator iter;
-
-  if (fcode >= S390_BUILTIN_max)
-    internal_error ("bad builtin fcode");
-  icode = code_for_builtin[fcode];
-  if (icode == 0)
-    internal_error ("bad builtin fcode");
-
-  nonvoid = TREE_TYPE (TREE_TYPE (fndecl)) != void_type_node;
-
-  arity = 0;
-  FOR_EACH_CALL_EXPR_ARG (arg, iter, exp)
-    {
-      const struct insn_operand_data *insn_op;
-
-      if (arg == error_mark_node)
-       return NULL_RTX;
-      if (arity > MAX_ARGS)
-       return NULL_RTX;
-
-      insn_op = &insn_data[icode].operand[arity + nonvoid];
-
-      op[arity] = expand_expr (arg, NULL_RTX, insn_op->mode, EXPAND_NORMAL);
-
-      if (!(*insn_op->predicate) (op[arity], insn_op->mode))
-       op[arity] = copy_to_mode_reg (insn_op->mode, op[arity]);
-      arity++;
-    }
-
-  if (nonvoid)
-    {
-      enum machine_mode tmode = insn_data[icode].operand[0].mode;
-      if (!target
-         || GET_MODE (target) != tmode
-         || !(*insn_data[icode].operand[0].predicate) (target, tmode))
-       target = gen_reg_rtx (tmode);
-    }
-
-  switch (arity)
-    {
-    case 0:
-      pat = GEN_FCN (icode) (target);
-      break;
-    case 1:
-      if (nonvoid)
-        pat = GEN_FCN (icode) (target, op[0]);
-      else
-       pat = GEN_FCN (icode) (op[0]);
-      break;
-    case 2:
-      pat = GEN_FCN (icode) (target, op[0], op[1]);
-      break;
-    default:
-      gcc_unreachable ();
-    }
-  if (!pat)
-    return NULL_RTX;
-  emit_insn (pat);
-
-  if (nonvoid)
-    return target;
-  else
-    return const0_rtx;
-}
-
-
 /* Output assembly code for the trampoline template to
    stdio stream FILE.
 
@@ -10785,11 +10659,6 @@ s390_loop_unroll_adjust (unsigned nunroll, struct
 #undef TARGET_RETURN_IN_MEMORY
 #define TARGET_RETURN_IN_MEMORY s390_return_in_memory
 
-#undef  TARGET_INIT_BUILTINS
-#define TARGET_INIT_BUILTINS s390_init_builtins
-#undef  TARGET_EXPAND_BUILTIN
-#define TARGET_EXPAND_BUILTIN s390_expand_builtin
-
 #undef TARGET_ASM_OUTPUT_ADDR_CONST_EXTRA
 #define TARGET_ASM_OUTPUT_ADDR_CONST_EXTRA s390_output_addr_const_extra
 
Index: config/s390/s390.md
===================================================================
--- config/s390/s390.md (revision 190742)
+++ config/s390/s390.md (working copy)
@@ -8637,28 +8637,17 @@
 ;;- Thread-local storage support.
 ;;
 
-(define_expand "get_tp_64"
-  [(set (match_operand:DI 0 "nonimmediate_operand" "") (reg:DI TP_REGNUM))]
-  "TARGET_64BIT"
+(define_expand "get_thread_pointer<mode>"
+  [(set (match_operand:P 0 "nonimmediate_operand" "") (reg:P TP_REGNUM))]
+  ""
   "")
 
-(define_expand "get_tp_31"
-  [(set (match_operand:SI 0 "nonimmediate_operand" "") (reg:SI TP_REGNUM))]
-  "!TARGET_64BIT"
+(define_expand "set_thread_pointer<mode>"
+  [(set (reg:P TP_REGNUM) (match_operand:P 0 "nonimmediate_operand" ""))
+   (set (reg:P TP_REGNUM) (unspec_volatile:P [(reg:P TP_REGNUM)] 
UNSPECV_SET_TP))]
+  ""
   "")
 
-(define_expand "set_tp_64"
-  [(set (reg:DI TP_REGNUM) (match_operand:DI 0 "nonimmediate_operand" ""))
-   (set (reg:DI TP_REGNUM) (unspec_volatile:DI [(reg:DI TP_REGNUM)] 
UNSPECV_SET_TP))]
-  "TARGET_64BIT"
-  "")
-
-(define_expand "set_tp_31"
-  [(set (reg:SI TP_REGNUM) (match_operand:SI 0 "nonimmediate_operand" ""))
-   (set (reg:SI TP_REGNUM) (unspec_volatile:SI [(reg:SI TP_REGNUM)] 
UNSPECV_SET_TP))]
-  "!TARGET_64BIT"
-  "")
-
 (define_insn "*set_tp"
   [(set (reg TP_REGNUM) (unspec_volatile [(reg TP_REGNUM)] UNSPECV_SET_TP))]
   ""

Reply via email to