Skip to content
  1. Sep 01, 2012
  2. Aug 31, 2012
  3. Aug 30, 2012
    • 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
      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
    • Tim Northover's avatar
      Add support for moving pure S-register to NEON pipeline if desired · ca9f384f
      Tim Northover authored
      llvm-svn: 162898
      ca9f384f
    • Craig Topper's avatar
      Only perform DAG combine on FMAs of legal types. · e39ad7b5
      Craig Topper authored
      llvm-svn: 162892
      e39ad7b5
    • Michael Liao's avatar
      Fix PR13727 · 3c898064
      Michael Liao authored
      - The root cause is that target constant materialization in X86 fast-isel
        creates a PC-rel addressing which may overflow 32-bit range in non-Small code
        model if .rodata section is allocated too far away from code segment in
        MCJIT, which uses Large code model so far.
      - Follow the similar logic to fix non-Small code model in fast-isel by skipping
        non-Small code model.
      
      llvm-svn: 162881
      3c898064
  4. Aug 29, 2012
  5. Aug 28, 2012
    • Jack Carter's avatar
      The instruction DEXT may be transformed into DEXTU or DEXTM depending · cd6b0e13
      Jack Carter authored
      on the size of the extraction and its position in the 64 bit word.
      
      This patch allows support of the dext transformations with mips64 direct
      object output.
      
      0 <= msb < 32 0 <= lsb < 32 0 <= pos < 32 1 <= size <= 32
      DINS
      The field is entirely contained in the right-most word of the doubleword
      
      32 <= msb < 64 0 <= lsb < 32 0 <= pos < 32 2 <= size <= 64
      DINSM
      The field straddles the words of the doubleword
      
      32 <= msb < 64 32 <= lsb < 64 32 <= pos < 64 1 <= size <= 32
      DINSU
      The field is entirely contained in the left-most word of the doubleword
      
      llvm-svn: 162782
      cd6b0e13
    • Michael Liao's avatar
      Explicitly update the number of nodes to be traversed · 710e1a59
      Michael Liao authored
      llvm-svn: 162780
      710e1a59
    • Jack Carter's avatar
      Some instructions are passed to the assembler to be · c20a21b8
      Jack Carter authored
      transformed to the final instruction variant. An
      example would be dsrll which is transformed into 
      dsll32 if the shift value is greater than 32.
      
      For direct object output we need to do this transformation
      in the codegen. If the instruction was inside branch
      delay slot, it was being missed. This patch corrects this
      oversight.
      
      llvm-svn: 162779
      c20a21b8
    • Roman Divacky's avatar
      Emit word of zeroes after the last instruction as a start of the mandatory · 8c4b6a30
      Roman Divacky authored
      traceback table on PowerPC64. This helps gdb handle exceptions. The other
      mandatory fields are ignored by gdb and harder to implement so just add
      there a FIXME.
      
      Patch by Bill Schmidt. PR13641.
      
      llvm-svn: 162778
      8c4b6a30
Loading