Skip to content
  1. Jan 05, 2014
  2. Jan 04, 2014
    • Alp Toker's avatar
      Add missed cleanup from r198456 · f929e09b
      Alp Toker authored
      All other uses of this macro in LLVM/clang have been moved to the function
      definition so follow suite (and the usage advice) here too for consistency.
      
      llvm-svn: 198516
      f929e09b
    • Craig Topper's avatar
      Tag x86 move to/from debug/control registers with Not64BitMode/In64BitMode.... · bc281ad8
      Craig Topper authored
      Tag x86 move to/from debug/control registers with Not64BitMode/In64BitMode. Remove disassembler hack.
      
      llvm-svn: 198515
      bc281ad8
    • Alp Toker's avatar
      Revert "Fix PR18361: Invalidate LoopDispositions after LoopSimplify hoists things." · 5e9f3265
      Alp Toker authored
      This commit was the source of crasher PR18384:
      
      While deleting: label %for.cond127
      An asserting value handle still pointed to this value!
      UNREACHABLE executed at llvm/lib/IR/Value.cpp:671!
      
      Reverting to get the builders green, feel free to re-land after fixing up.
      (Renato has a handy isolated repro if you need it.)
      
      This reverts commit r198478.
      
      llvm-svn: 198503
      5e9f3265
    • Venkatraman Govindaraju's avatar
    • Venkatraman Govindaraju's avatar
      [SparcV9]: Implement RETURNADDR and FRAMEADDR lowering in SPARC64. · 96ab3bc5
      Venkatraman Govindaraju authored
      Fixes PR18356.
      
      llvm-svn: 198480
      96ab3bc5
    • Andrew Trick's avatar
      Fix PR18361: Invalidate LoopDispositions after LoopSimplify hoists things. · aceac974
      Andrew Trick authored
      getSCEV for an ashr instruction creates an intermediate zext
      expression when it truncates its operand.
      
      The operand is initially inside the loop, so the narrow zext
      expression has a non-loop-invariant loop disposition.
      
      LoopSimplify then runs on an outer loop, hoists the ashr operand, and
      properly invalidate the SCEVs that are mapped to value.
      
      The SCEV expression for the ashr is now an AddRec with the hoisted
      value as the now loop-invariant start value.
      
      The LoopDisposition of this wide value was properly invalidated during
      LoopSimplify.
      
      However, if we later get the ashr SCEV again, we again try to create
      the intermediate zext expression. We get the same SCEV that we did
      earlier, and it is still cached because it was never mapped to a
      Value. When we try to create a new AddRec we abort because we're using
      the old non-loop-invariant LoopDisposition.
      
      I don't have a solution for this other than to clear LoopDisposition
      when LoopSimplify hoists things.
      
      I think the long-term strategy should be to perform LoopSimplify on
      all loops before computing SCEV and before running any loop opts on
      individual loops. It's possible we may want to rerun LoopSimplify on
      individual loops, but it should rarely do anything, so rarely require
      invalidating SCEV.
      
      llvm-svn: 198478
      aceac974
    • Craig Topper's avatar
      Remove JMP64pcrel32 (jmpq ). There are no tests for it. I'm pretty sure it... · 1da85823
      Craig Topper authored
      Remove JMP64pcrel32 (jmpq ). There are no tests for it. I'm pretty sure it won't be emitted correctly since it was set to NoImm. And I can't prove that gas accepts 'jmpq' with an immediate either. Remove the special case for it from the disassembler table generator.
      
      llvm-svn: 198475
      1da85823
  3. Jan 03, 2014
    • Nico Weber's avatar
      Add a LLVM_DUMP_METHOD macro. · 7408c706
      Nico Weber authored
      The motivation is to mark dump methods as used in debug builds so that they can
      be called from lldb, but to not do so in release builds so that they can be
      dead-stripped.
      
      There's lots of potential follow-up work suggested in the thread
      "Should dump methods be LLVM_ATTRIBUTE_USED only in debug builds?" on cfe-dev,
      but everyone seems to agreen on this subset.
      
      Macro name chosen by fair coin toss.
      
      llvm-svn: 198456
      7408c706
    • Reid Kleckner's avatar
      Revert "For disassembly when adding a symbolic operand that is a C++ symbol... · 19bccb79
      Reid Kleckner authored
      Revert "For disassembly when adding a symbolic operand that is a C++ symbol name, also put the human readable name in a comment."
      
      This reverts commit r198441.
      
      This change doesn't build on Windows, and doesn't do the right thing on
      Linux and other platforms that don't use a _Z prefix instead of __Z for
      C++ names.
      
      It also had no tests, so it wasn't clear how to fix it forward.
      
      llvm-svn: 198445
      19bccb79
    • Kevin Enderby's avatar
      For disassembly when adding a symbolic operand that is a C++ · b05bec7c
      Kevin Enderby authored
      symbol name, also put the human readable name in a comment.
      
      Also fix a bug in LLVMDisasmInstruction() that was not flushing
      the raw_svector_ostream for the disassembled instruction string
      before copying it to the output buffer that was causing truncation
      of the output.
      
      rdar://10173828
      
      llvm-svn: 198441
      b05bec7c
    • Rafael Espindola's avatar
      Make the llvm mangler depend only on DataLayout. · 58873566
      Rafael Espindola authored
      Before this patch any program that wanted to know the final symbol name of a
      GlobalValue had to link with Target.
      
      This patch implements a compromise solution where the mangler uses DataLayout.
      This way, any tool that already links with Target (llc, clang) gets the exact
      behavior as before and new IR files can be mangled without linking with Target.
      
      With this patch the mangler is constructed with just a DataLayout and DataLayout
      is extended to include the information the Mangler needs.
      
      llvm-svn: 198438
      58873566
    • Ana Pazos's avatar
      [AArch64][NEON] Added SXTL and SXTL2 instruction aliases · e891c5f2
      Ana Pazos authored
      llvm-svn: 198437
      e891c5f2
    • David Blaikie's avatar
      Revert "Revert "Debug Info: Type Units: Simplify type hashing using IR-provided unique names."" · cfb2115e
      David Blaikie authored
      This reverts commit r198398, thus reapplying r198397.
      
      I had accidentally introduced an endianness issue when applying the hash
      to the type unit. Using support::ulittle64_t in the reinterpret_cast in
      addDwarfTypeUnitType fixes this issue.
      
      Original commit message:
      
      Debug Info: Type Units: Simplify type hashing using IR-provided unique
      names.
      
      What's good for LTO metadata size problems ought to be good for non-LTO
      debug info size too, so let's rely on the same uniqueness in both cases.
      If it's insufficient for non-LTO for whatever reason (since we now won't
      be uniquing CU-local types or any C types - but these are likely to not
      be the most significant contributors to type bloat) we should consider a
      frontend solution that'll help both LTO and non-LTO alike, rather than
      using DWARF-level DIE-hashing that only helps non-LTO debug info size.
      
      It's also much simpler this way and benefits C++ even more since we can
      deduplicate lexically separate definitions of the same C++ type since
      they have the same mangled name.
      
      llvm-svn: 198436
      cfb2115e
    • David Peixotto's avatar
      Fix loop rerolling pass failure with non-consant loop lower bound · ea9ba446
      David Peixotto authored
      The loop rerolling pass was failing with an assertion failure from a
      failed cast on loops like this:
      
        void foo(int *A, int *B, int m, int n) {
          for (int i = m; i < n; i+=4) {
            A[i+0] = B[i+0] * 4;
            A[i+1] = B[i+1] * 4;
            A[i+2] = B[i+2] * 4;
            A[i+3] = B[i+3] * 4;
          }
        }
      
      The code was casting the SCEV-expanded code for the new
      induction variable to a phi-node. When the loop had a non-constant
      lower bound, the SCEV expander would end the code expansion with an
      add insted of a phi node and the cast would fail.
      
      It looks like the cast to a phi node was only needed to get the
      induction variable value coming from the backedge to compute the end
      of loop condition. This patch changes the loop reroller to compare
      the induction variable to the number of times the backedge is taken
      instead of the iteration count of the loop. In other words, we stop
      the loop when the current value of the induction variable ==
      IterationCount-1. Previously, the comparison was comparing the
      induction variable value from the next iteration == IterationCount.
      
      This problem only seems to occur on 32-bit targets. For some reason,
      the loop is not rerolled on 64-bit targets.
      
      PR18290
      
      llvm-svn: 198425
      ea9ba446
    • Arnold Schwaighofer's avatar
      BasicAA: Use reachabilty instead of dominance for checking value equality in phi · 833a82ec
      Arnold Schwaighofer authored
      cycles
      
      This allows the value equality check to work even if we don't have a dominator
      tree. Also add some more comments.
      
      I was worried about compile time impacts and did not implement reachability but
      used the dominance check in the initial patch. The trade-off was that the
      dominator tree was required.
      The llvm utility function isPotentiallyReachable cuts off the recursive search
      after 32 visits. Testing did not show any compile time regressions showing my
      worries unjustfied.
      
      No compile time or performance regressions at O3 -flto -mavx on test-suite +
      externals.
      
      Addresses review comments from r198290.
      
      llvm-svn: 198400
      833a82ec
    • David Blaikie's avatar
      Revert "Debug Info: Type Units: Simplify type hashing using IR-provided unique names." · ab0ba249
      David Blaikie authored
      Reverting due to bot failure I won't have time to investigate until
      tomorrow.
      
      This reverts commit r198397.
      
      llvm-svn: 198398
      ab0ba249
    • David Blaikie's avatar
      Debug Info: Type Units: Simplify type hashing using IR-provided unique names. · ddb66281
      David Blaikie authored
      What's good for LTO metadata size problems ought to be good for non-LTO
      debug info size too, so let's rely on the same uniqueness in both cases.
      If it's insufficient for non-LTO for whatever reason (since we now won't
      be uniquing CU-local types or any C types - but these are likely to not
      be the most significant contributors to type bloat) we should consider a
      frontend solution that'll help both LTO and non-LTO alike, rather than
      using DWARF-level DIE-hashing that only helps non-LTO debug info size.
      
      It's also much simpler this way and benefits C++ even more since we can
      deduplicate lexically separate definitions of the same C++ type since
      they have the same mangled name.
      
      llvm-svn: 198397
      ddb66281
    • Eric Christopher's avatar
      80-column. · 4d214b9e
      Eric Christopher authored
      llvm-svn: 198394
      4d214b9e
    • Eric Christopher's avatar
      Remove TextSectionSym as it is unused. · 50effa04
      Eric Christopher authored
      llvm-svn: 198393
      50effa04
    • David Blaikie's avatar
      Revert "Reverting r193835 due to weirdness with Go..." · 22b29a5f
      David Blaikie authored
      The cgo problem was that it wants dwarf2 which doesn't support direct
      constant encoding of the location. So let's add support for dwarf2
      encoding (using a location expression) of data member locations.
      
      This reverts commit r198385.
      
      llvm-svn: 198389
      22b29a5f
    • David Blaikie's avatar
      Reverting r193835 due to weirdness with Go... · 2ada116a
      David Blaikie authored
      Apologies for the noise - we're seeing some Go failures with cgo
      interacting with Clang's debug info due to this change.
      
      llvm-svn: 198385
      2ada116a
  4. Jan 02, 2014
    • Quentin Colombet's avatar
      [RegAlloc] Make tryInstructionSplit less aggressive. · 1fb3362a
      Quentin Colombet authored
      The greedy register allocator tries to split a live-range around each
      instruction where it is used or defined to relax the constraints on the entire
      live-range (this is a last chance split before falling back to spill).
      The goal is to have a big live-range that is unconstrained (i.e., that can use
      the largest legal register class) and several small local live-range that carry
      the constraints implied by each instruction.
      E.g.,
      Let csti be the constraints on operation i.
      
      V1=
      op1 V1(cst1)
      op2 V1(cst2)
      
      V1 live-range is constrained on the intersection of cst1 and cst2.
      
      tryInstructionSplit relaxes those constraints by aggressively splitting each
      def/use point:
      V1=
      V2 = V1
      V3 = V2
      op1 V3(cst1)
      V4 = V2
      op2 V4(cst2)
      
      Because of how the coalescer infrastructure works, each new variable (V3, V4)
      that is alive at the same time as V1 (or its copy, here V2) interfere with V1.
      Thus, we end up with an uncoalescable copy for each split point.
      
      To make tryInstructionSplit less aggressive, we check if the split point
      actually relaxes the constraints on the whole live-range. If it does not, we do
      not insert it.
      Indeed, it will not help the global allocation problem:
      - V1 will have the same constraints.
      - V1 will have the same interference + possibly the newly added split variable
        VS.
      - VS will produce an uncoalesceable copy if alive at the same time as V1.
      
      <rdar://problem/15570057>
      
      llvm-svn: 198369
      1fb3362a
    • Hal Finkel's avatar
      [PPC] Fix comment to match function name · 860fa905
      Hal Finkel authored
      llvm-svn: 198362
      860fa905
    • Eric Christopher's avatar
      Remove comments on CU skeleton construction, they're probably · 94932438
      Eric Christopher authored
      obvious.
      
      llvm-svn: 198361
      94932438
    • Hal Finkel's avatar
      [PPC] Fix the scheduling of CR logicals on the P7 · 1d429f2e
      Hal Finkel authored
      CR logicals (crand, crxor, etc.) on the P7 need to be in the first slot of each
      dispatch group. The old itinerary entry was just wrong (but has not mattered
      because we don't generate these instructions).
      
      This will matter when, in an upcoming commit, we start generating these
      instructions.
      
      llvm-svn: 198359
      1d429f2e
    • Eric Christopher's avatar
      Elaborate on comment for skeleton CU construction. · d8beca3b
      Eric Christopher authored
      llvm-svn: 198358
      d8beca3b
    • Eric Christopher's avatar
      Revert seemingly unnecessary section sym for the data section. · 40734c4c
      Eric Christopher authored
      llvm-svn: 198357
      40734c4c
    • Hal Finkel's avatar
      [PPC] Use the correct immediate operands on 64-bit instructions · 77c8dc1d
      Hal Finkel authored
      Several of the 64-bit fixed-point instructions with immediate operands were
      using the 32-bit (i32) operand nodes instead of the corresponding 64-bit (i64)
      operand definitions (u16imm instead of u16imm64, for example).
      
      This error has had no effect so far, but would have caused type-checking
      violations with an upcoming change.
      
      llvm-svn: 198356
      77c8dc1d
    • Hal Finkel's avatar
      Disable compare sinking in CodeGenPrepare when multiple condition registers are available · decb024c
      Hal Finkel authored
      As noted in the comment above CodeGenPrepare::OptimizeInst, which aggressively
      sinks compares to reduce pressure on the condition register(s), for targets
      such as PowerPC with multiple condition registers, this may not be the right
      thing to do. This adds an HasMultipleConditionRegisters boolean to TLI, and
      CodeGenPrepare::OptimizeInst is skipped when HasMultipleConditionRegisters is
      true.
      
      This functionality will be used by the PowerPC backend in an upcoming commit.
      Especially when the PowerPC backend starts tracking individual condition
      register bits as separate allocatable entities (which will happen in this
      upcoming commit), this sinking from CodeGenPrepare::OptimizeInst is
      significantly suboptimial.
      
      llvm-svn: 198354
      decb024c
    • Andrew Trick's avatar
      b6bc7830
    • Eric Christopher's avatar
      Fix up a couple of review comments: · d4368fde
      Eric Christopher authored
      Use an if statement instead of a pair of ternary operators checking
      the same condition.
      Use a cheap method call rather than returning the local symbol.
      
      llvm-svn: 198351
      d4368fde
    • Eric Christopher's avatar
      Simplify conditional. · 8bdb6e1d
      Eric Christopher authored
      llvm-svn: 198350
      8bdb6e1d
    • Matt Arsenault's avatar
      Allow addrspacecast in global aliases · 00436ea1
      Matt Arsenault authored
      llvm-svn: 198349
      00436ea1
    • Hal Finkel's avatar
      [TableGen] Correctly generate implicit anonymous prototype defs in multiclasses · a8c1f467
      Hal Finkel authored
      Even within a multiclass, we had been generating concrete implicit anonymous
      defs when parsing values (generally in value lists). This behavior was
      incorrect, and led to errors when multiclass parameters were used in the
      parameter list of the implicit anonymous def.
      
      If we had some multiclass:
      
      multiclass mc<string n> {
      
       ... : SomeClass<SomeOtherClass<n> >
      
      The capture of the multiclass parameter 'n' would not work correctly, and
      depending on how the implicit SomeOtherClass was used, either TableGen would
      ignore something it shouldn't, or would crash.
      
      To fix this problem, when inside a multiclass, we generate prototype anonymous
      defs for implicit anonymous defs (just as we do for explicit anonymous defs).
      Within the multiclass, the current record prototype is populated with a node
      that is essentially: !cast<SomeOtherClass>(!strconcat(NAME, anon_value_name)).
      This is then resolved to the correct concrete anonymous def, in the usual way,
      when NAME is resolved during multiclass instantiation.
      
      llvm-svn: 198348
      a8c1f467
    • Matt Arsenault's avatar
      Delete unread globals through addrspacecast · 461c8e0a
      Matt Arsenault authored
      llvm-svn: 198346
      461c8e0a
    • Matt Arsenault's avatar
      Fix addrspacecast with metadata globals · da1deabb
      Matt Arsenault authored
      llvm-svn: 198345
      da1deabb
    • Lang Hames's avatar
      Remove redundant fold call introduced in r195944. Thanks very much to Juergen · 8e6e6abf
      Lang Hames authored
      for pointing this out.
       
      
      llvm-svn: 198341
      8e6e6abf
Loading