Skip to content
  1. Jul 14, 2009
  2. Jul 13, 2009
  3. Jul 12, 2009
    • Bill Wendling's avatar
      Temporarily revert r75408. It appears to break the Apple-style builds: · 5b76fc03
      Bill Wendling authored
      x86_64-apple-darwin10-gcc -c   -g -O2  -DIN_GCC   -W -Wall -Wwrite-strings -Wstrict-prototypes -Wmissing-prototypes -pedantic -Wno-long-long -Wno-variadic-macros -Wno-overlength-strings -Wold-style-definition -Wmissing-format-attribute   -mdynamic-no-pic -DHAVE_CONFIG_H -I. -I. -I/Volumes/Sandbox/Buildbot/llvm/build.llvm-gcc-x86_64-darwin10-selfhost/build/llvmgcc42.roots/llvmgcc42~obj/src/gcc -I/Volumes/Sandbox/Buildbot/llvm/build.llvm-gcc-x86_64-darwin10-selfhost/build/llvmgcc42.roots/llvmgcc42~obj/src/gcc/. -I/Volumes/Sandbox/Buildbot/llvm/build.llvm-gcc-x86_64-darwin10-selfhost/build/llvmgcc42.roots/llvmgcc42~obj/src/gcc/../include -I./../intl -I/Volumes/Sandbox/Buildbot/llvm/build.llvm-gcc-x86_64-darwin10-selfhost/build/llvmgcc42.roots/llvmgcc42~obj/src/gcc/../libcpp/include  -I/Volumes/Sandbox/Buildbot/llvm/build.llvm-gcc-x86_64-darwin10-selfhost/build/llvmgcc42.roots/llvmgcc42~obj/src/gcc/../libdecnumber -I../libdecnumber -I/Volumes/Sandbox/Buildbot/llvm/build.llvm-gcc-x86_64-darwin10-selfhost/build/llvmCore.roots/llvmCore~dst/Developer/usr/local/include -I/Volumes/Sandbox/Buildbot/llvm/build.llvm-gcc-x86_64-darwin10-selfhost/build/llvmCore.roots/llvmCore~obj/src/include -DENABLE_LLVM -I/Volumes/Sandbox/Buildbot/llvm/build.llvm-gcc-x86_64-darwin10-selfhost/build/llvmCore.roots/llvmCore~dst/Developer/usr/local/include  -D_DEBUG  -D_GNU_SOURCE -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS -DLLVM_VERSION_INFO='"9999"' -DBUILD_LLVM_APPLE_STYLE   /Volumes/Sandbox/Buildbot/llvm/build.llvm-gcc-x86_64-darwin10-selfhost/build/llvmgcc42.roots/llvmgcc42~obj/src/gcc/tree-ssa-alias.c -o tree-ssa-alias.o
      /var/tmp//ccJQ2JBT.s:4134:Incorrect register `%rcx' used with `l' suffix
      make[2]: *** [tree-ssa-live.o] Error 1
      make[2]: *** Waiting for unfinished jobs....
      
      llvm-svn: 75412
      5b76fc03
    • Chris Lattner's avatar
      eliminate MOV64r0 in favor of a Pat<> pattern. This is only nontrivial because · 02c4339b
      Chris Lattner authored
      the div lowering code explicitly references it.
      
      llvm-svn: 75408
      02c4339b
  4. Jul 11, 2009
    • Torok Edwin's avatar
      assert(0) -> LLVM_UNREACHABLE. · 56d06597
      Torok Edwin authored
      Make llvm_unreachable take an optional string, thus moving the cerr<< out of
      line.
      LLVM_UNREACHABLE is now a simple wrapper that makes the message go away for
      NDEBUG builds.
      
      llvm-svn: 75379
      56d06597
  5. Jul 10, 2009
  6. Jul 09, 2009
  7. Jul 08, 2009
  8. Jun 30, 2009
    • Evan Cheng's avatar
      Add a bit IsUndef to MachineOperand. This indicates the def / use register... · 0dc101b8
      Evan Cheng authored
      Add a bit IsUndef to MachineOperand. This indicates the def / use register operand is defined by an implicit_def. That means it can def / use any register and passes (e.g. register scavenger) can feel free to ignore them.
      
      The register allocator, when it allocates a register to a virtual register defined by an implicit_def, can allocate any physical register without worrying about overlapping live ranges. It should mark all of operands of the said virtual register so later passes will do the right thing.
      
      This is not the best solution. But it should be a lot less fragile to having the scavenger try to track what is defined by implicit_def.
      
      llvm-svn: 74518
      0dc101b8
  9. Jun 27, 2009
    • Chris Lattner's avatar
      factor some logic out into a helper function, allow remat of loads from constant · 9876bd82
      Chris Lattner authored
      globals.  This implements remat-constant.ll even without aggressive-remat.
      
      llvm-svn: 74373
      9876bd82
    • Chris Lattner's avatar
      Reimplement rip-relative addressing in the X86-64 backend. The new · fea81da4
      Chris Lattner authored
      implementation primarily differs from the former in that the asmprinter
      doesn't make a zillion decisions about whether or not something will be
      RIP relative or not.  Instead, those decisions are made by isel lowering
      and propagated through to the asm printer.  To achieve this, we:
      
      1. Represent RIP relative addresses by setting the base of the X86 addr
         mode to X86::RIP.
      2. When ISel Lowering decides that it is safe to use RIP, it lowers to
         X86ISD::WrapperRIP.  When it is unsafe to use RIP, it lowers to
         X86ISD::Wrapper as before.
      3. This removes isRIPRel from X86ISelAddressMode, representing it with
         a basereg of RIP instead.
      4. The addressing mode matching logic in isel is greatly simplified.
      5. The asmprinter is greatly simplified, notably the "NotRIPRel" predicate
         passed through various printoperand routines is gone now.
      6. The various symbol printing routines in asmprinter now no longer infer
         when to emit (%rip), they just print the symbol.
      
      I think this is a big improvement over the previous situation.  It does have
      two small caveats though: 1. I implemented a horrible "no-rip" modifier for
      the inline asm "P" constraint modifier.  This is a short term hack, there is
      a much better, but more involved, solution.  2. I had to xfail an 
      -aggressive-remat testcase because it isn't handling the use of RIP in the
      constant-pool reading instruction.  This specific test is easy to fix without
      -aggressive-remat, which I intend to do next.
      
      llvm-svn: 74372
      fea81da4
  10. Jun 25, 2009
  11. Jun 04, 2009
  12. May 29, 2009
    • Bill Wendling's avatar
      The MONITOR and MWAIT instructions have insufficient information for · 2e09bd3d
      Bill Wendling authored
      decoding. Essentially, they both map to the same column in the "opcode
      extensions for one- and two-byte opcodes" table in the x86 manual. The RawFrm
      complicates decoding this.
      
      Instead, use opcode 0x01, prefix 0x01, and form MRM1r. Then have the code
      emitter special case these, a la [SML]FENCE.
      
      llvm-svn: 72556
      2e09bd3d
  13. May 13, 2009
    • Bill Wendling's avatar
      Change MachineInstrBuilder::addReg() to take a flag instead of a list of · f7b83c7a
      Bill Wendling authored
      booleans. This gives a better indication of what the "addReg()" is
      doing. Remembering what all of those booleans mean isn't easy, especially if you
      aren't spending all of your time in that code.
      
      I took Jakob's suggestion and made it illegal to pass in "true" for the
      flag. This should hopefully prevent any unintended misuse of this (by reverting
      to the old way of using addReg()).
      
      llvm-svn: 71722
      f7b83c7a
  14. May 12, 2009
  15. May 08, 2009
    • Evan Cheng's avatar
      Optimize code placement in loop to eliminate unconditional branches or move... · 2fa28110
      Evan Cheng authored
      Optimize code placement in loop to eliminate unconditional branches or move unconditional branch to the outside of the loop. e.g.
      
      ///       A:                                                                                                                                                                 
      ///       ...                                                                                                                                                                
      ///       <fallthrough to B>                                                                                                                                                 
      ///                                                                                                                                                                          
      ///       B:  --> loop header                                                                                                                                                
      ///       ...                                                                                                                                                                
      ///       jcc <cond> C, [exit]                                                                                                                                               
      ///                                                                                                                                                                          
      ///       C:                                                                                                                                                                 
      ///       ...                                                                                                                                                                
      ///       jmp B                                                                                                                                                              
      ///                                                                                                                                                                          
      /// ==>                                                                                                                                                                      
      ///                                                                                                                                                                          
      ///       A:                                                                                                                                                                 
      ///       ...                                                                                                                                                                
      ///       jmp B                                                                                                                                                              
      ///                                                                                                                                                                          
      ///       C:  --> new loop header                                                                                                                                            
      ///       ...                                                                                                                                                                
      ///       <fallthough to B>                                                                                                                                                  
      ///                                                                                                                                                                          
      ///       B:                                                                                                                                                                 
      ///       ...                                                                                                                                                                
      ///       jcc <cond> C, [exit] 
      
      llvm-svn: 71209
      2fa28110
  16. May 05, 2009
  17. Apr 27, 2009
  18. Apr 21, 2009
  19. Apr 18, 2009
  20. Apr 17, 2009
  21. Apr 15, 2009
  22. Apr 13, 2009
    • Dan Gohman's avatar
      Implement x86 h-register extract support. · 57d6bd36
      Dan Gohman authored
       - Add patterns for h-register extract, which avoids a shift and mask,
         and in some cases a temporary register.
       - Add address-mode matching for turning (X>>(8-n))&(255<<n), where
         n is a valid address-mode scale value, into an h-register extract
         and a scaled-offset address.
       - Replace X86's MOV32to32_ and related instructions with the new
         target-independent COPY_TO_SUBREG instruction.
      
      On x86-64 there are complicated constraints on h registers, and
      CodeGen doesn't currently provide a high-level way to express all of them,
      so they are handled with a bunch of special code. This code currently only
      supports extracts where the result is used by a zero-extend or a store,
      though these are fairly common.
      
      These transformations are not always beneficial; since there are only
      4 h registers, they sometimes require extra move instructions, and
      this sometimes increases register pressure because it can force out
      values that would otherwise be in one of those registers. However,
      this appears to be relatively uncommon.
      
      llvm-svn: 68962
      57d6bd36
Loading