mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-11-01 15:11:24 +00:00
PowerPC: Remove ADDIL patterns.
The ADDI/ADDI8 patterns are currently duplicated into ADDIL/ADDI8L, which describe the same instruction, except that they accept a symbolLo[64] operand instead of a s16imm[64] operand. This duplication confuses the asm parser, and it actually not really needed, since symbolLo[64] already accepts immediate operands anyway. So this commit removes the duplicate patterns. No change in generated code. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@178004 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
a01c7dbaab
commit
2b0850b830
@ -496,10 +496,10 @@ void PPCAsmPrinter::EmitInstruction(const MachineInstr *MI) {
|
||||
// Transform %Xd = ADDItocL %Xs, <ga:@sym>
|
||||
LowerPPCMachineInstrToMCInst(MI, TmpInst, *this, Subtarget.isDarwin());
|
||||
|
||||
// Change the opcode to ADDI8L. If the global address is external, then
|
||||
// Change the opcode to ADDI8. If the global address is external, then
|
||||
// generate a TOC entry and reference that. Otherwise reference the
|
||||
// symbol directly.
|
||||
TmpInst.setOpcode(PPC::ADDI8L);
|
||||
TmpInst.setOpcode(PPC::ADDI8);
|
||||
const MachineOperand &MO = MI->getOperand(2);
|
||||
assert((MO.isGlobal() || MO.isCPI()) && "Invalid operand for ADDItocL");
|
||||
MCSymbol *MOSymbol = 0;
|
||||
@ -579,7 +579,7 @@ void PPCAsmPrinter::EmitInstruction(const MachineInstr *MI) {
|
||||
}
|
||||
case PPC::ADDItlsgdL: {
|
||||
// Transform: %Xd = ADDItlsgdL %Xs, <ga:@sym>
|
||||
// Into: %Xd = ADDI8L %Xs, sym@got@tlsgd@l
|
||||
// Into: %Xd = ADDI8 %Xs, sym@got@tlsgd@l
|
||||
assert(Subtarget.isPPC64() && "Not supported for 32-bit PowerPC");
|
||||
const MachineOperand &MO = MI->getOperand(2);
|
||||
const GlobalValue *GValue = MO.getGlobal();
|
||||
@ -587,7 +587,7 @@ void PPCAsmPrinter::EmitInstruction(const MachineInstr *MI) {
|
||||
const MCExpr *SymGotTlsGD =
|
||||
MCSymbolRefExpr::Create(MOSymbol, MCSymbolRefExpr::VK_PPC_GOT_TLSGD16_LO,
|
||||
OutContext);
|
||||
OutStreamer.EmitInstruction(MCInstBuilder(PPC::ADDI8L)
|
||||
OutStreamer.EmitInstruction(MCInstBuilder(PPC::ADDI8)
|
||||
.addReg(MI->getOperand(0).getReg())
|
||||
.addReg(MI->getOperand(1).getReg())
|
||||
.addExpr(SymGotTlsGD));
|
||||
@ -631,7 +631,7 @@ void PPCAsmPrinter::EmitInstruction(const MachineInstr *MI) {
|
||||
}
|
||||
case PPC::ADDItlsldL: {
|
||||
// Transform: %Xd = ADDItlsldL %Xs, <ga:@sym>
|
||||
// Into: %Xd = ADDI8L %Xs, sym@got@tlsld@l
|
||||
// Into: %Xd = ADDI8 %Xs, sym@got@tlsld@l
|
||||
assert(Subtarget.isPPC64() && "Not supported for 32-bit PowerPC");
|
||||
const MachineOperand &MO = MI->getOperand(2);
|
||||
const GlobalValue *GValue = MO.getGlobal();
|
||||
@ -639,7 +639,7 @@ void PPCAsmPrinter::EmitInstruction(const MachineInstr *MI) {
|
||||
const MCExpr *SymGotTlsLD =
|
||||
MCSymbolRefExpr::Create(MOSymbol, MCSymbolRefExpr::VK_PPC_GOT_TLSLD16_LO,
|
||||
OutContext);
|
||||
OutStreamer.EmitInstruction(MCInstBuilder(PPC::ADDI8L)
|
||||
OutStreamer.EmitInstruction(MCInstBuilder(PPC::ADDI8)
|
||||
.addReg(MI->getOperand(0).getReg())
|
||||
.addReg(MI->getOperand(1).getReg())
|
||||
.addExpr(SymGotTlsLD));
|
||||
@ -683,7 +683,7 @@ void PPCAsmPrinter::EmitInstruction(const MachineInstr *MI) {
|
||||
}
|
||||
case PPC::ADDIdtprelL: {
|
||||
// Transform: %Xd = ADDIdtprelL %Xs, <ga:@sym>
|
||||
// Into: %Xd = ADDI8L %Xs, sym@dtprel@l
|
||||
// Into: %Xd = ADDI8 %Xs, sym@dtprel@l
|
||||
assert(Subtarget.isPPC64() && "Not supported for 32-bit PowerPC");
|
||||
const MachineOperand &MO = MI->getOperand(2);
|
||||
const GlobalValue *GValue = MO.getGlobal();
|
||||
@ -691,7 +691,7 @@ void PPCAsmPrinter::EmitInstruction(const MachineInstr *MI) {
|
||||
const MCExpr *SymDtprel =
|
||||
MCSymbolRefExpr::Create(MOSymbol, MCSymbolRefExpr::VK_PPC_DTPREL16_LO,
|
||||
OutContext);
|
||||
OutStreamer.EmitInstruction(MCInstBuilder(PPC::ADDI8L)
|
||||
OutStreamer.EmitInstruction(MCInstBuilder(PPC::ADDI8)
|
||||
.addReg(MI->getOperand(0).getReg())
|
||||
.addReg(MI->getOperand(1).getReg())
|
||||
.addExpr(SymDtprel));
|
||||
|
@ -1477,8 +1477,7 @@ void PPCDAGToDAGISel::PostprocessISelDAG() {
|
||||
default: continue;
|
||||
|
||||
case PPC::ADDI8:
|
||||
case PPC::ADDI8L:
|
||||
case PPC::ADDIL:
|
||||
case PPC::ADDI:
|
||||
// In some cases (such as TLS) the relocation information
|
||||
// is already in place on the operand, so copying the operand
|
||||
// is sufficient.
|
||||
|
@ -371,10 +371,7 @@ def ADDIC8 : DForm_2<12, (outs G8RC:$rD), (ins G8RC:$rA, s16imm64:$imm),
|
||||
"addic $rD, $rA, $imm", IntGeneral,
|
||||
[(set i64:$rD, (addc i64:$rA, immSExt16:$imm))]>;
|
||||
}
|
||||
def ADDI8 : DForm_2<14, (outs G8RC:$rD), (ins G8RC_NOX0:$rA, s16imm64:$imm),
|
||||
"addi $rD, $rA, $imm", IntSimple,
|
||||
[(set i64:$rD, (add i64:$rA, immSExt16:$imm))]>;
|
||||
def ADDI8L : DForm_2<14, (outs G8RC:$rD), (ins G8RC_NOX0:$rA, symbolLo64:$imm),
|
||||
def ADDI8 : DForm_2<14, (outs G8RC:$rD), (ins G8RC_NOX0:$rA, symbolLo64:$imm),
|
||||
"addi $rD, $rA, $imm", IntSimple,
|
||||
[(set i64:$rD, (add i64:$rA, immSExt16:$imm))]>;
|
||||
def ADDIS8 : DForm_2<15, (outs G8RC:$rD), (ins G8RC_NOX0:$rA, symbolHi64:$imm),
|
||||
@ -933,7 +930,7 @@ def : Pat<(PPClo tblockaddress:$in, 0), (LI8 tblockaddress:$in)>;
|
||||
def : Pat<(PPChi tglobaltlsaddr:$g, i64:$in),
|
||||
(ADDIS8 $in, tglobaltlsaddr:$g)>;
|
||||
def : Pat<(PPClo tglobaltlsaddr:$g, i64:$in),
|
||||
(ADDI8L $in, tglobaltlsaddr:$g)>;
|
||||
(ADDI8 $in, tglobaltlsaddr:$g)>;
|
||||
def : Pat<(add i64:$in, (PPChi tglobaladdr:$g, 0)),
|
||||
(ADDIS8 $in, tglobaladdr:$g)>;
|
||||
def : Pat<(add i64:$in, (PPChi tconstpool:$g, 0)),
|
||||
|
@ -985,10 +985,7 @@ def SYNC : XForm_24_sync<31, 598, (outs), (ins),
|
||||
//
|
||||
|
||||
let PPC970_Unit = 1 in { // FXU Operations.
|
||||
def ADDI : DForm_2<14, (outs GPRC:$rD), (ins GPRC_NOR0:$rA, s16imm:$imm),
|
||||
"addi $rD, $rA, $imm", IntSimple,
|
||||
[(set i32:$rD, (add i32:$rA, immSExt16:$imm))]>;
|
||||
def ADDIL : DForm_2<14, (outs GPRC:$rD), (ins GPRC_NOR0:$rA, symbolLo:$imm),
|
||||
def ADDI : DForm_2<14, (outs GPRC:$rD), (ins GPRC_NOR0:$rA, symbolLo:$imm),
|
||||
"addi $rD, $rA, $imm", IntSimple,
|
||||
[(set i32:$rD, (add i32:$rA, immSExt16:$imm))]>;
|
||||
let Defs = [CARRY] in {
|
||||
@ -1584,7 +1581,7 @@ def : Pat<(PPClo tblockaddress:$in, 0), (LI tblockaddress:$in)>;
|
||||
def : Pat<(PPChi tglobaltlsaddr:$g, i32:$in),
|
||||
(ADDIS $in, tglobaltlsaddr:$g)>;
|
||||
def : Pat<(PPClo tglobaltlsaddr:$g, i32:$in),
|
||||
(ADDIL $in, tglobaltlsaddr:$g)>;
|
||||
(ADDI $in, tglobaltlsaddr:$g)>;
|
||||
def : Pat<(add i32:$in, (PPChi tglobaladdr:$g, 0)),
|
||||
(ADDIS $in, tglobaladdr:$g)>;
|
||||
def : Pat<(add i32:$in, (PPChi tconstpool:$g, 0)),
|
||||
|
Loading…
Reference in New Issue
Block a user