mirror of
				https://github.com/c64scene-ar/llvm-6502.git
				synced 2025-11-04 05:17:07 +00:00 
			
		
		
		
	Simplifies logic for printing target flags.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@128741 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
		@@ -298,22 +298,9 @@ void MipsAsmPrinter::printOperand(const MachineInstr *MI, int opNum,
 | 
				
			|||||||
  switch(MO.getTargetFlags()) {
 | 
					  switch(MO.getTargetFlags()) {
 | 
				
			||||||
  case MipsII::MO_GPREL:    O << "%gp_rel("; break;
 | 
					  case MipsII::MO_GPREL:    O << "%gp_rel("; break;
 | 
				
			||||||
  case MipsII::MO_GOT_CALL: O << "%call16("; break;
 | 
					  case MipsII::MO_GOT_CALL: O << "%call16("; break;
 | 
				
			||||||
  case MipsII::MO_GOT: {
 | 
					  case MipsII::MO_GOT:      O << "%got(";    break;
 | 
				
			||||||
    const MachineOperand &LastMO = MI->getOperand(opNum-1);
 | 
					  case MipsII::MO_ABS_HI:   O << "%hi(";     break;
 | 
				
			||||||
    bool LastMOIsGP = LastMO.getType() == MachineOperand::MO_Register
 | 
					  case MipsII::MO_ABS_LO:   O << "%lo(";     break;
 | 
				
			||||||
                      && LastMO.getReg() == Mips::GP;
 | 
					 | 
				
			||||||
    if (MI->getOpcode() == Mips::LW || LastMOIsGP)
 | 
					 | 
				
			||||||
      O << "%got(";
 | 
					 | 
				
			||||||
    else
 | 
					 | 
				
			||||||
      O << "%lo(";
 | 
					 | 
				
			||||||
    break;
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
  case MipsII::MO_ABS_HILO:
 | 
					 | 
				
			||||||
    if (MI->getOpcode() == Mips::LUi)
 | 
					 | 
				
			||||||
      O << "%hi(";
 | 
					 | 
				
			||||||
    else
 | 
					 | 
				
			||||||
      O << "%lo(";
 | 
					 | 
				
			||||||
    break;
 | 
					 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  switch (MO.getType()) {
 | 
					  switch (MO.getType()) {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -769,12 +769,13 @@ SDValue MipsTargetLowering::LowerGlobalAddress(SDValue Op,
 | 
				
			|||||||
      return DAG.getNode(ISD::ADD, dl, MVT::i32, GOT, GPRelNode);
 | 
					      return DAG.getNode(ISD::ADD, dl, MVT::i32, GOT, GPRelNode);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    // %hi/%lo relocation
 | 
					    // %hi/%lo relocation
 | 
				
			||||||
    SDValue GA = DAG.getTargetGlobalAddress(GV, dl, MVT::i32, 0,
 | 
					    SDValue GAHi = DAG.getTargetGlobalAddress(GV, dl, MVT::i32, 0,
 | 
				
			||||||
                                            MipsII::MO_ABS_HILO);
 | 
					                                              MipsII::MO_ABS_HI);
 | 
				
			||||||
    SDValue HiPart = DAG.getNode(MipsISD::Hi, dl, VTs, &GA, 1);
 | 
					    SDValue GALo = DAG.getTargetGlobalAddress(GV, dl, MVT::i32, 0,
 | 
				
			||||||
    SDValue Lo = DAG.getNode(MipsISD::Lo, dl, MVT::i32, GA);
 | 
					                                              MipsII::MO_ABS_LO);
 | 
				
			||||||
 | 
					    SDValue HiPart = DAG.getNode(MipsISD::Hi, dl, VTs, &GAHi, 1);
 | 
				
			||||||
 | 
					    SDValue Lo = DAG.getNode(MipsISD::Lo, dl, MVT::i32, GALo);
 | 
				
			||||||
    return DAG.getNode(ISD::ADD, dl, MVT::i32, HiPart, Lo);
 | 
					    return DAG.getNode(ISD::ADD, dl, MVT::i32, HiPart, Lo);
 | 
				
			||||||
 | 
					 | 
				
			||||||
  } else {
 | 
					  } else {
 | 
				
			||||||
    SDValue GA = DAG.getTargetGlobalAddress(GV, dl, MVT::i32, 0,
 | 
					    SDValue GA = DAG.getTargetGlobalAddress(GV, dl, MVT::i32, 0,
 | 
				
			||||||
                                            MipsII::MO_GOT);
 | 
					                                            MipsII::MO_GOT);
 | 
				
			||||||
@@ -785,7 +786,9 @@ SDValue MipsTargetLowering::LowerGlobalAddress(SDValue Op,
 | 
				
			|||||||
    // a load from got/GP is necessary for PIC to work.
 | 
					    // a load from got/GP is necessary for PIC to work.
 | 
				
			||||||
    if (!GV->hasLocalLinkage() || isa<Function>(GV))
 | 
					    if (!GV->hasLocalLinkage() || isa<Function>(GV))
 | 
				
			||||||
      return ResNode;
 | 
					      return ResNode;
 | 
				
			||||||
    SDValue Lo = DAG.getNode(MipsISD::Lo, dl, MVT::i32, GA);
 | 
					    SDValue GALo = DAG.getTargetGlobalAddress(GV, dl, MVT::i32, 0,
 | 
				
			||||||
 | 
					                                              MipsII::MO_ABS_LO);
 | 
				
			||||||
 | 
					    SDValue Lo = DAG.getNode(MipsISD::Lo, dl, MVT::i32, GALo);
 | 
				
			||||||
    return DAG.getNode(ISD::ADD, dl, MVT::i32, ResNode, Lo);
 | 
					    return DAG.getNode(ISD::ADD, dl, MVT::i32, ResNode, Lo);
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -806,7 +809,7 @@ SDValue MipsTargetLowering::LowerBlockAddress(SDValue Op,
 | 
				
			|||||||
    SDValue BAGOTOffset = DAG.getBlockAddress(BA, MVT::i32, true,
 | 
					    SDValue BAGOTOffset = DAG.getBlockAddress(BA, MVT::i32, true,
 | 
				
			||||||
                                              MipsII::MO_GOT);
 | 
					                                              MipsII::MO_GOT);
 | 
				
			||||||
    SDValue BALOOffset = DAG.getBlockAddress(BA, MVT::i32, true,
 | 
					    SDValue BALOOffset = DAG.getBlockAddress(BA, MVT::i32, true,
 | 
				
			||||||
                                             MipsII::MO_ABS_HILO);
 | 
					                                             MipsII::MO_ABS_LO);
 | 
				
			||||||
    SDValue Load = DAG.getLoad(MVT::i32, dl,
 | 
					    SDValue Load = DAG.getLoad(MVT::i32, dl,
 | 
				
			||||||
                               DAG.getEntryNode(), BAGOTOffset,
 | 
					                               DAG.getEntryNode(), BAGOTOffset,
 | 
				
			||||||
                               MachinePointerInfo(), false, false, 0);
 | 
					                               MachinePointerInfo(), false, false, 0);
 | 
				
			||||||
@@ -830,7 +833,7 @@ LowerJumpTable(SDValue Op, SelectionDAG &DAG) const
 | 
				
			|||||||
  // FIXME there isn't actually debug info here
 | 
					  // FIXME there isn't actually debug info here
 | 
				
			||||||
  DebugLoc dl = Op.getDebugLoc();
 | 
					  DebugLoc dl = Op.getDebugLoc();
 | 
				
			||||||
  bool IsPIC = getTargetMachine().getRelocationModel() == Reloc::PIC_;
 | 
					  bool IsPIC = getTargetMachine().getRelocationModel() == Reloc::PIC_;
 | 
				
			||||||
  unsigned char OpFlag = IsPIC ? MipsII::MO_GOT : MipsII::MO_ABS_HILO;
 | 
					  unsigned char OpFlag = IsPIC ? MipsII::MO_GOT : MipsII::MO_ABS_HI;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  EVT PtrVT = Op.getValueType();
 | 
					  EVT PtrVT = Op.getValueType();
 | 
				
			||||||
  JumpTableSDNode *JT  = cast<JumpTableSDNode>(Op);
 | 
					  JumpTableSDNode *JT  = cast<JumpTableSDNode>(Op);
 | 
				
			||||||
@@ -845,7 +848,8 @@ LowerJumpTable(SDValue Op, SelectionDAG &DAG) const
 | 
				
			|||||||
                         MachinePointerInfo(),
 | 
					                         MachinePointerInfo(),
 | 
				
			||||||
                         false, false, 0);
 | 
					                         false, false, 0);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  SDValue Lo = DAG.getNode(MipsISD::Lo, dl, MVT::i32, JTI);
 | 
					  SDValue JTILo = DAG.getTargetJumpTable(JT->getIndex(), PtrVT, MipsII::MO_ABS_LO);
 | 
				
			||||||
 | 
					  SDValue Lo = DAG.getNode(MipsISD::Lo, dl, MVT::i32, JTILo);
 | 
				
			||||||
  ResNode = DAG.getNode(ISD::ADD, dl, MVT::i32, HiPart, Lo);
 | 
					  ResNode = DAG.getNode(ISD::ADD, dl, MVT::i32, HiPart, Lo);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  return ResNode;
 | 
					  return ResNode;
 | 
				
			||||||
@@ -871,10 +875,12 @@ LowerConstantPool(SDValue Op, SelectionDAG &DAG) const
 | 
				
			|||||||
  //  ResNode = DAG.getNode(ISD::ADD, MVT::i32, GOT, GPRelNode);
 | 
					  //  ResNode = DAG.getNode(ISD::ADD, MVT::i32, GOT, GPRelNode);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  if (getTargetMachine().getRelocationModel() != Reloc::PIC_) {
 | 
					  if (getTargetMachine().getRelocationModel() != Reloc::PIC_) {
 | 
				
			||||||
    SDValue CP = DAG.getTargetConstantPool(C, MVT::i32, N->getAlignment(),
 | 
					    SDValue CPHi = DAG.getTargetConstantPool(C, MVT::i32, N->getAlignment(),
 | 
				
			||||||
                                      N->getOffset(), MipsII::MO_ABS_HILO);
 | 
					                                             N->getOffset(), MipsII::MO_ABS_HI);
 | 
				
			||||||
    SDValue HiPart = DAG.getNode(MipsISD::Hi, dl, MVT::i32, CP);
 | 
					    SDValue CPLo = DAG.getTargetConstantPool(C, MVT::i32, N->getAlignment(),
 | 
				
			||||||
    SDValue Lo = DAG.getNode(MipsISD::Lo, dl, MVT::i32, CP);
 | 
					                                             N->getOffset(), MipsII::MO_ABS_LO);
 | 
				
			||||||
 | 
					    SDValue HiPart = DAG.getNode(MipsISD::Hi, dl, MVT::i32, CPHi);
 | 
				
			||||||
 | 
					    SDValue Lo = DAG.getNode(MipsISD::Lo, dl, MVT::i32, CPLo);
 | 
				
			||||||
    ResNode = DAG.getNode(ISD::ADD, dl, MVT::i32, HiPart, Lo);
 | 
					    ResNode = DAG.getNode(ISD::ADD, dl, MVT::i32, HiPart, Lo);
 | 
				
			||||||
  } else {
 | 
					  } else {
 | 
				
			||||||
    SDValue CP = DAG.getTargetConstantPool(C, MVT::i32, N->getAlignment(),
 | 
					    SDValue CP = DAG.getTargetConstantPool(C, MVT::i32, N->getAlignment(),
 | 
				
			||||||
@@ -882,7 +888,9 @@ LowerConstantPool(SDValue Op, SelectionDAG &DAG) const
 | 
				
			|||||||
    SDValue Load = DAG.getLoad(MVT::i32, dl, DAG.getEntryNode(),
 | 
					    SDValue Load = DAG.getLoad(MVT::i32, dl, DAG.getEntryNode(),
 | 
				
			||||||
                               CP, MachinePointerInfo::getConstantPool(),
 | 
					                               CP, MachinePointerInfo::getConstantPool(),
 | 
				
			||||||
                               false, false, 0);
 | 
					                               false, false, 0);
 | 
				
			||||||
    SDValue Lo = DAG.getNode(MipsISD::Lo, dl, MVT::i32, CP);
 | 
					    SDValue CPLo = DAG.getTargetConstantPool(C, MVT::i32, N->getAlignment(),
 | 
				
			||||||
 | 
					                                             N->getOffset(), MipsII::MO_ABS_LO);
 | 
				
			||||||
 | 
					    SDValue Lo = DAG.getNode(MipsISD::Lo, dl, MVT::i32, CPLo);
 | 
				
			||||||
    ResNode = DAG.getNode(ISD::ADD, dl, MVT::i32, Load, Lo);
 | 
					    ResNode = DAG.getNode(ISD::ADD, dl, MVT::i32, Load, Lo);
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -143,10 +143,10 @@ namespace MipsII {
 | 
				
			|||||||
    /// for the relocatable object file being produced.
 | 
					    /// for the relocatable object file being produced.
 | 
				
			||||||
    MO_GPREL,
 | 
					    MO_GPREL,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /// MO_ABS_HILO - Represents the hi or low part of an absolute symbol
 | 
					    /// MO_ABS_HI/LO - Represents the hi or low part of an absolute symbol
 | 
				
			||||||
    /// address.
 | 
					    /// address.
 | 
				
			||||||
    MO_ABS_HILO
 | 
					    MO_ABS_HI,
 | 
				
			||||||
 | 
					    MO_ABS_LO
 | 
				
			||||||
  };
 | 
					  };
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user