[llvm] r322591 - [PPC] Add a new register XER aliased to CARRY
Guozhi Wei via llvm-commits
llvm-commits at lists.llvm.org
Tue Jan 16 11:28:50 PST 2018
Author: carrot
Date: Tue Jan 16 11:28:50 2018
New Revision: 322591
URL: http://llvm.org/viewvc/llvm-project?rev=322591&view=rev
Log:
[PPC] Add a new register XER aliased to CARRY
When "xer" is specified as clobbered register in inline assembler, clang can accept it, but llvm simply ignore it when lowered to machine instructions. It may cause problems later in scheduler.
This patch adds a new register XER aliased to CARRY, and adds it to register class CARRYRC. Now PPCTargetLowering::getRegForInlineAsmConstraint can return correct register number for inline asm constraint "{xer}", and scheduler behave correctly.
Differential Revision: https://reviews.llvm.org/D41967
Modified:
llvm/trunk/lib/Target/PowerPC/PPCRegisterInfo.td
Modified: llvm/trunk/lib/Target/PowerPC/PPCRegisterInfo.td
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/PowerPC/PPCRegisterInfo.td?rev=322591&r1=322590&r2=322591&view=diff
==============================================================================
--- llvm/trunk/lib/Target/PowerPC/PPCRegisterInfo.td (original)
+++ llvm/trunk/lib/Target/PowerPC/PPCRegisterInfo.td Tue Jan 16 11:28:50 2018
@@ -208,10 +208,14 @@ def CTR8 : SPR<9, "ctr">, DwarfRegNum<[6
// VRsave register
def VRSAVE: SPR<256, "vrsave">, DwarfRegNum<[109]>;
+def XER: SPR<1, "xer">, DwarfRegNum<[76]>;
+
// Carry bit. In the architecture this is really bit 0 of the XER register
// (which really is SPR register 1); this is the only bit interesting to a
// compiler.
-def CARRY: SPR<1, "ca">, DwarfRegNum<[76]>;
+def CARRY: SPR<1, "xer">, DwarfRegNum<[76]> {
+ let Aliases = [XER];
+}
// FP rounding mode: bits 30 and 31 of the FP status and control register
// This is not allocated as a normal register; it appears only in
@@ -351,7 +355,7 @@ def CTRRC8 : RegisterClass<"PPC", [i64],
}
def VRSAVERC : RegisterClass<"PPC", [i32], 32, (add VRSAVE)>;
-def CARRYRC : RegisterClass<"PPC", [i32], 32, (add CARRY)> {
+def CARRYRC : RegisterClass<"PPC", [i32], 32, (add CARRY, XER)> {
let CopyCost = -1;
}
More information about the llvm-commits
mailing list