Brad Bishop | d7bf8c1 | 2018-02-25 22:55:05 -0500 | [diff] [blame] | 1 | From 16210e6270e200cd4892a90ecef608906be3a130 Mon Sep 17 00:00:00 2001 |
| 2 | From: Kito Cheng <kito.cheng@gmail.com> |
| 3 | Date: Thu, 4 May 2017 02:11:13 +0800 |
| 4 | Subject: [PATCH] RISC-V: Handle non-legitimate address in |
| 5 | riscv_legitimize_move |
| 6 | |
| 7 | GCC may generate non-legitimate address due to we allow some |
| 8 | load/store with non-legitimate address in pic.md. |
| 9 | |
| 10 | 2017-05-12 Kito Cheng <kito.cheng@gmail.com> |
| 11 | |
| 12 | * config/riscv/riscv.c (riscv_legitimize_move): Handle |
| 13 | non-legitimate address. |
| 14 | --- |
| 15 | Upstream-Status: Backport |
| 16 | Signed-off-by: Khem Raj <raj.khem@gmail.com> |
| 17 | |
| 18 | gcc/ChangeLog | 5 +++++ |
| 19 | gcc/config/riscv/riscv.c | 16 ++++++++++++++++ |
| 20 | 2 files changed, 21 insertions(+) |
| 21 | |
| 22 | diff --git a/gcc/config/riscv/riscv.c b/gcc/config/riscv/riscv.c |
| 23 | index f7fec4bfcf8..d519be1659a 100644 |
| 24 | --- a/gcc/config/riscv/riscv.c |
| 25 | +++ b/gcc/config/riscv/riscv.c |
| 26 | @@ -1385,6 +1385,22 @@ riscv_legitimize_move (enum machine_mode mode, rtx dest, rtx src) |
| 27 | return true; |
| 28 | } |
| 29 | |
| 30 | + /* RISC-V GCC may generate non-legitimate address due to we provide some |
| 31 | + pattern for optimize access PIC local symbol and it's make GCC generate |
| 32 | + unrecognizable instruction during optmizing. */ |
| 33 | + |
| 34 | + if (MEM_P (dest) && !riscv_legitimate_address_p (mode, XEXP (dest, 0), |
| 35 | + reload_completed)) |
| 36 | + { |
| 37 | + XEXP (dest, 0) = riscv_force_address (XEXP (dest, 0), mode); |
| 38 | + } |
| 39 | + |
| 40 | + if (MEM_P (src) && !riscv_legitimate_address_p (mode, XEXP (src, 0), |
| 41 | + reload_completed)) |
| 42 | + { |
| 43 | + XEXP (src, 0) = riscv_force_address (XEXP (src, 0), mode); |
| 44 | + } |
| 45 | + |
| 46 | return false; |
| 47 | } |
| 48 | |
| 49 | -- |
| 50 | 2.14.2 |
| 51 | |