Skip to content
  • 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
Loading