Skip to content
  1. Apr 29, 2009
    • Evan Cheng's avatar
      Determine allocation 'preference' with right register class. I haven't seen... · cfb4cae2
      Evan Cheng authored
      Determine allocation 'preference' with right register class. I haven't seen this changing codegen so no test case.
      
      llvm-svn: 70351
      cfb4cae2
    • Bill Wendling's avatar
      Second attempt: · 084669a1
      Bill Wendling authored
      Massive check in. This changes the "-fast" flag to "-O#" in llc. If you want to
      use the old behavior, the flag is -O0. This change allows for finer-grained
      control over which optimizations are run at different -O levels.
      
      Most of this work was pretty mechanical. The majority of the fixes came from
      verifying that a "fast" variable wasn't used anymore. The JIT still uses a
      "Fast" flag. I'll change the JIT with a follow-up patch.
      
      llvm-svn: 70343
      084669a1
  2. Apr 28, 2009
  3. Apr 27, 2009
  4. Apr 25, 2009
  5. Apr 24, 2009
  6. Apr 23, 2009
  7. Apr 22, 2009
    • Evan Cheng's avatar
      It has finally happened. Spiller is now using live interval info. · 1a99a5f5
      Evan Cheng authored
      This fixes a very subtle bug. vr defined by an implicit_def is allowed overlap with any register since it doesn't actually modify anything. However, if it's used as a two-address use, its live range can be extended and it can be spilled. The spiller must take care not to emit a reload for the vn number that's defined by the implicit_def. This is both a correctness and performance issue.
      
      llvm-svn: 69743
      1a99a5f5
  8. Apr 21, 2009
  9. Apr 20, 2009
    • Bob Wilson's avatar
      Move duplicated AddLiveIn function from X86 and ARM backends to be a method · f8b85477
      Bob Wilson authored
      in the MachineFunction class, renaming it to addLiveIn for consistency with
      the same method in MachineBasicBlock.  Thanks for Anton for suggesting this.
      
      llvm-svn: 69615
      f8b85477
    • Bob Wilson's avatar
      Revise my previous change 68996 as suggested by Duncan. · da188ebb
      Bob Wilson authored
      llvm-svn: 69607
      da188ebb
    • Evan Cheng's avatar
      - Remove an arbitrary spill weight tweak that should not have been there. · 5dd2e29b
      Evan Cheng authored
      - Find more reloads from SS.
      
      llvm-svn: 69606
      5dd2e29b
    • Evan Cheng's avatar
      Added a linearscan register allocation optimization. When the register... · d67efaa8
      Evan Cheng authored
      Added a linearscan register allocation optimization. When the register allocator spill an interval with multiple uses in the same basic block, it creates a different virtual register for each of the reloads. e.g.
      
      	%reg1498<def> = MOV32rm %reg1024, 1, %reg0, 12, %reg0, Mem:LD(4,4) [sunkaddr39 + 0]
              %reg1506<def> = MOV32rm %reg1024, 1, %reg0, 8, %reg0, Mem:LD(4,4) [sunkaddr42 + 0]
              %reg1486<def> = MOV32rr %reg1506
              %reg1486<def> = XOR32rr %reg1486, %reg1498, %EFLAGS<imp-def,dead>
              %reg1510<def> = MOV32rm %reg1024, 1, %reg0, 4, %reg0, Mem:LD(4,4) [sunkaddr45 + 0]
      
      =>
      
              %reg1498<def> = MOV32rm %reg2036, 1, %reg0, 12, %reg0, Mem:LD(4,4) [sunkaddr39 + 0]
              %reg1506<def> = MOV32rm %reg2037, 1, %reg0, 8, %reg0, Mem:LD(4,4) [sunkaddr42 + 0]
              %reg1486<def> = MOV32rr %reg1506
              %reg1486<def> = XOR32rr %reg1486, %reg1498, %EFLAGS<imp-def,dead>
              %reg1510<def> = MOV32rm %reg2038, 1, %reg0, 4, %reg0, Mem:LD(4,4) [sunkaddr45 + 0]
      
      From linearscan's point of view, each of reg2036, 2037, and 2038 are separate registers, each is "killed" after a single use. The reloaded register is available and it's often clobbered right away. e.g. In thise case reg1498 is allocated EAX while reg2036 is allocated RAX. This means we end up with multiple reloads from the same stack slot in the same basic block.
      
      Now linearscan recognize there are other reloads from same SS in the same BB. So it'll "downgrade" RAX (and its aliases) after reg2036 is allocated until the next reload (reg2037) is done. This greatly increase the likihood reloads from SS are reused.
      
      This speeds up sha1 from OpenSSL by 5.8%. It is also an across the board win for SPEC2000 and 2006.
      
      llvm-svn: 69585
      d67efaa8
  10. Apr 19, 2009
  11. Apr 18, 2009
    • Chris Lattner's avatar
      Fix PR3898, which manifests as failures on are an Xcore, · 7b01e664
      Chris Lattner authored
      patch by Jakob Stoklund Olesen!
      
      llvm-svn: 69472
      7b01e664
    • Duncan Sands's avatar
      Don't try to make BUILD_VECTOR operands have the same · e4ff21ba
      Duncan Sands authored
      type as the vector element type: allow them to be of
      a wider integer type than the element type all the way
      through the system, and not just as far as LegalizeDAG.
      This should be safe because it used to be this way
      (the old type legalizer would produce such nodes), so
      backends should be able to handle it.  In fact only
      targets which have legal vector types with an illegal
      promoted element type will ever see this (eg: <4 x i16>
      on ppc).  This fixes a regression with the new type
      legalizer (vec_splat.ll).  Also, treat SCALAR_TO_VECTOR
      the same as BUILD_VECTOR.  After all, it is just a
      special case of BUILD_VECTOR.
      
      llvm-svn: 69467
      e4ff21ba
Loading