Skip to content
  1. May 05, 2013
    • Stepan Dyatkovskiy's avatar
      For ARM backend, fixed "byval" attribute support. · 8c02c982
      Stepan Dyatkovskiy authored
      Now even the small structures could be passed within byval (small enough
      to be stored in GPRs).
      In regression tests next function prototypes are checked:
      
      PR15293:
        %artz = type { i32 }
        define void @foo(%artz* byval %s)
        define void @foo2(%artz* byval %s, i32 %p, %artz* byval %s2)
      foo: "s" stored in R0
      foo2: "s" stored in R0, "s2" stored in R2.
      
      Next AAPCS rules are checked:
      5.5 Parameters Passing, C.4 and C.5,
      "ParamSize" is parameter size in 32bit words:
      -- NSAA != 0, NCRN < R4 and NCRN+ParamSize > R4.
         Parameter should be sent to the stack; NCRN := R4.
      -- NSAA != 0, and NCRN < R4, NCRN+ParamSize < R4.
         Parameter stored in GPRs; NCRN += ParamSize.
      
      llvm-svn: 181148
      8c02c982
  2. Jan 02, 2013
    • Chandler Carruth's avatar
      Move all of the header files which are involved in modelling the LLVM IR · 9fb823bb
      Chandler Carruth authored
      into their new header subdirectory: include/llvm/IR. This matches the
      directory structure of lib, and begins to correct a long standing point
      of file layout clutter in LLVM.
      
      There are still more header files to move here, but I wanted to handle
      them in separate commits to make tracking what files make sense at each
      layer easier.
      
      The only really questionable files here are the target intrinsic
      tablegen files. But that's a battle I'd rather not fight today.
      
      I've updated both CMake and Makefile build systems (I think, and my
      tests think, but I may have missed something).
      
      I've also re-sorted the includes throughout the project. I'll be
      committing updates to Clang, DragonEgg, and Polly momentarily.
      
      llvm-svn: 171366
      9fb823bb
  3. Dec 03, 2012
    • Chandler Carruth's avatar
      Use the new script to sort the includes of every file under lib. · ed0881b2
      Chandler Carruth authored
      Sooooo many of these had incorrect or strange main module includes.
      I have manually inspected all of these, and fixed the main module
      include to be the nearest plausible thing I could find. If you own or
      care about any of these source files, I encourage you to take some time
      and check that these edits were sensible. I can't have broken anything
      (I strictly added headers, and reordered them, never removed), but they
      may not be the headers you'd really like to identify as containing the
      API being implemented.
      
      Many forward declarations and missing includes were added to a header
      files to allow them to parse cleanly when included first. The main
      module rule does in fact have its merits. =]
      
      llvm-svn: 169131
      ed0881b2
  4. Nov 14, 2012
  5. Oct 16, 2012
    • Stepan Dyatkovskiy's avatar
      Issue: · e59a920b
      Stepan Dyatkovskiy authored
      Stack is formed improperly for long structures passed as byval arguments for
      EABI mode.
      
      If we took AAPCS reference, we can found the next statements:
      
      A: "If the argument requires double-word alignment (8-byte), the NCRN (Next
      Core Register Number) is rounded up to the next even register number." (5.5
      Parameter Passing, Stage C, C.3).
      
      B: "The alignment of an aggregate shall be the alignment of its most-aligned
      component." (4.3 Composite Types, 4.3.1 Aggregates).
      
      So if we have structure with doubles (9 double fields) and 3 Core unused
      registers (r1, r2, r3): caller should use r2 and r3 registers only.
      Currently r1,r2,r3 set is used, but it is invalid.
      
      Callee VA routine should also use r2 and r3 regs only. All is ok here. This
      behaviour is guessed by rounding up SP address with ADD+BFC operations.
      
      Fix:
      Main fix is in ARMTargetLowering::HandleByVal. If we detected AAPCS mode and
      8 byte alignment, we waste odd registers then.
      
      P.S.:
      I also improved LDRB_POST_IMM regression test. Since ldrb instruction will
      not generated by current regression test after this patch. 
      
      llvm-svn: 166018
      e59a920b
  6. Oct 08, 2012
  7. Jun 20, 2012
  8. Jun 02, 2012
    • Jakob Stoklund Olesen's avatar
      Switch all register list clients to the new MC*Iterator interface. · 54038d79
      Jakob Stoklund Olesen authored
      No functional change intended.
      
      Sorry for the churn. The iterator classes are supposed to help avoid
      giant commits like this one in the future. The TableGen-produced
      register lists are getting quite large, and it may be necessary to
      change the table representation.
      
      This makes it possible to do so without changing all clients (again).
      
      llvm-svn: 157854
      54038d79
  9. Mar 04, 2012
  10. Jun 10, 2011
  11. Jun 09, 2011
  12. May 26, 2011
  13. May 17, 2011
  14. Apr 20, 2011
  15. Mar 04, 2011
  16. Feb 28, 2011
  17. Dec 15, 2010
  18. Nov 04, 2010
  19. Nov 03, 2010
    • Duncan Sands's avatar
      Inside the calling convention logic LocVT is always a simple · f5dda01f
      Duncan Sands authored
      value type, so there is no point in passing it around using
      an EVT.  Use the simpler MVT everywhere.  Rather than trying
      to propagate this information maximally in all the code that
      using the calling convention stuff, I chose to do a mainly
      low impact change instead.
      
      llvm-svn: 118167
      f5dda01f
  20. Jul 10, 2010
  21. Jul 09, 2010
    • Bob Wilson's avatar
      --- Reverse-merging r107947 into '.': · 6586e9b2
      Bob Wilson authored
      U    utils/TableGen/FastISelEmitter.cpp
      --- Reverse-merging r107943 into '.':
      U    test/CodeGen/X86/fast-isel.ll
      U    test/CodeGen/X86/fast-isel-loads.ll
      U    include/llvm/Target/TargetLowering.h
      U    include/llvm/Support/PassNameParser.h
      U    include/llvm/CodeGen/FunctionLoweringInfo.h
      U    include/llvm/CodeGen/CallingConvLower.h
      U    include/llvm/CodeGen/FastISel.h
      U    include/llvm/CodeGen/SelectionDAGISel.h
      U    lib/CodeGen/LLVMTargetMachine.cpp
      U    lib/CodeGen/CallingConvLower.cpp
      U    lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp
      U    lib/CodeGen/SelectionDAG/FunctionLoweringInfo.cpp
      U    lib/CodeGen/SelectionDAG/FastISel.cpp
      U    lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp
      U    lib/CodeGen/SelectionDAG/ScheduleDAGSDNodes.cpp
      U    lib/CodeGen/SelectionDAG/InstrEmitter.cpp
      U    lib/CodeGen/SelectionDAG/TargetLowering.cpp
      U    lib/Target/XCore/XCoreISelLowering.cpp
      U    lib/Target/XCore/XCoreISelLowering.h
      U    lib/Target/X86/X86ISelLowering.cpp
      U    lib/Target/X86/X86FastISel.cpp
      U    lib/Target/X86/X86ISelLowering.h
      
      llvm-svn: 107987
      6586e9b2
    • Dan Gohman's avatar
      Re-apply bottom-up fast-isel, with fixes. Be very careful to avoid emitting · 0b5aa1cd
      Dan Gohman authored
      a DBG_VALUE after a terminator, or emitting any instructions before an EH_LABEL.
      
      llvm-svn: 107943
      0b5aa1cd
  22. Jul 08, 2010
  23. Jul 07, 2010
  24. Jul 06, 2010
  25. Jan 05, 2010
  26. Nov 07, 2009
  27. Sep 02, 2009
  28. Aug 23, 2009
  29. Aug 11, 2009
  30. Aug 05, 2009
    • Dan Gohman's avatar
      Major calling convention code refactoring. · f9bbcd1a
      Dan Gohman authored
      Instead of awkwardly encoding calling-convention information with ISD::CALL,
      ISD::FORMAL_ARGUMENTS, ISD::RET, and ISD::ARG_FLAGS nodes, TargetLowering
      provides three virtual functions for targets to override:
      LowerFormalArguments, LowerCall, and LowerRet, which replace the custom
      lowering done on the special nodes. They provide the same information, but
      in a more immediately usable format.
      
      This also reworks much of the target-independent tail call logic. The
      decision of whether or not to perform a tail call is now cleanly split
      between target-independent portions, and the target dependent portion
      in IsEligibleForTailCallOptimization.
      
      This also synchronizes all in-tree targets, to help enable future
      refactoring and feature work.
      
      llvm-svn: 78142
      f9bbcd1a
Loading