Skip to content
  1. Sep 26, 2009
  2. Sep 25, 2009
    • Evan Cheng's avatar
      Flip -disable-post-RA-scheduler to -post-RA-scheduler. · 3872b3c1
      Evan Cheng authored
      llvm-svn: 82803
      3872b3c1
    • Dan Gohman's avatar
      Improve MachineMemOperand handling. · 48b185d6
      Dan Gohman authored
       - Allocate MachineMemOperands and MachineMemOperand lists in MachineFunctions.
         This eliminates MachineInstr's std::list member and allows the data to be
         created by isel and live for the remainder of codegen, avoiding a lot of
         copying and unnecessary translation. This also shrinks MemSDNode.
       - Delete MemOperandSDNode. Introduce MachineSDNode which has dedicated
         fields for MachineMemOperands.
       - Change MemSDNode to have a MachineMemOperand member instead of its own
         fields with the same information. This introduces some redundancy, but
         it's more consistent with what MachineInstr will eventually want.
       - Ignore alignment when searching for redundant loads for CSE, but remember
         the greatest alignment.
      
      Target-specific code which previously used MemOperandSDNodes with generic
      SDNodes now use MemIntrinsicSDNodes, with opcodes in a designated range
      so that the SelectionDAG framework knows that MachineMemOperand information
      is available.
      
      llvm-svn: 82794
      48b185d6
    • Dan Gohman's avatar
      Rename getTargetNode to getMachineNode, for consistency with the · 32f71d71
      Dan Gohman authored
      naming scheme used in SelectionDAG, where there are multiple kinds
      of "target" nodes, but "machine" nodes are nodes which represent
      a MachineInstr.
      
      llvm-svn: 82790
      32f71d71
    • Dale Johannesen's avatar
      Make sure sin, cos, sqrt calls are marked readonly · a318d91a
      Dale Johannesen authored
      before producing FSIN, FCOS, FSQRT.  If they aren't
      so marked we have to assume they might set errno.
      
      llvm-svn: 82781
      a318d91a
    • Dale Johannesen's avatar
      Generate FSQRT from calls to the sqrt function, which · c7213426
      Dale Johannesen authored
      allows appropriate backends to generate a sqrt instruction.
      
      On x86, this isn't done at -O0 because we go through
      FastISel instead.  This is a behavior change from before
      this series of sqrt patches started.  I think this is OK
      considering that compile speed is most important at -O0, but
      could be convinced otherwise.
      
      llvm-svn: 82778
      c7213426
    • Bob Wilson's avatar
      pr4926: ARM requires the stack pointer to be aligned, even for leaf functions. · d60367c1
      Bob Wilson authored
      For the AAPCS ABI, SP must always be 4-byte aligned, and at any "public
      interface" it must be 8-byte aligned.  For the older ARM APCS ABI, the stack
      alignment is just always 4 bytes.  For X86, we currently align SP at
      entry to a function (e.g., to 16 bytes for Darwin), but no stack alignment
      is needed at other times, such as for a leaf function.
      
      After discussing this with Dan, I decided to go with the approach of adding
      a new "TransientStackAlignment" field to TargetFrameInfo.  This value
      specifies the stack alignment that must be maintained even in between calls.
      It defaults to 1 except for ARM, where it is 4.  (Some other targets may
      also want to set this if they have similar stack requirements. It's not
      currently required for PPC because it sets targetHandlesStackFrameRounding
      and handles the alignment in target-specific code.) The existing StackAlignment
      value specifies the alignment upon entry to a function, which is how we've
      been using it anyway.
      
      llvm-svn: 82767
      d60367c1
    • Nate Begeman's avatar
      Fix combiner-aa issue with bases which are different, but can alias. · 18150d5a
      Nate Begeman authored
      Previously, it treated GV+28 GV+0 as different bases, and assumed they could
      not alias.
      
      llvm-svn: 82753
      18150d5a
    • Dan Gohman's avatar
      Add a version of dumpr() that has a SelectionDAG* argument. · ebdfe4af
      Dan Gohman authored
      llvm-svn: 82742
      ebdfe4af
    • Jim Grosbach's avatar
      Start of revamping the register scavenging in PEI. ARM Thumb1 is the driving · 372e9a38
      Jim Grosbach authored
      interest for this, as it currently reserves a register rather than using
      the scavenger for matierializing constants as needed.
      
      Instead of scavenging registers on the fly while eliminating frame indices,
      new virtual registers are created, and then a scavenged collectively in a
      post-pass over the function. This isolates the bits that need to interact
      with the scavenger, and sets the stage for more intelligent use, and reuse,
      of scavenged registers.
      
      For the time being, this is disabled by default. Once the bugs are worked out,
      the current scavenging calls in replaceFrameIndices() will be removed and
      the post-pass scavenging will be the default. Until then,
      -enable-frame-index-scavenging enables the new code. Currently, only the
      Thumb1 back end is set up to use it.
      
      llvm-svn: 82734
      372e9a38
    • Mike Stump's avatar
      Delete space after function name, before (, reflow a comment and · 944fa259
      Mike Stump authored
      delete a few blank lines.
      
      llvm-svn: 82729
      944fa259
    • Mike Stump's avatar
      Fix spacing. · d6f9a2f9
      Mike Stump authored
      llvm-svn: 82727
      d6f9a2f9
  3. Sep 24, 2009
    • David Goodwin's avatar
      Make the end-of-itinerary mark explicit. Some cleanup. · bf97147a
      David Goodwin authored
      llvm-svn: 82709
      bf97147a
    • Bob Wilson's avatar
      Fix a hypothetical problem for targets with StackGrowsUp and a non-zero · 5fe313d6
      Bob Wilson authored
      LocalAreaOffset.  (We don't have any of those right now.)
      PEI::calculateFrameObjectOffsets includes the absolute value of the
      LocalAreaOffset in the cumulative offset value used to calculate the
      stack frame size.  It then adds the raw value of the LocalAreaOffset
      to the stack size.  For a StackGrowsDown target, that raw value is negative
      and has the effect of cancelling out the absolute value that was added
      earlier, but that obviously won't work for a StackGrowsUp target.  Change
      to subtract the absolute value of the LocalAreaOffset.
      
      llvm-svn: 82693
      5fe313d6
    • Chris Lattner's avatar
      unconditionally compute MMI even if the target doesn't support EH or Debug... · 87d8f2b9
      Chris Lattner authored
      unconditionally compute MMI even if the target doesn't support EH or Debug info, because the target may use it for other things, this fixes PR5036
      
      llvm-svn: 82684
      87d8f2b9
    • Evan Cheng's avatar
      Fix PR5024 with a big hammer: disable the double-def assertion in the scavenger. · 26ea28eb
      Evan Cheng authored
      LiveVariables add implicit kills to correctly track partial register kills. This works well enough and is fairly accurate. But coalescer can make it impossible to maintain these markers. e.g.
      
              BL <ga:sss1>, %R0<kill,undef>, %S0<kill>, %R0<imp-def>, %R1<imp-def,dead>, %R2<imp-def,dead>, %R3<imp-def,dead>, %R12<imp-def,dead>, %LR<imp-def,dead>, %D0<imp-def>, ...
      ...
      	%reg1031<def> = FLDS <cp#1>, 0, 14, %reg0, Mem:LD4[ConstantPool]
      ...
         	%S0<def> = FCPYS %reg1031<kill>, 14, %reg0, %D0<imp-use,kill>
      
      When reg1031 and S0 are coalesced, the copy (FCPYS) will be eliminated the the implicit-kill of D0 is lost. In this case it's possible to move the marker to the FLDS. But in many cases, this is not possible. Suppose
      
      	%reg1031<def> = FOO <cp#1>, %D0<imp-def>
      ...
         	%S0<def> = FCPYS %reg1031<kill>, 14, %reg0, %D0<imp-use,kill>
      
      When FCPYS goes away, the definition of S0 is the "FOO" instruction. However, transferring the D0 implicit-kill to FOO doesn't work since it is the def of D0 itself. We need to fix this in another time by introducing a "kill" pseudo instruction to track liveness.
      
      Disabling the assertion is not ideal, but machine verifier is doing that job now. It's important to know double-def is not a miscomputation since it means a register should be free but it's not tracked as free. It's a performance issue instead.
      
      llvm-svn: 82677
      26ea28eb
    • Evan Cheng's avatar
      Clean up LiveVariables and change how it deals with partial updates and kills.... · a21aac38
      Evan Cheng authored
      Clean up LiveVariables and change how it deals with partial updates and kills. This also eliminate the horrible check which scan forward to the end of the basic block. It should be faster and more accurate.
      
      llvm-svn: 82676
      a21aac38
  4. Sep 23, 2009
  5. Sep 22, 2009
  6. 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
  7. Sep 20, 2009
    • Chris Lattner's avatar
      tidy up · bb1a1bd2
      Chris Lattner authored
      llvm-svn: 82397
      bb1a1bd2
    • Bill Wendling's avatar
      --- Reverse-merging r82282 into '.': · 692a3ea0
      Bill Wendling authored
      U    lib/CodeGen/AsmPrinter/DwarfException.cpp
      U    lib/CodeGen/AsmPrinter/DwarfException.h
      
      --- Reverse-merging r82274 into '.':
      U    lib/Target/TargetLoweringObjectFile.cpp
      G    lib/CodeGen/AsmPrinter/DwarfException.cpp
      
      These revisions were breaking everything.
      
      llvm-svn: 82396
      692a3ea0
Loading