aboutsummaryrefslogtreecommitdiff
path: root/gcc/config
diff options
context:
space:
mode:
authorKwok Cheung Yeung <kcy@codesourcery.com>2019-11-15 12:54:40 +0000
committerKwok Cheung Yeung <kcy@gcc.gnu.org>2019-11-15 12:54:40 +0000
commit9ecf84e6a5616e30a03b4813b696607b2aa12d47 (patch)
tree04efeaec3e3696d5436244bdab309e41b1da986b /gcc/config
parentd03431d0f59f5aa5c2a8e2e5ea94ea1660b240f8 (diff)
downloadgcc-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.c6
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;