This reverts commit r211533 and r211539.
authorRafael Espindola <rafael.espindola@gmail.com>
Mon, 23 Jun 2014 21:20:58 +0000 (21:20 +0000)
committerRafael Espindola <rafael.espindola@gmail.com>
Mon, 23 Jun 2014 21:20:58 +0000 (21:20 +0000)
 Revert "Fix PR20056: Implement pseudo LDR <reg>, =<literal/label> for AArch64"
 Revert "Fix cmake build."

It was missing a file.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@211540 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/MC/MCStreamer.h
lib/Target/AArch64/AsmParser/AArch64AsmParser.cpp

index cd1fa9b6a8fbbe02daa355e8276fb8693e45ddbb..bf224979def953b7053fbc6234e3ca4ee59725e9 100644 (file)
@@ -86,27 +86,6 @@ public:
   virtual void finish();
 };
 
-class AArch64TargetStreamer : public MCTargetStreamer {
-public:
-  AArch64TargetStreamer(MCStreamer &S);
-  ~AArch64TargetStreamer();
-
-
-  void finish() override;
-
-  /// Callback used to implement the ldr= pseudo.
-  /// Add a new entry to the constant pool for the current section and return an
-  /// MCExpr that can be used to refer to the constant pool location.
-  const MCExpr *addConstantPoolEntry(const MCExpr *);
-
-  /// Callback used to implemnt the .ltorg directive.
-  /// Emit contents of constant pool for the current section.
-  void emitCurrentConstantPool();
-
-private:
-  std::unique_ptr<AssemblerConstantPools> ConstantPools;
-};
-
 // FIXME: declared here because it is used from
 // lib/CodeGen/AsmPrinter/ARMException.cpp.
 class ARMTargetStreamer : public MCTargetStreamer {
index c4d840d90b54525edb89cb689d573cb162808d0c..5d363a00dc0f4713d35e8f329500b31dcda5bbb0 100644 (file)
@@ -43,11 +43,6 @@ private:
   MCSubtargetInfo &STI;
   MCAsmParser &Parser;
 
-  AArch64TargetStreamer &getTargetStreamer() {
-    MCTargetStreamer &TS = *getParser().getStreamer().getTargetStreamer();
-    return static_cast<AArch64TargetStreamer &>(TS);
-  }
-
   MCAsmParser &getParser() const { return Parser; }
   MCAsmLexer &getLexer() const { return Parser.getLexer(); }
 
@@ -72,7 +67,6 @@ private:
   bool parseDirectiveTLSDescCall(SMLoc L);
 
   bool parseDirectiveLOH(StringRef LOH, SMLoc L);
-  bool parseDirectiveLtorg(SMLoc L);
 
   bool validateInstruction(MCInst &Inst, SmallVectorImpl<SMLoc> &Loc);
   bool MatchAndEmitInstruction(SMLoc IDLoc, unsigned &Opcode,
@@ -111,8 +105,6 @@ public:
                  const MCTargetOptions &Options)
       : MCTargetAsmParser(), STI(_STI), Parser(_Parser) {
     MCAsmParserExtension::Initialize(_Parser);
-    if (Parser.getStreamer().getTargetStreamer() == nullptr)
-      new AArch64TargetStreamer(Parser.getStreamer());
 
     // Initialize the set of available features.
     setAvailableFeatures(ComputeAvailableFeatures(STI.getFeatureBits()));
@@ -3012,43 +3004,6 @@ bool AArch64AsmParser::parseOperand(OperandVector &Operands, bool isCondCode,
     Operands.push_back(AArch64Operand::CreateImm(ImmVal, S, E, getContext()));
     return false;
   }
-  case AsmToken::Equal: {
-    SMLoc Loc = Parser.getTok().getLoc();
-    if (Mnemonic != "ldr") // only parse for ldr pseudo (e.g. ldr r0, =val)
-      return Error(Loc, "unexpected token in operand");
-    Parser.Lex(); // Eat '='
-    const MCExpr *SubExprVal;
-    if (getParser().parseExpression(SubExprVal))
-      return true;
-
-    MCContext& Ctx = getContext();
-    E = SMLoc::getFromPointer(Loc.getPointer() - 1);
-    // If the op is an imm and can be fit into a mov, then replace ldr with mov.
-    if (isa<MCConstantExpr>(SubExprVal) && Operands.size() >= 2 &&
-        static_cast<AArch64Operand &>(*Operands[1]).isReg()) {
-      bool IsXReg =  AArch64MCRegisterClasses[AArch64::GPR64allRegClassID].contains(
-            Operands[1]->getReg());
-      uint64_t Imm = (cast<MCConstantExpr>(SubExprVal))->getValue();
-      uint32_t ShiftAmt = 0, MaxShiftAmt = IsXReg ? 48 : 16;
-      while(Imm > 0xFFFF && countTrailingZeros(Imm) >= 16) {
-        ShiftAmt += 16;
-        Imm >>= 16;
-      }
-      if (ShiftAmt <= MaxShiftAmt && Imm <= 0xFFFF) {
-          Operands[0] = AArch64Operand::CreateToken("movz", false, Loc, Ctx);
-          Operands.push_back(AArch64Operand::CreateImm(
-                     MCConstantExpr::Create(Imm, Ctx), S, E, Ctx));
-        if (ShiftAmt)
-          Operands.push_back(AArch64Operand::CreateShiftExtend(AArch64_AM::LSL,
-                     ShiftAmt, true, S, E, Ctx));
-        return false;
-      }
-    }
-    // If it is a label or an imm that cannot fit in a movz, put it into CP.
-    const MCExpr *CPLoc = getTargetStreamer().addConstantPoolEntry(SubExprVal);
-    Operands.push_back(AArch64Operand::CreateImm(CPLoc, S, E, Ctx));
-    return false;
-  }
   }
 }
 
@@ -3855,8 +3810,7 @@ bool AArch64AsmParser::ParseDirective(AsmToken DirectiveID) {
     return parseDirectiveWord(8, Loc);
   if (IDVal == ".tlsdesccall")
     return parseDirectiveTLSDescCall(Loc);
-  if (IDVal == ".ltorg" || IDVal == ".pool")
-    return parseDirectiveLtorg(Loc);
+
   return parseDirectiveLOH(IDVal, Loc);
 }
 
@@ -3957,13 +3911,6 @@ bool AArch64AsmParser::parseDirectiveLOH(StringRef IDVal, SMLoc Loc) {
   return false;
 }
 
-/// parseDirectiveLtorg
-///  ::= .ltorg | .pool
-bool AArch64AsmParser::parseDirectiveLtorg(SMLoc L) {
-  getTargetStreamer().emitCurrentConstantPool();
-  return false;
-}
-
 bool
 AArch64AsmParser::classifySymbolRef(const MCExpr *Expr,
                                     AArch64MCExpr::VariantKind &ELFRefKind,