On 8/6/21 11:05 AM, Segher Boessenkool wrote: > On Fri, Aug 06, 2021 at 10:29:40AM -0500, Pat Haugen wrote: >> On 8/6/21 10:02 AM, Segher Boessenkool wrote: >>>> - if (GET_CODE (pat) == SET) >>>> + if (GET_CODE (pat) == SET && REG_P (SET_DEST (pat))) >>>> return find_mem_ref (SET_SRC (pat), load_mem); >>> >>> So this now falls through if it is a SET of something else than a reg. >>> Is that intentional? If so, this should be in the changelog. >>> >> >> Falling through eventually resulted in returning false, but no, wasn't >> really intentional to change the logic that way. I'll fix up both places to >> look like the following and resubmit. >> >> if (GET_CODE (pat)== SET) >> if (REG_P (SET_DEST (pat))) >> return find_mem_ref (SET_SRC (pat), load_mem); >> else >> return false; > > Well, that isn't quiet it either, no? It returns false for all stores > then?
Yeah, I didn't word that clearly, meant I'd fix up both appropriately with the inner if-else logic. Here's what it looks like now. diff --git a/gcc/config/rs6000/rs6000.c b/gcc/config/rs6000/rs6000.c index 279f00cc648..ad856254f52 100644 --- a/gcc/config/rs6000/rs6000.c +++ b/gcc/config/rs6000/rs6000.c @@ -18357,8 +18357,11 @@ is_load_insn1 (rtx pat, rtx *load_mem) if (!pat || pat == NULL_RTX) return false; - if (GET_CODE (pat) == SET) - return find_mem_ref (SET_SRC (pat), load_mem); + if (GET_CODE (pat)== SET) + if (REG_P (SET_DEST (pat))) + return find_mem_ref (SET_SRC (pat), load_mem); + else + return false; if (GET_CODE (pat) == PARALLEL) { @@ -18395,7 +18398,10 @@ is_store_insn1 (rtx pat, rtx *str_mem) return false; if (GET_CODE (pat) == SET) - return find_mem_ref (SET_DEST (pat), str_mem); + if (REG_P (SET_SRC (pat)) || SUBREG_P (SET_SRC (pat))) + return find_mem_ref (SET_DEST (pat), str_mem); + else + return false; if (GET_CODE (pat) == PARALLEL) { Unless I'm totally not understanding the point you're trying to get across to me. -Pat