Skip to content
  1. Sep 01, 2012
  2. Aug 31, 2012
  3. Aug 30, 2012
    • Nadav Rotem's avatar
      · ea973bda
      Nadav Rotem authored
      Currently targets that do not support selects with scalar conditions and vector operands - scalarize the code. ARM is such a target
      because it does not support CMOV of vectors. To implement this efficientlyi, we broadcast the condition bit and use a sequence of NAND-OR
      to select between the two operands. This is the same sequence we use for targets that don't have vector BLENDs (like SSE2).
      
      rdar://12201387
      
      llvm-svn: 162926
      ea973bda
    • Michael Liao's avatar
      Introduce 'UseSSEx' to force SSE legacy encoding · bbd10792
      Michael Liao authored
      - Add 'UseSSEx' to force SSE legacy insn not being selected when AVX is
        enabled.
      
        As the penalty of inter-mixing SSE and AVX instructions, we need
        prevent SSE legacy insn from being generated except explicitly
        specified through some intrinsics. For patterns supported by both
        SSE and AVX, so far, we force AVX insn will be tried first relying on
        AddedComplexity or position in td file. It's error-prone and
        introduces bugs accidentally.
      
        'UseSSEx' is disabled when AVX is turned on. For SSE insns inherited
        by AVX, we need this predicate to force VEX encoding or SSE legacy
        encoding only.
      
        For insns not inherited by AVX, we still use the previous predicates,
        i.e. 'HasSSEx'. So far, these insns fall into the following
        categories:
        * SSE insns with MMX operands
        * SSE insns with GPR/MEM operands only (xFENCE, PREFETCH, CLFLUSH,
          CRC, and etc.)
        * SSE4A insns.
        * MMX insns.
        * x87 insns added by SSE.
      
      2 test cases are modified:
      
       - test/CodeGen/X86/fast-isel-x86-64.ll
         AVX code generation is different from SSE one. 'vcvtsi2sdq' cannot be
         selected by fast-isel due to complicated pattern and fast-isel
         fallback to materialize it from constant pool.
      
       - test/CodeGen/X86/widen_load-1.ll
         AVX code generation is different from SSE one after fixing SSE/AVX
         inter-mixing. Exec-domain fixing prefers 'vmovapd' instead of
         'vmovaps'.
      
      llvm-svn: 162919
      bbd10792
    • NAKAMURA Takumi's avatar
      Apply "/Og-" also to MSC15(aka VS9) on VMCore/Function.cpp. · fa814380
      NAKAMURA Takumi authored
      llvm-svn: 162917
      fa814380
    • NAKAMURA Takumi's avatar
      PPCISelLowering.cpp: Fix r162725. · ac49029f
      NAKAMURA Takumi authored
      [Tobias von Koch] What's happening here is that the CR6SET/CR6UNSET is breaking the chain of register copies glued to the function call (BL_SVR4 node). The scheduler then moves other instructions in between those and the function call, which isn't good!
      
      Right. That's the case where there is no chain of register copies before the call, so InFlag == 0... Attached is a new revision of the patch which should fix this for good.
      
      llvm-svn: 162916
      ac49029f
    • NAKAMURA Takumi's avatar
      PPCISelLowering.cpp: Whitespace. · 8ad54e04
      NAKAMURA Takumi authored
      llvm-svn: 162915
      8ad54e04
    • Michael Ilseman's avatar
      test · 30c3e14e
      Michael Ilseman authored
      llvm-svn: 162914
      30c3e14e
    • Benjamin Kramer's avatar
      LoopRotate: Also rotate loops with multiple exits. · afdfdb5c
      Benjamin Kramer authored
      The old PHI updating code in loop-rotate was replaced with SSAUpdater a while
      ago, it has no problems with comples PHIs. What had to be fixed is detecting
      whether a loop was already rotated and updating dominators when multiple exits
      were present.
      
      This change increases overall code size a bit, mostly due to additional loop
      unrolling opportunities. Passes test-suite and selfhost with -verify-dom-info.
      Fixes PR7447.
      
      Thanks to Andy for the input on the domtree updating code.
      
      llvm-svn: 162912
      afdfdb5c
    • Benjamin Kramer's avatar
      InstCombine: Fix comment to reflect the code. · d4a64716
      Benjamin Kramer authored
      llvm-svn: 162911
      d4a64716
    • Jakob Stoklund Olesen's avatar
      Don't use MCInstrDesc flags for implicit operands. · 0eecbbeb
      Jakob Stoklund Olesen authored
      When a MachineInstr is constructed, its implicit operands are added
      first, then the explicit operands are inserted before the implicits.
      
      MCInstrDesc has oprand flags like early clobber and operand ties that
      apply to the explicit operands.
      
      Don't look at those flags when the implicit operands are first added in
      the explicit operands's positions.
      
      llvm-svn: 162910
      0eecbbeb
    • Alexey Samsonov's avatar
      Whitespace · f54e3aae
      Alexey Samsonov authored
      llvm-svn: 162907
      f54e3aae
    • Nadav Rotem's avatar
      It is illegal to transform (sdiv (ashr X c1) c2) -> (sdiv x (2^c1 * c2)), · d5f5777b
      Nadav Rotem authored
      because C always rounds towards zero.
      
      Thanks Dirk and Ben.
      
      llvm-svn: 162899
      d5f5777b
    • Tim Northover's avatar
      Add support for moving pure S-register to NEON pipeline if desired · ca9f384f
      Tim Northover authored
      llvm-svn: 162898
      ca9f384f
    • Alexey Samsonov's avatar
      Refactor fetching file/line info from DWARFContext to simplify the · 45be793e
      Alexey Samsonov authored
      code and allow better code reuse. Make the code a bit more conforming
      to LLVM code style.
      No functionality change.
      
      llvm-svn: 162895
      45be793e
Loading