diff options
author | Uros Bizjak <ubizjak@gmail.com> | 2015-05-16 09:28:16 +0200 |
---|---|---|
committer | Uros Bizjak <uros@gcc.gnu.org> | 2015-05-16 09:28:16 +0200 |
commit | 30a5d3e6185a5fa01aec283ae9efe8b739dffdf9 (patch) | |
tree | 765de0283dc457aa33c8508aaa8271d8fae71fc3 /gcc | |
parent | 5ea73ae3b8b3df5d0b015df5536c9fe4875c8a4f (diff) | |
download | gcc-30a5d3e6185a5fa01aec283ae9efe8b739dffdf9.zip gcc-30a5d3e6185a5fa01aec283ae9efe8b739dffdf9.tar.gz gcc-30a5d3e6185a5fa01aec283ae9efe8b739dffdf9.tar.bz2 |
re PR target/66140 (ICE at extract_insn, at recog.c:2343 when compiling for alpha with gcc-5.1.1)
PR target/66140
* config/alpha/alpha.c (get_aligned_mem): Also look for reload
replacements in memory addresses.
(get_unaligned_address): Ditto.
testsuite/ChangeLog:
PR target/66140
* gcc.target/alpha/pr66140.c: New test.
From-SVN: r223232
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/config/alpha/alpha.c | 7 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gcc.target/alpha/pr66140.c | 53 |
4 files changed, 67 insertions, 5 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 3dec6b1..da14ae8 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2015-05-16 Uros Bizjak <ubizjak@gmail.com> + + PR target/66140 + * config/alpha/alpha.c (get_aligned_mem): Also look for reload + replacements in memory addresses. + (get_unaligned_address): Ditto. + 2015-05-15 Marc Glisse <marc.glisse@inria.fr> PR tree-optimization/64454 diff --git a/gcc/config/alpha/alpha.c b/gcc/config/alpha/alpha.c index c52834d..6865321 100644 --- a/gcc/config/alpha/alpha.c +++ b/gcc/config/alpha/alpha.c @@ -1556,8 +1556,7 @@ get_aligned_mem (rtx ref, rtx *paligned_mem, rtx *pbitnum) gcc_assert (MEM_P (ref)); - if (reload_in_progress - && ! memory_address_p (GET_MODE (ref), XEXP (ref, 0))) + if (reload_in_progress) { base = find_replacement (&XEXP (ref, 0)); gcc_assert (memory_address_p (GET_MODE (ref), base)); @@ -1602,11 +1601,9 @@ get_unaligned_address (rtx ref) gcc_assert (MEM_P (ref)); - if (reload_in_progress - && ! memory_address_p (GET_MODE (ref), XEXP (ref, 0))) + if (reload_in_progress) { base = find_replacement (&XEXP (ref, 0)); - gcc_assert (memory_address_p (GET_MODE (ref), base)); } else diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index cdd1c28..123dadf 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2015-05-16 Uros Bizjak <ubizjak@gmail.com> + + PR target/66140 + * gcc.target/alpha/pr66140.c: New test. + 2015-05-15 Mikhail Maltsev <maltsevm@gmail.com> PR c/48956 diff --git a/gcc/testsuite/gcc.target/alpha/pr66140.c b/gcc/testsuite/gcc.target/alpha/pr66140.c new file mode 100644 index 0000000..d559f69 --- /dev/null +++ b/gcc/testsuite/gcc.target/alpha/pr66140.c @@ -0,0 +1,53 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -mcpu=ev4" } */ + +struct scsi_cmnd { + int sc_data_direction; +}; +struct lpfc_hba { + unsigned cfg_total_seg_cnt; +}; +struct lpfc_scsi_buf { + struct scsi_cmnd *pCmd; + unsigned seg_cnt; + unsigned *fcp_bpl; +}; + +extern void *sg_next(void *sg); +extern void *scsi_sglist(struct scsi_cmnd *cmd); +extern unsigned scsi_sg_count(struct scsi_cmnd *cmd); + +static inline void dma_map_sg_attrs(void *sg, int nents, int dir) +{ + int i; + + for (i = 0; i < nents; i++, sg = sg_next(sg)) + ; + + if (!dir) + asm volatile( "call_pal %0" : : "i"(129)); +} + +static inline void lpfc_bg_setup_bpl(struct lpfc_hba *phba, struct scsi_cmnd *sc, + unsigned *pde5) +{ + void *sgde; + int i; + + *pde5 = (((0x85 & 0x000000ff) << 24) | (*pde5 & ~(0x000000ff << 24))); + for (i = 0, sgde = scsi_sglist(sc); i < 2; i++, sgde = sg_next(sgde)) + ; +} + +void lpfc_bg_scsi_prep_dma_buf_s3(struct lpfc_hba *phba, + struct lpfc_scsi_buf *lpfc_cmd) +{ + struct scsi_cmnd *scsi_cmnd = lpfc_cmd->pCmd; + unsigned *bpl = lpfc_cmd->fcp_bpl; + + dma_map_sg_attrs(scsi_sglist(scsi_cmnd), + scsi_sg_count(scsi_cmnd), + scsi_cmnd->sc_data_direction); + if (lpfc_cmd->seg_cnt > phba->cfg_total_seg_cnt) + lpfc_bg_setup_bpl(phba, scsi_cmnd, bpl); +} |