Skip to content
  1. Dec 20, 2013
  2. Dec 19, 2013
    • David Peixotto's avatar
      Ensure deterministic when printing ARM assembler constant pools · 52303f6e
      David Peixotto authored
      We dump any non-empty assembler constant pools after a successful
      parse of an assembly file that uses the ldr pseudo opcode. These
      per-section constant pools should be output in a deterministic order
      to ensure that we always generate the same output when printing the
      output with an AsmStreamer.
      
      This patch changes the map data struture used to associate a section
      with its constant pool to a MapVector to ensure deterministic
      output. Because this map type does not support deletion, we now
      check that the constant pool is not empty before dumping its entries
      and clear the entries after emitting them with the streamer.
      
      llvm-svn: 197735
      52303f6e
    • Kevin Enderby's avatar
      Revert my change to the X86 assembler for intel syntax to work with · d6f2a637
      Kevin Enderby authored
      directional labels.  Because it doesn't work for windows :)
      
      llvm-svn: 197731
      d6f2a637
    • Kevin Enderby's avatar
      Changed the X86 assembler for intel syntax to work with directional labels. · 592d3ac2
      Kevin Enderby authored
      The X86 assembler has a separate code to parser the intel assembly syntax
      in X86AsmParser::ParseIntelOperand().  This did not parse directional labels.
      And if something like 1f was used as a branch target it would get an
      "Unexpected token" error.
      
      The fix starts in X86AsmParser::ParseIntelExpression() in the case for
      AsmToken::Integer, it needs to grab the IntVal from the current token
      then look for a 'b' or 'f' following the Integer.  Then it basically needs to
      do what is done in AsmParser::parsePrimaryExpr() for directional
      labels.  It saves the MCExpr it creates in the IntelExprStateMachine
      in the Sym field.
      
      When it returns to X86AsmParser::ParseIntelOperand() it looks
      for a non-zero Sym field in the IntelExprStateMachine and if
      set it creates a memory operand not an immediate operand
      it would normally do for the Integer.
      
      rdar://14961158
      
      llvm-svn: 197728
      592d3ac2
    • Rafael Espindola's avatar
      Update the links to the SPARC information. · 694b265d
      Rafael Espindola authored
      llvm-svn: 197719
      694b265d
    • Hans Wennborg's avatar
      Make sys::ThreadLocal<> zero-initialized on non-thread builds (PR18205) · fabf8bfd
      Hans Wennborg authored
      According to the docs, ThreadLocal<>::get() should return NULL
      if no object has been set. This patch makes that the case also for non-thread
      builds and adds a very basic unit test to check it.
      
      (This was causing PR18205 because PrettyStackTraceHead didn't get zero-
      initialized and we'd crash trying to read past the end of that list. We didn't
      notice this so much on Linux since we'd crash after printing all the entries,
      but on Mac we print into a SmallString, and would crash before printing that.)
      
      llvm-svn: 197718
      fabf8bfd
    • Kay Tiong Khoo's avatar
      Stay classy (and legal) LLVM. Remove links to 3rd party SMT solver whose links... · e37d5209
      Kay Tiong Khoo authored
      Stay classy (and legal) LLVM. Remove links to 3rd party SMT solver whose links may not be permanent.
      
      llvm-svn: 197713
      e37d5209
    • Quentin Colombet's avatar
      [X86][fast-isel] Fix select lowering. · 90a646e4
      Quentin Colombet authored
      The condition in selects is supposed to be i1.
      Make sure we are just reading the less significant bit
      of the 8 bits width value to match this constraint.
      
      <rdar://problem/15651765>
      
      llvm-svn: 197712
      90a646e4
    • David Peixotto's avatar
      Implement the .ltorg directive for ARM assembly · 80c083a6
      David Peixotto authored
      This directive will write out the assembler-maintained constant
      pool for the current section. These constant pools are created to
      support the ldr-pseudo instruction (e.g. ldr r0, =val).
      
      The directive can be used by the programmer to place the constant
      pool in a location that can be reached by a pc-relative offset in
      the ldr instruction.
      
      llvm-svn: 197711
      80c083a6
    • Josh Magee's avatar
      58fa4939
    • David Peixotto's avatar
      Implement the ldr-pseudo opcode for ARM assembly · e407d093
      David Peixotto authored
      The ldr-pseudo opcode is a convenience for loading 32-bit constants.
      It is converted into a pc-relative load from a constant pool. For
      example,
      
        ldr r0, =0x10001
        ldr r1, =bar
      
      will generate this output in the final assembly
      
        ldr r0, .Ltmp0
        ldr r1, .Ltmp1
        ...
        .Ltmp0: .long 0x10001
        .Ltmp1: .long bar
      
      Sketch of the LDR pseudo implementation:
        Keep a map from Section => ConstantPool
      
        When parsing ldr r0, =val
          parse val as an MCExpr
          get ConstantPool for current Section
          Label = CreateTempSymbol()
          remember val in ConstantPool at next free slot
          add operand to ldr that is MCSymbolRef of Label
      
        On finishParse() callback
          Write out all non-empty constant pools
          for each Entry in ConstantPool
            Emit Entry.Label
            Emit Entry.Value
      
      Possible improvements to be added in a later patch:
        1. Does not convert load of small constants to mov
           (e.g. ldr r0, =0x1 => mov r0, 0x1)
        2. Does reuse constant pool entries for same constant
      
      The implementation was tested for ARM, Thumb1, and Thumb2 targets on
      linux and darwin.
      
      llvm-svn: 197708
      e407d093
    • David Peixotto's avatar
      Add a finishParse() callback to the targer asm parser · 308e7e43
      David Peixotto authored
      This callback is invoked when the parse has finished successfuly. It
      will be used to write out ARM constant pools to implement the ldr
      pseudo.
      
      llvm-svn: 197706
      308e7e43
    • Kay Tiong Khoo's avatar
      Improved fix for PR17827 (instcombine of shift/and/compare). · a570b5ad
      Kay Tiong Khoo authored
      This change fixes the case of arithmetic shift right - do not attempt to fold that case.
      This change also relaxes the conditions when attempting to fold the logical shift right and shift left cases.
      
      No additional IR-level test cases included at this time. See http://llvm.org/bugs/show_bug.cgi?id=17827 for proofs that these are correct transformations.
      
      llvm-svn: 197705
      a570b5ad
    • NAKAMURA Takumi's avatar
      Revert r197682, "[CMake] Introduce LIT in add_lit_target." · 69a89c78
      NAKAMURA Takumi authored
      llvm-svn: 197703
      69a89c78
Loading