diff options
author | Kwok Cheung Yeung <kcy@codesourcery.com> | 2019-11-15 12:54:40 +0000 |
---|---|---|
committer | Kwok Cheung Yeung <kcy@gcc.gnu.org> | 2019-11-15 12:54:40 +0000 |
commit | 9ecf84e6a5616e30a03b4813b696607b2aa12d47 (patch) | |
tree | 04efeaec3e3696d5436244bdab309e41b1da986b /gcc/config | |
parent | d03431d0f59f5aa5c2a8e2e5ea94ea1660b240f8 (diff) | |
download | gcc-9ecf84e6a5616e30a03b4813b696607b2aa12d47.zip gcc-9ecf84e6a5616e30a03b4813b696607b2aa12d47.tar.gz gcc-9ecf84e6a5616e30a03b4813b696607b2aa12d47.tar.bz2 |
[amdgcn] Fix handling of VCC_CONDITIONAL_REG
Classify vcc_lo and vcc_hi into the VCC_CONDITIONAL_REG class,
and spill them into SGPRs if necessary.
2019-11-15 Kwok Cheung Yeung <kcy@codesourcery.com>
gcc/
* config/gcn/gcn.c (gcn_regno_reg_class): Return VCC_CONDITIONAL_REG
register class for VCC_LO and VCC_HI.
(gcn_spill_class): Use SGPR_REGS to spill registers in
VCC_CONDITIONAL_REG.
From-SVN: r278290
Diffstat (limited to 'gcc/config')
-rw-r--r-- | gcc/config/gcn/gcn.c | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/gcc/config/gcn/gcn.c b/gcc/config/gcn/gcn.c index 20534a2..f12d06d 100644 --- a/gcc/config/gcn/gcn.c +++ b/gcc/config/gcn/gcn.c @@ -462,6 +462,9 @@ gcn_regno_reg_class (int regno) { case SCC_REG: return SCC_CONDITIONAL_REG; + case VCC_LO_REG: + case VCC_HI_REG: + return VCC_CONDITIONAL_REG; case VCCZ_REG: return VCCZ_CONDITIONAL_REG; case EXECZ_REG: @@ -629,7 +632,8 @@ gcn_can_split_p (machine_mode, rtx op) static reg_class_t gcn_spill_class (reg_class_t c, machine_mode /*mode */ ) { - if (reg_classes_intersect_p (ALL_CONDITIONAL_REGS, c)) + if (reg_classes_intersect_p (ALL_CONDITIONAL_REGS, c) + || c == VCC_CONDITIONAL_REG) return SGPR_REGS; else return NO_REGS; |