]> granicus.if.org Git - clang/commitdiff
Fix shuffle vector calculation for mm_permute_ps. Fixes PR 12401.
authorCraig Topper <craig.topper@gmail.com>
Fri, 30 Mar 2012 05:09:18 +0000 (05:09 +0000)
committerCraig Topper <craig.topper@gmail.com>
Fri, 30 Mar 2012 05:09:18 +0000 (05:09 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@153724 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Headers/avxintrin.h
test/CodeGen/avx-shuffle-builtins.c

index 6a2bee5d66fe8cd12eb1d30d0cf6b4455345ab3b..3fb1b1541af0d12599e203d8bdb02d540e4b5d48 100644 (file)
@@ -274,7 +274,7 @@ _mm256_permutevar_ps(__m256 a, __m256i c)
   __m128 __A = (A); \
   (__m128)__builtin_shufflevector((__v4sf)__A, (__v4sf) _mm_setzero_ps(), \
                                    (C) & 0x3, ((C) & 0xc) >> 2, \
-                                   ((C) & 0x30) >> 4, ((C) & 0xc0) >> 8); })
+                                   ((C) & 0x30) >> 4, ((C) & 0xc0) >> 6); })
 
 #define _mm256_permute_ps(A, C) __extension__ ({ \
   __m256 __A = (A); \
index 18300bf3b60c27ced0870442aed5ce25e09b2645..538ae50c938de2b9678695180f123c7b9f31c49e 100644 (file)
@@ -33,6 +33,13 @@ __m128 test_mm_permute_ps(__m128 a) {
   return _mm_permute_ps(a, 0x1b);
 }
 
+// Test case for PR12401
+__m128 test_mm_permute_ps2(__m128 a) {
+  // Check if the mask is correct
+  // CHECK: shufflevector{{.*}}<i32 2, i32 1, i32 2, i32 3>
+  return _mm_permute_ps(a, 0xe6);
+}
+
 __m256 test_mm256_permute_ps(__m256 a) {
   // Check if the mask is correct
   // CHECK: shufflevector{{.*}}<i32 3, i32 2, i32 1, i32 0, i32 7, i32 6, i32 5, i32 4>