[cfe-commits] r131237 - in /cfe/trunk: include/clang/Basic/BuiltinsX86.def lib/CodeGen/CGBuiltin.cpp lib/Headers/emmintrin.h lib/Headers/xmmintrin.h test/CodeGen/builtins-x86.c

Chris Lattner clattner at apple.com
Thu May 12 21:09:15 PDT 2011


On May 12, 2011, at 12:02 PM, Bill Wendling wrote:

> Author: void
> Date: Thu May 12 14:02:15 2011
> New Revision: 131237
> 
> URL: http://llvm.org/viewvc/llvm-project?rev=131237&view=rev
> Log:
> LLVM doesn't always optimize away the four loads from this:
> 
>     (__m128){ p[0], p[1], p[2], p[3] }
> 
> which produces really bad code. This could be done in instcombine, but it's
> probably better to do it in the front-end instead.
> <rdar://problem/9424836>

Hi Bill,

Now that r131268 is in, can't you remove the builtins?

-Chris

> 
> Modified:
>    cfe/trunk/include/clang/Basic/BuiltinsX86.def
>    cfe/trunk/lib/CodeGen/CGBuiltin.cpp
>    cfe/trunk/lib/Headers/emmintrin.h
>    cfe/trunk/lib/Headers/xmmintrin.h
>    cfe/trunk/test/CodeGen/builtins-x86.c
> 
> Modified: cfe/trunk/include/clang/Basic/BuiltinsX86.def
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/BuiltinsX86.def?rev=131237&r1=131236&r2=131237&view=diff
> ==============================================================================
> --- cfe/trunk/include/clang/Basic/BuiltinsX86.def (original)
> +++ cfe/trunk/include/clang/Basic/BuiltinsX86.def Thu May 12 14:02:15 2011
> @@ -240,6 +240,7 @@
> BUILTIN(__builtin_ia32_cvtss2si, "iV4f", "")
> BUILTIN(__builtin_ia32_cvtss2si64, "LLiV4f", "")
> BUILTIN(__builtin_ia32_cvttps2pi, "V2iV4f", "")
> +BUILTIN(__builtin_ia32_loadups, "V4ffC*", "")
> BUILTIN(__builtin_ia32_storeups, "vf*V4f", "")
> BUILTIN(__builtin_ia32_storehps, "vV2i*V4f", "")
> BUILTIN(__builtin_ia32_storelps, "vV2i*V4f", "")
> @@ -253,6 +254,7 @@
> BUILTIN(__builtin_ia32_sqrtps, "V4fV4f", "")
> BUILTIN(__builtin_ia32_sqrtss, "V4fV4f", "")
> BUILTIN(__builtin_ia32_maskmovdqu, "vV16cV16cc*", "")
> +BUILTIN(__builtin_ia32_loadupd, "V2ddC*", "")
> BUILTIN(__builtin_ia32_storeupd, "vd*V2d", "")
> BUILTIN(__builtin_ia32_movmskpd, "iV2d", "")
> BUILTIN(__builtin_ia32_pmovmskb128, "iV16c", "")
> 
> Modified: cfe/trunk/lib/CodeGen/CGBuiltin.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGBuiltin.cpp?rev=131237&r1=131236&r2=131237&view=diff
> ==============================================================================
> --- cfe/trunk/lib/CodeGen/CGBuiltin.cpp (original)
> +++ cfe/trunk/lib/CodeGen/CGBuiltin.cpp Thu May 12 14:02:15 2011
> @@ -2143,6 +2143,8 @@
>     // If palignr is shifting the pair of vectors more than 32 bytes, emit zero.
>     return llvm::Constant::getNullValue(ConvertType(E->getType()));
>   }
> +  case X86::BI__builtin_ia32_loadups:
> +  case X86::BI__builtin_ia32_loadupd:
>   case X86::BI__builtin_ia32_loaddqu: {
>     const llvm::Type *VecTy = ConvertType(E->getType());
>     const llvm::Type *IntTy = llvm::IntegerType::get(getLLVMContext(), 128);
> 
> Modified: cfe/trunk/lib/Headers/emmintrin.h
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Headers/emmintrin.h?rev=131237&r1=131236&r2=131237&view=diff
> ==============================================================================
> --- cfe/trunk/lib/Headers/emmintrin.h (original)
> +++ cfe/trunk/lib/Headers/emmintrin.h Thu May 12 14:02:15 2011
> @@ -466,7 +466,7 @@
> static __inline__ __m128d __attribute__((__always_inline__, __nodebug__))
> _mm_loadu_pd(double const *dp)
> {
> -  return (__m128d){ dp[0], dp[1] };
> +  return __builtin_ia32_loadupd(dp);
> }
> 
> static __inline__ __m128d __attribute__((__always_inline__, __nodebug__))
> 
> Modified: cfe/trunk/lib/Headers/xmmintrin.h
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Headers/xmmintrin.h?rev=131237&r1=131236&r2=131237&view=diff
> ==============================================================================
> --- cfe/trunk/lib/Headers/xmmintrin.h (original)
> +++ cfe/trunk/lib/Headers/xmmintrin.h Thu May 12 14:02:15 2011
> @@ -539,7 +539,7 @@
> static __inline__ __m128 __attribute__((__always_inline__, __nodebug__))
> _mm_loadu_ps(const float *p)
> {
> -  return (__m128){ p[0], p[1], p[2], p[3] };
> +  return __builtin_ia32_loadups(p);
> }
> 
> static __inline__ __m128 __attribute__((__always_inline__, __nodebug__))
> 
> Modified: cfe/trunk/test/CodeGen/builtins-x86.c
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGen/builtins-x86.c?rev=131237&r1=131236&r2=131237&view=diff
> ==============================================================================
> --- cfe/trunk/test/CodeGen/builtins-x86.c (original)
> +++ cfe/trunk/test/CodeGen/builtins-x86.c Thu May 12 14:02:15 2011
> @@ -273,6 +273,7 @@
> #endif
>   tmp_V2i = __builtin_ia32_cvttps2pi(tmp_V4f);
>   (void) __builtin_ia32_maskmovq(tmp_V8c, tmp_V8c, tmp_cp);
> +  tmp_V4f = __builtin_ia32_loadups(tmp_fCp);
>   (void) __builtin_ia32_storeups(tmp_fp, tmp_V4f);
>   (void) __builtin_ia32_storehps(tmp_V2ip, tmp_V4f);
>   (void) __builtin_ia32_storelps(tmp_V2ip, tmp_V4f);
> @@ -290,6 +291,7 @@
>   tmp_V4f = __builtin_ia32_sqrtps(tmp_V4f);
>   tmp_V4f = __builtin_ia32_sqrtss(tmp_V4f);
>   (void) __builtin_ia32_maskmovdqu(tmp_V16c, tmp_V16c, tmp_cp);
> +  tmp_V2d = __builtin_ia32_loadupd(tmp_dCp);
>   (void) __builtin_ia32_storeupd(tmp_dp, tmp_V2d);
>   tmp_i = __builtin_ia32_movmskpd(tmp_V2d);
>   tmp_i = __builtin_ia32_pmovmskb128(tmp_V16c);
> 
> 
> _______________________________________________
> cfe-commits mailing list
> cfe-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits




More information about the cfe-commits mailing list