[PATCH] D33406: PR28129 expand vector oparation to an IR constant.

Dinar Temirbulatov via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Wed May 24 07:57:44 PDT 2017


dtemirbulatov updated this revision to Diff 100089.
dtemirbulatov added a comment.

add _mm256_cmp_pd double version
add comments in lib/CodeGen/CGBuiltin.cpp
replaced 0xf to _CMP_TRUE_UQ in avx-builtins.c


https://reviews.llvm.org/D33406

Files:
  lib/CodeGen/CGBuiltin.cpp
  test/CodeGen/avx-builtins.c


Index: test/CodeGen/avx-builtins.c
===================================================================
--- test/CodeGen/avx-builtins.c
+++ test/CodeGen/avx-builtins.c
@@ -1427,3 +1427,15 @@
  // CHECK: extractelement <8 x float> %{{.*}}, i32 0
  return _mm256_cvtss_f32(__a);
 }
+
+__m256 test_mm256_cmp_ps_true(__m256 a, __m256 b) {
+ // CHECK-LABEL: @test_mm256_cmp_ps_true
+ // CHECK: store <8 x float> <float 0xFFFFFFFFE0000000,
+ return _mm256_cmp_ps(a, b, _CMP_TRUE_UQ);
+}
+
+__m256 test_mm256_cmp_pd_true(__m256 a, __m256 b) {
+ // CHECK-LABEL: @test_mm256_cmp_pd_true
+ // CHECK: store <4 x double> <double 0xFFFFFFFFFFFFFFFF,
+  return _mm256_cmp_pd(a, b, _CMP_TRUE_UQ);
+}
Index: lib/CodeGen/CGBuiltin.cpp
===================================================================
--- lib/CodeGen/CGBuiltin.cpp
+++ lib/CodeGen/CGBuiltin.cpp
@@ -7919,12 +7919,24 @@
       ID = Intrinsic::x86_sse_cmp_ps;
       break;
     case X86::BI__builtin_ia32_cmpps256:
+      // _CMP_TRUE_UQ would produce -1,-1... vector on any input
+      if (CC == 0xf) {
+         Value *Vec = Builder.CreateVectorSplat(Ops[0]->getType()->getVectorNumElements(),
+                   llvm::Constant::getAllOnesValue(Builder.getInt32Ty()));
+         return Builder.CreateBitCast(Vec, Ops[0]->getType());
+      }
       ID = Intrinsic::x86_avx_cmp_ps_256;
       break;
     case X86::BI__builtin_ia32_cmppd:
       ID = Intrinsic::x86_sse2_cmp_pd;
       break;
     case X86::BI__builtin_ia32_cmppd256:
+      // _CMP_TRUE_UQ would produce -1,-1... vector on any input
+      if (CC == 0xf) {
+         Value *Vec = Builder.CreateVectorSplat(Ops[0]->getType()->getVectorNumElements(),
+                   llvm::Constant::getAllOnesValue(Builder.getInt64Ty()));
+         return Builder.CreateBitCast(Vec, Ops[0]->getType());
+      }
       ID = Intrinsic::x86_avx_cmp_pd_256;
       break;
     }


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D33406.100089.patch
Type: text/x-patch
Size: 1882 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20170524/d28733c0/attachment.bin>


More information about the cfe-commits mailing list