[{"id":1762427,"web_url":"http://patchwork.ozlabs.org/comment/1762427/","msgid":"<7caf888e-bf8e-a9bc-547c-3cd3248d5023@redhat.com>","list_archive_url":null,"date":"2017-09-04T05:44:17","subject":"Re: Turn HARD_REGNO_MODE_OK into a target hook","submitter":{"id":4400,"url":"http://patchwork.ozlabs.org/api/people/4400/","name":"Jeff Law","email":"law@redhat.com"},"content":"On 08/28/2017 03:20 AM, Richard Sandiford wrote:\n> This is a bit of a workhorse macro, so it might make sense to add\n> some caching around the calls.  If possible I'd like to do that\n> during stage 3 (under the usual \"compile time is always a bug\" thing);\n> we would still want this patch for that, and the patch is implementing\n> an agreed policy.\n> \n> The lack of function comments in msp430.c and rl78.c is deliberate;\n> the local style there is to define the hook macro immediately before\n> the function as a form of documentation.\n> \n> Tested on aarch64-linux-gnu, x86_64-linux-gnu and powerpc64le-linux-gnu.\n> Also tested by checking that there were no extra warnings or changes in\n> testsuite assembly output for at least one target per CPU.  OK to install?\n> \n> Richard\n> \n> \n> 2017-08-28  Richard Sandiford  <richard.sandiford@linaro.org>\n> \t    Alan Hayward  <alan.hayward@arm.com>\n> \t    David Sherwood  <david.sherwood@arm.com>\n> \n> gcc/\n> \t* target.def (hard_regno_mode_ok): New hook.\n> \t* doc/tm.texi (HARD_REGNO_MODE_OK): Replace with...\n> \t(TARGET_HARD_REGNO_MODE_OK): ...this.\n> \t* doc/tm.texi.in: Regenerate.\n> \t* hooks.h (hook_bool_uint_mode_true): Declare.\n> \t* hooks.c (hook_bool_uint_mode_true): New function.\n> \t* doc/md.texi: Refer to targetm.hard_regno_mode_ok instead of\n> \tHARD_REGNO_MODE_OK.\n> \t* genpreds.c (write_insn_preds_c): Add an include of target.h.\n> \t* alias.c (init_alias_target): Use targetm.hard_regno_mode_ok\n> \tinstead of HARD_REGNO_MODE_OK.\n> \t* caller-save.c: Include target.h.\n> \t(reg_save_code): Use targetm.hard_regno_mode_ok instead of\n> \tHARD_REGNO_MODE_OK.\n> \t* combine.c (can_combine_p): Likewise.\n> \t(combinable_i3pat): Likewise.\n> \t(can_change_dest_mode): Likewise.\n> \t* expr.c (init_expr_target): Likewise.\n> \t(convert_move): Likewise.\n> \t(convert_modes): Likewise.\n> \t* ira.c (setup_prohibited_class_mode_regs): Likewise.\n> \t(setup_prohibited_mode_move_regs): Likewise.\n> \t* ira.h (target_ira): Likewise.\n> \t* lra-assigns.c (find_hard_regno_for_1): Likewise.\n> \t* lra-constraints.c (process_alt_operands): Likewise.\n> \t(split_reg): Likewise.\n> \t* recog.c (peep2_find_free_register): Likewise.\n> \t* ree.c (combine_reaching_defs): Likewise.\n> \t* regcprop.c (maybe_mode_change): Likewise.\n> \t* reginfo.c (init_reg_sets_1): Likewise.\n> \t(choose_hard_reg_mode): Likewise.\n> \t(simplifiable_subregs): Likewise.\n> \t* regrename.c (check_new_reg_p): Likewise.\n> \t* reload.c (find_valid_class): Likewise.\n> \t(find_valid_class_1): Likewise.\n> \t(reload_inner_reg_of_subreg): Likewise.\n> \t(push_reload): Likewise.\n> \t(combine_reloads): Likewise.\n> \t(find_dummy_reload): Likewise.\n> \t(find_reloads): Likewise.\n> \t* reload1.c (find_reg): Likewise.\n> \t(set_reload_reg): Likewise.\n> \t(allocate_reload_reg): Likewise.\n> \t(choose_reload_regs): Likewise.\n> \t(reload_adjust_reg_for_temp): Likewise.\n> \t* rtlanal.c (subreg_size_offset_from_lsb): Likewise.\n> \t(simplify_subreg_regno): Likewise.\n> \t* sel-sched.c (init_regs_for_mode): Likewise.\n> \t* varasm.c (make_decl_rtl): Likewise.\n> \t* config/aarch64/aarch64.h (HARD_REGNO_MODE_OK): Delete.\n> \t(MODES_TIEABLE_P): Use targetm.hard_regno_mode_ok instead of\n> \tHARD_REGNO_MODE_OK.\n> \t* config/aarch64/aarch64-protos.h (aarch64_hard_regno_mode_ok): Delete.\n> \t* config/aarch64/aarch64.c (aarch64_hard_regno_mode_ok): Make static.\n> \t(TARGET_HARD_REGNO_MODE_OK): Redefine.\n> \t* config/alpha/alpha.h (HARD_REGNO_MODE_OK): Delete.\n> \t* config/alpha/alpha.c (alpha_hard_regno_mode_ok): New function.\n> \t(TARGET_HARD_REGNO_MODE_OK): Redefine.\n> \t* config/arc/arc.h (arc_hard_regno_mode_ok): Delete.\n> \t(arc_mode_class): Delete.\n> \t(HARD_REGNO_MODE_OK): Delete.\n> \t* config/arc/arc.c (TARGET_HARD_REGNO_MODE_OK): Redefine.\n> \t(arc_hard_regno_mode_ok): Rename old array to...\n> \t(arc_hard_regno_mode_ok_modes): ...this.\n> \t(arc_conditional_register_usage): Update accordingly.\n> \t(arc_mode_class): Make static.\n> \t(arc_hard_regno_mode_ok): New function.\n> \t* config/arm/arm.h (HARD_REGNO_MODE_OK): Delete.\n> \t* config/arm/arm-protos.h (arm_hard_regno_mode_ok): Delete.\n> \t* config/arm/arm.c (TARGET_HARD_REGNO_MODE_OK): Redefine.\n> \t(arm_hard_regno_mode_ok): Make static.\n> \t* config/arm/arm.md (movdi): Use targetm.hard_regno_mode_ok instead of\n> \tHARD_REGNO_MODE_OK.\n> \t* config/avr/avr-protos.h (avr_hard_regno_mode_ok): Delete.\n> \t* config/avr/avr.h (HARD_REGNO_MODE_OK): Delete.\n> \t* config/avr/avr.c (avr_hard_regno_mode_ok): Make static and\n> \treturn a bool.\n> \t(TARGET_HARD_REGNO_MODE_OK): Redefine.\n> \t* config/bfin/bfin-protos.h (hard_regno_mode_ok): Delete.\n> \t* config/bfin/bfin.h (HARD_REGNO_MODE_OK): Delete.\n> \t* config/bfin/bfin.c (hard_regno_mode_ok): Rename to...\n> \t(bfin_hard_regno_mode_ok): ...this.  Make static and return a bool.\n> \t(TARGET_HARD_REGNO_MODE_OK): Redefine.\n> \t* config/bfin/predicates.md (valid_reg_operand): Use\n> \ttargetm.hard_regno_mode_ok instead of HARD_REGNO_MODE_OK.\n> \t* config/c6x/c6x.h (HARD_REGNO_MODE_OK): Delete.\n> \t* config/c6x/c6x.c (c6x_hard_regno_mode_ok): New function.\n> \t(TARGET_HARD_REGNO_MODE_OK): Redefine.\n> \t* config/cr16/cr16.h (HARD_REGNO_MODE_OK): Delete.\n> \t* config/cr16/cr16-protos.h (cr16_hard_regno_mode_ok): Delete.\n> \t* config/cr16/cr16.c (TARGET_HARD_REGNO_MODE_OK): Redefine.\n> \t(cr16_hard_regno_mode_ok): Make static and return a bool.\n> \t* config/cris/cris.h (HARD_REGNO_MODE_OK): Delete.\n> \t* config/cris/cris.c (TARGET_HARD_REGNO_MODE_OK): Redefine.\n> \t(cris_hard_regno_mode_ok): New function.\n> \t* config/epiphany/epiphany.h (epiphany_hard_regno_mode_ok): Delete.\n> \t(epiphany_mode_class): Delete.\n> \t(HARD_REGNO_MODE_OK): Delete.\n> \t* config/epiphany/epiphany-protos.h (hard_regno_mode_ok): Delete.\n> \t* config/epiphany/epiphany.c (TARGET_HARD_REGNO_MODE_OK): Redefine.\n> \t(hard_regno_mode_ok): Rename to...\n> \t(epiphany_hard_regno_mode_ok): ...this.  Make static and return a bool.\n> \t* config/fr30/fr30.h (HARD_REGNO_MODE_OK): Delete.\n> \t* config/fr30/fr30.md: Refer to targetm.hard_regno_mode_ok instead of\n> \tHARD_REGNO_MODE_OK.\n> \t* config/frv/frv.h (HARD_REGNO_MODE_OK): Delete.\n> \t* config/frv/frv-protos.h (frv_hard_regno_mode_ok): Delete.\n> \t* config/frv/frv.c (TARGET_HARD_REGNO_MODE_OK): Redefine.\n> \t(frv_hard_regno_mode_ok): Make static and return a bool.\n> \t* config/frv/frv.md: Refer to targetm.hard_regno_mode_ok instead of\n> \tHARD_REGNO_MODE_OK.\n> \t* config/ft32/ft32.h (HARD_REGNO_MODE_OK): Delete.\n> \t* config/h8300/h8300.h (HARD_REGNO_MODE_OK): Delete.\n> \t* config/h8300/h8300-protos.h (h8300_hard_regno_mode_ok): Delete.\n> \t* config/h8300/h8300.c (h8300_hard_regno_mode_ok): Make static\n> \tand return a bool.\n> \t(TARGET_HARD_REGNO_MODE_OK): Redefine.\n> \t* config/i386/i386.h (HARD_REGNO_MODE_OK): Delete.\n> \t* config/i386/i386-protos.h (ix86_hard_regno_mode_ok): Delete.\n> \t* config/i386/i386.c (ix86_hard_regno_mode_ok): Make static and\n> \treturn a bool.\n> \t(TARGET_HARD_REGNO_MODE_OK): Redefine.\n> \t* config/ia64/ia64.h (HARD_REGNO_MODE_OK): Delete.\n> \t* config/ia64/ia64.c (TARGET_HARD_REGNO_MODE_OK): Redefine.\n> \t(ia64_hard_regno_mode_ok): New function.\n> \t* config/iq2000/iq2000.h (HARD_REGNO_MODE_OK): Delete.\n> \t* config/iq2000/iq2000.c (TARGET_HARD_REGNO_MODE_OK): Redefine.\n> \t(iq2000_hard_regno_mode_ok): New function.\n> \t* config/lm32/lm32.h (HARD_REGNO_MODE_OK): Delete.\n> \t* config/lm32/lm32.c (TARGET_HARD_REGNO_MODE_OK): Redefine.\n> \t(lm32_hard_regno_mode_ok): New function.\n> \t* config/m32c/m32c.h (HARD_REGNO_MODE_OK): Delete.\n> \t* config/m32c/m32c-protos.h (m32c_hard_regno_ok): Delete.\n> \t* config/m32c/m32c.c (class_can_hold_mode): Use m32c_hard_regno_mode_ok\n> \tinstead of HARD_REGNO_MODE_OK.\n> \t(m32c_hard_regno_ok): Rename to...\n> \t(m32c_hard_regno_mode_ok): ...this.  Make static and return a bool.\n> \t(m32c_cannot_change_mode_class): Update accordingly.\n> \t(TARGET_HARD_REGNO_MODE_OK): Redefine.\n> \t* config/m32r/m32r.h (m32r_hard_regno_mode_ok): Delete.\n> \t(m32r_mode_class): Delete.\n> \t(HARD_REGNO_MODE_OK): Delete.\n> \t* config/m32r/m32r.c (TARGET_HARD_REGNO_MODE_OK): Redefine.\n> \t(m32r_hard_regno_mode_ok): Rename to...\n> \t(m32r_hard_regno_modes): ...this.\n> \t(m32r_mode_class): Make static.\n> \t(m32r_hard_regno_mode_ok): New function.\n> \t* config/m68k/m68k.h (HARD_REGNO_MODE_OK): Delete.\n> \t* config/m68k/m68k-protos.h (m68k_regno_mode_ok): Delete.\n> \t* config/m68k/m68k.c (TARGET_HARD_REGNO_MODE_OK): Redefine.\n> \t(m68k_hard_regno_mode_ok): Make static.\n> \t* config/mcore/mcore.h (HARD_REGNO_MODE_OK): Delete.\n> \t* config/mcore/mcore.c (TARGET_HARD_REGNO_MODE_OK): Redefine.\n> \t(mcore_hard_regno_mode_ok): New function.\n> \t* config/microblaze/microblaze.h (microblaze_hard_regno_mode_ok)\n> \t(HARD_REGNO_MODE_OK): Delete.\n> \t* config/microblaze/microblaze.c (microblaze_hard_regno_mode_ok):\n> \tRename to...\n> \t(microblaze_hard_regno_mode_ok_p): ...this and make static.\n> \t(microblaze_hard_regno_mode_ok): New function.\n> \t(TARGET_HARD_REGNO_MODE_OK): Redefine.\n> \t* config/mips/mips.h (HARD_REGNO_MODE_OK): Delete.\n> \t(mips_hard_regno_mode_ok): Delete.\n> \t* config/mips/mips.c (mips_hard_regno_mode_ok): Rename to...\n> \t(mips_hard_regno_mode_ok_p): ...this and make static.\n> \t(mips_hard_regno_mode_ok_p): Rename to...\n> \t(mips_hard_regno_mode_ok_uncached): ...this.\n> \t(mips_hard_regno_mode_ok): New function.\n> \t(mips_class_max_nregs): Use mips_hard_regno_mode_ok instead\n> \tof HARD_REGNO_MODE_OK.\n> \t(mips_option_override): Update after above name changes.\n> \t(TARGET_HARD_REGNO_MODE_OK): Redefine.\n> \t* config/mmix/mmix.h (HARD_REGNO_MODE_OK): Delete.\n> \t* config/mn10300/mn10300.h (HARD_REGNO_MODE_OK): Delete.\n> \t* config/mn10300/mn10300-protos.h (mn10300_hard_regno_mode_ok): Delete.\n> \t* config/mn10300/mn10300.c (mn10300_hard_regno_mode_ok): Make static.\n> \t(TARGET_HARD_REGNO_MODE_OK): Redefine.\n> \t* config/moxie/moxie.h (HARD_REGNO_MODE_OK): Delete.\n> \t* config/msp430/msp430.h (HARD_REGNO_MODE_OK): Delete.\n> \t* config/msp430/msp430-protos.h (msp430_hard_regno_mode_ok): Delete.\n> \t* config/msp430/msp430.c (TARGET_HARD_REGNO_MODE_OK): Redefine.\n> \t(msp430_hard_regno_mode_ok): Make static and return a bool.\n> \t* config/nds32/nds32.h (HARD_REGNO_MODE_OK): Delete.\n> \t* config/nds32/nds32-protos.h (nds32_hard_regno_mode_ok): Delete.\n> \t* config/nds32/nds32.c (nds32_hard_regno_mode_ok): Make static\n> \tand return a bool.\n> \t(TARGET_HARD_REGNO_MODE_OK): Redefine.\n> \t* config/nios2/nios2.h (HARD_REGNO_MODE_OK): Delete.\n> \t* config/nvptx/nvptx.h (HARD_REGNO_MODE_OK): Delete.\n> \t* config/pa/pa.h (MODES_TIEABLE_P): Update commentary.\n> \t* config/pa/pa32-regs.h (HARD_REGNO_MODE_OK): Rename to...\n> \t(PA_HARD_REGNO_MODE_OK): ...this\n> \t* config/pa/pa64-regs.h (HARD_REGNO_MODE_OK): Rename to...\n> \t(PA_HARD_REGNO_MODE_OK): ...this.\n> \t* config/pa/pa.c (TARGET_HARD_REGNO_MODE_OK): Redefine.\n> \t(pa_hard_regno_mode_ok): New function.\n> \t* config/pdp11/pdp11.h (HARD_REGNO_MODE_OK): Delete.\n> \t* config/pdp11/pdp11.c (TARGET_HARD_REGNO_MODE_OK): Redefine.\n> \t(pdp11_hard_regno_mode_ok): New function.\n> \t* config/powerpcspe/powerpcspe.h (HARD_REGNO_MODE_OK): Delete.\n> \t* config/powerpcspe/powerpcspe-protos.h (rs6000_hard_regno_mode_ok_p):\n> \tDelete.\n> \t* config/powerpcspe/powerpcspe.c (rs6000_hard_regno_mode_ok_p):\n> \tMake static.\n> \t(TARGET_HARD_REGNO_MODE_OK): Redefine.\n> \t(rs6000_hard_regno_mode_ok): Rename to...\n> \t(rs6000_hard_regno_mode_ok_uncached): ...this.\n> \t(rs6000_init_hard_regno_mode_ok): Update accordingly.\n> \t(rs6000_hard_regno_mode_ok): New function.\n> \t* config/riscv/riscv.h (HARD_REGNO_MODE_OK): Delete.\n> \t* config/riscv/riscv-protos.h (riscv_hard_regno_mode_ok_p): Delete.\n> \t* config/riscv/riscv.c (riscv_hard_regno_mode_ok_p): Rename to...\n> \t(riscv_hard_regno_mode_ok): ...this and make static.\n> \t(TARGET_HARD_REGNO_MODE_OK): Redefine.\n> \t* config/rl78/rl78.h (HARD_REGNO_MODE_OK): Delete.\n> \t* config/rl78/rl78-protos.h (rl78_hard_regno_mode_ok): Delete.\n> \t* config/rl78/rl78.c (TARGET_HARD_REGNO_MODE_OK): Redefine.\n> \t(rl78_hard_regno_mode_ok): Make static and return bool.\n> \t* config/rs6000/rs6000.h (HARD_REGNO_MODE_OK): Delete.\n> \t* config/rs6000/rs6000-protos.h (rs6000_hard_regno_mode_ok_p):\n> \tDelete.\n> \t* config/rs6000/rs6000.c (rs6000_hard_regno_mode_ok_p): Make static.\n> \t(TARGET_HARD_REGNO_MODE_OK): Redefine.\n> \t(rs6000_hard_regno_mode_ok): Rename to...\n> \t(rs6000_hard_regno_mode_ok_uncached): ...this.\n> \t(rs6000_init_hard_regno_mode_ok): Update accordingly.\n> \t(rs6000_hard_regno_mode_ok): New function.\n> \t* config/rx/rx.h (HARD_REGNO_MODE_OK): Delete.\n> \t* config/rx/rx.c (rx_hard_regno_mode_ok): New function.\n> \t(TARGET_HARD_REGNO_MODE_OK): Redefine.\n> \t* config/s390/s390.h (HARD_REGNO_MODE_OK): Delete.\n> \t* config/s390/s390-protos.h (s390_hard_regno_mode_ok): Delete.\n> \t* config/s390/s390.c (s390_hard_regno_mode_ok): Make static.\n> \t(TARGET_HARD_REGNO_MODE_OK): Redefine.\n> \t* config/sh/sh.h (HARD_REGNO_MODE_OK): Delete.\n> \t* config/sh/sh-protos.h (sh_hard_regno_mode_ok): Delete.\n> \t* config/sh/sh.c (TARGET_HARD_REGNO_MODE_OK): Redefine.\n> \t(sh_hard_regno_mode_ok): Make static.\n> \t* config/sparc/constraints.md: Refer to targetm.hard_regno_mode_ok\n> \tinstead of HARD_REGNO_MODE_OK.\n> \t* config/sparc/sparc.h (hard_regno_mode_classes): Delete.\n> \t(sparc_mode_class): Delete.\n> \t(HARD_REGNO_MODE_OK): Delete.\n> \t* config/sparc/sparc.c (TARGET_HARD_REGNO_MODE_OK): Redefine.\n> \t(hard_regno_mode_classes): Make static.\n> \t(sparc_mode_class): Likewise.\n> \t(sparc_hard_regno_mode_ok): New function.\n> \t* config/spu/spu.h (HARD_REGNO_MODE_OK): Delete.\n> \t* config/stormy16/stormy16.h (HARD_REGNO_MODE_OK): Delete.\n> \t* config/stormy16/stormy16.c (xstormy16_hard_regno_mode_ok): New\n> \tfunction.\n> \t(TARGET_HARD_REGNO_MODE_OK): Redefine.\n> \t* config/tilegx/tilegx.h (HARD_REGNO_MODE_OK): Delete.\n> \t* config/tilepro/tilepro.h (HARD_REGNO_MODE_OK): Delete.\n> \t* config/v850/v850.h (HARD_REGNO_MODE_OK): Delete.\n> \t* config/v850/v850.c (v850_hard_regno_mode_ok): New function.\n> \t(TARGET_HARD_REGNO_MODE_OK): Redefine.\n> \t* config/vax/vax.h (HARD_REGNO_MODE_OK): Delete.\n> \t* config/visium/visium.h (HARD_REGNO_MODE_OK): Delete.\n> \t* config/visium/visium.c (TARGET_HARD_REGNO_MODE_OK): Redefine.\n> \t(visium_hard_regno_mode_ok): New function.\n> \t* config/visium/visium.md: Refer to targetm.hard_regno_mode_ok\n> \tinstead of HARD_REGNO_MODE_OK.\n> \t* config/xtensa/xtensa.h (xtensa_hard_regno_mode_ok): Delete.\n> \t(HARD_REGNO_MODE_OK): Delete.\n> \t* config/xtensa/xtensa.c (xtensa_hard_regno_mode_ok): Rename to...\n> \t(xtensa_hard_regno_mode_ok_p): ...this and make static.\n> \t(xtensa_option_override): Update accordingly.\n> \t(TARGET_HARD_REGNO_MODE_OK): Redefine.\n> \t(xtensa_hard_regno_mode_ok): New function.\n> \t* system.h (HARD_REGNO_MODE_OK): Poison.\nOK.  Not sure if we're going to need the cache or not -- I'll leave that\nup to you to decide.\n\nJeff","headers":{"Return-Path":"<gcc-patches-return-461373-incoming=patchwork.ozlabs.org@gcc.gnu.org>","X-Original-To":"incoming@patchwork.ozlabs.org","Delivered-To":["patchwork-incoming@bilbo.ozlabs.org","mailing list gcc-patches@gcc.gnu.org"],"Authentication-Results":["ozlabs.org;\n\tspf=pass (mailfrom) smtp.mailfrom=gcc.gnu.org\n\t(client-ip=209.132.180.131; helo=sourceware.org;\n\tenvelope-from=gcc-patches-return-461373-incoming=patchwork.ozlabs.org@gcc.gnu.org;\n\treceiver=<UNKNOWN>)","ozlabs.org; dkim=pass (1024-bit key;\n\tunprotected) header.d=gcc.gnu.org header.i=@gcc.gnu.org\n\theader.b=\"qkrkJGWn\"; dkim-atps=neutral","sourceware.org; auth=none","ext-mx01.extmail.prod.ext.phx2.redhat.com;\n\tdmarc=none (p=none dis=none) header.from=redhat.com","ext-mx01.extmail.prod.ext.phx2.redhat.com;\n\tspf=fail smtp.mailfrom=law@redhat.com"],"Received":["from sourceware.org (server1.sourceware.org [209.132.180.131])\n\t(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256\n\tbits)) (No client certificate requested)\n\tby ozlabs.org (Postfix) with ESMTPS id 3xlzLw4DMcz9s7C\n\tfor <incoming@patchwork.ozlabs.org>;\n\tMon,  4 Sep 2017 15:44:38 +1000 (AEST)","(qmail 31765 invoked by alias); 4 Sep 2017 05:44:30 -0000","(qmail 31738 invoked by uid 89); 4 Sep 2017 05:44:24 -0000","from mx1.redhat.com (HELO mx1.redhat.com) (209.132.183.28) by\n\tsourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP;\n\tMon, 04 Sep 2017 05:44:21 +0000","from smtp.corp.redhat.com\n\t(int-mx01.intmail.prod.int.phx2.redhat.com\n\t[10.5.11.11])\t(using TLSv1.2 with cipher AECDH-AES256-SHA\n\t(256/256 bits))\t(No client certificate requested)\tby\n\tmx1.redhat.com (Postfix) with ESMTPS id 0907681E04;\n\tMon,  4 Sep 2017 05:44:20 +0000 (UTC)","from localhost.localdomain (ovpn-112-3.rdu2.redhat.com\n\t[10.10.112.3])\tby smtp.corp.redhat.com (Postfix) with ESMTP\n\tid E868077D5A; Mon,  4 Sep 2017 05:44:18 +0000 (UTC)"],"DomainKey-Signature":"a=rsa-sha1; c=nofws; d=gcc.gnu.org; h=list-id\n\t:list-unsubscribe:list-archive:list-post:list-help:sender\n\t:subject:to:references:from:message-id:date:mime-version\n\t:in-reply-to:content-type:content-transfer-encoding; q=dns; s=\n\tdefault; b=QTUb6MSJnV+EEsksEIyQabKfyvY2HvHonFGU4G7Rt7W6rRh05tOWK\n\ti5gZeNNgMV4LPBZw1n8AGypmrVD8ntBbjG5ZXgV6iLCKzyt+l+v9R+SnU1wgCWWj\n\tgIacZSeeXN2TfVQumxV6qJScqqTV5QdJYkEid8SrN8+j89h3L08oPM=","DKIM-Signature":"v=1; a=rsa-sha1; c=relaxed; d=gcc.gnu.org; h=list-id\n\t:list-unsubscribe:list-archive:list-post:list-help:sender\n\t:subject:to:references:from:message-id:date:mime-version\n\t:in-reply-to:content-type:content-transfer-encoding; s=default;\n\tbh=VSVXd6OT062Fzhf605UfW2JEJ8A=; b=qkrkJGWn5giGDJQ2ss+1rFnyoWwu\n\tp523qWX+0fm7jrD22ln/olCkLZfLJpaDkgKu1jQq60J/BGKGRykR2qv+2HVTSwsW\n\t/lmAzNlduGamZKVs59kkyd3Sqaa7ERYGVRqktwJxm4WY6h87tSSoJVxmS746/JAe\n\t1DiTESe+AU6b0Fg=","Mailing-List":"contact gcc-patches-help@gcc.gnu.org; run by ezmlm","Precedence":"bulk","List-Id":"<gcc-patches.gcc.gnu.org>","List-Unsubscribe":"<mailto:gcc-patches-unsubscribe-incoming=patchwork.ozlabs.org@gcc.gnu.org>","List-Archive":"<http://gcc.gnu.org/ml/gcc-patches/>","List-Post":"<mailto:gcc-patches@gcc.gnu.org>","List-Help":"<mailto:gcc-patches-help@gcc.gnu.org>","Sender":"gcc-patches-owner@gcc.gnu.org","X-Virus-Found":"No","X-Spam-SWARE-Status":"No, score=-1.9 required=5.0 tests=BAYES_00,\n\tRP_MATCHES_RCVD,\n\tSPF_HELO_PASS autolearn=ham version=3.3.2 spammy=","X-HELO":"mx1.redhat.com","DMARC-Filter":"OpenDMARC Filter v1.3.2 mx1.redhat.com 0907681E04","Subject":"Re: Turn HARD_REGNO_MODE_OK into a target hook","To":"gcc-patches@gcc.gnu.org, richard.sandiford@linaro.org","References":"<87efrwt5e4.fsf@linaro.org>","From":"Jeff Law <law@redhat.com>","Message-ID":"<7caf888e-bf8e-a9bc-547c-3cd3248d5023@redhat.com>","Date":"Sun, 3 Sep 2017 23:44:17 -0600","User-Agent":"Mozilla/5.0 (X11; Linux x86_64;\n\trv:52.0) Gecko/20100101 Thunderbird/52.2.1","MIME-Version":"1.0","In-Reply-To":"<87efrwt5e4.fsf@linaro.org>","Content-Type":"text/plain; charset=utf-8","Content-Transfer-Encoding":"8bit","X-IsSubscribed":"yes"}}]