[llvm] r198533 - [Sparc] Add initial implementation of MC Code emitter for sparc.

Roman Divacky rdivacky at freebsd.org
Sun Jan 5 03:05:44 PST 2014


Can you rerun configure?

On Sun, Jan 05, 2014 at 10:48:19AM +0000, Demikhovsky, Elena wrote:
> Hi
> 
> I have the following failure on linux:
> 
> FAIL: LLVM :: MC/Sparc/sparc-alu-instructions.s (6445 of 9528)
> ******************** TEST 'LLVM :: MC/Sparc/sparc-alu-instructions.s' FAILED ********************
> Script:
> --
> /home/work/LLVM_org/trunk/build/Debug+Asserts/bin/llvm-mc /home/work/LLVM_org/trunk/test/MC/Sparc/sparc-alu-instructions.s -arch=sparc   -show-encoding | /home/work/LLVM_org/trunk/build/Debug+Asserts/bin/FileCheck /home/work/LLVM_org/trunk/test/MC/Sparc/sparc-alu-instructions.s
> /home/work/LLVM_org/trunk/build/Debug+Asserts/bin/llvm-mc /home/work/LLVM_org/trunk/test/MC/Sparc/sparc-alu-instructions.s -arch=sparcv9 -show-encoding | /home/work/LLVM_org/trunk/build/Debug+Asserts/bin/FileCheck /home/work/LLVM_org/trunk/test/MC/Sparc/sparc-alu-instructions.s
> --
> Exit Code: 2
> 
> Command Output (stderr):
> --
> /home/work/LLVM_org/trunk/build/Debug+Asserts/bin/llvm-mc: error: this target does not support assembly parsing.
> FileCheck error: '-' is empty.
> 
> -  Elena
> 
> 
> -----Original Message-----
> From: llvm-commits-bounces at cs.uiuc.edu [mailto:llvm-commits-bounces at cs.uiuc.edu] On Behalf Of Venkatraman Govindaraju
> Sent: Sunday, January 05, 2014 04:14
> To: llvm-commits at cs.uiuc.edu
> Subject: [llvm] r198533 - [Sparc] Add initial implementation of MC Code emitter for sparc.
> 
> Author: venkatra
> Date: Sat Jan  4 20:13:48 2014
> New Revision: 198533
> 
> URL: http://llvm.org/viewvc/llvm-project?rev=198533&view=rev
> Log:
> [Sparc] Add initial implementation of MC Code emitter for sparc.
> 
> Added:
>     llvm/trunk/lib/Target/Sparc/MCTargetDesc/SparcAsmBackend.cpp
>     llvm/trunk/lib/Target/Sparc/MCTargetDesc/SparcFixupKinds.h
>     llvm/trunk/lib/Target/Sparc/MCTargetDesc/SparcMCCodeEmitter.cpp
>     llvm/trunk/test/MC/Sparc/
>     llvm/trunk/test/MC/Sparc/sparc-alu-instructions.s
> Modified:
>     llvm/trunk/lib/Target/Sparc/CMakeLists.txt
>     llvm/trunk/lib/Target/Sparc/MCTargetDesc/CMakeLists.txt
>     llvm/trunk/lib/Target/Sparc/MCTargetDesc/SparcMCTargetDesc.cpp
>     llvm/trunk/lib/Target/Sparc/MCTargetDesc/SparcMCTargetDesc.h
>     llvm/trunk/lib/Target/Sparc/Makefile
>     llvm/trunk/lib/Target/Sparc/SparcCodeEmitter.cpp
>     llvm/trunk/lib/Target/Sparc/SparcInstrInfo.td
> 
> Modified: llvm/trunk/lib/Target/Sparc/CMakeLists.txt
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/Sparc/CMakeLists.txt?rev=198533&r1=198532&r2=198533&view=diff
> ==============================================================================
> --- llvm/trunk/lib/Target/Sparc/CMakeLists.txt (original)
> +++ llvm/trunk/lib/Target/Sparc/CMakeLists.txt Sat Jan  4 20:13:48 2014
> @@ -3,6 +3,7 @@ set(LLVM_TARGET_DEFINITIONS Sparc.td)  tablegen(LLVM SparcGenRegisterInfo.inc -gen-register-info)  tablegen(LLVM SparcGenInstrInfo.inc -gen-instr-info)  tablegen(LLVM SparcGenCodeEmitter.inc -gen-emitter)
> +tablegen(LLVM SparcGenMCCodeEmitter.inc -gen-emitter -mc-emitter)
>  tablegen(LLVM SparcGenAsmWriter.inc -gen-asm-writer)  tablegen(LLVM SparcGenAsmMatcher.inc -gen-asm-matcher)  tablegen(LLVM SparcGenDAGISel.inc -gen-dag-isel)
> 
> Modified: llvm/trunk/lib/Target/Sparc/MCTargetDesc/CMakeLists.txt
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/Sparc/MCTargetDesc/CMakeLists.txt?rev=198533&r1=198532&r2=198533&view=diff
> ==============================================================================
> --- llvm/trunk/lib/Target/Sparc/MCTargetDesc/CMakeLists.txt (original)
> +++ llvm/trunk/lib/Target/Sparc/MCTargetDesc/CMakeLists.txt Sat Jan  4 
> +++ 20:13:48 2014
> @@ -1,6 +1,8 @@
>  add_llvm_library(LLVMSparcDesc
> -  SparcMCTargetDesc.cpp
> +  SparcAsmBackend.cpp
>    SparcMCAsmInfo.cpp
> +  SparcMCCodeEmitter.cpp
> +  SparcMCTargetDesc.cpp
>    SparcMCExpr.cpp
>    SparcTargetStreamer.cpp
>    )
> 
> Added: llvm/trunk/lib/Target/Sparc/MCTargetDesc/SparcAsmBackend.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/Sparc/MCTargetDesc/SparcAsmBackend.cpp?rev=198533&view=auto
> ==============================================================================
> --- llvm/trunk/lib/Target/Sparc/MCTargetDesc/SparcAsmBackend.cpp (added)
> +++ llvm/trunk/lib/Target/Sparc/MCTargetDesc/SparcAsmBackend.cpp Sat Jan  
> +++ 4 20:13:48 2014
> @@ -0,0 +1,101 @@
> +//===-- SparcAsmBackend.cpp - Sparc Assembler Backend 
> +---------------------===// //
> +//                     The LLVM Compiler Infrastructure
> +//
> +// This file is distributed under the University of Illinois Open 
> +Source // License. See LICENSE.TXT for details.
> +//
> +//===------------------------------------------------------------------
> +----===//
> +
> +#include "llvm/MC/MCAsmBackend.h"
> +#include "MCTargetDesc/SparcMCTargetDesc.h"
> +#include "MCTargetDesc/SparcFixupKinds.h"
> +#include "llvm/MC/MCFixupKindInfo.h"
> +#include "llvm/MC/MCObjectWriter.h"
> +#include "llvm/Support/TargetRegistry.h"
> +
> +using namespace llvm;
> +
> +namespace {
> +  class SparcAsmBackend : public MCAsmBackend {
> +
> +  public:
> +    SparcAsmBackend(const Target &T) : MCAsmBackend() {}
> +
> +    unsigned getNumFixupKinds() const {
> +      return Sparc::NumTargetFixupKinds;
> +    }
> +
> +    const MCFixupKindInfo &getFixupKindInfo(MCFixupKind Kind) const {
> +      const static MCFixupKindInfo Infos[Sparc::NumTargetFixupKinds] = {
> +        // name                    offset bits  flags
> +        { "fixup_sparc_call30",     0,     30,  MCFixupKindInfo::FKF_IsPCRel },
> +        { "fixup_sparc_br22",       0,     22,  MCFixupKindInfo::FKF_IsPCRel },
> +        { "fixup_sparc_br19",       0,     19,  MCFixupKindInfo::FKF_IsPCRel }
> +      };
> +
> +      if (Kind < FirstTargetFixupKind)
> +        return MCAsmBackend::getFixupKindInfo(Kind);
> +
> +      assert(unsigned(Kind - FirstTargetFixupKind) < getNumFixupKinds() &&
> +             "Invalid kind!");
> +      return Infos[Kind - FirstTargetFixupKind];
> +    }
> +
> +    bool mayNeedRelaxation(const MCInst &Inst) const {
> +      // FIXME.
> +      return false;
> +    }
> +
> +    /// fixupNeedsRelaxation - Target specific predicate for whether a given
> +    /// fixup requires the associated instruction to be relaxed.
> +    bool fixupNeedsRelaxation(const MCFixup &Fixup,
> +                              uint64_t Value,
> +                              const MCRelaxableFragment *DF,
> +                              const MCAsmLayout &Layout) const {
> +      // FIXME.
> +      assert(0 && "fixupNeedsRelaxation() unimplemented");
> +      return false;
> +    }
> +    void relaxInstruction(const MCInst &Inst, MCInst &Res) const {
> +      // FIXME.
> +      assert(0 && "relaxInstruction() unimplemented");
> +    }
> +
> +    bool writeNopData(uint64_t Count, MCObjectWriter *OW) const {
> +      // FIXME: Zero fill for now.
> +      for (uint64_t i = 0; i != Count; ++i)
> +        OW->Write8(0);
> +      return true;
> +    }
> +  };
> +
> +  class ELFSparcAsmBackend : public SparcAsmBackend {
> +  public:
> +    ELFSparcAsmBackend(const Target &T, Triple::OSType OSType) :
> +      SparcAsmBackend(T) { }
> +
> +    void applyFixup(const MCFixup &Fixup, char *Data, unsigned DataSize,
> +                    uint64_t Value) const {
> +      assert(0 && "applyFixup not implemented yet");
> +    }
> +
> +    MCObjectWriter *createObjectWriter(raw_ostream &OS) const {
> +      assert(0 && "Object Writer not implemented yet");
> +      return 0;
> +    }
> +
> +    virtual bool doesSectionRequireSymbols(const MCSection &Section) const {
> +      return false;
> +    }
> +  };
> +
> +} // end anonymous namespace
> +
> +
> +MCAsmBackend *llvm::createSparcAsmBackend(const Target &T,
> +                                          const MCRegisterInfo &MRI,
> +                                          StringRef TT,
> +                                          StringRef CPU) {
> +  return new ELFSparcAsmBackend(T, Triple(TT).getOS()); }
> 
> Added: llvm/trunk/lib/Target/Sparc/MCTargetDesc/SparcFixupKinds.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/Sparc/MCTargetDesc/SparcFixupKinds.h?rev=198533&view=auto
> ==============================================================================
> --- llvm/trunk/lib/Target/Sparc/MCTargetDesc/SparcFixupKinds.h (added)
> +++ llvm/trunk/lib/Target/Sparc/MCTargetDesc/SparcFixupKinds.h Sat Jan  
> +++ 4 20:13:48 2014
> @@ -0,0 +1,36 @@
> +//===-- SparcFixupKinds.h - Sparc Specific Fixup Entries --------*- C++ 
> +-*-===// //
> +//                     The LLVM Compiler Infrastructure
> +//
> +// This file is distributed under the University of Illinois Open 
> +Source // License. See LICENSE.TXT for details.
> +//
> +//===------------------------------------------------------------------
> +----===//
> +
> +#ifndef LLVM_SPARC_FIXUPKINDS_H
> +#define LLVM_SPARC_FIXUPKINDS_H
> +
> +#include "llvm/MC/MCFixup.h"
> +
> +namespace llvm {
> +  namespace Sparc {
> +    enum Fixups {
> +      // fixup_sparc_call30 - 30-bit PC relative relocation for call
> +      fixup_sparc_call30 = FirstTargetFixupKind,
> +
> +      /// fixup_sparc_br22 - 22-bit PC relative relocation for
> +      /// branches
> +      fixup_sparc_br22,
> +
> +      /// fixup_sparc_br22 - 22-bit PC relative relocation for
> +      /// branches on icc/xcc
> +      fixup_sparc_br19,
> +
> +      // Marker
> +      LastTargetFixupKind,
> +      NumTargetFixupKinds = LastTargetFixupKind - FirstTargetFixupKind
> +    };
> +  }
> +}
> +
> +#endif
> 
> Added: llvm/trunk/lib/Target/Sparc/MCTargetDesc/SparcMCCodeEmitter.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/Sparc/MCTargetDesc/SparcMCCodeEmitter.cpp?rev=198533&view=auto
> ==============================================================================
> --- llvm/trunk/lib/Target/Sparc/MCTargetDesc/SparcMCCodeEmitter.cpp (added)
> +++ llvm/trunk/lib/Target/Sparc/MCTargetDesc/SparcMCCodeEmitter.cpp Sat 
> +++ Jan  4 20:13:48 2014
> @@ -0,0 +1,131 @@
> +//===-- SparcMCCodeEmitter.cpp - Convert Sparc code to machine code 
> +-------===// //
> +//                     The LLVM Compiler Infrastructure
> +//
> +// This file is distributed under the University of Illinois Open 
> +Source // License. See LICENSE.TXT for details.
> +//
> +//===------------------------------------------------------------------
> +----===//
> +//
> +// This file implements the SparcMCCodeEmitter class.
> +//
> +//===------------------------------------------------------------------
> +----===//
> +
> +#define DEBUG_TYPE "mccodeemitter"
> +#include "SparcMCTargetDesc.h"
> +#include "MCTargetDesc/SparcFixupKinds.h"
> +#include "llvm/MC/MCCodeEmitter.h"
> +#include "llvm/MC/MCContext.h"
> +#include "llvm/MC/MCExpr.h"
> +#include "llvm/MC/MCInst.h"
> +#include "llvm/MC/MCRegisterInfo.h"
> +#include "llvm/ADT/Statistic.h"
> +#include "llvm/Support/raw_ostream.h"
> +
> +using namespace llvm;
> +
> +STATISTIC(MCNumEmitted, "Number of MC instructions emitted");
> +
> +namespace {
> +class SparcMCCodeEmitter : public MCCodeEmitter {
> +  SparcMCCodeEmitter(const SparcMCCodeEmitter &) LLVM_DELETED_FUNCTION;
> +  void operator=(const SparcMCCodeEmitter &) LLVM_DELETED_FUNCTION;
> +  MCContext &Ctx;
> +
> +public:
> +  SparcMCCodeEmitter(MCContext &ctx): Ctx(ctx) {}
> +
> +  ~SparcMCCodeEmitter() {}
> +
> +  void EncodeInstruction(const MCInst &MI, raw_ostream &OS,
> +                         SmallVectorImpl<MCFixup> &Fixups) const;
> +
> +  // getBinaryCodeForInstr - TableGen'erated function for getting the  
> + // binary encoding for an instruction.
> +  uint64_t getBinaryCodeForInstr(const MCInst &MI,
> +                                 SmallVectorImpl<MCFixup> &Fixups) 
> + const;
> +
> +  /// getMachineOpValue - Return binary encoding of operand. If the 
> + machine  /// operand requires relocation, record the relocation and return zero.
> +  unsigned getMachineOpValue(const MCInst &MI, const MCOperand &MO,
> +                             SmallVectorImpl<MCFixup> &Fixups) const;
> +
> +  unsigned getCallTargetOpValue(const MCInst &MI, unsigned OpNo,
> +                             SmallVectorImpl<MCFixup> &Fixups) const;  
> + unsigned getBranchTargetOpValue(const MCInst &MI, unsigned OpNo,
> +                             SmallVectorImpl<MCFixup> &Fixups) const;
> +
> +};
> +} // end anonymous namespace
> +
> +MCCodeEmitter *llvm::createSparcMCCodeEmitter(const MCInstrInfo &MCII,
> +                                              const MCRegisterInfo &MRI,
> +                                              const MCSubtargetInfo &STI,
> +                                              MCContext &Ctx) {
> +  return new SparcMCCodeEmitter(Ctx);
> +}
> +
> +void SparcMCCodeEmitter::
> +EncodeInstruction(const MCInst &MI, raw_ostream &OS,
> +                  SmallVectorImpl<MCFixup> &Fixups) const {
> +  unsigned Bits = getBinaryCodeForInstr(MI, Fixups);
> +
> +  // Output the constant in big endian byte order.
> +  for (unsigned i = 0; i != 4; ++i) {
> +    OS << (char)(Bits >> 24);
> +    Bits <<= 8;
> +  }
> +
> +  ++MCNumEmitted;  // Keep track of the # of mi's emitted.
> +}
> +
> +
> +unsigned SparcMCCodeEmitter::
> +getMachineOpValue(const MCInst &MI, const MCOperand &MO,
> +                  SmallVectorImpl<MCFixup> &Fixups) const {
> +
> +  if (MO.isReg())
> +    return Ctx.getRegisterInfo()->getEncodingValue(MO.getReg());
> +
> +  if (MO.isImm())
> +    return MO.getImm();
> +
> +  assert(MO.isExpr());
> +  const MCExpr *Expr = MO.getExpr();
> +  int64_t Res;
> +  if (Expr->EvaluateAsAbsolute(Res))
> +    return Res;
> +
> +  assert(0 && "Unhandled expression!");
> +  return 0;
> +}
> +
> +unsigned SparcMCCodeEmitter::
> +getCallTargetOpValue(const MCInst &MI, unsigned OpNo,
> +                     SmallVectorImpl<MCFixup> &Fixups) const {
> +  const MCOperand &MO = MI.getOperand(OpNo);
> +  if (MO.isReg() || MO.isImm())
> +    return getMachineOpValue(MI, MO, Fixups);
> +
> +  Fixups.push_back(MCFixup::Create(0, MO.getExpr(),
> +                                   
> +(MCFixupKind)Sparc::fixup_sparc_call30));
> +  return 0;
> +}
> +
> +unsigned SparcMCCodeEmitter::
> +getBranchTargetOpValue(const MCInst &MI, unsigned OpNo,
> +                  SmallVectorImpl<MCFixup> &Fixups) const {
> +  const MCOperand &MO = MI.getOperand(OpNo);
> +  if (MO.isReg() || MO.isImm())
> +    return getMachineOpValue(MI, MO, Fixups);
> +
> +  Sparc::Fixups fixup = Sparc::fixup_sparc_br22;  if (MI.getOpcode() == 
> + SP::BPXCC)
> +    fixup = Sparc::fixup_sparc_br19;
> +
> +  Fixups.push_back(MCFixup::Create(0, MO.getExpr(),
> +                                   (MCFixupKind)fixup));
> +  return 0;
> +}
> +
> +#include "SparcGenMCCodeEmitter.inc"
> 
> Modified: llvm/trunk/lib/Target/Sparc/MCTargetDesc/SparcMCTargetDesc.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/Sparc/MCTargetDesc/SparcMCTargetDesc.cpp?rev=198533&r1=198532&r2=198533&view=diff
> ==============================================================================
> --- llvm/trunk/lib/Target/Sparc/MCTargetDesc/SparcMCTargetDesc.cpp (original)
> +++ llvm/trunk/lib/Target/Sparc/MCTargetDesc/SparcMCTargetDesc.cpp Sat 
> +++ Jan  4 20:13:48 2014
> @@ -136,6 +136,18 @@ extern "C" void LLVMInitializeSparcTarge
>    TargetRegistry::RegisterMCSubtargetInfo(TheSparcV9Target,
>                                            createSparcMCSubtargetInfo);
>  
> +  // Register the MC Code Emitter.
> +  TargetRegistry::RegisterMCCodeEmitter(TheSparcTarget,
> +                                        createSparcMCCodeEmitter);  
> + TargetRegistry::RegisterMCCodeEmitter(TheSparcV9Target,
> +                                        createSparcMCCodeEmitter);
> +
> +  //Register the asm backend.
> +  TargetRegistry::RegisterMCAsmBackend(TheSparcTarget,
> +                                       createSparcAsmBackend);  
> + TargetRegistry::RegisterMCAsmBackend(TheSparcV9Target,
> +                                       createSparcAsmBackend);
> +
>    TargetRegistry::RegisterAsmStreamer(TheSparcTarget,
>                                        createMCAsmStreamer);
>    TargetRegistry::RegisterAsmStreamer(TheSparcV9Target,
> 
> Modified: llvm/trunk/lib/Target/Sparc/MCTargetDesc/SparcMCTargetDesc.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/Sparc/MCTargetDesc/SparcMCTargetDesc.h?rev=198533&r1=198532&r2=198533&view=diff
> ==============================================================================
> --- llvm/trunk/lib/Target/Sparc/MCTargetDesc/SparcMCTargetDesc.h (original)
> +++ llvm/trunk/lib/Target/Sparc/MCTargetDesc/SparcMCTargetDesc.h Sat Jan  
> +++ 4 20:13:48 2014
> @@ -15,11 +15,27 @@
>  #define SPARCMCTARGETDESC_H
>  
>  namespace llvm {
> +class MCAsmBackend;
> +class MCCodeEmitter;
> +class MCContext;
> +class MCInstrInfo;
> +class MCRegisterInfo;
> +class MCSubtargetInfo;
>  class Target;
> +class StringRef;
>  
>  extern Target TheSparcTarget;
>  extern Target TheSparcV9Target;
>  
> +MCCodeEmitter *createSparcMCCodeEmitter(const MCInstrInfo &MCII,
> +                                        const MCRegisterInfo &MRI,
> +                                        const MCSubtargetInfo &STI,
> +                                        MCContext &Ctx); MCAsmBackend 
> +*createSparcAsmBackend(const Target &T,
> +                                    const MCRegisterInfo &MRI,
> +                                    StringRef TT,
> +                                    StringRef CPU);
> +
>  } // End llvm namespace
>  
>  // Defines symbolic names for Sparc registers.  This defines a mapping from
> 
> Modified: llvm/trunk/lib/Target/Sparc/Makefile
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/Sparc/Makefile?rev=198533&r1=198532&r2=198533&view=diff
> ==============================================================================
> --- llvm/trunk/lib/Target/Sparc/Makefile (original)
> +++ llvm/trunk/lib/Target/Sparc/Makefile Sat Jan  4 20:13:48 2014
> @@ -16,7 +16,7 @@ BUILT_SOURCES = SparcGenRegisterInfo.inc
>  		SparcGenAsmWriter.inc SparcGenAsmMatcher.inc \
>  		SparcGenDAGISel.inc \
>  		SparcGenSubtargetInfo.inc SparcGenCallingConv.inc \
> -		SparcGenCodeEmitter.inc
> +		SparcGenCodeEmitter.inc SparcGenMCCodeEmitter.inc
>  
>  DIRS = InstPrinter AsmParser TargetInfo MCTargetDesc
>  
> 
> Modified: llvm/trunk/lib/Target/Sparc/SparcCodeEmitter.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/Sparc/SparcCodeEmitter.cpp?rev=198533&r1=198532&r2=198533&view=diff
> ==============================================================================
> --- llvm/trunk/lib/Target/Sparc/SparcCodeEmitter.cpp (original)
> +++ llvm/trunk/lib/Target/Sparc/SparcCodeEmitter.cpp Sat Jan  4 20:13:48 
> +++ 2014
> @@ -72,6 +72,11 @@ private:
>    unsigned getMachineOpValue(const MachineInstr &MI,
>                               const MachineOperand &MO) const;
>  
> +  unsigned getCallTargetOpValue(const MachineInstr &MI,
> +                                unsigned) const;  unsigned 
> + getBranchTargetOpValue(const MachineInstr &MI,
> +                                  unsigned) const;
> +
>    void emitWord(unsigned Word);
>  
>    unsigned getRelocation(const MachineInstr &MI, @@ -181,6 +186,18 @@ unsigned SparcCodeEmitter::getMachineOpV
>      llvm_unreachable("Unable to encode MachineOperand!");
>    return 0;
>  }
> +unsigned SparcCodeEmitter::getCallTargetOpValue(const MachineInstr &MI,
> +                                                unsigned opIdx) const {
> +  const MachineOperand MO = MI.getOperand(opIdx);
> +  return getMachineOpValue(MI, MO);
> +}
> +
> +unsigned SparcCodeEmitter::getBranchTargetOpValue(const MachineInstr &MI,
> +                                                  unsigned opIdx) const 
> +{
> +  const MachineOperand MO = MI.getOperand(opIdx);
> +  return getMachineOpValue(MI, MO);
> +}
> +
>  unsigned SparcCodeEmitter::getRelocation(const MachineInstr &MI,
>                                           const MachineOperand &MO) const {
>  
> 
> Modified: llvm/trunk/lib/Target/Sparc/SparcInstrInfo.td
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/Sparc/SparcInstrInfo.td?rev=198533&r1=198532&r2=198533&view=diff
> ==============================================================================
> --- llvm/trunk/lib/Target/Sparc/SparcInstrInfo.td (original)
> +++ llvm/trunk/lib/Target/Sparc/SparcInstrInfo.td Sat Jan  4 20:13:48 
> +++ 2014
> @@ -100,8 +100,13 @@ def MEMri : Operand<iPTR> {  def TLSSym : Operand<iPTR>;
>  
>  // Branch targets have OtherVT type.
> -def brtarget : Operand<OtherVT>;
> -def calltarget : Operand<i32>;
> +def brtarget : Operand<OtherVT> {
> +  let EncoderMethod = "getBranchTargetOpValue"; }
> +
> +def calltarget : Operand<i32> {
> +  let EncoderMethod = "getCallTargetOpValue"; }
>  
>  // Operand for printing out a condition code.
>  let PrintMethod = "printCCOperand" in
> 
> Added: llvm/trunk/test/MC/Sparc/sparc-alu-instructions.s
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/MC/Sparc/sparc-alu-instructions.s?rev=198533&view=auto
> ==============================================================================
> --- llvm/trunk/test/MC/Sparc/sparc-alu-instructions.s (added)
> +++ llvm/trunk/test/MC/Sparc/sparc-alu-instructions.s Sat Jan  4 
> +++ 20:13:48 2014
> @@ -0,0 +1,72 @@
> +! RUN: llvm-mc %s -arch=sparc   -show-encoding | FileCheck %s
> +! RUN: llvm-mc %s -arch=sparcv9 -show-encoding | FileCheck %s
> +
> +        ! CHECK: add %g0, %g0, %g0    ! encoding: [0x80,0x00,0x00,0x00]
> +        add %g0, %g0, %g0
> +        ! CHECK: add %g1, %g2, %g3    ! encoding: [0x86,0x00,0x40,0x02]
> +        add %g1, %g2, %g3
> +        ! CHECK: add %o0, %o1, %l0    ! encoding: [0xa0,0x02,0x00,0x09]
> +        add %r8, %r9, %l0
> +        ! CHECK: add %o0, 10,  %l0    ! encoding: [0xa0,0x02,0x20,0x0a]
> +        add %o0, 10, %l0
> +
> +        ! CHECK: addcc %g1, %g2, %g3  ! encoding: [0x86,0x80,0x40,0x02]
> +        addcc %g1, %g2, %g3
> +
> +        ! CHECK: addxcc %g1, %g2, %g3 ! encoding: [0x86,0xc0,0x40,0x02]
> +        addxcc %g1, %g2, %g3
> +
> +        ! CHECK: udiv %g1, %g2, %g3   ! encoding: [0x86,0x70,0x40,0x02]
> +        udiv %g1, %g2, %g3
> +
> +        ! CHECK: sdiv %g1, %g2, %g3   ! encoding: [0x86,0x78,0x40,0x02]
> +        sdiv %g1, %g2, %g3
> +
> +        ! CHECK: and %g1, %g2, %g3    ! encoding: [0x86,0x08,0x40,0x02]
> +        and %g1, %g2, %g3
> +        ! CHECK: andn %g1, %g2, %g3   ! encoding: [0x86,0x28,0x40,0x02]
> +        andn %g1, %g2, %g3
> +        ! CHECK: or %g1, %g2, %g3     ! encoding: [0x86,0x10,0x40,0x02]
> +        or  %g1, %g2, %g3
> +        ! CHECK: orn %g1, %g2, %g3    ! encoding: [0x86,0x30,0x40,0x02]
> +        orn %g1, %g2, %g3
> +        ! CHECK: xor %g1, %g2, %g3    ! encoding: [0x86,0x18,0x40,0x02]
> +        xor %g1, %g2, %g3
> +        ! CHECK: xnor %g1, %g2, %g3   ! encoding: [0x86,0x38,0x40,0x02]
> +        xnor %g1, %g2, %g3
> +
> +        ! CHECK: umul %g1, %g2, %g3   ! encoding: [0x86,0x50,0x40,0x02]
> +        umul %g1, %g2, %g3
> +
> +        ! CHECK: smul %g1, %g2, %g3   ! encoding: [0x86,0x58,0x40,0x02]
> +        smul %g1, %g2, %g3
> +
> +        ! CHECK: nop                  ! encoding: [0x01,0x00,0x00,0x00]
> +        nop
> +
> +        ! CHECK: sethi 10, %l0        ! encoding: [0x21,0x00,0x00,0x0a]
> +        sethi 10, %l0
> +
> +        ! CHECK: sll %g1, %g2, %g3    ! encoding: [0x87,0x28,0x40,0x02]
> +        sll %g1, %g2, %g3
> +        ! CHECK: sll %g1, 31, %g3     ! encoding: [0x87,0x28,0x60,0x1f]
> +        sll %g1, 31, %g3
> +
> +        ! CHECK: srl %g1, %g2, %g3    ! encoding: [0x87,0x30,0x40,0x02]
> +        srl %g1, %g2, %g3
> +        ! CHECK: srl %g1, 31, %g3     ! encoding: [0x87,0x30,0x60,0x1f]
> +        srl %g1, 31, %g3
> +
> +        ! CHECK: sra %g1, %g2, %g3    ! encoding: [0x87,0x38,0x40,0x02]
> +        sra %g1, %g2, %g3
> +        ! CHECK: sra %g1, 31, %g3     ! encoding: [0x87,0x38,0x60,0x1f]
> +        sra %g1, 31, %g3
> +
> +        ! CHECK: sub %g1, %g2, %g3    ! encoding: [0x86,0x20,0x40,0x02]
> +        sub %g1, %g2, %g3
> +        ! CHECK: subcc %g1, %g2, %g3  ! encoding: [0x86,0xa0,0x40,0x02]
> +        subcc %g1, %g2, %g3
> +
> +        ! CHECK: subxcc %g1, %g2, %g3 ! encoding: [0x86,0xe0,0x40,0x02]
> +        subxcc %g1, %g2, %g3
> +
> 
> 
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
> ---------------------------------------------------------------------
> Intel Israel (74) Limited
> 
> This e-mail and any attachments may contain confidential material for
> the sole use of the intended recipient(s). Any review or distribution
> by others is strictly prohibited. If you are not the intended
> recipient, please contact the sender and delete all copies.
> 
> 
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits



More information about the llvm-commits mailing list