diff options
author | Wesley Peck <peckw@wesleypeck.com> | 2010-12-12 22:02:31 +0000 |
---|---|---|
committer | Wesley Peck <peckw@wesleypeck.com> | 2010-12-12 22:02:31 +0000 |
commit | a7c7b9dccba2c14a93f0f9a29490f1df4f9b4080 (patch) | |
tree | e93e3c9996bb78d930573677615bc97f30f1e817 /lib | |
parent | d713acb63105f55ef5ed0f3a499da81c3eeacd49 (diff) |
The ADD and ADDK (and all variants) instructions where flip-flopped in the MBlaze backend. This bug fix makes 64-bit math work on the MBlaze backend.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@121649 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib')
-rw-r--r-- | lib/Target/MBlaze/MBlazeAsmBackend.cpp | 2 | ||||
-rw-r--r-- | lib/Target/MBlaze/MBlazeFrameInfo.cpp | 4 | ||||
-rw-r--r-- | lib/Target/MBlaze/MBlazeISelDAGToDAG.cpp | 2 | ||||
-rw-r--r-- | lib/Target/MBlaze/MBlazeISelLowering.cpp | 4 | ||||
-rw-r--r-- | lib/Target/MBlaze/MBlazeInstrFPU.td | 42 | ||||
-rw-r--r-- | lib/Target/MBlaze/MBlazeInstrInfo.td | 36 | ||||
-rw-r--r-- | lib/Target/MBlaze/MBlazeMCCodeEmitter.cpp | 4 | ||||
-rw-r--r-- | lib/Target/MBlaze/MBlazeRegisterInfo.cpp | 4 |
8 files changed, 49 insertions, 49 deletions
diff --git a/lib/Target/MBlaze/MBlazeAsmBackend.cpp b/lib/Target/MBlaze/MBlazeAsmBackend.cpp index 0d39d60a89..8037c4ee5c 100644 --- a/lib/Target/MBlaze/MBlazeAsmBackend.cpp +++ b/lib/Target/MBlaze/MBlazeAsmBackend.cpp @@ -61,7 +61,7 @@ public: static unsigned getRelaxedOpcode(unsigned Op) { switch (Op) { default: return Op; - case MBlaze::ADDI: return MBlaze::ADDI32; + case MBlaze::ADDIK: return MBlaze::ADDIK32; case MBlaze::ORI: return MBlaze::ORI32; case MBlaze::BRLID: return MBlaze::BRLID32; } diff --git a/lib/Target/MBlaze/MBlazeFrameInfo.cpp b/lib/Target/MBlaze/MBlazeFrameInfo.cpp index cef82cca3f..77897232f7 100644 --- a/lib/Target/MBlaze/MBlazeFrameInfo.cpp +++ b/lib/Target/MBlaze/MBlazeFrameInfo.cpp @@ -187,7 +187,7 @@ void MBlazeFrameInfo::emitPrologue(MachineFunction &MF) const { int RAOffset = MBlazeFI->getRAStackOffset(); // Adjust stack : addi R1, R1, -imm - BuildMI(MBB, MBBI, DL, TII.get(MBlaze::ADDI), MBlaze::R1) + BuildMI(MBB, MBBI, DL, TII.get(MBlaze::ADDIK), MBlaze::R1) .addReg(MBlaze::R1).addImm(-StackSize); // swi R15, R1, stack_loc @@ -242,7 +242,7 @@ void MBlazeFrameInfo::emitEpilogue(MachineFunction &MF, // addi R1, R1, imm if (StackSize) { - BuildMI(MBB, MBBI, dl, TII.get(MBlaze::ADDI), MBlaze::R1) + BuildMI(MBB, MBBI, dl, TII.get(MBlaze::ADDIK), MBlaze::R1) .addReg(MBlaze::R1).addImm(StackSize); } } diff --git a/lib/Target/MBlaze/MBlazeISelDAGToDAG.cpp b/lib/Target/MBlaze/MBlazeISelDAGToDAG.cpp index 9924e67b63..2da8a593d5 100644 --- a/lib/Target/MBlaze/MBlazeISelDAGToDAG.cpp +++ b/lib/Target/MBlaze/MBlazeISelDAGToDAG.cpp @@ -210,7 +210,7 @@ SDNode* MBlazeDAGToDAGISel::Select(SDNode *Node) { int FI = dyn_cast<FrameIndexSDNode>(Node)->getIndex(); EVT VT = Node->getValueType(0); SDValue TFI = CurDAG->getTargetFrameIndex(FI, VT); - unsigned Opc = MBlaze::ADDI; + unsigned Opc = MBlaze::ADDIK; if (Node->hasOneUse()) return CurDAG->SelectNodeTo(Node, Opc, VT, TFI, imm); return CurDAG->getMachineNode(Opc, dl, VT, TFI, imm); diff --git a/lib/Target/MBlaze/MBlazeISelLowering.cpp b/lib/Target/MBlaze/MBlazeISelLowering.cpp index fb6fb54169..ad7222a4c5 100644 --- a/lib/Target/MBlaze/MBlazeISelLowering.cpp +++ b/lib/Target/MBlaze/MBlazeISelLowering.cpp @@ -268,7 +268,7 @@ MBlazeTargetLowering::EmitInstrWithCustomInserter(MachineInstr *MI, .addImm(31); unsigned IVAL = R.createVirtualRegister(MBlaze::GPRRegisterClass); - BuildMI(BB, dl, TII->get(MBlaze::ADDI), IVAL) + BuildMI(BB, dl, TII->get(MBlaze::ADDIK), IVAL) .addReg(MI->getOperand(1).getReg()) .addImm(0); @@ -297,7 +297,7 @@ MBlazeTargetLowering::EmitInstrWithCustomInserter(MachineInstr *MI, else llvm_unreachable("Cannot lower unknown shift instruction"); - BuildMI(loop, dl, TII->get(MBlaze::ADDI), NAMT) + BuildMI(loop, dl, TII->get(MBlaze::ADDIK), NAMT) .addReg(SAMT) .addImm(-1); diff --git a/lib/Target/MBlaze/MBlazeInstrFPU.td b/lib/Target/MBlaze/MBlazeInstrFPU.td index 8f3733244a..094de5c0c1 100644 --- a/lib/Target/MBlaze/MBlazeInstrFPU.td +++ b/lib/Target/MBlaze/MBlazeInstrFPU.td @@ -143,74 +143,74 @@ let Predicates=[HasFPU] in { // SET_CC operations let Predicates=[HasFPU] in { def : Pat<(setcc (f32 GPR:$L), (f32 GPR:$R), SETEQ), - (Select_CC (ADDI (i32 R0), 1), (ADDI (i32 R0), 0), + (Select_CC (ADDIK (i32 R0), 1), (ADDIK (i32 R0), 0), (FCMP_EQ GPR:$L, GPR:$R), 2)>; def : Pat<(setcc (f32 GPR:$L), (f32 GPR:$R), SETNE), - (Select_CC (ADDI (i32 R0), 1), (ADDI (i32 R0), 0), + (Select_CC (ADDIK (i32 R0), 1), (ADDIK (i32 R0), 0), (FCMP_EQ GPR:$L, GPR:$R), 1)>; def : Pat<(setcc (f32 GPR:$L), (f32 GPR:$R), SETOEQ), - (Select_CC (ADDI (i32 R0), 1), (ADDI (i32 R0), 0), + (Select_CC (ADDIK (i32 R0), 1), (ADDIK (i32 R0), 0), (FCMP_EQ GPR:$L, GPR:$R), 2)>; def : Pat<(setcc (f32 GPR:$L), (f32 GPR:$R), SETONE), - (Select_CC (ADDI (i32 R0), 1), (ADDI (i32 R0), 0), + (Select_CC (ADDIK (i32 R0), 1), (ADDIK (i32 R0), 0), (XOR (FCMP_UN GPR:$L, GPR:$R), (FCMP_EQ GPR:$L, GPR:$R)), 2)>; def : Pat<(setcc (f32 GPR:$L), (f32 GPR:$R), SETONE), - (Select_CC (ADDI (i32 R0), 1), (ADDI (i32 R0), 0), + (Select_CC (ADDIK (i32 R0), 1), (ADDIK (i32 R0), 0), (OR (FCMP_UN GPR:$L, GPR:$R), (FCMP_EQ GPR:$L, GPR:$R)), 2)>; def : Pat<(setcc (f32 GPR:$L), (f32 GPR:$R), SETGT), - (Select_CC (ADDI (i32 R0), 1), (ADDI (i32 R0), 0), + (Select_CC (ADDIK (i32 R0), 1), (ADDIK (i32 R0), 0), (FCMP_GT GPR:$L, GPR:$R), 2)>; def : Pat<(setcc (f32 GPR:$L), (f32 GPR:$R), SETLT), - (Select_CC (ADDI (i32 R0), 1), (ADDI (i32 R0), 0), + (Select_CC (ADDIK (i32 R0), 1), (ADDIK (i32 R0), 0), (FCMP_LT GPR:$L, GPR:$R), 2)>; def : Pat<(setcc (f32 GPR:$L), (f32 GPR:$R), SETGE), - (Select_CC (ADDI (i32 R0), 1), (ADDI (i32 R0), 0), + (Select_CC (ADDIK (i32 R0), 1), (ADDIK (i32 R0), 0), (FCMP_GE GPR:$L, GPR:$R), 2)>; def : Pat<(setcc (f32 GPR:$L), (f32 GPR:$R), SETLE), - (Select_CC (ADDI (i32 R0), 1), (ADDI (i32 R0), 0), + (Select_CC (ADDIK (i32 R0), 1), (ADDIK (i32 R0), 0), (FCMP_LE GPR:$L, GPR:$R), 2)>; def : Pat<(setcc (f32 GPR:$L), (f32 GPR:$R), SETOGT), - (Select_CC (ADDI (i32 R0), 1), (ADDI (i32 R0), 0), + (Select_CC (ADDIK (i32 R0), 1), (ADDIK (i32 R0), 0), (FCMP_GT GPR:$L, GPR:$R), 2)>; def : Pat<(setcc (f32 GPR:$L), (f32 GPR:$R), SETOLT), - (Select_CC (ADDI (i32 R0), 1), (ADDI (i32 R0), 0), + (Select_CC (ADDIK (i32 R0), 1), (ADDIK (i32 R0), 0), (FCMP_LT GPR:$L, GPR:$R), 2)>; def : Pat<(setcc (f32 GPR:$L), (f32 GPR:$R), SETOGE), - (Select_CC (ADDI (i32 R0), 1), (ADDI (i32 R0), 0), + (Select_CC (ADDIK (i32 R0), 1), (ADDIK (i32 R0), 0), (FCMP_GE GPR:$L, GPR:$R), 2)>; def : Pat<(setcc (f32 GPR:$L), (f32 GPR:$R), SETOLE), - (Select_CC (ADDI (i32 R0), 1), (ADDI (i32 R0), 0), + (Select_CC (ADDIK (i32 R0), 1), (ADDIK (i32 R0), 0), (FCMP_LE GPR:$L, GPR:$R), 2)>; def : Pat<(setcc (f32 GPR:$L), (f32 GPR:$R), SETUEQ), - (Select_CC (ADDI (i32 R0), 1), (ADDI (i32 R0), 0), + (Select_CC (ADDIK (i32 R0), 1), (ADDIK (i32 R0), 0), (OR (FCMP_UN GPR:$L, GPR:$R), (FCMP_EQ GPR:$L, GPR:$R)), 2)>; def : Pat<(setcc (f32 GPR:$L), (f32 GPR:$R), SETUNE), - (Select_CC (ADDI (i32 R0), 1), (ADDI (i32 R0), 0), + (Select_CC (ADDIK (i32 R0), 1), (ADDIK (i32 R0), 0), (FCMP_NE GPR:$L, GPR:$R), 2)>; def : Pat<(setcc (f32 GPR:$L), (f32 GPR:$R), SETUGT), - (Select_CC (ADDI (i32 R0), 1), (ADDI (i32 R0), 0), + (Select_CC (ADDIK (i32 R0), 1), (ADDIK (i32 R0), 0), (OR (FCMP_UN GPR:$L, GPR:$R), (FCMP_GT GPR:$L, GPR:$R)), 2)>; def : Pat<(setcc (f32 GPR:$L), (f32 GPR:$R), SETULT), - (Select_CC (ADDI (i32 R0), 1), (ADDI (i32 R0), 0), + (Select_CC (ADDIK (i32 R0), 1), (ADDIK (i32 R0), 0), (OR (FCMP_UN GPR:$L, GPR:$R), (FCMP_LT GPR:$L, GPR:$R)), 2)>; def : Pat<(setcc (f32 GPR:$L), (f32 GPR:$R), SETUGE), - (Select_CC (ADDI (i32 R0), 1), (ADDI (i32 R0), 0), + (Select_CC (ADDIK (i32 R0), 1), (ADDIK (i32 R0), 0), (OR (FCMP_UN GPR:$L, GPR:$R), (FCMP_GE GPR:$L, GPR:$R)), 2)>; def : Pat<(setcc (f32 GPR:$L), (f32 GPR:$R), SETULE), - (Select_CC (ADDI (i32 R0), 1), (ADDI (i32 R0), 0), + (Select_CC (ADDIK (i32 R0), 1), (ADDIK (i32 R0), 0), (OR (FCMP_UN GPR:$L, GPR:$R), (FCMP_LE GPR:$L, GPR:$R)), 2)>; def : Pat<(setcc (f32 GPR:$L), (f32 GPR:$R), SETO), - (Select_CC (ADDI (i32 R0), 1), (ADDI (i32 R0), 0), + (Select_CC (ADDIK (i32 R0), 1), (ADDIK (i32 R0), 0), (FCMP_UN GPR:$L, GPR:$R), 1)>; def : Pat<(setcc (f32 GPR:$L), (f32 GPR:$R), SETUO), - (Select_CC (ADDI (i32 R0), 1), (ADDI (i32 R0), 0), + (Select_CC (ADDIK (i32 R0), 1), (ADDIK (i32 R0), 0), (FCMP_UN GPR:$L, GPR:$R), 2)>; } diff --git a/lib/Target/MBlaze/MBlazeInstrInfo.td b/lib/Target/MBlaze/MBlazeInstrInfo.td index 9bda006f54..8b6420d44e 100644 --- a/lib/Target/MBlaze/MBlazeInstrInfo.td +++ b/lib/Target/MBlaze/MBlazeInstrInfo.td @@ -327,9 +327,9 @@ class BranchCI<bits<6> op, bits<5> br, string instr_asm> : //===----------------------------------------------------------------------===// let isCommutable = 1, isAsCheapAsAMove = 1 in { - def ADD : Arith<0x00, 0x000, "add ", add, IIAlu>; + def ADD : Arith<0x00, 0x000, "add ", addc, IIAlu>; def ADDC : Arith<0x02, 0x000, "addc ", adde, IIAlu>; - def ADDK : Arith<0x04, 0x000, "addk ", addc, IIAlu>; + def ADDK : Arith<0x04, 0x000, "addk ", add, IIAlu>; def ADDKC : ArithN<0x06, 0x000, "addkc ", IIAlu>; def AND : Logic<0x21, 0x000, "and ", and>; def OR : Logic<0x20, 0x000, "or ", or>; @@ -343,9 +343,9 @@ let isAsCheapAsAMove = 1 in { def ANDN : ArithN<0x23, 0x000, "andn ", IIAlu>; def CMP : ArithN<0x05, 0x001, "cmp ", IIAlu>; def CMPU : ArithN<0x05, 0x003, "cmpu ", IIAlu>; - def RSUB : ArithR<0x01, 0x000, "rsub ", sub, IIAlu>; + def RSUB : ArithR<0x01, 0x000, "rsub ", subc, IIAlu>; def RSUBC : ArithR<0x03, 0x000, "rsubc ", sube, IIAlu>; - def RSUBK : ArithR<0x05, 0x000, "rsubk ", subc, IIAlu>; + def RSUBK : ArithR<0x05, 0x000, "rsubk ", sub, IIAlu>; def RSUBKC : ArithRN<0x07, 0x000, "rsubkc ", IIAlu>; } @@ -589,7 +589,7 @@ let rb = 0 in { } let isCodeGenOnly=1 in { - def ADDI32 : ArithI32<0x08, "addi ", simm16, immSExt16>; + def ADDIK32 : ArithI32<0x08, "addik ", simm16, immSExt16>; def ORI32 : LogicI32<0x28, "ori ">; def BRLID32 : BranchLI<0x2E, 0x14, "brlid ">; } @@ -632,11 +632,11 @@ def IMM : MBlazeInst<0x2C, FCCI, (outs), (ins simm16:$imm), // Small immediates def : Pat<(i32 0), (ADD (i32 R0), (i32 R0))>; -def : Pat<(i32 immSExt16:$imm), (ADDI (i32 R0), imm:$imm)>; +def : Pat<(i32 immSExt16:$imm), (ADDIK (i32 R0), imm:$imm)>; def : Pat<(i32 immZExt16:$imm), (ORI (i32 R0), imm:$imm)>; // Arbitrary immediates -def : Pat<(i32 imm:$imm), (ADDI (i32 R0), imm:$imm)>; +def : Pat<(i32 imm:$imm), (ADDIK (i32 R0), imm:$imm)>; // In register sign extension def : Pat<(sext_inreg GPR:$src, i16), (SEXT16 GPR:$src)>; @@ -659,34 +659,34 @@ def : Pat<(srl GPR:$L, GPR:$R), (ShiftRL GPR:$L, GPR:$R)>; // SET_CC operations def : Pat<(setcc (i32 GPR:$L), (i32 GPR:$R), SETEQ), - (Select_CC (ADDI (i32 R0), 1), (ADDI (i32 R0), 0), + (Select_CC (ADDIK (i32 R0), 1), (ADDIK (i32 R0), 0), (CMP GPR:$R, GPR:$L), 1)>; def : Pat<(setcc (i32 GPR:$L), (i32 GPR:$R), SETNE), - (Select_CC (ADDI (i32 R0), 1), (ADDI (i32 R0), 0), + (Select_CC (ADDIK (i32 R0), 1), (ADDIK (i32 R0), 0), (CMP GPR:$R, GPR:$L), 2)>; def : Pat<(setcc (i32 GPR:$L), (i32 GPR:$R), SETGT), - (Select_CC (ADDI (i32 R0), 1), (ADDI (i32 R0), 0), + (Select_CC (ADDIK (i32 R0), 1), (ADDIK (i32 R0), 0), (CMP GPR:$R, GPR:$L), 3)>; def : Pat<(setcc (i32 GPR:$L), (i32 GPR:$R), SETLT), - (Select_CC (ADDI (i32 R0), 1), (ADDI (i32 R0), 0), + (Select_CC (ADDIK (i32 R0), 1), (ADDIK (i32 R0), 0), (CMP GPR:$R, GPR:$L), 4)>; def : Pat<(setcc (i32 GPR:$L), (i32 GPR:$R), SETGE), - (Select_CC (ADDI (i32 R0), 1), (ADDI (i32 R0), 0), + (Select_CC (ADDIK (i32 R0), 1), (ADDIK (i32 R0), 0), (CMP GPR:$R, GPR:$L), 5)>; def : Pat<(setcc (i32 GPR:$L), (i32 GPR:$R), SETLE), - (Select_CC (ADDI (i32 R0), 1), (ADDI (i32 R0), 0), + (Select_CC (ADDIK (i32 R0), 1), (ADDIK (i32 R0), 0), (CMP GPR:$R, GPR:$L), 6)>; def : Pat<(setcc (i32 GPR:$L), (i32 GPR:$R), SETUGT), - (Select_CC (ADDI (i32 R0), 1), (ADDI (i32 R0), 0), + (Select_CC (ADDIK (i32 R0), 1), (ADDIK (i32 R0), 0), (CMPU GPR:$R, GPR:$L), 3)>; def : Pat<(setcc (i32 GPR:$L), (i32 GPR:$R), SETULT), - (Select_CC (ADDI (i32 R0), 1), (ADDI (i32 R0), 0), + (Select_CC (ADDIK (i32 R0), 1), (ADDIK (i32 R0), 0), (CMPU GPR:$R, GPR:$L), 4)>; def : Pat<(setcc (i32 GPR:$L), (i32 GPR:$R), SETUGE), - (Select_CC (ADDI (i32 R0), 1), (ADDI (i32 R0), 0), + (Select_CC (ADDIK (i32 R0), 1), (ADDIK (i32 R0), 0), (CMPU GPR:$R, GPR:$L), 5)>; def : Pat<(setcc (i32 GPR:$L), (i32 GPR:$R), SETULE), - (Select_CC (ADDI (i32 R0), 1), (ADDI (i32 R0), 0), + (Select_CC (ADDIK (i32 R0), 1), (ADDIK (i32 R0), 0), (CMPU GPR:$R, GPR:$L), 6)>; // SELECT operations @@ -765,7 +765,7 @@ def : Pat<(MBWrapper tconstpool:$in), (ORI (i32 R0), tconstpool:$in)>; def : Pat<(and (i32 GPR:$lh), (not (i32 GPR:$rh))),(ANDN GPR:$lh, GPR:$rh)>; // Arithmetic with immediates -def : Pat<(add (i32 GPR:$in), imm:$imm),(ADDI GPR:$in, imm:$imm)>; +def : Pat<(add (i32 GPR:$in), imm:$imm),(ADDIK GPR:$in, imm:$imm)>; def : Pat<(or (i32 GPR:$in), imm:$imm),(ORI GPR:$in, imm:$imm)>; def : Pat<(xor (i32 GPR:$in), imm:$imm),(XORI GPR:$in, imm:$imm)>; diff --git a/lib/Target/MBlaze/MBlazeMCCodeEmitter.cpp b/lib/Target/MBlaze/MBlazeMCCodeEmitter.cpp index e7fb788b3c..90ad502556 100644 --- a/lib/Target/MBlaze/MBlazeMCCodeEmitter.cpp +++ b/lib/Target/MBlaze/MBlazeMCCodeEmitter.cpp @@ -141,7 +141,7 @@ EmitIMM(const MCInst &MI, unsigned &CurByte,raw_ostream &OS) const { switch (MI.getOpcode()) { default: break; - case MBlaze::ADDI32: + case MBlaze::ADDIK32: case MBlaze::ORI32: case MBlaze::BRLID32: EmitByte(0x0D, CurByte, OS); @@ -168,7 +168,7 @@ EmitImmediate(const MCInst &MI, unsigned opNo, bool pcrel, unsigned &CurByte, Fixups.push_back(MCFixup::Create(0,oper.getExpr(),FixupKind)); break; case MBlaze::ORI32: - case MBlaze::ADDI32: + case MBlaze::ADDIK32: case MBlaze::BRLID32: FixupKind = pcrel ? FK_PCRel_4 : FK_Data_4; Fixups.push_back(MCFixup::Create(0,oper.getExpr(),FixupKind)); diff --git a/lib/Target/MBlaze/MBlazeRegisterInfo.cpp b/lib/Target/MBlaze/MBlazeRegisterInfo.cpp index 891e189314..45da9eadfe 100644 --- a/lib/Target/MBlaze/MBlazeRegisterInfo.cpp +++ b/lib/Target/MBlaze/MBlazeRegisterInfo.cpp @@ -185,11 +185,11 @@ eliminateCallFramePseudoInstr(MachineFunction &MF, MachineBasicBlock &MBB, MachineInstr *New; if (Old->getOpcode() == MBlaze::ADJCALLSTACKDOWN) { - New = BuildMI(MF, Old->getDebugLoc(), TII.get(MBlaze::ADDI), MBlaze::R1) + New = BuildMI(MF,Old->getDebugLoc(),TII.get(MBlaze::ADDIK),MBlaze::R1) .addReg(MBlaze::R1).addImm(-Amount); } else { assert(Old->getOpcode() == MBlaze::ADJCALLSTACKUP); - New = BuildMI(MF, Old->getDebugLoc(), TII.get(MBlaze::ADDI), MBlaze::R1) + New = BuildMI(MF,Old->getDebugLoc(),TII.get(MBlaze::ADDIK),MBlaze::R1) .addReg(MBlaze::R1).addImm(Amount); } |