Skip to content
  1. Sep 22, 2009
  2. Sep 21, 2009
    • Evan Cheng's avatar
      Clean up spill weight computation. Also some changes to give loop induction · 255f4164
      Evan Cheng authored
      variable increment / decrement slighter high priority. 
      
      This has major impact on some micro-benchmarks. On MultiSource/Applications
      and spec tests, it's a minor win. It also reduce 256.bzip instruction count
      by 8%, 55 on 164.gzip on i386 / Darwin.
      
      llvm-svn: 82485
      255f4164
    • Dan Gohman's avatar
      Change MachineMemOperand's alignment value to be the alignment of · e7c8242b
      Dan Gohman authored
      the base pointer, without the offset. This matches MemSDNode's
      new alignment behavior, and holds more interesting information.
      
      llvm-svn: 82473
      e7c8242b
    • Dan Gohman's avatar
      Fix this assertion string to mention subreg_to_reg. · a3c45bda
      Dan Gohman authored
      llvm-svn: 82455
      a3c45bda
    • Jakob Stoklund Olesen's avatar
      Verify that phi instructions refer to MBBs in the CFG. · f6eb7d83
      Jakob Stoklund Olesen authored
      The machine code verifier no longer tolerates phi instructions with noop
      operands. All MBBs on a phi instruction must be in the CFG.
      
      llvm-svn: 82448
      f6eb7d83
    • Evan Cheng's avatar
      Fix PR4986. "r1024 = insert_subreg r1024, undef, 2" cannot be turned in an... · fccbd0af
      Evan Cheng authored
      Fix PR4986. "r1024 = insert_subreg r1024, undef, 2" cannot be turned in an implicit_def. Instead, it's an identity copy so it should be eliminated. Also make sure to update livevariable kill information.
      
      llvm-svn: 82436
      fccbd0af
    • Reid Kleckner's avatar
      Implement the JIT side of the GDB JIT debugging interface. To enable this · 9a10db8c
      Reid Kleckner authored
      feature, either build the JIT in debug mode to enable it by default or pass
      -jit-emit-debug to lli.
      
      Right now, the only debug information that this communicates to GDB is call
      frame information, since it's already being generated to support exceptions in
      the JIT.  Eventually, when DWARF generation isn't tied so tightly to AsmPrinter,
      it will be easy to push that information to GDB through this interface.
      
      Here's a step-by-step breakdown of how the feature works:
      
      - The JIT generates the machine code and DWARF call frame info
        (.eh_frame/.debug_frame) for a function into memory.
      - The JIT copies that info into an in-memory ELF file with a symbol for the
        function.
      - The JIT creates a code entry pointing to the ELF buffer and adds it to a
        linked list hanging off of a global descriptor at a special symbol that GDB
        knows about.
      - The JIT calls a function marked noinline that GDB knows about and has put an
        internal breakpoint in.
      - GDB catches the breakpoint and reads the global descriptor to look for new
        code.
      - When sees there is new code, it reads the ELF from the inferior's memory and
        adds it to itself as an object file.
      - The JIT continues, and the next time we stop the program, we are able to
        produce a proper backtrace.
      
      Consider running the following program through the JIT:
      
      #include <stdio.h>
      void baz(short z) {
        long w = z + 1;
        printf("%d, %x\n", w, *((int*)NULL));  // SEGFAULT here
      }
      void bar(short y) {
        int z = y + 1;
        baz(z);
      }
      void foo(char x) {
        short y = x + 1;
        bar(y);
      }
      int main(int argc, char** argv) {
        char x = 1;
        foo(x);
      }
      
      Here is a backtrace before this patch:
      Program received signal SIGSEGV, Segmentation fault.
      [Switching to Thread 0x2aaaabdfbd10 (LWP 25476)]
      0x00002aaaabe7d1a8 in ?? ()
      (gdb) bt
      #0  0x00002aaaabe7d1a8 in ?? ()
      #1  0x0000000000000003 in ?? ()
      #2  0x0000000000000004 in ?? ()
      #3  0x00032aaaabe7cfd0 in ?? ()
      #4  0x00002aaaabe7d12c in ?? ()
      #5  0x00022aaa00000003 in ?? ()
      #6  0x00002aaaabe7d0aa in ?? ()
      #7  0x01000002abe7cff0 in ?? ()
      #8  0x00002aaaabe7d02c in ?? ()
      #9  0x0100000000000001 in ?? ()
      #10 0x00000000014388e0 in ?? ()
      #11 0x00007fff00000001 in ?? ()
      #12 0x0000000000b870a2 in llvm::JIT::runFunction (this=0x1405b70,
      F=0x14024e0, ArgValues=@0x7fffffffe050)
         at /home/rnk/llvm-gdb/lib/ExecutionEngine/JIT/JIT.cpp:395
      #13 0x0000000000baa4c5 in llvm::ExecutionEngine::runFunctionAsMain
      (this=0x1405b70, Fn=0x14024e0, argv=@0x13f06f8, envp=0x7fffffffe3b0)
         at /home/rnk/llvm-gdb/lib/ExecutionEngine/ExecutionEngine.cpp:377
      #14 0x00000000007ebd52 in main (argc=2, argv=0x7fffffffe398,
      envp=0x7fffffffe3b0) at /home/rnk/llvm-gdb/tools/lli/lli.cpp:208
      
      And a backtrace after this patch:
      Program received signal SIGSEGV, Segmentation fault.
      0x00002aaaabe7d1a8 in baz ()
      (gdb) bt
      #0  0x00002aaaabe7d1a8 in baz ()
      #1  0x00002aaaabe7d12c in bar ()
      #2  0x00002aaaabe7d0aa in foo ()
      #3  0x00002aaaabe7d02c in main ()
      #4  0x0000000000b870a2 in llvm::JIT::runFunction (this=0x1405b70,
      F=0x14024e0, ArgValues=...)
         at /home/rnk/llvm-gdb/lib/ExecutionEngine/JIT/JIT.cpp:395
      #5  0x0000000000baa4c5 in llvm::ExecutionEngine::runFunctionAsMain
      (this=0x1405b70, Fn=0x14024e0, argv=..., envp=0x7fffffffe3c0)
         at /home/rnk/llvm-gdb/lib/ExecutionEngine/ExecutionEngine.cpp:377
      #6  0x00000000007ebd52 in main (argc=2, argv=0x7fffffffe3a8,
      envp=0x7fffffffe3c0) at /home/rnk/llvm-gdb/tools/lli/lli.cpp:208
      
      llvm-svn: 82418
      9a10db8c
  3. Sep 20, 2009
  4. Sep 19, 2009
  5. Sep 18, 2009
  6. Sep 17, 2009
  7. Sep 16, 2009
Loading