Skip to content
  1. Mar 04, 2014
  2. Jan 29, 2014
  3. Jan 25, 2014
  4. Jan 22, 2014
    • Rafael Espindola's avatar
      Fix pr18515. · 28a85a84
      Rafael Espindola authored
      My understanding (from reading just the llvm code) is that
      * most ppc cpus have a "sync n" instruction and an msync alias that is "sync 0".
      * "book e" cpus instead have a msync instruction and not the more
      general "sync n"
      
      This patch reflects that in the .td files, allowing a single codepath for
      asm ond obj streamer and incidentelly fixes a crash when EmitRawText was
      called on a obj streamer.
      
      llvm-svn: 199832
      28a85a84
  5. Jan 14, 2014
    • Rafael Espindola's avatar
      Make getTargetStreamer return a possibly null pointer. · 4a1a3606
      Rafael Espindola authored
      This will allow it to be called from target independent parts of the main
      streamer that don't know if there is a registered target streamer or not. This
      in turn will allow targets to perform extra actions at specified points in the
      interface: add extra flags for some labels, extra work during finalization, etc.
      
      llvm-svn: 199174
      4a1a3606
  6. Jan 09, 2014
    • Chandler Carruth's avatar
      Put the functionality for printing a value to a raw_ostream as an · d48cdbf0
      Chandler Carruth authored
      operand into the Value interface just like the core print method is.
      That gives a more conistent organization to the IR printing interfaces
      -- they are all attached to the IR objects themselves. Also, update all
      the users.
      
      This removes the 'Writer.h' header which contained only a single function
      declaration.
      
      llvm-svn: 198836
      d48cdbf0
  7. Jan 07, 2014
    • Rafael Espindola's avatar
      Move the llvm mangler to lib/IR. · 894843cb
      Rafael Espindola authored
      This makes it available to tools that don't link with target (like llvm-ar).
      
      llvm-svn: 198708
      894843cb
    • Chandler Carruth's avatar
      Move the LLVM IR asm writer header files into the IR directory, as they · 9aca918d
      Chandler Carruth authored
      are part of the core IR library in order to support dumping and other
      basic functionality.
      
      Rename the 'Assembly' include directory to 'AsmParser' to match the
      library name and the only functionality left their -- printing has been
      in the core IR library for quite some time.
      
      Update all of the #includes to match.
      
      All of this started because I wanted to have the layering in good shape
      before I started adding support for printing LLVM IR using the new pass
      infrastructure, and commandline support for the new pass infrastructure.
      
      llvm-svn: 198688
      9aca918d
    • Chandler Carruth's avatar
      Re-sort all of the includes with ./utils/sort_includes.py so that · 8a8cd2ba
      Chandler Carruth authored
      subsequent changes are easier to review. About to fix some layering
      issues, and wanted to separate out the necessary churn.
      
      Also comment and sink the include of "Windows.h" in three .inc files to
      match the usage in Memory.inc.
      
      llvm-svn: 198685
      8a8cd2ba
  8. Jan 03, 2014
    • Rafael Espindola's avatar
      Make the llvm mangler depend only on DataLayout. · 58873566
      Rafael Espindola authored
      Before this patch any program that wanted to know the final symbol name of a
      GlobalValue had to link with Target.
      
      This patch implements a compromise solution where the mangler uses DataLayout.
      This way, any tool that already links with Target (llc, clang) gets the exact
      behavior as before and new IR files can be mangled without linking with Target.
      
      With this patch the mangler is constructed with just a DataLayout and DataLayout
      is extended to include the information the Mangler needs.
      
      llvm-svn: 198438
      58873566
  9. Dec 20, 2013
  10. Dec 02, 2013
  11. Nov 28, 2013
  12. Oct 29, 2013
  13. Oct 08, 2013
    • Rafael Espindola's avatar
      Add a MCTargetStreamer interface. · a17151ad
      Rafael Espindola authored
      This patch fixes an old FIXME by creating a MCTargetStreamer interface
      and moving the target specific functions for ARM, Mips and PPC to it.
      
      The ARM streamer is still declared in a common place because it is
      used from lib/CodeGen/ARMException.cpp, but the Mips and PPC are
      completely hidden in the corresponding Target directories.
      
      I will send an email to llvmdev with instructions on how to use this.
      
      llvm-svn: 192181
      a17151ad
  14. Sep 17, 2013
    • Bill Schmidt's avatar
      [PowerPC] Fix problems with large code model (PR17169). · bb381d70
      Bill Schmidt authored
      Large code model on PPC64 requires creating and referencing TOC entries when
      using the addis/ld form of addressing.  This was not being done in all cases.
      The changes in this patch to PPCAsmPrinter::EmitInstruction() fix this.  Two
      test cases are also modified to reflect this requirement.
      
      Fast-isel was not creating correct code for loading floating-point constants
      using large code model.  This also requires the addis/ld form of addressing.
      Previously we were using the addis/lfd shortcut which is only applicable to
      medium code model.  One test case is modified to reflect this requirement.
      
      llvm-svn: 190882
      bb381d70
  15. Aug 30, 2013
    • Bill Schmidt's avatar
      [PowerPC] Add handling for conversions to fast-isel. · 8d86fe7d
      Bill Schmidt authored
      Yet another chunk of fast-isel code.  This one handles various
      conversions involving floating-point.  (It also includes some
      miscellaneous handling throughout the back end for LWA_32 and LWAX_32
      that should have been part of the load-store patch.)
      
      llvm-svn: 189677
      8d86fe7d
  16. Jul 26, 2013
    • Bill Schmidt's avatar
      [PowerPC] Support powerpc64le as a syntax-checking target. · 0a9170d9
      Bill Schmidt authored
      This patch provides basic support for powerpc64le as an LLVM target.
      However, use of this target will not actually generate little-endian
      code.  Instead, use of the target will cause the correct little-endian
      built-in defines to be generated, so that code that tests for
      __LITTLE_ENDIAN__, for example, will be correctly parsed for
      syntax-only testing.  Code generation will otherwise be the same as
      powerpc64 (big-endian), for now.
      
      The patch leaves open the possibility of creating a little-endian
      PowerPC64 back end, but there is no immediate intent to create such a
      thing.
      
      The LLVM portions of this patch simply add ppc64le coverage everywhere
      that ppc64 coverage currently exists.  There is nothing of any import
      worth testing until such time as little-endian code generation is
      implemented.  In the corresponding Clang patch, there is a new test
      case variant to ensure that correct built-in defines for little-endian
      code are generated.
      
      llvm-svn: 187179
      0a9170d9
  17. Jul 15, 2013
  18. Jul 09, 2013
    • Ulrich Weigand's avatar
      · 52cf8e44
      Ulrich Weigand authored
      [PowerPC] Revert r185476 and fix up TLS variant kinds
      
      In the commit message to r185476 I wrote:
      
      >The PowerPC-specific modifiers VK_PPC_TLSGD and VK_PPC_TLSLD
      >correspond exactly to the generic modifiers VK_TLSGD and VK_TLSLD.
      >This causes some confusion with the asm parser, since VK_PPC_TLSGD
      >is output as @tlsgd, which is then read back in as VK_TLSGD.
      >
      >To avoid this confusion, this patch removes the PowerPC-specific
      >modifiers and uses the generic modifiers throughout.  (The only
      >drawback is that the generic modifiers are printed in upper case
      >while the usual convention on PowerPC is to use lower-case modifiers.
      >But this is just a cosmetic issue.)
      
      This was unfortunately incorrect, there is is fact another,
      serious drawback to using the default VK_TLSLD/VK_TLSGD
      variant kinds: using these causes ELFObjectWriter::RelocNeedsGOT
      to return true, which in turn causes the ELFObjectWriter to emit
      an undefined reference to _GLOBAL_OFFSET_TABLE_.
      
      This is a problem on powerpc64, because it uses the TOC instead
      of the GOT, and the linker does not provide _GLOBAL_OFFSET_TABLE_,
      so the symbol remains undefined.  This means shared libraries
      using TLS built with the integrated assembler are currently
      broken.
      
      While the whole RelocNeedsGOT / _GLOBAL_OFFSET_TABLE_ situation
      probably ought to be properly fixed at some point, for now I'm
      simply reverting the r185476 commit.  Now this in turn exposes
      the breakage of handling @tlsgd/@tlsld in the asm parser that
      this check-in was originally intended to fix.
      
      To avoid this regression, I'm also adding a different fix for
      this problem: while common code now parses @tlsgd as VK_TLSGD,
      a special hack in the asm parser translates this code to the
      platform-specific VK_PPC_TLSGD that the back-end now expects.
      While this is not really pretty, it's self-contained and
      shouldn't hurt anything else for now.  One the underlying
      problem is fixed, this hack can be reverted again.
      
      llvm-svn: 185945
      52cf8e44
  19. Jul 08, 2013
    • Ulrich Weigand's avatar
      · 266db7fe
      Ulrich Weigand authored
      [PowerPC] Always use "assembler dialect" 1
      
      A setting in MCAsmInfo defines the "assembler dialect" to use.  This is used
      by common code to choose between alternatives in a multi-alternative GNU
      inline asm statement like the following:
      
        __asm__ ("{sfe|subfe} %0,%1,%2" : "=r" (out) : "r" (in1), "r" (in2));
      
      The meaning of these dialects is platform specific, and GCC defines those
      for PowerPC to use dialect 0 for old-style (POWER) mnemonics and 1 for
      new-style (PowerPC) mnemonics, like in the example above.
      
      To be compatible with inline asm used with GCC, LLVM ought to do the same.
      Specifically, this means we should always use assembler dialect 1 since
      old-style mnemonics really aren't supported on any current platform.
      
      However, the current LLVM back-end uses:
        AssemblerDialect = 1;           // New-Style mnemonics.
      in PPCMCAsmInfoDarwin, and
        AssemblerDialect = 0;           // Old-Style mnemonics.
      in PPCLinuxMCAsmInfo.
      
      The Linux setting really isn't correct, we should be using new-style
      mnemonics everywhere.  This is changed by this commit.
      
      Unfortunately, the setting of this variable is overloaded in the back-end
      to decide whether or not we are on a Darwin target.  This is done in
      PPCInstPrinter (the "SyntaxVariant" is initialized from the MCAsmInfo
      AssemblerDialect setting), and also in PPCMCExpr.  Setting AssemblerDialect
      to 1 for both Darwin and Linux no longer allows us to make this distinction.
      
      Instead, this patch uses the MCSubtargetInfo passed to createPPCMCInstPrinter
      to distinguish Darwin targets, and ignores the SyntaxVariant parameter.
      As to PPCMCExpr, this patch adds an explicit isDarwin argument that needs
      to be passed in by the caller when creating a target MCExpr.  (To do so
      this patch implicitly also reverts commit 184441.)
      
      llvm-svn: 185858
      266db7fe
  20. Jul 03, 2013
    • Ulrich Weigand's avatar
      · 49f487e6
      Ulrich Weigand authored
      [PowerPC] Use mtocrf when available
      
      Just as with mfocrf, it is also preferable to use mtocrf instead of
      mtcrf when only a single CR register is to be written.
      
      Current code however always emits mtcrf.  This probably does not matter
      when using an external assembler, since the GNU assembler will in fact
      automatically replace mtcrf with mtocrf when possible.  It does create
      inefficient code with the integrated assembler, however.
      
      To fix this, this patch adds MTOCRF/MTOCRF8 instruction patterns and
      uses those instead of MTCRF/MTCRF8 everything.  Just as done in the
      MFOCRF patch committed as 185556, these patterns will be converted
      back to MTCRF if MTOCRF is not available on the machine.
      
      As a side effect, this allows to modify the MTCRF pattern to accept
      the full range of mask operands for the benefit of the asm parser.
      
      llvm-svn: 185561
      49f487e6
    • Ulrich Weigand's avatar
      · d5ebc626
      Ulrich Weigand authored
      [PowerPC] Always use mfocrf if available
      
      When accessing just a single CR register, it is always preferable to
      use mfocrf instead of mfcr, if the former is available on the CPU.
      
      Current code makes that distinction in many, but not all places
      where a single CR register value is retrieved.  One missing
      location is PPCRegisterInfo::lowerCRSpilling.
      
      To fix this and make this simpler in the future, this patch changes
      the bulk of the back-end to always assume mfocrf is available and
      simply generate it when needed.
      
      On machines that actually do not support mfocrf, the instruction
      is replaced by mfcr at the very end, in EmitInstruction.
      
      This has the additional benefit that we no longer need the
      MFCRpseud hack, since before EmitInstruction we always have
      a MFOCRF instruction pattern, which already models data flow
      as required.
      
      The patch also adds the MFOCRF8 version of the instruction,
      which was missing so far.
      
      Except for the PPCRegisterInfo::lowerCRSpilling case, no change
      in generated code intended.
      
      llvm-svn: 185556
      d5ebc626
  21. Jul 02, 2013
    • Ulrich Weigand's avatar
      · 5143bab2
      Ulrich Weigand authored
      [PowerPC] Rework TLS call operand processing
      
      As part of the global-dynamic and local-dynamic TLS sequences, we need
      to use a special form of the call instruction:
      
       bl __tls_get_addr(sym@tlsld)
       bl __tls_get_addr(sym@tlsgd)
      
      which generates two fixups.  The current implementation of this causes
      problems with recognizing this form in the asm parser.  To fix this,
      this patch reworks operand processing for this special form by using
      a single operand to hold both __tls_get_addr and sym@tlsld and defining
      a print method to output the above form, and an encoding method to
      generate the two fixups.
      
      As a side simplification, the patch replaces the two instruction
      patterns BL8_NOP_TLSGD and BL8_NOP_TLSLD by a single BL8_NOP_TLS,
      since the patterns already operate in an identical fashion (whether
      we have a local-dynamic or global-dynamic symbol is already encoded
      in the symbol modifier).
      
      No change in code generation intended.
      
      llvm-svn: 185477
      5143bab2
    • Ulrich Weigand's avatar
      · 40509956
      Ulrich Weigand authored
      [PowerPC] Remove VK_PPC_TLSGD and VK_PPC_TLSLD
      
      The PowerPC-specific modifiers VK_PPC_TLSGD and VK_PPC_TLSLD
      correspond exactly to the generic modifiers VK_TLSGD and VK_TLSLD.
      This causes some confusion with the asm parser, since VK_PPC_TLSGD
      is output as @tlsgd, which is then read back in as VK_TLSGD.
      
      To avoid this confusion, this patch removes the PowerPC-specific
      modifiers and uses the generic modifiers throughout.  (The only
      drawback is that the generic modifiers are printed in upper case
      while the usual convention on PowerPC is to use lower-case modifiers.
      But this is just a cosmetic issue.)
      
      llvm-svn: 185476
      40509956
    • Rafael Espindola's avatar
      Remove address spaces from MC. · 64e1af8e
      Rafael Espindola authored
      This is dead code since PIC16 was removed in 2010. The result was an odd mix,
      where some parts would carefully pass it along and others would assert it was
      zero (most of the object streamer for example).
      
      llvm-svn: 185436
      64e1af8e
  22. Jul 01, 2013
    • Bill Schmidt's avatar
      Index: test/CodeGen/PowerPC/reloc-align.ll · 48fc20a0
      Bill Schmidt authored
      ===================================================================
      --- test/CodeGen/PowerPC/reloc-align.ll	(revision 0)
      +++ test/CodeGen/PowerPC/reloc-align.ll	(revision 0)
      @@ -0,0 +1,34 @@
      +; RUN: llc -mcpu=pwr7 -O1 < %s | FileCheck %s
      +
      +; This test verifies that the peephole optimization of address accesses
      +; does not produce a load or store with a relocation that can't be
      +; satisfied for a given instruction encoding.  Reduced from a test supplied
      +; by Hal Finkel.
      +
      +target datalayout = "E-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-f128:128:128-v128:128:128-n32:64"
      +target triple = "powerpc64-unknown-linux-gnu"
      +
      +%struct.S1 = type { [8 x i8] }
      +
      +@main.l_1554 = internal global { i8, i8, i8, i8, i8, i8, i8, i8 } { i8 -1, i8 -6, i8 57, i8 62, i8 -48, i8 0, i8 58, i8 80 }, align 1
      +
      +; Function Attrs: nounwind readonly
      +define signext i32 @main() #0 {
      +entry:
      +  %call = tail call fastcc signext i32 @func_90(%struct.S1* byval bitcast ({ i8, i8, i8, i8, i8, i8, i8, i8 }* @main.l_1554 to %struct.S1*))
      +; CHECK-NOT: ld {{[0-9]+}}, main.l_1554@toc@l
      +  ret i32 %call
      +}
      +
      +; Function Attrs: nounwind readonly
      +define internal fastcc signext i32 @func_90(%struct.S1* byval nocapture %p_91) #0 {
      +entry:
      +  %0 = bitcast %struct.S1* %p_91 to i64*
      +  %bf.load = load i64* %0, align 1
      +  %bf.shl = shl i64 %bf.load, 26
      +  %bf.ashr = ashr i64 %bf.shl, 54
      +  %bf.cast = trunc i64 %bf.ashr to i32
      +  ret i32 %bf.cast
      +}
      +
      +attributes #0 = { nounwind readonly "less-precise-fpmad"="false" "no-frame-pointer-elim"="true" "no-frame-pointer-elim-non-leaf"="true" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "unsafe-fp-math"="false" "use-soft-float"="false" }
      Index: lib/Target/PowerPC/PPCAsmPrinter.cpp
      ===================================================================
      --- lib/Target/PowerPC/PPCAsmPrinter.cpp	(revision 185327)
      +++ lib/Target/PowerPC/PPCAsmPrinter.cpp	(working copy)
      @@ -679,7 +679,26 @@ void PPCAsmPrinter::EmitInstruction(const MachineI
             OutStreamer.EmitRawText(StringRef("\tmsync"));
             return;
           }
      +    break;
      +  case PPC::LD:
      +  case PPC::STD:
      +  case PPC::LWA: {
      +    // Verify alignment is legal, so we don't create relocations
      +    // that can't be supported.
      +    // FIXME:  This test is currently disabled for Darwin.  The test
      +    // suite shows a handful of test cases that fail this check for
      +    // Darwin.  Those need to be investigated before this sanity test
      +    // can be enabled for those subtargets.
      +    if (!Subtarget.isDarwin()) {
      +      unsigned OpNum = (MI->getOpcode() == PPC::STD) ? 2 : 1;
      +      const MachineOperand &MO = MI->getOperand(OpNum);
      +      if (MO.isGlobal() && MO.getGlobal()->getAlignment() < 4)
      +        llvm_unreachable("Global must be word-aligned for LD, STD, LWA!");
      +    }
      +    // Now process the instruction normally.
      +    break;
         }
      +  }
       
         LowerPPCMachineInstrToMCInst(MI, TmpInst, *this);
         OutStreamer.EmitInstruction(TmpInst);
      Index: lib/Target/PowerPC/PPCISelDAGToDAG.cpp
      ===================================================================
      --- lib/Target/PowerPC/PPCISelDAGToDAG.cpp	(revision 185327)
      +++ lib/Target/PowerPC/PPCISelDAGToDAG.cpp	(working copy)
      @@ -1530,6 +1530,14 @@ void PPCDAGToDAGISel::PostprocessISelDAG() {
             if (GlobalAddressSDNode *GA = dyn_cast<GlobalAddressSDNode>(ImmOpnd)) {
               SDLoc dl(GA);
               const GlobalValue *GV = GA->getGlobal();
      +        // We can't perform this optimization for data whose alignment
      +        // is insufficient for the instruction encoding.
      +        if (GV->getAlignment() < 4 &&
      +            (StorageOpcode == PPC::LD || StorageOpcode == PPC::STD ||
      +             StorageOpcode == PPC::LWA)) {
      +          DEBUG(dbgs() << "Rejected this candidate for alignment.\n\n");
      +          continue;
      +        }
               ImmOpnd = CurDAG->getTargetGlobalAddress(GV, dl, MVT::i64, 0, Flags);
             } else if (ConstantPoolSDNode *CP =
                        dyn_cast<ConstantPoolSDNode>(ImmOpnd)) {
      
      llvm-svn: 185380
      48fc20a0
  23. Jun 21, 2013
    • Ulrich Weigand's avatar
      · d51c09f5
      Ulrich Weigand authored
      [PowerPC] Rename some more VK_PPC_ enums
      
      This renames more VK_PPC_ enums, to make them more closely reflect
      the @modifier string they represent.  This also prepares for adding
      a bunch of new VK_PPC_ enums in upcoming patches.
      
      For consistency, some MO_ flags related to VK_PPC_ enums are
      likewise renamed.
      
      No change in behaviour.
      
      llvm-svn: 184547
      d51c09f5
    • Ulrich Weigand's avatar
      · 68e2e1b3
      Ulrich Weigand authored
      [PowerPC] Clean up VK_PPC_TOC... names
      
      This is another minor cleanup; to bring enum names in line
      with the corresponding @modifier names, this renames:
      
        VK_PPC_TOC -> VK_PPC_TOCBASE
        VK_PPC_TOC_ENTRY -> VK_PPC_TOC16
      
      No code change intended.
      
      llvm-svn: 184491
      68e2e1b3
  24. Jun 20, 2013
    • Ulrich Weigand's avatar
      · 4727888f
      Ulrich Weigand authored
      [PowerPC] Remove unused parameter
      
      The isDarwin parameter to the llvm::LowerPPCMachineInstrToMCInst
      routine is now no longer needed; remove it.
      
      llvm-svn: 184441
      4727888f
  25. Jun 16, 2013
  26. May 24, 2013
    • Ulrich Weigand's avatar
      · 41789de1
      Ulrich Weigand authored
      [PowerPC] Clean up generation of ha16() / lo16() markers
      
      When targeting the Darwin assembler, we need to generate markers ha16() and
      lo16() to designate the high and low parts of a (symbolic) immediate.  This
      is necessary not just for plain symbols, but also for certain symbolic
      expression, typically along the lines of ha16(A - B).  The latter doesn't
      work when simply using VariantKind flags on the symbol reference.
      This is why the current back-end uses hacks (explicitly called out as such
      via multiple FIXMEs) in the symbolLo/symbolHi print methods.
      
      This patch uses target-defined MCExpr codes to represent the Darwin
      ha16/lo16 constructs, following along the lines of the equivalent solution
      used by the ARM back end to handle their :upper16: / :lower16: markers.
      This allows us to get rid of special handling both in the symbolLo/symbolHi
      print method and in the common code MCExpr::print routine.  Instead, the
      ha16 / lo16 markers are printed simply in a custom print routine for the
      target MCExpr types.  (As a result, the symbolLo/symbolHi print methods
      can now replaced by a single printS16ImmOperand routine that also handles
      symbolic operands.)
      
      The patch also provides a EvaluateAsRelocatableImpl routine to handle
      ha16/lo16 constructs.  This is not actually used at the moment by any
      in-tree code, but is provided as it makes merging into David Fang's
      out-of-tree Mach-O object writer simpler.
      
      Since there is no longer any need to treat VK_PPC_GAS_HA16 and
      VK_PPC_DARWIN_HA16 differently, they are merged into a single
      VK_PPC_ADDR16_HA (and likewise for the _LO16 types).
      
      llvm-svn: 182616
      41789de1
  27. Apr 17, 2013
  28. Apr 05, 2013
    • Hal Finkel's avatar
      Rename the current PPC BCL definition to BCLalways · e5680b3c
      Hal Finkel authored
      BCL is normally a conditional branch-and-link instruction, but has
      an unconditional form (which is used in the SjLj code, for example).
      To make clear that this BCL instruction definition is specifically
      the special unconditional form (which does not meaningfully take
      a condition-register input), rename it to BCLalways.
      
      No functionality change intended.
      
      llvm-svn: 178803
      e5680b3c
  29. Mar 26, 2013
    • Ulrich Weigand's avatar
      PowerPC: Remove LDrs pattern. · 4a083886
      Ulrich Weigand authored
      The LDrs pattern is a duplicate of LD, except that it accepts memory
      addresses where the displacement is a symbolLo64.  An operand type
      "memrs" is defined for just that purpose.
      
      However, this wouldn't be necessary if the default "memrix" operand
      type were to simply accept 64-bit symbolic addresses directly.
      The only problem with that is that it uses "symbolLo", which is
      hardcoded to 32-bit.
      
      To fix this, this commit changes "memri" and "memrix" to use new
      operand types for the memory displacement, which allow iPTR
      instead of i32.  This will also make address parsing easier to
      implment in the asm parser.
      
      No change in generated code.
      
      llvm-svn: 178005
      4a083886
    • Ulrich Weigand's avatar
      PowerPC: Remove ADDIL patterns. · 35f9fdfd
      Ulrich Weigand authored
      The ADDI/ADDI8 patterns are currently duplicated into ADDIL/ADDI8L,
      which describe the same instruction, except that they accept a
      symbolLo[64] operand instead of a s16imm[64] operand.
      
      This duplication confuses the asm parser, and it actually not really
      needed, since symbolLo[64] already accepts immediate operands anyway.
      So this commit removes the duplicate patterns.
      
      No change in generated code.
      
      llvm-svn: 178004
      35f9fdfd
  30. Mar 23, 2013
    • Hal Finkel's avatar
      MCize the bcl instruction in PPCAsmPrinter · f07a8e04
      Hal Finkel authored
      I recently added a BCL instruction definition as part of implementing SjLj
      support. This can also be used to MCize bcl emission in the asm printer.
      
      No functionality change intended.
      
      llvm-svn: 177830
      f07a8e04
  31. Mar 22, 2013
    • Ulrich Weigand's avatar
      Remove ABI-duplicated call instruction patterns. · f62e83f4
      Ulrich Weigand authored
      We currently have a duplicated set of call instruction patterns depending
      on the ABI to be followed (Darwin vs. Linux).  This is a bit odd; while the
      different ABIs will result in different instruction sequences, the actual
      instructions themselves ought to be independent of the ABI.  And in fact it
      turns out that the only nontrivial difference between the two sets of
      patterns is that in the PPC64 Linux ABI, the instruction used for indirect
      calls is marked to take X11 as extra input register (which is indeed used
      only with that ABI to hold an incoming environment pointer for nested
      functions).  However, this does not need to be hard-coded at the .td
      pattern level; instead, the C++ code expanding calls can simply add that
      use, just like it adds uses for argument registers anyway.
      
      No change in generated code expected.
      
      llvm-svn: 177735
      f62e83f4
  32. Feb 21, 2013
    • Bill Schmidt's avatar
      Large code model support for PowerPC. · 27917785
      Bill Schmidt authored
      Large code model is identical to medium code model except that the
      addis/addi sequence for "local" accesses is never used.  All accesses
      use the addis/ld sequence.
      
      The coding changes are straightforward; most of the patch is taken up
      with creating variants of the medium model tests for large model.
      
      llvm-svn: 175767
      27917785
Loading