diff options
Diffstat (limited to 'clang/test/CodeGen')
322 files changed, 8161 insertions, 10688 deletions
diff --git a/clang/test/CodeGen/2007-01-20-VectorICE.c b/clang/test/CodeGen/2007-01-20-VectorICE.c index 286b8a1..61013ac 100644 --- a/clang/test/CodeGen/2007-01-20-VectorICE.c +++ b/clang/test/CodeGen/2007-01-20-VectorICE.c @@ -1,11 +1,11 @@ -// RUN: %clang_cc1 %s -emit-llvm -o - +// RUN: %clang_cc1 %s -emit-llvm -flax-vector-conversions=none -o - typedef float __m128 __attribute__((__vector_size__(16))); typedef long long __v2di __attribute__((__vector_size__(16))); typedef int __v4si __attribute__((__vector_size__(16))); -__v2di bar(void); +__v2di bar(void); void foo(int X, __v4si *P) { - *P = X == 2 ? bar() : bar(); + *P = X == 2 ? (__v4si)bar() : (__v4si)bar(); } diff --git a/clang/test/CodeGen/2007-05-11-str-const.c b/clang/test/CodeGen/2007-05-11-str-const.c deleted file mode 100644 index 5c3039c..0000000 --- a/clang/test/CodeGen/2007-05-11-str-const.c +++ /dev/null @@ -1,5 +0,0 @@ -// RUN: %clang_cc1 -emit-llvm -debug-info-kind=limited %s -o /dev/null - -static unsigned char out[]={0,1}; -static const unsigned char str1[]="1"; - diff --git a/clang/test/CodeGen/2007-06-18-SextAttrAggregate.c b/clang/test/CodeGen/2007-06-18-SextAttrAggregate.c index daed3baf..ccfdc1a 100644 --- a/clang/test/CodeGen/2007-06-18-SextAttrAggregate.c +++ b/clang/test/CodeGen/2007-06-18-SextAttrAggregate.c @@ -1,5 +1,5 @@ // RUN: %clang_cc1 -no-enable-noundef-analysis %s -o - -emit-llvm | FileCheck %s -// XFAIL: target={{(aarch64|arm64).*}}, target=x86_64-pc-windows-msvc, target=x86_64-{{(pc|w64)}}-windows-gnu +// XFAIL: target={{(aarch64|arm64).*}}, target=x86_64-pc-windows-msvc, target=x86_64-{{(pc|w64)}}-windows-gnu, target=x86_64-pc-windows-cygnus // PR1513 diff --git a/clang/test/CodeGen/2009-03-13-dbg.c b/clang/test/CodeGen/2009-03-13-dbg.c deleted file mode 100644 index 3effacb..0000000 --- a/clang/test/CodeGen/2009-03-13-dbg.c +++ /dev/null @@ -1,2 +0,0 @@ -// RUN: %clang_cc1 %s -emit-llvm -debug-info-kind=limited -o /dev/null -void foo(void) {} diff --git a/clang/test/CodeGen/2009-04-23-dbg.c b/clang/test/CodeGen/2009-04-23-dbg.c deleted file mode 100644 index 356400c..0000000 --- a/clang/test/CodeGen/2009-04-23-dbg.c +++ /dev/null @@ -1,20 +0,0 @@ -// RUN: %clang_cc1 -S -debug-info-kind=limited -o %t %s -# 1 "a.c" -# 1 "a.c" 1 -# 1 "<built-in>" 1 -# 103 "<built-in>" -# 103 "<command line>" 1 - -# 1 "/private/tmp/a.h" 1 -int bar; -# 105 "<command line>" 2 -# 105 "<built-in>" 2 -# 1 "a.c" 2 -# 1 "/private/tmp/a.h" 1 -int bar; -# 2 "a.c" 2 - -int main(void) { - bar = 0; - return 0; -} diff --git a/clang/test/CodeGen/2009-07-31-DbgDeclare.c b/clang/test/CodeGen/2009-07-31-DbgDeclare.c deleted file mode 100644 index dabb389..0000000 --- a/clang/test/CodeGen/2009-07-31-DbgDeclare.c +++ /dev/null @@ -1,5 +0,0 @@ -// RUN: %clang_cc1 -S -debug-info-kind=limited -o %t.s %s -void foo(void) { - int i = 0; - i = 42; -} diff --git a/clang/test/CodeGen/2010-01-14-FnType-DebugInfo.c b/clang/test/CodeGen/2010-01-14-FnType-DebugInfo.c deleted file mode 100644 index 5cb0015..0000000 --- a/clang/test/CodeGen/2010-01-14-FnType-DebugInfo.c +++ /dev/null @@ -1,4 +0,0 @@ -// RUN: %clang_cc1 %s -emit-llvm -debug-info-kind=limited -o /dev/null -typedef void (*sigcatch_t)( struct sigcontext *); -sigcatch_t sigcatch[50] = {(sigcatch_t) 0}; - diff --git a/clang/test/CodeGen/2010-01-18-Inlined-Debug.c b/clang/test/CodeGen/2010-01-18-Inlined-Debug.c deleted file mode 100644 index d763744d..0000000 --- a/clang/test/CodeGen/2010-01-18-Inlined-Debug.c +++ /dev/null @@ -1,12 +0,0 @@ -// PR: 6058 -// RUN: %clang_cc1 -debug-info-kind=limited -emit-llvm %s -o /dev/null - -static inline int foo(double) __attribute__ ((always_inline)); -static inline int foo(double __x) { return __x; } - -void bar(double x) { - foo(x); -} - - - diff --git a/clang/test/CodeGen/2010-02-10-PointerName.c b/clang/test/CodeGen/2010-02-10-PointerName.c deleted file mode 100644 index 2dc8e19..0000000 --- a/clang/test/CodeGen/2010-02-10-PointerName.c +++ /dev/null @@ -1,9 +0,0 @@ -// RUN: %clang_cc1 %s -emit-llvm -debug-info-kind=limited -o - | FileCheck %s -// CHECK: DW_TAG_pointer_type -// CHECK-NOT: {"char"} - -char i = 1; -void foo(void) { - char *cp = &i; -} - diff --git a/clang/test/CodeGen/2010-02-15-DbgStaticVar.c b/clang/test/CodeGen/2010-02-15-DbgStaticVar.c deleted file mode 100644 index 07e5bb0..0000000 --- a/clang/test/CodeGen/2010-02-15-DbgStaticVar.c +++ /dev/null @@ -1,15 +0,0 @@ -// RUN: %clang_cc1 -debug-info-kind=limited -emit-llvm %s -o - | FileCheck %s -// Test to check intentionally empty linkage name for a static variable. -static int foo(int a) -{ - static int b = 1; - return b+a; -} - -int main(void) { - int j = foo(1); - return 0; -} -// CHECK: !DIGlobalVariable(name: "b", -// CHECK-NOT: linkageName: -// CHECK-SAME: ){{$}} diff --git a/clang/test/CodeGen/2010-02-16-DbgScopes.c b/clang/test/CodeGen/2010-02-16-DbgScopes.c deleted file mode 100644 index 8b962c6..0000000 --- a/clang/test/CodeGen/2010-02-16-DbgScopes.c +++ /dev/null @@ -1,22 +0,0 @@ -// RUN: %clang_cc1 -emit-llvm -debug-info-kind=limited < %s | FileCheck %s -// Test to check number of lexical scope identified in debug info. -// CHECK: !DILexicalBlock( -// CHECK: !DILexicalBlock( -// CHECK: !DILexicalBlock( -// CHECK: !DILexicalBlock( - -extern int bar(void); -extern void foobar(void); -void foo(int s) { - unsigned loc = 0; - if (s) { - if (bar()) { - foobar(); - } - } else { - loc = 1; - if (bar()) { - loc = 2; - } - } -} diff --git a/clang/test/CodeGen/2010-03-5-LexicalScope.c b/clang/test/CodeGen/2010-03-5-LexicalScope.c deleted file mode 100644 index c0da9f0..0000000 --- a/clang/test/CodeGen/2010-03-5-LexicalScope.c +++ /dev/null @@ -1,12 +0,0 @@ -// RUN: %clang_cc1 -emit-llvm -debug-info-kind=limited %s -o - | FileCheck %s -// CHECK: !DILexicalBlock( -// CHECK: !DILexicalBlock( -int foo(int i) { - if (i) { - int j = 2; - } - else { - int j = 3; - } - return i; -} diff --git a/clang/test/CodeGen/2010-07-08-DeclDebugLineNo.c b/clang/test/CodeGen/2010-07-08-DeclDebugLineNo.c deleted file mode 100644 index e6b7aa0..0000000 --- a/clang/test/CodeGen/2010-07-08-DeclDebugLineNo.c +++ /dev/null @@ -1,9 +0,0 @@ -// RUN: %clang_cc1 -emit-llvm -debug-info-kind=limited %s -o - | FileCheck %s -// Insure that dbg.declare lines for locals refer to correct line number records. -void foo(void) { - int l = 0; // line #4: CHECK: #dbg_declare({{.*%l.*}} [[variable_l:![0-9]+]] - int p = 0; // line #5: CHECK: #dbg_declare({{.*%p.*}} [[variable_p:![0-9]+]] -} -// Now match the line number records: -// CHECK: {{^}}[[variable_l]] = !DILocation(line: 4, -// CHECK: {{^}}[[variable_p]] = !DILocation(line: 5, diff --git a/clang/test/CodeGen/2010-08-10-DbgConstant.c b/clang/test/CodeGen/2010-08-10-DbgConstant.c deleted file mode 100644 index 7220f3f..0000000 --- a/clang/test/CodeGen/2010-08-10-DbgConstant.c +++ /dev/null @@ -1,6 +0,0 @@ -// RUN: %clang_cc1 -emit-llvm -debug-info-kind=limited %s -o - | FileCheck %s -// CHECK: !DIGlobalVariableExpression(var: [[VAR:.*]], expr: !DIExpression(DW_OP_constu, 201, DW_OP_stack_value)) - -static const unsigned int ro = 201; -void bar(int); -void foo(void) { bar(ro); } diff --git a/clang/test/CodeGen/AArch64/ABI-align-packed.c b/clang/test/CodeGen/AArch64/ABI-align-packed.c index 0349ebc..09f9180 100644 --- a/clang/test/CodeGen/AArch64/ABI-align-packed.c +++ b/clang/test/CodeGen/AArch64/ABI-align-packed.c @@ -72,9 +72,9 @@ __attribute__((noinline)) void named_arg_non_packed_struct(double d0, double d1, // CHECK-SAME: (double [[D0:%.*]], double [[D1:%.*]], double [[D2:%.*]], double [[D3:%.*]], double [[D4:%.*]], double [[D5:%.*]], double [[D6:%.*]], double [[D7:%.*]], double [[D8:%.*]], ...) local_unnamed_addr #[[ATTR1:[0-9]+]] { // CHECK-NEXT: entry: // CHECK-NEXT: [[VL:%.*]] = alloca [[STRUCT___VA_LIST:%.*]], align 8 -// CHECK-NEXT: call void @llvm.lifetime.start.p0(i64 32, ptr nonnull [[VL]]) #[[ATTR6:[0-9]+]] +// CHECK-NEXT: call void @llvm.lifetime.start.p0(ptr nonnull [[VL]]) #[[ATTR6:[0-9]+]] // CHECK-NEXT: call void @llvm.va_start.p0(ptr nonnull [[VL]]) -// CHECK-NEXT: call void @llvm.lifetime.end.p0(i64 32, ptr nonnull [[VL]]) #[[ATTR6]] +// CHECK-NEXT: call void @llvm.lifetime.end.p0(ptr nonnull [[VL]]) #[[ATTR6]] // CHECK-NEXT: ret void void variadic_non_packed_struct(double d0, double d1, double d2, double d3, double d4, double d5, double d6, double d7, @@ -89,7 +89,7 @@ void variadic_non_packed_struct(double d0, double d1, double d2, double d3, // CHECK-SAME: () local_unnamed_addr #[[ATTR4:[0-9]+]] { // CHECK-NEXT: entry: // CHECK-NEXT: [[S_NON_PACKED_STRUCT:%.*]] = alloca [[STRUCT_NON_PACKED_STRUCT:%.*]], align 16 -// CHECK-NEXT: call void @llvm.lifetime.start.p0(i64 16, ptr nonnull [[S_NON_PACKED_STRUCT]]) #[[ATTR6]] +// CHECK-NEXT: call void @llvm.lifetime.start.p0(ptr nonnull [[S_NON_PACKED_STRUCT]]) #[[ATTR6]] // CHECK-NEXT: call void (i32, ...) @init(i32 noundef 1, ptr noundef nonnull [[S_NON_PACKED_STRUCT]]) #[[ATTR6]] // CHECK-NEXT: [[DOTFCA_0_LOAD:%.*]] = load <8 x i16>, ptr [[S_NON_PACKED_STRUCT]], align 16 // CHECK-NEXT: [[DOTFCA_0_INSERT:%.*]] = insertvalue [1 x <8 x i16>] poison, <8 x i16> [[DOTFCA_0_LOAD]], 0 @@ -97,7 +97,7 @@ void variadic_non_packed_struct(double d0, double d1, double d2, double d3, // CHECK-NEXT: [[DOTFCA_0_LOAD3:%.*]] = load <8 x i16>, ptr [[S_NON_PACKED_STRUCT]], align 16 // CHECK-NEXT: [[DOTFCA_0_INSERT4:%.*]] = insertvalue [1 x <8 x i16>] poison, <8 x i16> [[DOTFCA_0_LOAD3]], 0 // CHECK-NEXT: call void (double, double, double, double, double, double, double, double, double, ...) @variadic_non_packed_struct(double poison, double poison, double poison, double poison, double poison, double poison, double poison, double poison, double poison, [1 x <8 x i16>] alignstack(16) [[DOTFCA_0_INSERT4]]) -// CHECK-NEXT: call void @llvm.lifetime.end.p0(i64 16, ptr nonnull [[S_NON_PACKED_STRUCT]]) #[[ATTR6]] +// CHECK-NEXT: call void @llvm.lifetime.end.p0(ptr nonnull [[S_NON_PACKED_STRUCT]]) #[[ATTR6]] // CHECK-NEXT: ret void void test_non_packed_struct() { struct non_packed_struct s_non_packed_struct; @@ -127,9 +127,9 @@ __attribute__((noinline)) void named_arg_packed_struct(double d0, double d1, dou // CHECK-SAME: (double [[D0:%.*]], double [[D1:%.*]], double [[D2:%.*]], double [[D3:%.*]], double [[D4:%.*]], double [[D5:%.*]], double [[D6:%.*]], double [[D7:%.*]], double [[D8:%.*]], ...) local_unnamed_addr #[[ATTR1]] { // CHECK-NEXT: entry: // CHECK-NEXT: [[VL:%.*]] = alloca [[STRUCT___VA_LIST:%.*]], align 8 -// CHECK-NEXT: call void @llvm.lifetime.start.p0(i64 32, ptr nonnull [[VL]]) #[[ATTR6]] +// CHECK-NEXT: call void @llvm.lifetime.start.p0(ptr nonnull [[VL]]) #[[ATTR6]] // CHECK-NEXT: call void @llvm.va_start.p0(ptr nonnull [[VL]]) -// CHECK-NEXT: call void @llvm.lifetime.end.p0(i64 32, ptr nonnull [[VL]]) #[[ATTR6]] +// CHECK-NEXT: call void @llvm.lifetime.end.p0(ptr nonnull [[VL]]) #[[ATTR6]] // CHECK-NEXT: ret void void variadic_packed_struct(double d0, double d1, double d2, double d3, double d4, double d5, double d6, double d7, @@ -144,7 +144,7 @@ void variadic_packed_struct(double d0, double d1, double d2, double d3, // CHECK-SAME: () local_unnamed_addr #[[ATTR4]] { // CHECK-NEXT: entry: // CHECK-NEXT: [[S_PACKED_STRUCT:%.*]] = alloca [[STRUCT_PACKED_STRUCT:%.*]], align 16 -// CHECK-NEXT: call void @llvm.lifetime.start.p0(i64 16, ptr nonnull [[S_PACKED_STRUCT]]) #[[ATTR6]] +// CHECK-NEXT: call void @llvm.lifetime.start.p0(ptr nonnull [[S_PACKED_STRUCT]]) #[[ATTR6]] // CHECK-NEXT: call void (i32, ...) @init(i32 noundef 1, ptr noundef nonnull [[S_PACKED_STRUCT]]) #[[ATTR6]] // CHECK-NEXT: [[DOTFCA_0_LOAD:%.*]] = load <8 x i16>, ptr [[S_PACKED_STRUCT]], align 16 // CHECK-NEXT: [[DOTFCA_0_INSERT:%.*]] = insertvalue [1 x <8 x i16>] poison, <8 x i16> [[DOTFCA_0_LOAD]], 0 @@ -152,7 +152,7 @@ void variadic_packed_struct(double d0, double d1, double d2, double d3, // CHECK-NEXT: [[DOTFCA_0_LOAD3:%.*]] = load <8 x i16>, ptr [[S_PACKED_STRUCT]], align 16 // CHECK-NEXT: [[DOTFCA_0_INSERT4:%.*]] = insertvalue [1 x <8 x i16>] poison, <8 x i16> [[DOTFCA_0_LOAD3]], 0 // CHECK-NEXT: call void (double, double, double, double, double, double, double, double, double, ...) @variadic_packed_struct(double poison, double poison, double poison, double poison, double poison, double poison, double poison, double poison, double poison, [1 x <8 x i16>] alignstack(8) [[DOTFCA_0_INSERT4]]) -// CHECK-NEXT: call void @llvm.lifetime.end.p0(i64 16, ptr nonnull [[S_PACKED_STRUCT]]) #[[ATTR6]] +// CHECK-NEXT: call void @llvm.lifetime.end.p0(ptr nonnull [[S_PACKED_STRUCT]]) #[[ATTR6]] // CHECK-NEXT: ret void void test_packed_struct() { struct packed_struct s_packed_struct; @@ -182,9 +182,9 @@ __attribute__((noinline)) void named_arg_packed_member(double d0, double d1, dou // CHECK-SAME: (double [[D0:%.*]], double [[D1:%.*]], double [[D2:%.*]], double [[D3:%.*]], double [[D4:%.*]], double [[D5:%.*]], double [[D6:%.*]], double [[D7:%.*]], double [[D8:%.*]], ...) local_unnamed_addr #[[ATTR1]] { // CHECK-NEXT: entry: // CHECK-NEXT: [[VL:%.*]] = alloca [[STRUCT___VA_LIST:%.*]], align 8 -// CHECK-NEXT: call void @llvm.lifetime.start.p0(i64 32, ptr nonnull [[VL]]) #[[ATTR6]] +// CHECK-NEXT: call void @llvm.lifetime.start.p0(ptr nonnull [[VL]]) #[[ATTR6]] // CHECK-NEXT: call void @llvm.va_start.p0(ptr nonnull [[VL]]) -// CHECK-NEXT: call void @llvm.lifetime.end.p0(i64 32, ptr nonnull [[VL]]) #[[ATTR6]] +// CHECK-NEXT: call void @llvm.lifetime.end.p0(ptr nonnull [[VL]]) #[[ATTR6]] // CHECK-NEXT: ret void void variadic_packed_member(double d0, double d1, double d2, double d3, double d4, double d5, double d6, double d7, @@ -199,7 +199,7 @@ void variadic_packed_member(double d0, double d1, double d2, double d3, // CHECK-SAME: () local_unnamed_addr #[[ATTR4]] { // CHECK-NEXT: entry: // CHECK-NEXT: [[S_PACKED_MEMBER:%.*]] = alloca [[STRUCT_PACKED_MEMBER:%.*]], align 16 -// CHECK-NEXT: call void @llvm.lifetime.start.p0(i64 16, ptr nonnull [[S_PACKED_MEMBER]]) #[[ATTR6]] +// CHECK-NEXT: call void @llvm.lifetime.start.p0(ptr nonnull [[S_PACKED_MEMBER]]) #[[ATTR6]] // CHECK-NEXT: call void (i32, ...) @init(i32 noundef 1, ptr noundef nonnull [[S_PACKED_MEMBER]]) #[[ATTR6]] // CHECK-NEXT: [[DOTFCA_0_LOAD:%.*]] = load <8 x i16>, ptr [[S_PACKED_MEMBER]], align 16 // CHECK-NEXT: [[DOTFCA_0_INSERT:%.*]] = insertvalue [1 x <8 x i16>] poison, <8 x i16> [[DOTFCA_0_LOAD]], 0 @@ -207,7 +207,7 @@ void variadic_packed_member(double d0, double d1, double d2, double d3, // CHECK-NEXT: [[DOTFCA_0_LOAD3:%.*]] = load <8 x i16>, ptr [[S_PACKED_MEMBER]], align 16 // CHECK-NEXT: [[DOTFCA_0_INSERT4:%.*]] = insertvalue [1 x <8 x i16>] poison, <8 x i16> [[DOTFCA_0_LOAD3]], 0 // CHECK-NEXT: call void (double, double, double, double, double, double, double, double, double, ...) @variadic_packed_member(double poison, double poison, double poison, double poison, double poison, double poison, double poison, double poison, double poison, [1 x <8 x i16>] alignstack(8) [[DOTFCA_0_INSERT4]]) -// CHECK-NEXT: call void @llvm.lifetime.end.p0(i64 16, ptr nonnull [[S_PACKED_MEMBER]]) #[[ATTR6]] +// CHECK-NEXT: call void @llvm.lifetime.end.p0(ptr nonnull [[S_PACKED_MEMBER]]) #[[ATTR6]] // CHECK-NEXT: ret void void test_packed_member() { struct packed_member s_packed_member; @@ -237,9 +237,9 @@ __attribute__((noinline)) void named_arg_aligned_struct_8(double d0, double d1, // CHECK-SAME: (double [[D0:%.*]], double [[D1:%.*]], double [[D2:%.*]], double [[D3:%.*]], double [[D4:%.*]], double [[D5:%.*]], double [[D6:%.*]], double [[D7:%.*]], double [[D8:%.*]], ...) local_unnamed_addr #[[ATTR1]] { // CHECK-NEXT: entry: // CHECK-NEXT: [[VL:%.*]] = alloca [[STRUCT___VA_LIST:%.*]], align 8 -// CHECK-NEXT: call void @llvm.lifetime.start.p0(i64 32, ptr nonnull [[VL]]) #[[ATTR6]] +// CHECK-NEXT: call void @llvm.lifetime.start.p0(ptr nonnull [[VL]]) #[[ATTR6]] // CHECK-NEXT: call void @llvm.va_start.p0(ptr nonnull [[VL]]) -// CHECK-NEXT: call void @llvm.lifetime.end.p0(i64 32, ptr nonnull [[VL]]) #[[ATTR6]] +// CHECK-NEXT: call void @llvm.lifetime.end.p0(ptr nonnull [[VL]]) #[[ATTR6]] // CHECK-NEXT: ret void void variadic_aligned_struct_8(double d0, double d1, double d2, double d3, double d4, double d5, double d6, double d7, @@ -254,7 +254,7 @@ void variadic_aligned_struct_8(double d0, double d1, double d2, double d3, // CHECK-SAME: () local_unnamed_addr #[[ATTR4]] { // CHECK-NEXT: entry: // CHECK-NEXT: [[S_ALIGNED_STRUCT_8:%.*]] = alloca [[STRUCT_ALIGNED_STRUCT_8:%.*]], align 16 -// CHECK-NEXT: call void @llvm.lifetime.start.p0(i64 16, ptr nonnull [[S_ALIGNED_STRUCT_8]]) #[[ATTR6]] +// CHECK-NEXT: call void @llvm.lifetime.start.p0(ptr nonnull [[S_ALIGNED_STRUCT_8]]) #[[ATTR6]] // CHECK-NEXT: call void (i32, ...) @init(i32 noundef 1, ptr noundef nonnull [[S_ALIGNED_STRUCT_8]]) #[[ATTR6]] // CHECK-NEXT: [[DOTFCA_0_LOAD:%.*]] = load <8 x i16>, ptr [[S_ALIGNED_STRUCT_8]], align 16 // CHECK-NEXT: [[DOTFCA_0_INSERT:%.*]] = insertvalue [1 x <8 x i16>] poison, <8 x i16> [[DOTFCA_0_LOAD]], 0 @@ -262,7 +262,7 @@ void variadic_aligned_struct_8(double d0, double d1, double d2, double d3, // CHECK-NEXT: [[DOTFCA_0_LOAD3:%.*]] = load <8 x i16>, ptr [[S_ALIGNED_STRUCT_8]], align 16 // CHECK-NEXT: [[DOTFCA_0_INSERT4:%.*]] = insertvalue [1 x <8 x i16>] poison, <8 x i16> [[DOTFCA_0_LOAD3]], 0 // CHECK-NEXT: call void (double, double, double, double, double, double, double, double, double, ...) @variadic_aligned_struct_8(double poison, double poison, double poison, double poison, double poison, double poison, double poison, double poison, double poison, [1 x <8 x i16>] alignstack(16) [[DOTFCA_0_INSERT4]]) -// CHECK-NEXT: call void @llvm.lifetime.end.p0(i64 16, ptr nonnull [[S_ALIGNED_STRUCT_8]]) #[[ATTR6]] +// CHECK-NEXT: call void @llvm.lifetime.end.p0(ptr nonnull [[S_ALIGNED_STRUCT_8]]) #[[ATTR6]] // CHECK-NEXT: ret void void test_aligned_struct_8() { struct aligned_struct_8 s_aligned_struct_8; @@ -292,9 +292,9 @@ __attribute__((noinline)) void named_arg_aligned_member_8(double d0, double d1, // CHECK-SAME: (double [[D0:%.*]], double [[D1:%.*]], double [[D2:%.*]], double [[D3:%.*]], double [[D4:%.*]], double [[D5:%.*]], double [[D6:%.*]], double [[D7:%.*]], double [[D8:%.*]], ...) local_unnamed_addr #[[ATTR1]] { // CHECK-NEXT: entry: // CHECK-NEXT: [[VL:%.*]] = alloca [[STRUCT___VA_LIST:%.*]], align 8 -// CHECK-NEXT: call void @llvm.lifetime.start.p0(i64 32, ptr nonnull [[VL]]) #[[ATTR6]] +// CHECK-NEXT: call void @llvm.lifetime.start.p0(ptr nonnull [[VL]]) #[[ATTR6]] // CHECK-NEXT: call void @llvm.va_start.p0(ptr nonnull [[VL]]) -// CHECK-NEXT: call void @llvm.lifetime.end.p0(i64 32, ptr nonnull [[VL]]) #[[ATTR6]] +// CHECK-NEXT: call void @llvm.lifetime.end.p0(ptr nonnull [[VL]]) #[[ATTR6]] // CHECK-NEXT: ret void void variadic_aligned_member_8(double d0, double d1, double d2, double d3, double d4, double d5, double d6, double d7, @@ -309,7 +309,7 @@ void variadic_aligned_member_8(double d0, double d1, double d2, double d3, // CHECK-SAME: () local_unnamed_addr #[[ATTR4]] { // CHECK-NEXT: entry: // CHECK-NEXT: [[S_ALIGNED_MEMBER_8:%.*]] = alloca [[STRUCT_ALIGNED_MEMBER_8:%.*]], align 16 -// CHECK-NEXT: call void @llvm.lifetime.start.p0(i64 16, ptr nonnull [[S_ALIGNED_MEMBER_8]]) #[[ATTR6]] +// CHECK-NEXT: call void @llvm.lifetime.start.p0(ptr nonnull [[S_ALIGNED_MEMBER_8]]) #[[ATTR6]] // CHECK-NEXT: call void (i32, ...) @init(i32 noundef 1, ptr noundef nonnull [[S_ALIGNED_MEMBER_8]]) #[[ATTR6]] // CHECK-NEXT: [[DOTFCA_0_LOAD:%.*]] = load <8 x i16>, ptr [[S_ALIGNED_MEMBER_8]], align 16 // CHECK-NEXT: [[DOTFCA_0_INSERT:%.*]] = insertvalue [1 x <8 x i16>] poison, <8 x i16> [[DOTFCA_0_LOAD]], 0 @@ -317,7 +317,7 @@ void variadic_aligned_member_8(double d0, double d1, double d2, double d3, // CHECK-NEXT: [[DOTFCA_0_LOAD3:%.*]] = load <8 x i16>, ptr [[S_ALIGNED_MEMBER_8]], align 16 // CHECK-NEXT: [[DOTFCA_0_INSERT4:%.*]] = insertvalue [1 x <8 x i16>] poison, <8 x i16> [[DOTFCA_0_LOAD3]], 0 // CHECK-NEXT: call void (double, double, double, double, double, double, double, double, double, ...) @variadic_aligned_member_8(double poison, double poison, double poison, double poison, double poison, double poison, double poison, double poison, double poison, [1 x <8 x i16>] alignstack(16) [[DOTFCA_0_INSERT4]]) -// CHECK-NEXT: call void @llvm.lifetime.end.p0(i64 16, ptr nonnull [[S_ALIGNED_MEMBER_8]]) #[[ATTR6]] +// CHECK-NEXT: call void @llvm.lifetime.end.p0(ptr nonnull [[S_ALIGNED_MEMBER_8]]) #[[ATTR6]] // CHECK-NEXT: ret void void test_aligned_member_8() { struct aligned_member_8 s_aligned_member_8; @@ -347,9 +347,9 @@ __attribute__((noinline)) void named_arg_pragma_packed_struct_8(double d0, doubl // CHECK-SAME: (double [[D0:%.*]], double [[D1:%.*]], double [[D2:%.*]], double [[D3:%.*]], double [[D4:%.*]], double [[D5:%.*]], double [[D6:%.*]], double [[D7:%.*]], double [[D8:%.*]], ...) local_unnamed_addr #[[ATTR1]] { // CHECK-NEXT: entry: // CHECK-NEXT: [[VL:%.*]] = alloca [[STRUCT___VA_LIST:%.*]], align 8 -// CHECK-NEXT: call void @llvm.lifetime.start.p0(i64 32, ptr nonnull [[VL]]) #[[ATTR6]] +// CHECK-NEXT: call void @llvm.lifetime.start.p0(ptr nonnull [[VL]]) #[[ATTR6]] // CHECK-NEXT: call void @llvm.va_start.p0(ptr nonnull [[VL]]) -// CHECK-NEXT: call void @llvm.lifetime.end.p0(i64 32, ptr nonnull [[VL]]) #[[ATTR6]] +// CHECK-NEXT: call void @llvm.lifetime.end.p0(ptr nonnull [[VL]]) #[[ATTR6]] // CHECK-NEXT: ret void void variadic_pragma_packed_struct_8(double d0, double d1, double d2, double d3, double d4, double d5, double d6, double d7, @@ -364,7 +364,7 @@ void variadic_pragma_packed_struct_8(double d0, double d1, double d2, double d3, // CHECK-SAME: () local_unnamed_addr #[[ATTR4]] { // CHECK-NEXT: entry: // CHECK-NEXT: [[S_PRAGMA_PACKED_STRUCT_8:%.*]] = alloca [[STRUCT_PRAGMA_PACKED_STRUCT_8:%.*]], align 16 -// CHECK-NEXT: call void @llvm.lifetime.start.p0(i64 16, ptr nonnull [[S_PRAGMA_PACKED_STRUCT_8]]) #[[ATTR6]] +// CHECK-NEXT: call void @llvm.lifetime.start.p0(ptr nonnull [[S_PRAGMA_PACKED_STRUCT_8]]) #[[ATTR6]] // CHECK-NEXT: call void (i32, ...) @init(i32 noundef 1, ptr noundef nonnull [[S_PRAGMA_PACKED_STRUCT_8]]) #[[ATTR6]] // CHECK-NEXT: [[DOTFCA_0_LOAD:%.*]] = load <8 x i16>, ptr [[S_PRAGMA_PACKED_STRUCT_8]], align 16 // CHECK-NEXT: [[DOTFCA_0_INSERT:%.*]] = insertvalue [1 x <8 x i16>] poison, <8 x i16> [[DOTFCA_0_LOAD]], 0 @@ -372,7 +372,7 @@ void variadic_pragma_packed_struct_8(double d0, double d1, double d2, double d3, // CHECK-NEXT: [[DOTFCA_0_LOAD3:%.*]] = load <8 x i16>, ptr [[S_PRAGMA_PACKED_STRUCT_8]], align 16 // CHECK-NEXT: [[DOTFCA_0_INSERT4:%.*]] = insertvalue [1 x <8 x i16>] poison, <8 x i16> [[DOTFCA_0_LOAD3]], 0 // CHECK-NEXT: call void (double, double, double, double, double, double, double, double, double, ...) @variadic_pragma_packed_struct_8(double poison, double poison, double poison, double poison, double poison, double poison, double poison, double poison, double poison, [1 x <8 x i16>] alignstack(8) [[DOTFCA_0_INSERT4]]) -// CHECK-NEXT: call void @llvm.lifetime.end.p0(i64 16, ptr nonnull [[S_PRAGMA_PACKED_STRUCT_8]]) #[[ATTR6]] +// CHECK-NEXT: call void @llvm.lifetime.end.p0(ptr nonnull [[S_PRAGMA_PACKED_STRUCT_8]]) #[[ATTR6]] // CHECK-NEXT: ret void void test_pragma_packed_struct_8() { struct pragma_packed_struct_8 s_pragma_packed_struct_8; @@ -402,9 +402,9 @@ __attribute__((noinline)) void named_arg_pragma_packed_struct_4(double d0, doubl // CHECK-SAME: (double [[D0:%.*]], double [[D1:%.*]], double [[D2:%.*]], double [[D3:%.*]], double [[D4:%.*]], double [[D5:%.*]], double [[D6:%.*]], double [[D7:%.*]], double [[D8:%.*]], ...) local_unnamed_addr #[[ATTR1]] { // CHECK-NEXT: entry: // CHECK-NEXT: [[VL:%.*]] = alloca [[STRUCT___VA_LIST:%.*]], align 8 -// CHECK-NEXT: call void @llvm.lifetime.start.p0(i64 32, ptr nonnull [[VL]]) #[[ATTR6]] +// CHECK-NEXT: call void @llvm.lifetime.start.p0(ptr nonnull [[VL]]) #[[ATTR6]] // CHECK-NEXT: call void @llvm.va_start.p0(ptr nonnull [[VL]]) -// CHECK-NEXT: call void @llvm.lifetime.end.p0(i64 32, ptr nonnull [[VL]]) #[[ATTR6]] +// CHECK-NEXT: call void @llvm.lifetime.end.p0(ptr nonnull [[VL]]) #[[ATTR6]] // CHECK-NEXT: ret void void variadic_pragma_packed_struct_4(double d0, double d1, double d2, double d3, double d4, double d5, double d6, double d7, @@ -419,7 +419,7 @@ void variadic_pragma_packed_struct_4(double d0, double d1, double d2, double d3, // CHECK-SAME: () local_unnamed_addr #[[ATTR4]] { // CHECK-NEXT: entry: // CHECK-NEXT: [[S_PRAGMA_PACKED_STRUCT_4:%.*]] = alloca [[STRUCT_PRAGMA_PACKED_STRUCT_4:%.*]], align 16 -// CHECK-NEXT: call void @llvm.lifetime.start.p0(i64 16, ptr nonnull [[S_PRAGMA_PACKED_STRUCT_4]]) #[[ATTR6]] +// CHECK-NEXT: call void @llvm.lifetime.start.p0(ptr nonnull [[S_PRAGMA_PACKED_STRUCT_4]]) #[[ATTR6]] // CHECK-NEXT: call void (i32, ...) @init(i32 noundef 1, ptr noundef nonnull [[S_PRAGMA_PACKED_STRUCT_4]]) #[[ATTR6]] // CHECK-NEXT: [[DOTFCA_0_LOAD:%.*]] = load <8 x i16>, ptr [[S_PRAGMA_PACKED_STRUCT_4]], align 16 // CHECK-NEXT: [[DOTFCA_0_INSERT:%.*]] = insertvalue [1 x <8 x i16>] poison, <8 x i16> [[DOTFCA_0_LOAD]], 0 @@ -427,7 +427,7 @@ void variadic_pragma_packed_struct_4(double d0, double d1, double d2, double d3, // CHECK-NEXT: [[DOTFCA_0_LOAD3:%.*]] = load <8 x i16>, ptr [[S_PRAGMA_PACKED_STRUCT_4]], align 16 // CHECK-NEXT: [[DOTFCA_0_INSERT4:%.*]] = insertvalue [1 x <8 x i16>] poison, <8 x i16> [[DOTFCA_0_LOAD3]], 0 // CHECK-NEXT: call void (double, double, double, double, double, double, double, double, double, ...) @variadic_pragma_packed_struct_4(double poison, double poison, double poison, double poison, double poison, double poison, double poison, double poison, double poison, [1 x <8 x i16>] alignstack(8) [[DOTFCA_0_INSERT4]]) -// CHECK-NEXT: call void @llvm.lifetime.end.p0(i64 16, ptr nonnull [[S_PRAGMA_PACKED_STRUCT_4]]) #[[ATTR6]] +// CHECK-NEXT: call void @llvm.lifetime.end.p0(ptr nonnull [[S_PRAGMA_PACKED_STRUCT_4]]) #[[ATTR6]] // CHECK-NEXT: ret void void test_pragma_packed_struct_4() { struct pragma_packed_struct_4 s_pragma_packed_struct_4; diff --git a/clang/test/CodeGen/AArch64/byval-temp.c b/clang/test/CodeGen/AArch64/byval-temp.c index 5033b6c..353bfa7 100644 --- a/clang/test/CodeGen/AArch64/byval-temp.c +++ b/clang/test/CodeGen/AArch64/byval-temp.c @@ -47,13 +47,13 @@ void example(void) { // CHECK-O3-NEXT: %[[byvaltemp1:[0-9A-Za-z-]+]] = alloca %struct.large, align 8 // // Mark the start of the lifetime for `l` -// CHECK-O3-NEXT: call void @llvm.lifetime.start.p0(i64 64, ptr %[[l]]) +// CHECK-O3-NEXT: call void @llvm.lifetime.start.p0(ptr %[[l]]) // // First, memset `l` to 0. // CHECK-O3-NEXT: call void @llvm.memset.p0.i64(ptr align 8 %[[l]], i8 0, i64 64, i1 false) // // Lifetime of the first temporary starts here and ends right after the call. -// CHECK-O3-NEXT: call void @llvm.lifetime.start.p0(i64 64, ptr %[[byvaltemp]]) +// CHECK-O3-NEXT: call void @llvm.lifetime.start.p0(ptr %[[byvaltemp]]) // // Then, memcpy `l` to the temporary stack space. // CHECK-O3-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 %[[byvaltemp]], ptr align 8 %[[l]], i64 64, i1 false) @@ -61,16 +61,16 @@ void example(void) { // CHECK-O3-NEXT: call void @pass_large(ptr dead_on_return noundef %[[byvaltemp]]) // // The lifetime of the temporary used to pass a pointer to the struct ends here. -// CHECK-O3-NEXT: call void @llvm.lifetime.end.p0(i64 64, ptr %[[byvaltemp]]) +// CHECK-O3-NEXT: call void @llvm.lifetime.end.p0(ptr %[[byvaltemp]]) // // Now, do the same for the second call, using the second temporary alloca. -// CHECK-O3-NEXT: call void @llvm.lifetime.start.p0(i64 64, ptr %[[byvaltemp1]]) +// CHECK-O3-NEXT: call void @llvm.lifetime.start.p0(ptr %[[byvaltemp1]]) // CHECK-O3-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 %[[byvaltemp1]], ptr align 8 %[[l]], i64 64, i1 false) // CHECK-O3-NEXT: call void @pass_large(ptr dead_on_return noundef %[[byvaltemp1]]) -// CHECK-O3-NEXT: call void @llvm.lifetime.end.p0(i64 64, ptr %[[byvaltemp1]]) +// CHECK-O3-NEXT: call void @llvm.lifetime.end.p0(ptr %[[byvaltemp1]]) // // Mark the end of the lifetime of `l`. -// CHECK-O3-NEXT: call void @llvm.lifetime.end.p0(i64 64, ptr %l) +// CHECK-O3-NEXT: call void @llvm.lifetime.end.p0(ptr %l) // CHECK-O3-NEXT: ret void void example_BitInt(void) { @@ -101,20 +101,20 @@ void example_BitInt(void) { // CHECK-O3-NEXT: [[L:%.*]] = alloca i256, align 16 // CHECK-O3-NEXT: [[INDIRECT_ARG_TEMP:%.*]] = alloca i256, align 16 // CHECK-O3-NEXT: [[INDIRECT_ARG_TEMP1:%.*]] = alloca i256, align 16 -// CHECK-O3-NEXT: call void @llvm.lifetime.start.p0(i64 32, ptr [[L]]) +// CHECK-O3-NEXT: call void @llvm.lifetime.start.p0(ptr [[L]]) // CHECK-O3-NEXT: store i256 0, ptr [[L]], align 16, !tbaa [[TBAA6:![0-9]+]] // CHECK-O3-NEXT: [[TMP0:%.*]] = load i256, ptr [[L]], align 16, !tbaa [[TBAA6]] // CHECK-O3-NEXT: [[LOADEDV:%.*]] = trunc i256 [[TMP0]] to i129 -// CHECK-O3-NEXT: call void @llvm.lifetime.start.p0(i64 32, ptr [[INDIRECT_ARG_TEMP]]) +// CHECK-O3-NEXT: call void @llvm.lifetime.start.p0(ptr [[INDIRECT_ARG_TEMP]]) // CHECK-O3-NEXT: [[STOREDV:%.*]] = sext i129 [[LOADEDV]] to i256 // CHECK-O3-NEXT: store i256 [[STOREDV]], ptr [[INDIRECT_ARG_TEMP]], align 16, !tbaa [[TBAA6]] // CHECK-O3-NEXT: call void @pass_large_BitInt(ptr dead_on_return noundef [[INDIRECT_ARG_TEMP]]) -// CHECK-O3-NEXT: call void @llvm.lifetime.end.p0(i64 32, ptr [[INDIRECT_ARG_TEMP]]) +// CHECK-O3-NEXT: call void @llvm.lifetime.end.p0(ptr [[INDIRECT_ARG_TEMP]]) // CHECK-O3-NEXT: [[TMP1:%.*]] = load i256, ptr [[L]], align 16, !tbaa [[TBAA6]] // CHECK-O3-NEXT: [[LOADEDV1:%.*]] = trunc i256 [[TMP1]] to i129 -// CHECK-O3-NEXT: call void @llvm.lifetime.start.p0(i64 32, ptr [[INDIRECT_ARG_TEMP1]]) +// CHECK-O3-NEXT: call void @llvm.lifetime.start.p0(ptr [[INDIRECT_ARG_TEMP1]]) // CHECK-O3-NEXT: [[STOREDV1:%.*]] = sext i129 [[LOADEDV1]] to i256 // CHECK-O3-NEXT: store i256 [[STOREDV1]], ptr [[INDIRECT_ARG_TEMP1]], align 16, !tbaa [[TBAA6]] // CHECK-O3-NEXT: call void @pass_large_BitInt(ptr dead_on_return noundef [[INDIRECT_ARG_TEMP1]]) -// CHECK-O3-NEXT: call void @llvm.lifetime.end.p0(i64 32, ptr [[INDIRECT_ARG_TEMP1]]) -// CHECK-O3-NEXT: call void @llvm.lifetime.end.p0(i64 32, ptr [[L]]) +// CHECK-O3-NEXT: call void @llvm.lifetime.end.p0(ptr [[INDIRECT_ARG_TEMP1]]) +// CHECK-O3-NEXT: call void @llvm.lifetime.end.p0(ptr [[L]]) diff --git a/clang/test/CodeGen/AArch64/debug-sve-vector-types.c b/clang/test/CodeGen/AArch64/debug-sve-vector-types.c deleted file mode 100644 index ca592b1..0000000 --- a/clang/test/CodeGen/AArch64/debug-sve-vector-types.c +++ /dev/null @@ -1,77 +0,0 @@ -// RUN: %clang_cc1 -triple aarch64-none-linux-gnu -target-feature +sve \ -// RUN: -emit-llvm -o - %s -debug-info-kind=limited 2>&1 | FileCheck %s - -void test_locals(void) { - // CHECK-DAG: name: "__SVBool_t",{{.*}}, baseType: ![[CT1:[0-9]+]] - // CHECK-DAG: ![[CT1]] = !DICompositeType(tag: DW_TAG_array_type, baseType: ![[ELTTYU8:[0-9]+]], flags: DIFlagVector, elements: ![[ELTS1_64:[0-9]+]]) - // CHECK-DAG: ![[ELTTYU8]] = !DIBasicType(name: "unsigned char", size: 8, encoding: DW_ATE_unsigned_char) - // CHECK-DAG: ![[ELTS1_64]] = !{![[REALELTS1_64:[0-9]+]]} - // CHECK-DAG: ![[REALELTS1_64]] = !DISubrange(lowerBound: 0, upperBound: !DIExpression(DW_OP_constu, 1, DW_OP_bregx, 46, 0, DW_OP_mul, DW_OP_constu, 1, DW_OP_minus)) - __SVBool_t b8; - - // CHECK-DAG: name: "__SVCount_t",{{.*}}, baseType: ![[CT1_2:[0-9]+]] - // CHECK-DAG: ![[CT1_2]] = !DICompositeType(tag: DW_TAG_array_type, baseType: ![[ELTTYU8]], flags: DIFlagVector, elements: ![[ELTS0_to_1:[0-9]+]]) - // CHECK-DAG: ![[ELTS0_to_1]] = !{![[REALELTS0_to_1:[0-9]+]]} - // CHECK-DAG: ![[REALELTS0_to_1]] = !DISubrange(lowerBound: 0, upperBound: 1) - __SVCount_t c8; - - // CHECK-DAG: name: "__SVInt8_t",{{.*}}, baseType: ![[CT8:[0-9]+]] - // CHECK-DAG: ![[CT8]] = !DICompositeType(tag: DW_TAG_array_type, baseType: ![[ELTTYS8:[0-9]+]], flags: DIFlagVector, elements: ![[ELTS8:[0-9]+]]) - // CHECK-DAG: ![[ELTTYS8]] = !DIBasicType(name: "signed char", size: 8, encoding: DW_ATE_signed_char) - // CHECK-DAG: ![[ELTS8]] = !{![[REALELTS8:[0-9]+]]} - // CHECK-DAG: ![[REALELTS8]] = !DISubrange(lowerBound: 0, upperBound: !DIExpression(DW_OP_constu, 8, DW_OP_bregx, 46, 0, DW_OP_mul, DW_OP_constu, 1, DW_OP_minus)) - __SVInt8_t s8; - - // CHECK-DAG: name: "__SVUint8_t",{{.*}}, baseType: ![[CT8:[0-9]+]] - // CHECK-DAG: ![[CT8]] = !DICompositeType(tag: DW_TAG_array_type, baseType: ![[ELTTYU8]], flags: DIFlagVector, elements: ![[ELTS8]]) - __SVUint8_t u8; - - // CHECK-DAG: name: "__SVInt16_t",{{.*}}, baseType: ![[CT16:[0-9]+]] - // CHECK-DAG: ![[CT16]] = !DICompositeType(tag: DW_TAG_array_type, baseType: ![[ELTTY16:[0-9]+]], flags: DIFlagVector, elements: ![[ELTS16:[0-9]+]]) - // CHECK-DAG: ![[ELTTY16]] = !DIBasicType(name: "short", size: 16, encoding: DW_ATE_signed) - // CHECK-DAG: ![[ELTS16]] = !{![[REALELTS16:[0-9]+]]} - // CHECK-DAG: ![[REALELTS16]] = !DISubrange(lowerBound: 0, upperBound: !DIExpression(DW_OP_constu, 4, DW_OP_bregx, 46, 0, DW_OP_mul, DW_OP_constu, 1, DW_OP_minus)) - __SVInt16_t s16; - - // CHECK-DAG: name: "__SVUint16_t",{{.*}}, baseType: ![[CT16:[0-9]+]] - // CHECK-DAG: ![[CT16]] = !DICompositeType(tag: DW_TAG_array_type, baseType: ![[ELTTY16:[0-9]+]], flags: DIFlagVector, elements: ![[ELTS16]]) - // CHECK-DAG: ![[ELTTY16]] = !DIBasicType(name: "unsigned short", size: 16, encoding: DW_ATE_unsigned) - __SVUint16_t u16; - - // CHECK-DAG: name: "__SVInt32_t",{{.*}}, baseType: ![[CT32:[0-9]+]] - // CHECK-DAG: ![[CT32]] = !DICompositeType(tag: DW_TAG_array_type, baseType: ![[ELTTY32:[0-9]+]], flags: DIFlagVector, elements: ![[ELTS32:[0-9]+]]) - // CHECK-DAG: ![[ELTTY32]] = !DIBasicType(name: "int", size: 32, encoding: DW_ATE_signed) - // CHECK-DAG: ![[ELTS32]] = !{![[REALELTS32:[0-9]+]]} - // CHECK-DAG: ![[REALELTS32]] = !DISubrange(lowerBound: 0, upperBound: !DIExpression(DW_OP_constu, 2, DW_OP_bregx, 46, 0, DW_OP_mul, DW_OP_constu, 1, DW_OP_minus)) - __SVInt32_t s32; - - // CHECK-DAG: name: "__SVUint32_t",{{.*}}, baseType: ![[CT32:[0-9]+]] - // CHECK-DAG: ![[CT32]] = !DICompositeType(tag: DW_TAG_array_type, baseType: ![[ELTTY32:[0-9]+]], flags: DIFlagVector, elements: ![[ELTS32]]) - // CHECK-DAG: ![[ELTTY32]] = !DIBasicType(name: "unsigned int", size: 32, encoding: DW_ATE_unsigned) - __SVUint32_t u32; - - // CHECK-DAG: name: "__SVInt64_t",{{.*}}, baseType: ![[CT64:[0-9]+]] - // CHECK-DAG: ![[CT64]] = !DICompositeType(tag: DW_TAG_array_type, baseType: ![[ELTTY64:[0-9]+]], flags: DIFlagVector, elements: ![[ELTS1_64]]) - // CHECK-DAG: ![[ELTTY64]] = !DIBasicType(name: "long", size: 64, encoding: DW_ATE_signed) - __SVInt64_t s64; - - // CHECK-DAG: name: "__SVUint64_t",{{.*}}, baseType: ![[CT64:[0-9]+]] - // CHECK-DAG: ![[CT64]] = !DICompositeType(tag: DW_TAG_array_type, baseType: ![[ELTTY64:[0-9]+]], flags: DIFlagVector, elements: ![[ELTS1_64]]) - // CHECK-DAG: ![[ELTTY64]] = !DIBasicType(name: "unsigned long", size: 64, encoding: DW_ATE_unsigned) - __SVUint64_t u64; - - // CHECK: name: "__SVFloat16_t",{{.*}}, baseType: ![[CT16:[0-9]+]] - // CHECK-DAG: ![[CT16]] = !DICompositeType(tag: DW_TAG_array_type, baseType: ![[ELTTY16:[0-9]+]], flags: DIFlagVector, elements: ![[ELTS16]]) - // CHECK-DAG: ![[ELTTY16]] = !DIBasicType(name: "__fp16", size: 16, encoding: DW_ATE_float) - __SVFloat16_t f16; - - // CHECK: name: "__SVFloat32_t",{{.*}}, baseType: ![[CT32:[0-9]+]] - // CHECK-DAG: ![[CT32]] = !DICompositeType(tag: DW_TAG_array_type, baseType: ![[ELTTY32:[0-9]+]], flags: DIFlagVector, elements: ![[ELTS32]]) - // CHECK-DAG: ![[ELTTY32]] = !DIBasicType(name: "float", size: 32, encoding: DW_ATE_float) - __SVFloat32_t f32; - - // CHECK: name: "__SVFloat64_t",{{.*}}, baseType: ![[CT64:[0-9]+]] - // CHECK-DAG: ![[CT64]] = !DICompositeType(tag: DW_TAG_array_type, baseType: ![[ELTTY64:[0-9]+]], flags: DIFlagVector, elements: ![[ELTS1_64]]) - // CHECK-DAG: ![[ELTTY64]] = !DIBasicType(name: "double", size: 64, encoding: DW_ATE_float) - __SVFloat64_t f64; -} diff --git a/clang/test/CodeGen/AArch64/debug-sve-vectorx2-types.c b/clang/test/CodeGen/AArch64/debug-sve-vectorx2-types.c deleted file mode 100644 index 9884b40..0000000 --- a/clang/test/CodeGen/AArch64/debug-sve-vectorx2-types.c +++ /dev/null @@ -1,67 +0,0 @@ -// RUN: %clang_cc1 -triple aarch64-none-linux-gnu -target-feature +sve \ -// RUN: -emit-llvm -o - %s -debug-info-kind=limited 2>&1 | FileCheck %s - -void test_locals(void) { - // CHECK-DAG: name: "__clang_svint8x2_t",{{.*}}, baseType: ![[CT8:[0-9]+]] - // CHECK-DAG: ![[CT8]] = !DICompositeType(tag: DW_TAG_array_type, baseType: ![[ELTTY8:[0-9]+]], flags: DIFlagVector, elements: ![[ELTS8x2:[0-9]+]]) - // CHECK-DAG: ![[ELTTY8]] = !DIBasicType(name: "signed char", size: 8, encoding: DW_ATE_signed_char) - // CHECK-DAG: ![[ELTS8x2]] = !{![[REALELTS8x2:[0-9]+]]} - // CHECK-DAG: ![[REALELTS8x2]] = !DISubrange(lowerBound: 0, upperBound: !DIExpression(DW_OP_constu, 16, DW_OP_bregx, 46, 0, DW_OP_mul, DW_OP_constu, 1, DW_OP_minus)) - __clang_svint8x2_t s8; - - // CHECK-DAG: name: "__clang_svuint8x2_t",{{.*}}, baseType: ![[CT8:[0-9]+]] - // CHECK-DAG: ![[CT8]] = !DICompositeType(tag: DW_TAG_array_type, baseType: ![[ELTTY8:[0-9]+]], flags: DIFlagVector, elements: ![[ELTS8x2]]) - // CHECK-DAG: ![[ELTTY8]] = !DIBasicType(name: "unsigned char", size: 8, encoding: DW_ATE_unsigned_char) - __clang_svuint8x2_t u8; - - // CHECK-DAG: name: "__clang_svint16x2_t",{{.*}}, baseType: ![[CT16:[0-9]+]] - // CHECK-DAG: ![[CT16]] = !DICompositeType(tag: DW_TAG_array_type, baseType: ![[ELTTY16:[0-9]+]], flags: DIFlagVector, elements: ![[ELTS16x2:[0-9]+]]) - // CHECK-DAG: ![[ELTTY16]] = !DIBasicType(name: "short", size: 16, encoding: DW_ATE_signed) - // CHECK-DAG: ![[ELTS16x2]] = !{![[REALELTS16x2:[0-9]+]]} - // CHECK-DAG: ![[REALELTS16x2]] = !DISubrange(lowerBound: 0, upperBound: !DIExpression(DW_OP_constu, 8, DW_OP_bregx, 46, 0, DW_OP_mul, DW_OP_constu, 1, DW_OP_minus)) - __clang_svint16x2_t s16; - - // CHECK-DAG: name: "__clang_svuint16x2_t",{{.*}}, baseType: ![[CT16:[0-9]+]] - // CHECK-DAG: ![[CT16]] = !DICompositeType(tag: DW_TAG_array_type, baseType: ![[ELTTY16:[0-9]+]], flags: DIFlagVector, elements: ![[ELTS16x2]]) - // CHECK-DAG: ![[ELTTY16]] = !DIBasicType(name: "unsigned short", size: 16, encoding: DW_ATE_unsigned) - __clang_svuint16x2_t u16; - - // CHECK-DAG: name: "__clang_svint32x2_t",{{.*}}, baseType: ![[CT32:[0-9]+]] - // CHECK-DAG: ![[CT32]] = !DICompositeType(tag: DW_TAG_array_type, baseType: ![[ELTTY32:[0-9]+]], flags: DIFlagVector, elements: ![[ELTS32x2:[0-9]+]]) - // CHECK-DAG: ![[ELTTY32]] = !DIBasicType(name: "int", size: 32, encoding: DW_ATE_signed) - // CHECK-DAG: ![[ELTS32x2]] = !{![[REALELTS32x2:[0-9]+]]} - // CHECK-DAG: ![[REALELTS32x2]] = !DISubrange(lowerBound: 0, upperBound: !DIExpression(DW_OP_constu, 4, DW_OP_bregx, 46, 0, DW_OP_mul, DW_OP_constu, 1, DW_OP_minus)) - __clang_svint32x2_t s32; - - // CHECK-DAG: name: "__clang_svuint32x2_t",{{.*}}, baseType: ![[CT32:[0-9]+]] - // CHECK-DAG: ![[CT32]] = !DICompositeType(tag: DW_TAG_array_type, baseType: ![[ELTTY32:[0-9]+]], flags: DIFlagVector, elements: ![[ELTS32x2]]) - // CHECK-DAG: ![[ELTTY32]] = !DIBasicType(name: "unsigned int", size: 32, encoding: DW_ATE_unsigned) - __clang_svuint32x2_t u32; - - // CHECK-DAG: name: "__clang_svint64x2_t",{{.*}}, baseType: ![[CT64:[0-9]+]] - // CHECK-DAG: ![[CT64]] = !DICompositeType(tag: DW_TAG_array_type, baseType: ![[ELTTY64:[0-9]+]], flags: DIFlagVector, elements: ![[ELTS1x2_64:[0-9]+]]) - // CHECK-DAG: ![[ELTTY64]] = !DIBasicType(name: "long", size: 64, encoding: DW_ATE_signed) - // CHECK-DAG: ![[ELTS1x2_64]] = !{![[REALELTS1x2_64:[0-9]+]]} - // CHECK-DAG: ![[REALELTS1x2_64]] = !DISubrange(lowerBound: 0, upperBound: !DIExpression(DW_OP_constu, 2, DW_OP_bregx, 46, 0, DW_OP_mul, DW_OP_constu, 1, DW_OP_minus)) - __clang_svint64x2_t s64; - - // CHECK-DAG: name: "__clang_svuint64x2_t",{{.*}}, baseType: ![[CT64:[0-9]+]] - // CHECK-DAG: ![[CT64]] = !DICompositeType(tag: DW_TAG_array_type, baseType: ![[ELTTY64:[0-9]+]], flags: DIFlagVector, elements: ![[ELTS1x2_64]]) - // CHECK-DAG: ![[ELTTY64]] = !DIBasicType(name: "unsigned long", size: 64, encoding: DW_ATE_unsigned) - __clang_svuint64x2_t u64; - - // CHECK: name: "__clang_svfloat16x2_t",{{.*}}, baseType: ![[CT16:[0-9]+]] - // CHECK-DAG: ![[CT16]] = !DICompositeType(tag: DW_TAG_array_type, baseType: ![[ELTTY16:[0-9]+]], flags: DIFlagVector, elements: ![[ELTS16x2]]) - // CHECK-DAG: ![[ELTTY16]] = !DIBasicType(name: "__fp16", size: 16, encoding: DW_ATE_float) - __clang_svfloat16x2_t f16; - - // CHECK: name: "__clang_svfloat32x2_t",{{.*}}, baseType: ![[CT32:[0-9]+]] - // CHECK-DAG: ![[CT32]] = !DICompositeType(tag: DW_TAG_array_type, baseType: ![[ELTTY32:[0-9]+]], flags: DIFlagVector, elements: ![[ELTS32x2]]) - // CHECK-DAG: ![[ELTTY32]] = !DIBasicType(name: "float", size: 32, encoding: DW_ATE_float) - __clang_svfloat32x2_t f32; - - // CHECK: name: "__clang_svfloat64x2_t",{{.*}}, baseType: ![[CT64:[0-9]+]] - // CHECK-DAG: ![[CT64]] = !DICompositeType(tag: DW_TAG_array_type, baseType: ![[ELTTY64:[0-9]+]], flags: DIFlagVector, elements: ![[ELTS1x2_64]]) - // CHECK-DAG: ![[ELTTY64]] = !DIBasicType(name: "double", size: 64, encoding: DW_ATE_float) - __clang_svfloat64x2_t f64; -} diff --git a/clang/test/CodeGen/AArch64/debug-sve-vectorx3-types.c b/clang/test/CodeGen/AArch64/debug-sve-vectorx3-types.c deleted file mode 100644 index 9855f85..0000000 --- a/clang/test/CodeGen/AArch64/debug-sve-vectorx3-types.c +++ /dev/null @@ -1,67 +0,0 @@ -// RUN: %clang_cc1 -triple aarch64-none-linux-gnu -target-feature +sve \ -// RUN: -emit-llvm -o - %s -debug-info-kind=limited 2>&1 | FileCheck %s - -void test_locals(void) { - // CHECK-DAG: name: "__clang_svint8x3_t",{{.*}}, baseType: ![[CT8:[0-9]+]] - // CHECK-DAG: ![[CT8]] = !DICompositeType(tag: DW_TAG_array_type, baseType: ![[ELTTY8:[0-9]+]], flags: DIFlagVector, elements: ![[ELTS8x3:[0-9]+]]) - // CHECK-DAG: ![[ELTTY8]] = !DIBasicType(name: "signed char", size: 8, encoding: DW_ATE_signed_char) - // CHECK-DAG: ![[ELTS8x3]] = !{![[REALELTS8x3:[0-9]+]]} - // CHECK-DAG: ![[REALELTS8x3]] = !DISubrange(lowerBound: 0, upperBound: !DIExpression(DW_OP_constu, 24, DW_OP_bregx, 46, 0, DW_OP_mul, DW_OP_constu, 1, DW_OP_minus)) - __clang_svint8x3_t s8; - - // CHECK-DAG: name: "__clang_svuint8x3_t",{{.*}}, baseType: ![[CT8:[0-9]+]] - // CHECK-DAG: ![[CT8]] = !DICompositeType(tag: DW_TAG_array_type, baseType: ![[ELTTY8:[0-9]+]], flags: DIFlagVector, elements: ![[ELTS8x3]]) - // CHECK-DAG: ![[ELTTY8]] = !DIBasicType(name: "unsigned char", size: 8, encoding: DW_ATE_unsigned_char) - __clang_svuint8x3_t u8; - - // CHECK-DAG: name: "__clang_svint16x3_t",{{.*}}, baseType: ![[CT16:[0-9]+]] - // CHECK-DAG: ![[CT16]] = !DICompositeType(tag: DW_TAG_array_type, baseType: ![[ELTTY16:[0-9]+]], flags: DIFlagVector, elements: ![[ELTS16x3:[0-9]+]]) - // CHECK-DAG: ![[ELTTY16]] = !DIBasicType(name: "short", size: 16, encoding: DW_ATE_signed) - // CHECK-DAG: ![[ELTS16x3]] = !{![[REALELTS16x3:[0-9]+]]} - // CHECK-DAG: ![[REALELTS16x3]] = !DISubrange(lowerBound: 0, upperBound: !DIExpression(DW_OP_constu, 12, DW_OP_bregx, 46, 0, DW_OP_mul, DW_OP_constu, 1, DW_OP_minus)) - __clang_svint16x3_t s16; - - // CHECK-DAG: name: "__clang_svuint16x3_t",{{.*}}, baseType: ![[CT16:[0-9]+]] - // CHECK-DAG: ![[CT16]] = !DICompositeType(tag: DW_TAG_array_type, baseType: ![[ELTTY16:[0-9]+]], flags: DIFlagVector, elements: ![[ELTS16x3]]) - // CHECK-DAG: ![[ELTTY16]] = !DIBasicType(name: "unsigned short", size: 16, encoding: DW_ATE_unsigned) - __clang_svuint16x3_t u16; - - // CHECK-DAG: name: "__clang_svint32x3_t",{{.*}}, baseType: ![[CT32:[0-9]+]] - // CHECK-DAG: ![[CT32]] = !DICompositeType(tag: DW_TAG_array_type, baseType: ![[ELTTY32:[0-9]+]], flags: DIFlagVector, elements: ![[ELTS32x3:[0-9]+]]) - // CHECK-DAG: ![[ELTTY32]] = !DIBasicType(name: "int", size: 32, encoding: DW_ATE_signed) - // CHECK-DAG: ![[ELTS32x3]] = !{![[REALELTS32x3:[0-9]+]]} - // CHECK-DAG: ![[REALELTS32x3]] = !DISubrange(lowerBound: 0, upperBound: !DIExpression(DW_OP_constu, 6, DW_OP_bregx, 46, 0, DW_OP_mul, DW_OP_constu, 1, DW_OP_minus)) - __clang_svint32x3_t s32; - - // CHECK-DAG: name: "__clang_svuint32x3_t",{{.*}}, baseType: ![[CT32:[0-9]+]] - // CHECK-DAG: ![[CT32]] = !DICompositeType(tag: DW_TAG_array_type, baseType: ![[ELTTY32:[0-9]+]], flags: DIFlagVector, elements: ![[ELTS32x3]]) - // CHECK-DAG: ![[ELTTY32]] = !DIBasicType(name: "unsigned int", size: 32, encoding: DW_ATE_unsigned) - __clang_svuint32x3_t u32; - - // CHECK-DAG: name: "__clang_svint64x3_t",{{.*}}, baseType: ![[CT64:[0-9]+]] - // CHECK-DAG: ![[CT64]] = !DICompositeType(tag: DW_TAG_array_type, baseType: ![[ELTTY64:[0-9]+]], flags: DIFlagVector, elements: ![[ELTS1x3_64:[0-9]+]]) - // CHECK-DAG: ![[ELTTY64]] = !DIBasicType(name: "long", size: 64, encoding: DW_ATE_signed) - // CHECK-DAG: ![[ELTS1x3_64]] = !{![[REALELTS1x3_64:[0-9]+]]} - // CHECK-DAG: ![[REALELTS1x3_64]] = !DISubrange(lowerBound: 0, upperBound: !DIExpression(DW_OP_constu, 3, DW_OP_bregx, 46, 0, DW_OP_mul, DW_OP_constu, 1, DW_OP_minus)) - __clang_svint64x3_t s64; - - // CHECK-DAG: name: "__clang_svuint64x3_t",{{.*}}, baseType: ![[CT64:[0-9]+]] - // CHECK-DAG: ![[CT64]] = !DICompositeType(tag: DW_TAG_array_type, baseType: ![[ELTTY64:[0-9]+]], flags: DIFlagVector, elements: ![[ELTS1x3_64]]) - // CHECK-DAG: ![[ELTTY64]] = !DIBasicType(name: "unsigned long", size: 64, encoding: DW_ATE_unsigned) - __clang_svuint64x3_t u64; - - // CHECK: name: "__clang_svfloat16x3_t",{{.*}}, baseType: ![[CT16:[0-9]+]] - // CHECK-DAG: ![[CT16]] = !DICompositeType(tag: DW_TAG_array_type, baseType: ![[ELTTY16:[0-9]+]], flags: DIFlagVector, elements: ![[ELTS16x3]]) - // CHECK-DAG: ![[ELTTY16]] = !DIBasicType(name: "__fp16", size: 16, encoding: DW_ATE_float) - __clang_svfloat16x3_t f16; - - // CHECK: name: "__clang_svfloat32x3_t",{{.*}}, baseType: ![[CT32:[0-9]+]] - // CHECK-DAG: ![[CT32]] = !DICompositeType(tag: DW_TAG_array_type, baseType: ![[ELTTY32:[0-9]+]], flags: DIFlagVector, elements: ![[ELTS32x3]]) - // CHECK-DAG: ![[ELTTY32]] = !DIBasicType(name: "float", size: 32, encoding: DW_ATE_float) - __clang_svfloat32x3_t f32; - - // CHECK: name: "__clang_svfloat64x3_t",{{.*}}, baseType: ![[CT64:[0-9]+]] - // CHECK-DAG: ![[CT64]] = !DICompositeType(tag: DW_TAG_array_type, baseType: ![[ELTTY64:[0-9]+]], flags: DIFlagVector, elements: ![[ELTS1x3_64]]) - // CHECK-DAG: ![[ELTTY64]] = !DIBasicType(name: "double", size: 64, encoding: DW_ATE_float) - __clang_svfloat64x3_t f64; -} diff --git a/clang/test/CodeGen/AArch64/debug-sve-vectorx4-types.c b/clang/test/CodeGen/AArch64/debug-sve-vectorx4-types.c deleted file mode 100644 index 6f302d3..0000000 --- a/clang/test/CodeGen/AArch64/debug-sve-vectorx4-types.c +++ /dev/null @@ -1,67 +0,0 @@ -// RUN: %clang_cc1 -triple aarch64-none-linux-gnu -target-feature +sve \ -// RUN: -emit-llvm -o - %s -debug-info-kind=limited 2>&1 | FileCheck %s - -void test_locals(void) { - // CHECK-DAG: name: "__clang_svint8x4_t",{{.*}}, baseType: ![[CT8:[0-9]+]] - // CHECK-DAG: ![[CT8]] = !DICompositeType(tag: DW_TAG_array_type, baseType: ![[ELTTY8:[0-9]+]], flags: DIFlagVector, elements: ![[ELTS8x4:[0-9]+]]) - // CHECK-DAG: ![[ELTTY8]] = !DIBasicType(name: "signed char", size: 8, encoding: DW_ATE_signed_char) - // CHECK-DAG: ![[ELTS8x4]] = !{![[REALELTS8x4:[0-9]+]]} - // CHECK-DAG: ![[REALELTS8x4]] = !DISubrange(lowerBound: 0, upperBound: !DIExpression(DW_OP_constu, 32, DW_OP_bregx, 46, 0, DW_OP_mul, DW_OP_constu, 1, DW_OP_minus)) - __clang_svint8x4_t s8; - - // CHECK-DAG: name: "__clang_svuint8x4_t",{{.*}}, baseType: ![[CT8:[0-9]+]] - // CHECK-DAG: ![[CT8]] = !DICompositeType(tag: DW_TAG_array_type, baseType: ![[ELTTY8:[0-9]+]], flags: DIFlagVector, elements: ![[ELTS8x4]]) - // CHECK-DAG: ![[ELTTY8]] = !DIBasicType(name: "unsigned char", size: 8, encoding: DW_ATE_unsigned_char) - __clang_svuint8x4_t u8; - - // CHECK-DAG: name: "__clang_svint16x4_t",{{.*}}, baseType: ![[CT16:[0-9]+]] - // CHECK-DAG: ![[CT16]] = !DICompositeType(tag: DW_TAG_array_type, baseType: ![[ELTTY16:[0-9]+]], flags: DIFlagVector, elements: ![[ELTS16x4:[0-9]+]]) - // CHECK-DAG: ![[ELTTY16]] = !DIBasicType(name: "short", size: 16, encoding: DW_ATE_signed) - // CHECK-DAG: ![[ELTS16x4]] = !{![[REALELTS16x4:[0-9]+]]} - // CHECK-DAG: ![[REALELTS16x4]] = !DISubrange(lowerBound: 0, upperBound: !DIExpression(DW_OP_constu, 16, DW_OP_bregx, 46, 0, DW_OP_mul, DW_OP_constu, 1, DW_OP_minus)) - __clang_svint16x4_t s16; - - // CHECK-DAG: name: "__clang_svuint16x4_t",{{.*}}, baseType: ![[CT16:[0-9]+]] - // CHECK-DAG: ![[CT16]] = !DICompositeType(tag: DW_TAG_array_type, baseType: ![[ELTTY16:[0-9]+]], flags: DIFlagVector, elements: ![[ELTS16x4]]) - // CHECK-DAG: ![[ELTTY16]] = !DIBasicType(name: "unsigned short", size: 16, encoding: DW_ATE_unsigned) - __clang_svuint16x4_t u16; - - // CHECK-DAG: name: "__clang_svint32x4_t",{{.*}}, baseType: ![[CT32:[0-9]+]] - // CHECK-DAG: ![[CT32]] = !DICompositeType(tag: DW_TAG_array_type, baseType: ![[ELTTY32:[0-9]+]], flags: DIFlagVector, elements: ![[ELTS32x4:[0-9]+]]) - // CHECK-DAG: ![[ELTTY32]] = !DIBasicType(name: "int", size: 32, encoding: DW_ATE_signed) - // CHECK-DAG: ![[ELTS32x4]] = !{![[REALELTS32x4:[0-9]+]]} - // CHECK-DAG: ![[REALELTS32x4]] = !DISubrange(lowerBound: 0, upperBound: !DIExpression(DW_OP_constu, 8, DW_OP_bregx, 46, 0, DW_OP_mul, DW_OP_constu, 1, DW_OP_minus)) - __clang_svint32x4_t s32; - - // CHECK-DAG: name: "__clang_svuint32x4_t",{{.*}}, baseType: ![[CT32:[0-9]+]] - // CHECK-DAG: ![[CT32]] = !DICompositeType(tag: DW_TAG_array_type, baseType: ![[ELTTY32:[0-9]+]], flags: DIFlagVector, elements: ![[ELTS32x4]]) - // CHECK-DAG: ![[ELTTY32]] = !DIBasicType(name: "unsigned int", size: 32, encoding: DW_ATE_unsigned) - __clang_svuint32x4_t u32; - - // CHECK-DAG: name: "__clang_svint64x4_t",{{.*}}, baseType: ![[CT64:[0-9]+]] - // CHECK-DAG: ![[CT64]] = !DICompositeType(tag: DW_TAG_array_type, baseType: ![[ELTTY64:[0-9]+]], flags: DIFlagVector, elements: ![[ELTS1x4_64:[0-9]+]]) - // CHECK-DAG: ![[ELTTY64]] = !DIBasicType(name: "long", size: 64, encoding: DW_ATE_signed) - // CHECK-DAG: ![[ELTS1x4_64]] = !{![[REALELTS1x4_64:[0-9]+]]} - // CHECK-DAG: ![[REALELTS1x4_64]] = !DISubrange(lowerBound: 0, upperBound: !DIExpression(DW_OP_constu, 4, DW_OP_bregx, 46, 0, DW_OP_mul, DW_OP_constu, 1, DW_OP_minus)) - __clang_svint64x4_t s64; - - // CHECK-DAG: name: "__clang_svuint64x4_t",{{.*}}, baseType: ![[CT64:[0-9]+]] - // CHECK-DAG: ![[CT64]] = !DICompositeType(tag: DW_TAG_array_type, baseType: ![[ELTTY64:[0-9]+]], flags: DIFlagVector, elements: ![[ELTS1x4_64]]) - // CHECK-DAG: ![[ELTTY64]] = !DIBasicType(name: "unsigned long", size: 64, encoding: DW_ATE_unsigned) - __clang_svuint64x4_t u64; - - // CHECK: name: "__clang_svfloat16x4_t",{{.*}}, baseType: ![[CT16:[0-9]+]] - // CHECK-DAG: ![[CT16]] = !DICompositeType(tag: DW_TAG_array_type, baseType: ![[ELTTY16:[0-9]+]], flags: DIFlagVector, elements: ![[ELTS16x4]]) - // CHECK-DAG: ![[ELTTY16]] = !DIBasicType(name: "__fp16", size: 16, encoding: DW_ATE_float) - __clang_svfloat16x4_t f16; - - // CHECK: name: "__clang_svfloat32x4_t",{{.*}}, baseType: ![[CT32:[0-9]+]] - // CHECK-DAG: ![[CT32]] = !DICompositeType(tag: DW_TAG_array_type, baseType: ![[ELTTY32:[0-9]+]], flags: DIFlagVector, elements: ![[ELTS32x4]]) - // CHECK-DAG: ![[ELTTY32]] = !DIBasicType(name: "float", size: 32, encoding: DW_ATE_float) - __clang_svfloat32x4_t f32; - - // CHECK: name: "__clang_svfloat64x4_t",{{.*}}, baseType: ![[CT64:[0-9]+]] - // CHECK-DAG: ![[CT64]] = !DICompositeType(tag: DW_TAG_array_type, baseType: ![[ELTTY64:[0-9]+]], flags: DIFlagVector, elements: ![[ELTS1x4_64]]) - // CHECK-DAG: ![[ELTTY64]] = !DIBasicType(name: "double", size: 64, encoding: DW_ATE_float) - __clang_svfloat64x4_t f64; -} diff --git a/clang/test/CodeGen/AArch64/debug-types.c b/clang/test/CodeGen/AArch64/debug-types.c deleted file mode 100644 index 19de216..0000000 --- a/clang/test/CodeGen/AArch64/debug-types.c +++ /dev/null @@ -1,10 +0,0 @@ -// RUN: %clang_cc1 -triple aarch64-none-linux-gnu -target-feature -fp8 \ -// RUN: -emit-llvm -o - %s -debug-info-kind=limited 2>&1 | FileCheck %s - -// REQUIRES: aarch64-registered-target - -void test_locals(void) { - // CHECK-DAG: !DIDerivedType(tag: DW_TAG_typedef, name: "__mfp8", {{.*}}, baseType: ![[ELTTYU8:[0-9]+]] - // CHECK-DAG: ![[ELTTYU8]] = !DIBasicType(name: "__mfp8", size: 8, encoding: DW_ATE_unsigned_char) - __mfp8 mfp8; -} diff --git a/clang/test/CodeGen/AArch64/pure-scalable-args-empty-union.c b/clang/test/CodeGen/AArch64/pure-scalable-args-empty-union.c index 804e14a..29aa532 100644 --- a/clang/test/CodeGen/AArch64/pure-scalable-args-empty-union.c +++ b/clang/test/CodeGen/AArch64/pure-scalable-args-empty-union.c @@ -23,7 +23,7 @@ void f0(S0 *p) { #ifdef __cplusplus -// PST containing an empty union with `[[no_unique_address]]`` - pass in registers. +// PST containing an empty union with `[[no_unique_address]]` - pass in registers. typedef struct { fvec32 x[4]; [[no_unique_address]] diff --git a/clang/test/CodeGen/AArch64/pure-scalable-args.c b/clang/test/CodeGen/AArch64/pure-scalable-args.c index 48988f7a..d34c7f9 100644 --- a/clang/test/CodeGen/AArch64/pure-scalable-args.c +++ b/clang/test/CodeGen/AArch64/pure-scalable-args.c @@ -329,7 +329,7 @@ void test_pass_variadic(PST *p, PST *q) { // CHECK-AAPCS: call void (<vscale x 16 x i1>, <vscale x 2 x double>, <vscale x 4 x float>, <vscale x 4 x float>, <vscale x 16 x i8>, <vscale x 16 x i1>, ...) @pass_variadic_callee(<vscale x 16 x i1> %1, <vscale x 2 x double> %cast.scalable1, <vscale x 4 x float> %cast.scalable2, <vscale x 4 x float> %cast.scalable3, <vscale x 16 x i8> %cast.scalable4, <vscale x 16 x i1> %12, ptr dead_on_return noundef nonnull %byval-temp) // CHECK-DARWIN: call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 16 dereferenceable(96) %byval-temp, ptr noundef nonnull align 16 dereferenceable(96) %p, i64 96, i1 false) -// CHECK-DARWIN: call void @llvm.lifetime.start.p0(i64 96, ptr nonnull %byval-temp1) +// CHECK-DARWIN: call void @llvm.lifetime.start.p0(ptr nonnull %byval-temp1) // CHECK-DARWIN: call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 16 dereferenceable(96) %byval-temp1, ptr noundef nonnull align 16 dereferenceable(96) %q, i64 96, i1 false) // CHECK-DARWIN: call void (ptr, ...) @pass_variadic_callee(ptr dead_on_return noundef nonnull %byval-temp, ptr dead_on_return noundef nonnull %byval-temp1) @@ -392,7 +392,7 @@ void test_va_arg(int n, ...) { // CHECK-AAPCS: define dso_local void @test_va_arg(i32 noundef %n, ...) // CHECK-AAPCS-NEXT: entry: // CHECK-AAPCS-NEXT: %ap = alloca %struct.__va_list, align 8 -// CHECK-AAPCS-NEXT: call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %ap) +// CHECK-AAPCS-NEXT: call void @llvm.lifetime.start.p0(ptr nonnull %ap) // CHECK-AAPCS-NEXT: call void @llvm.va_start.p0(ptr nonnull %ap) // CHECK-AAPCS-NEXT: %gr_offs_p = getelementptr inbounds nuw i8, ptr %ap, i64 24 // CHECK-AAPCS-NEXT: %gr_offs = load i32, ptr %gr_offs_p, align 8 @@ -435,14 +435,14 @@ void test_va_arg(int n, ...) { // CHECK-AAPCS-NEXT: %3 = bitcast <vscale x 2 x i8> %cast.scalable to <vscale x 16 x i1> // CHECK-AAPCS-NEXT: %cast.scalable2 = call <vscale x 4 x float> @llvm.vector.insert.nxv4f32.v4f32(<vscale x 4 x float> poison, <4 x float> %v.sroa.43.0.copyload, i64 0) // CHECK-AAPCS-NEXT: call void @use1(<vscale x 16 x i1> noundef %3, <vscale x 4 x float> noundef %cast.scalable2) -// CHECK-AAPCS-NEXT: call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %ap) +// CHECK-AAPCS-NEXT: call void @llvm.lifetime.end.p0(ptr nonnull %ap) // CHECK-AAPCS-NEXT: ret void // CHECK-AAPCS-NEXT: } // CHECK-DARWIN: define void @test_va_arg(i32 noundef %n, ...) // CHECK-DARWIN-NEXT: entry: // CHECK-DARWIN-NEXT: %ap = alloca ptr, align 8 -// CHECK-DARWIN-NEXT: call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %ap) +// CHECK-DARWIN-NEXT: call void @llvm.lifetime.start.p0(ptr nonnull %ap) // CHECK-DARWIN-NEXT: call void @llvm.va_start.p0(ptr nonnull %ap) // CHECK-DARWIN-NEXT: %argp.cur = load ptr, ptr %ap, align 8 // CHECK-DARWIN-NEXT: %argp.next = getelementptr inbounds nuw i8, ptr %argp.cur, i64 8 @@ -456,7 +456,7 @@ void test_va_arg(int n, ...) { // CHECK-DARWIN-NEXT: %1 = bitcast <vscale x 2 x i8> %cast.scalable to <vscale x 16 x i1> // CHECK-DARWIN-NEXT: %cast.scalable2 = call <vscale x 4 x float> @llvm.vector.insert.nxv4f32.v4f32(<vscale x 4 x float> poison, <4 x float> %v.sroa.43.0.copyload, i64 0) // CHECK-DARWIN-NEXT: call void @use1(<vscale x 16 x i1> noundef %1, <vscale x 4 x float> noundef %cast.scalable2) -// CHECK-DARWIN-NEXT: call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %ap) +// CHECK-DARWIN-NEXT: call void @llvm.lifetime.end.p0(ptr nonnull %ap) // CHECK-DARWIN-NEXT: ret void // CHECK-DARWIN-NEXT: } diff --git a/clang/test/CodeGen/AArch64/sme-intrinsics/acle_sme_ld1_vnum.c b/clang/test/CodeGen/AArch64/sme-intrinsics/acle_sme_ld1_vnum.c index fb86690..e4c93ad 100644 --- a/clang/test/CodeGen/AArch64/sme-intrinsics/acle_sme_ld1_vnum.c +++ b/clang/test/CodeGen/AArch64/sme-intrinsics/acle_sme_ld1_vnum.c @@ -9,29 +9,31 @@ // CHECK-C-LABEL: define dso_local void @test_svld1_hor_vnum_za8( // CHECK-C-SAME: i32 noundef [[SLICE_BASE:%.*]], <vscale x 16 x i1> [[PG:%.*]], ptr noundef [[PTR:%.*]], i64 noundef [[VNUM:%.*]]) local_unnamed_addr #[[ATTR0:[0-9]+]] { // CHECK-C-NEXT: entry: -// CHECK-C-NEXT: [[TMP0:%.*]] = tail call i64 @llvm.aarch64.sme.cntsb() -// CHECK-C-NEXT: [[MULVL:%.*]] = mul i64 [[TMP0]], [[VNUM]] -// CHECK-C-NEXT: [[TMP1:%.*]] = getelementptr i8, ptr [[PTR]], i64 [[MULVL]] -// CHECK-C-NEXT: [[TMP2:%.*]] = trunc i64 [[VNUM]] to i32 -// CHECK-C-NEXT: [[TMP3:%.*]] = add i32 [[SLICE_BASE]], [[TMP2]] -// CHECK-C-NEXT: tail call void @llvm.aarch64.sme.ld1b.horiz(<vscale x 16 x i1> [[PG]], ptr [[TMP1]], i32 0, i32 [[TMP3]]) -// CHECK-C-NEXT: [[ADD:%.*]] = add i32 [[SLICE_BASE]], [[TMP2]] -// CHECK-C-NEXT: [[TMP4:%.*]] = add i32 [[ADD]], 15 -// CHECK-C-NEXT: tail call void @llvm.aarch64.sme.ld1b.horiz(<vscale x 16 x i1> [[PG]], ptr [[TMP1]], i32 0, i32 [[TMP4]]) +// CHECK-C-NEXT: [[TMP0:%.*]] = tail call i64 @llvm.vscale.i64() +// CHECK-C-NEXT: [[TMP1:%.*]] = shl i64 [[VNUM]], 4 +// CHECK-C-NEXT: [[MULVL:%.*]] = mul i64 [[TMP1]], [[TMP0]] +// CHECK-C-NEXT: [[TMP2:%.*]] = getelementptr i8, ptr [[PTR]], i64 [[MULVL]] +// CHECK-C-NEXT: [[TMP3:%.*]] = trunc i64 [[VNUM]] to i32 +// CHECK-C-NEXT: [[TMP4:%.*]] = add i32 [[SLICE_BASE]], [[TMP3]] +// CHECK-C-NEXT: tail call void @llvm.aarch64.sme.ld1b.horiz(<vscale x 16 x i1> [[PG]], ptr [[TMP2]], i32 0, i32 [[TMP4]]) +// CHECK-C-NEXT: [[ADD:%.*]] = add i32 [[SLICE_BASE]], [[TMP3]] +// CHECK-C-NEXT: [[TMP5:%.*]] = add i32 [[ADD]], 15 +// CHECK-C-NEXT: tail call void @llvm.aarch64.sme.ld1b.horiz(<vscale x 16 x i1> [[PG]], ptr [[TMP2]], i32 0, i32 [[TMP5]]) // CHECK-C-NEXT: ret void // // CHECK-CXX-LABEL: define dso_local void @_Z23test_svld1_hor_vnum_za8ju10__SVBool_tPKvl( // CHECK-CXX-SAME: i32 noundef [[SLICE_BASE:%.*]], <vscale x 16 x i1> [[PG:%.*]], ptr noundef [[PTR:%.*]], i64 noundef [[VNUM:%.*]]) local_unnamed_addr #[[ATTR0:[0-9]+]] { // CHECK-CXX-NEXT: entry: -// CHECK-CXX-NEXT: [[TMP0:%.*]] = tail call i64 @llvm.aarch64.sme.cntsb() -// CHECK-CXX-NEXT: [[MULVL:%.*]] = mul i64 [[TMP0]], [[VNUM]] -// CHECK-CXX-NEXT: [[TMP1:%.*]] = getelementptr i8, ptr [[PTR]], i64 [[MULVL]] -// CHECK-CXX-NEXT: [[TMP2:%.*]] = trunc i64 [[VNUM]] to i32 -// CHECK-CXX-NEXT: [[TMP3:%.*]] = add i32 [[SLICE_BASE]], [[TMP2]] -// CHECK-CXX-NEXT: tail call void @llvm.aarch64.sme.ld1b.horiz(<vscale x 16 x i1> [[PG]], ptr [[TMP1]], i32 0, i32 [[TMP3]]) -// CHECK-CXX-NEXT: [[ADD:%.*]] = add i32 [[SLICE_BASE]], [[TMP2]] -// CHECK-CXX-NEXT: [[TMP4:%.*]] = add i32 [[ADD]], 15 -// CHECK-CXX-NEXT: tail call void @llvm.aarch64.sme.ld1b.horiz(<vscale x 16 x i1> [[PG]], ptr [[TMP1]], i32 0, i32 [[TMP4]]) +// CHECK-CXX-NEXT: [[TMP0:%.*]] = tail call i64 @llvm.vscale.i64() +// CHECK-CXX-NEXT: [[TMP1:%.*]] = shl i64 [[VNUM]], 4 +// CHECK-CXX-NEXT: [[MULVL:%.*]] = mul i64 [[TMP1]], [[TMP0]] +// CHECK-CXX-NEXT: [[TMP2:%.*]] = getelementptr i8, ptr [[PTR]], i64 [[MULVL]] +// CHECK-CXX-NEXT: [[TMP3:%.*]] = trunc i64 [[VNUM]] to i32 +// CHECK-CXX-NEXT: [[TMP4:%.*]] = add i32 [[SLICE_BASE]], [[TMP3]] +// CHECK-CXX-NEXT: tail call void @llvm.aarch64.sme.ld1b.horiz(<vscale x 16 x i1> [[PG]], ptr [[TMP2]], i32 0, i32 [[TMP4]]) +// CHECK-CXX-NEXT: [[ADD:%.*]] = add i32 [[SLICE_BASE]], [[TMP3]] +// CHECK-CXX-NEXT: [[TMP5:%.*]] = add i32 [[ADD]], 15 +// CHECK-CXX-NEXT: tail call void @llvm.aarch64.sme.ld1b.horiz(<vscale x 16 x i1> [[PG]], ptr [[TMP2]], i32 0, i32 [[TMP5]]) // CHECK-CXX-NEXT: ret void // void test_svld1_hor_vnum_za8(uint32_t slice_base, svbool_t pg, const void *ptr, int64_t vnum) __arm_streaming __arm_out("za") { @@ -43,30 +45,32 @@ void test_svld1_hor_vnum_za8(uint32_t slice_base, svbool_t pg, const void *ptr, // CHECK-C-SAME: i32 noundef [[SLICE_BASE:%.*]], <vscale x 16 x i1> [[PG:%.*]], ptr noundef [[PTR:%.*]], i64 noundef [[VNUM:%.*]]) local_unnamed_addr #[[ATTR0]] { // CHECK-C-NEXT: entry: // CHECK-C-NEXT: [[TMP0:%.*]] = tail call <vscale x 8 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv8i1(<vscale x 16 x i1> [[PG]]) -// CHECK-C-NEXT: [[TMP1:%.*]] = tail call i64 @llvm.aarch64.sme.cntsb() -// CHECK-C-NEXT: [[MULVL:%.*]] = mul i64 [[TMP1]], [[VNUM]] -// CHECK-C-NEXT: [[TMP2:%.*]] = getelementptr i8, ptr [[PTR]], i64 [[MULVL]] -// CHECK-C-NEXT: [[TMP3:%.*]] = trunc i64 [[VNUM]] to i32 -// CHECK-C-NEXT: [[TMP4:%.*]] = add i32 [[SLICE_BASE]], [[TMP3]] -// CHECK-C-NEXT: tail call void @llvm.aarch64.sme.ld1h.horiz(<vscale x 8 x i1> [[TMP0]], ptr [[TMP2]], i32 0, i32 [[TMP4]]) -// CHECK-C-NEXT: [[ADD:%.*]] = add i32 [[SLICE_BASE]], [[TMP3]] -// CHECK-C-NEXT: [[TMP5:%.*]] = add i32 [[ADD]], 7 -// CHECK-C-NEXT: tail call void @llvm.aarch64.sme.ld1h.horiz(<vscale x 8 x i1> [[TMP0]], ptr [[TMP2]], i32 1, i32 [[TMP5]]) +// CHECK-C-NEXT: [[TMP1:%.*]] = tail call i64 @llvm.vscale.i64() +// CHECK-C-NEXT: [[TMP2:%.*]] = shl i64 [[VNUM]], 4 +// CHECK-C-NEXT: [[MULVL:%.*]] = mul i64 [[TMP2]], [[TMP1]] +// CHECK-C-NEXT: [[TMP3:%.*]] = getelementptr i8, ptr [[PTR]], i64 [[MULVL]] +// CHECK-C-NEXT: [[TMP4:%.*]] = trunc i64 [[VNUM]] to i32 +// CHECK-C-NEXT: [[TMP5:%.*]] = add i32 [[SLICE_BASE]], [[TMP4]] +// CHECK-C-NEXT: tail call void @llvm.aarch64.sme.ld1h.horiz(<vscale x 8 x i1> [[TMP0]], ptr [[TMP3]], i32 0, i32 [[TMP5]]) +// CHECK-C-NEXT: [[ADD:%.*]] = add i32 [[SLICE_BASE]], [[TMP4]] +// CHECK-C-NEXT: [[TMP6:%.*]] = add i32 [[ADD]], 7 +// CHECK-C-NEXT: tail call void @llvm.aarch64.sme.ld1h.horiz(<vscale x 8 x i1> [[TMP0]], ptr [[TMP3]], i32 1, i32 [[TMP6]]) // CHECK-C-NEXT: ret void // // CHECK-CXX-LABEL: define dso_local void @_Z24test_svld1_hor_vnum_za16ju10__SVBool_tPKvl( // CHECK-CXX-SAME: i32 noundef [[SLICE_BASE:%.*]], <vscale x 16 x i1> [[PG:%.*]], ptr noundef [[PTR:%.*]], i64 noundef [[VNUM:%.*]]) local_unnamed_addr #[[ATTR0]] { // CHECK-CXX-NEXT: entry: // CHECK-CXX-NEXT: [[TMP0:%.*]] = tail call <vscale x 8 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv8i1(<vscale x 16 x i1> [[PG]]) -// CHECK-CXX-NEXT: [[TMP1:%.*]] = tail call i64 @llvm.aarch64.sme.cntsb() -// CHECK-CXX-NEXT: [[MULVL:%.*]] = mul i64 [[TMP1]], [[VNUM]] -// CHECK-CXX-NEXT: [[TMP2:%.*]] = getelementptr i8, ptr [[PTR]], i64 [[MULVL]] -// CHECK-CXX-NEXT: [[TMP3:%.*]] = trunc i64 [[VNUM]] to i32 -// CHECK-CXX-NEXT: [[TMP4:%.*]] = add i32 [[SLICE_BASE]], [[TMP3]] -// CHECK-CXX-NEXT: tail call void @llvm.aarch64.sme.ld1h.horiz(<vscale x 8 x i1> [[TMP0]], ptr [[TMP2]], i32 0, i32 [[TMP4]]) -// CHECK-CXX-NEXT: [[ADD:%.*]] = add i32 [[SLICE_BASE]], [[TMP3]] -// CHECK-CXX-NEXT: [[TMP5:%.*]] = add i32 [[ADD]], 7 -// CHECK-CXX-NEXT: tail call void @llvm.aarch64.sme.ld1h.horiz(<vscale x 8 x i1> [[TMP0]], ptr [[TMP2]], i32 1, i32 [[TMP5]]) +// CHECK-CXX-NEXT: [[TMP1:%.*]] = tail call i64 @llvm.vscale.i64() +// CHECK-CXX-NEXT: [[TMP2:%.*]] = shl i64 [[VNUM]], 4 +// CHECK-CXX-NEXT: [[MULVL:%.*]] = mul i64 [[TMP2]], [[TMP1]] +// CHECK-CXX-NEXT: [[TMP3:%.*]] = getelementptr i8, ptr [[PTR]], i64 [[MULVL]] +// CHECK-CXX-NEXT: [[TMP4:%.*]] = trunc i64 [[VNUM]] to i32 +// CHECK-CXX-NEXT: [[TMP5:%.*]] = add i32 [[SLICE_BASE]], [[TMP4]] +// CHECK-CXX-NEXT: tail call void @llvm.aarch64.sme.ld1h.horiz(<vscale x 8 x i1> [[TMP0]], ptr [[TMP3]], i32 0, i32 [[TMP5]]) +// CHECK-CXX-NEXT: [[ADD:%.*]] = add i32 [[SLICE_BASE]], [[TMP4]] +// CHECK-CXX-NEXT: [[TMP6:%.*]] = add i32 [[ADD]], 7 +// CHECK-CXX-NEXT: tail call void @llvm.aarch64.sme.ld1h.horiz(<vscale x 8 x i1> [[TMP0]], ptr [[TMP3]], i32 1, i32 [[TMP6]]) // CHECK-CXX-NEXT: ret void // void test_svld1_hor_vnum_za16(uint32_t slice_base, svbool_t pg, const void *ptr, int64_t vnum) __arm_streaming __arm_out("za") { @@ -78,30 +82,32 @@ void test_svld1_hor_vnum_za16(uint32_t slice_base, svbool_t pg, const void *ptr, // CHECK-C-SAME: i32 noundef [[SLICE_BASE:%.*]], <vscale x 16 x i1> [[PG:%.*]], ptr noundef [[PTR:%.*]], i64 noundef [[VNUM:%.*]]) local_unnamed_addr #[[ATTR0]] { // CHECK-C-NEXT: entry: // CHECK-C-NEXT: [[TMP0:%.*]] = tail call <vscale x 4 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv4i1(<vscale x 16 x i1> [[PG]]) -// CHECK-C-NEXT: [[TMP1:%.*]] = tail call i64 @llvm.aarch64.sme.cntsb() -// CHECK-C-NEXT: [[MULVL:%.*]] = mul i64 [[TMP1]], [[VNUM]] -// CHECK-C-NEXT: [[TMP2:%.*]] = getelementptr i8, ptr [[PTR]], i64 [[MULVL]] -// CHECK-C-NEXT: [[TMP3:%.*]] = trunc i64 [[VNUM]] to i32 -// CHECK-C-NEXT: [[TMP4:%.*]] = add i32 [[SLICE_BASE]], [[TMP3]] -// CHECK-C-NEXT: tail call void @llvm.aarch64.sme.ld1w.horiz(<vscale x 4 x i1> [[TMP0]], ptr [[TMP2]], i32 0, i32 [[TMP4]]) -// CHECK-C-NEXT: [[ADD:%.*]] = add i32 [[SLICE_BASE]], [[TMP3]] -// CHECK-C-NEXT: [[TMP5:%.*]] = add i32 [[ADD]], 3 -// CHECK-C-NEXT: tail call void @llvm.aarch64.sme.ld1w.horiz(<vscale x 4 x i1> [[TMP0]], ptr [[TMP2]], i32 3, i32 [[TMP5]]) +// CHECK-C-NEXT: [[TMP1:%.*]] = tail call i64 @llvm.vscale.i64() +// CHECK-C-NEXT: [[TMP2:%.*]] = shl i64 [[VNUM]], 4 +// CHECK-C-NEXT: [[MULVL:%.*]] = mul i64 [[TMP2]], [[TMP1]] +// CHECK-C-NEXT: [[TMP3:%.*]] = getelementptr i8, ptr [[PTR]], i64 [[MULVL]] +// CHECK-C-NEXT: [[TMP4:%.*]] = trunc i64 [[VNUM]] to i32 +// CHECK-C-NEXT: [[TMP5:%.*]] = add i32 [[SLICE_BASE]], [[TMP4]] +// CHECK-C-NEXT: tail call void @llvm.aarch64.sme.ld1w.horiz(<vscale x 4 x i1> [[TMP0]], ptr [[TMP3]], i32 0, i32 [[TMP5]]) +// CHECK-C-NEXT: [[ADD:%.*]] = add i32 [[SLICE_BASE]], [[TMP4]] +// CHECK-C-NEXT: [[TMP6:%.*]] = add i32 [[ADD]], 3 +// CHECK-C-NEXT: tail call void @llvm.aarch64.sme.ld1w.horiz(<vscale x 4 x i1> [[TMP0]], ptr [[TMP3]], i32 3, i32 [[TMP6]]) // CHECK-C-NEXT: ret void // // CHECK-CXX-LABEL: define dso_local void @_Z24test_svld1_hor_vnum_za32ju10__SVBool_tPKvl( // CHECK-CXX-SAME: i32 noundef [[SLICE_BASE:%.*]], <vscale x 16 x i1> [[PG:%.*]], ptr noundef [[PTR:%.*]], i64 noundef [[VNUM:%.*]]) local_unnamed_addr #[[ATTR0]] { // CHECK-CXX-NEXT: entry: // CHECK-CXX-NEXT: [[TMP0:%.*]] = tail call <vscale x 4 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv4i1(<vscale x 16 x i1> [[PG]]) -// CHECK-CXX-NEXT: [[TMP1:%.*]] = tail call i64 @llvm.aarch64.sme.cntsb() -// CHECK-CXX-NEXT: [[MULVL:%.*]] = mul i64 [[TMP1]], [[VNUM]] -// CHECK-CXX-NEXT: [[TMP2:%.*]] = getelementptr i8, ptr [[PTR]], i64 [[MULVL]] -// CHECK-CXX-NEXT: [[TMP3:%.*]] = trunc i64 [[VNUM]] to i32 -// CHECK-CXX-NEXT: [[TMP4:%.*]] = add i32 [[SLICE_BASE]], [[TMP3]] -// CHECK-CXX-NEXT: tail call void @llvm.aarch64.sme.ld1w.horiz(<vscale x 4 x i1> [[TMP0]], ptr [[TMP2]], i32 0, i32 [[TMP4]]) -// CHECK-CXX-NEXT: [[ADD:%.*]] = add i32 [[SLICE_BASE]], [[TMP3]] -// CHECK-CXX-NEXT: [[TMP5:%.*]] = add i32 [[ADD]], 3 -// CHECK-CXX-NEXT: tail call void @llvm.aarch64.sme.ld1w.horiz(<vscale x 4 x i1> [[TMP0]], ptr [[TMP2]], i32 3, i32 [[TMP5]]) +// CHECK-CXX-NEXT: [[TMP1:%.*]] = tail call i64 @llvm.vscale.i64() +// CHECK-CXX-NEXT: [[TMP2:%.*]] = shl i64 [[VNUM]], 4 +// CHECK-CXX-NEXT: [[MULVL:%.*]] = mul i64 [[TMP2]], [[TMP1]] +// CHECK-CXX-NEXT: [[TMP3:%.*]] = getelementptr i8, ptr [[PTR]], i64 [[MULVL]] +// CHECK-CXX-NEXT: [[TMP4:%.*]] = trunc i64 [[VNUM]] to i32 +// CHECK-CXX-NEXT: [[TMP5:%.*]] = add i32 [[SLICE_BASE]], [[TMP4]] +// CHECK-CXX-NEXT: tail call void @llvm.aarch64.sme.ld1w.horiz(<vscale x 4 x i1> [[TMP0]], ptr [[TMP3]], i32 0, i32 [[TMP5]]) +// CHECK-CXX-NEXT: [[ADD:%.*]] = add i32 [[SLICE_BASE]], [[TMP4]] +// CHECK-CXX-NEXT: [[TMP6:%.*]] = add i32 [[ADD]], 3 +// CHECK-CXX-NEXT: tail call void @llvm.aarch64.sme.ld1w.horiz(<vscale x 4 x i1> [[TMP0]], ptr [[TMP3]], i32 3, i32 [[TMP6]]) // CHECK-CXX-NEXT: ret void // void test_svld1_hor_vnum_za32(uint32_t slice_base, svbool_t pg, const void *ptr, int64_t vnum) __arm_streaming __arm_out("za") { @@ -113,30 +119,32 @@ void test_svld1_hor_vnum_za32(uint32_t slice_base, svbool_t pg, const void *ptr, // CHECK-C-SAME: i32 noundef [[SLICE_BASE:%.*]], <vscale x 16 x i1> [[PG:%.*]], ptr noundef [[PTR:%.*]], i64 noundef [[VNUM:%.*]]) local_unnamed_addr #[[ATTR0]] { // CHECK-C-NEXT: entry: // CHECK-C-NEXT: [[TMP0:%.*]] = tail call <vscale x 2 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv2i1(<vscale x 16 x i1> [[PG]]) -// CHECK-C-NEXT: [[TMP1:%.*]] = tail call i64 @llvm.aarch64.sme.cntsb() -// CHECK-C-NEXT: [[MULVL:%.*]] = mul i64 [[TMP1]], [[VNUM]] -// CHECK-C-NEXT: [[TMP2:%.*]] = getelementptr i8, ptr [[PTR]], i64 [[MULVL]] -// CHECK-C-NEXT: [[TMP3:%.*]] = trunc i64 [[VNUM]] to i32 -// CHECK-C-NEXT: [[TMP4:%.*]] = add i32 [[SLICE_BASE]], [[TMP3]] -// CHECK-C-NEXT: tail call void @llvm.aarch64.sme.ld1d.horiz(<vscale x 2 x i1> [[TMP0]], ptr [[TMP2]], i32 0, i32 [[TMP4]]) -// CHECK-C-NEXT: [[ADD:%.*]] = add i32 [[SLICE_BASE]], [[TMP3]] -// CHECK-C-NEXT: [[TMP5:%.*]] = add i32 [[ADD]], 1 -// CHECK-C-NEXT: tail call void @llvm.aarch64.sme.ld1d.horiz(<vscale x 2 x i1> [[TMP0]], ptr [[TMP2]], i32 7, i32 [[TMP5]]) +// CHECK-C-NEXT: [[TMP1:%.*]] = tail call i64 @llvm.vscale.i64() +// CHECK-C-NEXT: [[TMP2:%.*]] = shl i64 [[VNUM]], 4 +// CHECK-C-NEXT: [[MULVL:%.*]] = mul i64 [[TMP2]], [[TMP1]] +// CHECK-C-NEXT: [[TMP3:%.*]] = getelementptr i8, ptr [[PTR]], i64 [[MULVL]] +// CHECK-C-NEXT: [[TMP4:%.*]] = trunc i64 [[VNUM]] to i32 +// CHECK-C-NEXT: [[TMP5:%.*]] = add i32 [[SLICE_BASE]], [[TMP4]] +// CHECK-C-NEXT: tail call void @llvm.aarch64.sme.ld1d.horiz(<vscale x 2 x i1> [[TMP0]], ptr [[TMP3]], i32 0, i32 [[TMP5]]) +// CHECK-C-NEXT: [[ADD:%.*]] = add i32 [[SLICE_BASE]], [[TMP4]] +// CHECK-C-NEXT: [[TMP6:%.*]] = add i32 [[ADD]], 1 +// CHECK-C-NEXT: tail call void @llvm.aarch64.sme.ld1d.horiz(<vscale x 2 x i1> [[TMP0]], ptr [[TMP3]], i32 7, i32 [[TMP6]]) // CHECK-C-NEXT: ret void // // CHECK-CXX-LABEL: define dso_local void @_Z24test_svld1_hor_vnum_za64ju10__SVBool_tPKvl( // CHECK-CXX-SAME: i32 noundef [[SLICE_BASE:%.*]], <vscale x 16 x i1> [[PG:%.*]], ptr noundef [[PTR:%.*]], i64 noundef [[VNUM:%.*]]) local_unnamed_addr #[[ATTR0]] { // CHECK-CXX-NEXT: entry: // CHECK-CXX-NEXT: [[TMP0:%.*]] = tail call <vscale x 2 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv2i1(<vscale x 16 x i1> [[PG]]) -// CHECK-CXX-NEXT: [[TMP1:%.*]] = tail call i64 @llvm.aarch64.sme.cntsb() -// CHECK-CXX-NEXT: [[MULVL:%.*]] = mul i64 [[TMP1]], [[VNUM]] -// CHECK-CXX-NEXT: [[TMP2:%.*]] = getelementptr i8, ptr [[PTR]], i64 [[MULVL]] -// CHECK-CXX-NEXT: [[TMP3:%.*]] = trunc i64 [[VNUM]] to i32 -// CHECK-CXX-NEXT: [[TMP4:%.*]] = add i32 [[SLICE_BASE]], [[TMP3]] -// CHECK-CXX-NEXT: tail call void @llvm.aarch64.sme.ld1d.horiz(<vscale x 2 x i1> [[TMP0]], ptr [[TMP2]], i32 0, i32 [[TMP4]]) -// CHECK-CXX-NEXT: [[ADD:%.*]] = add i32 [[SLICE_BASE]], [[TMP3]] -// CHECK-CXX-NEXT: [[TMP5:%.*]] = add i32 [[ADD]], 1 -// CHECK-CXX-NEXT: tail call void @llvm.aarch64.sme.ld1d.horiz(<vscale x 2 x i1> [[TMP0]], ptr [[TMP2]], i32 7, i32 [[TMP5]]) +// CHECK-CXX-NEXT: [[TMP1:%.*]] = tail call i64 @llvm.vscale.i64() +// CHECK-CXX-NEXT: [[TMP2:%.*]] = shl i64 [[VNUM]], 4 +// CHECK-CXX-NEXT: [[MULVL:%.*]] = mul i64 [[TMP2]], [[TMP1]] +// CHECK-CXX-NEXT: [[TMP3:%.*]] = getelementptr i8, ptr [[PTR]], i64 [[MULVL]] +// CHECK-CXX-NEXT: [[TMP4:%.*]] = trunc i64 [[VNUM]] to i32 +// CHECK-CXX-NEXT: [[TMP5:%.*]] = add i32 [[SLICE_BASE]], [[TMP4]] +// CHECK-CXX-NEXT: tail call void @llvm.aarch64.sme.ld1d.horiz(<vscale x 2 x i1> [[TMP0]], ptr [[TMP3]], i32 0, i32 [[TMP5]]) +// CHECK-CXX-NEXT: [[ADD:%.*]] = add i32 [[SLICE_BASE]], [[TMP4]] +// CHECK-CXX-NEXT: [[TMP6:%.*]] = add i32 [[ADD]], 1 +// CHECK-CXX-NEXT: tail call void @llvm.aarch64.sme.ld1d.horiz(<vscale x 2 x i1> [[TMP0]], ptr [[TMP3]], i32 7, i32 [[TMP6]]) // CHECK-CXX-NEXT: ret void // void test_svld1_hor_vnum_za64(uint32_t slice_base, svbool_t pg, const void *ptr, int64_t vnum) __arm_streaming __arm_out("za") { @@ -148,26 +156,28 @@ void test_svld1_hor_vnum_za64(uint32_t slice_base, svbool_t pg, const void *ptr, // CHECK-C-SAME: i32 noundef [[SLICE_BASE:%.*]], <vscale x 16 x i1> [[PG:%.*]], ptr noundef [[PTR:%.*]], i64 noundef [[VNUM:%.*]]) local_unnamed_addr #[[ATTR0]] { // CHECK-C-NEXT: entry: // CHECK-C-NEXT: [[TMP0:%.*]] = tail call <vscale x 1 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv1i1(<vscale x 16 x i1> [[PG]]) -// CHECK-C-NEXT: [[TMP1:%.*]] = tail call i64 @llvm.aarch64.sme.cntsb() -// CHECK-C-NEXT: [[MULVL:%.*]] = mul i64 [[TMP1]], [[VNUM]] -// CHECK-C-NEXT: [[TMP2:%.*]] = getelementptr i8, ptr [[PTR]], i64 [[MULVL]] -// CHECK-C-NEXT: [[TMP3:%.*]] = trunc i64 [[VNUM]] to i32 -// CHECK-C-NEXT: [[TMP4:%.*]] = add i32 [[SLICE_BASE]], [[TMP3]] -// CHECK-C-NEXT: tail call void @llvm.aarch64.sme.ld1q.horiz(<vscale x 1 x i1> [[TMP0]], ptr [[TMP2]], i32 0, i32 [[TMP4]]) -// CHECK-C-NEXT: tail call void @llvm.aarch64.sme.ld1q.horiz(<vscale x 1 x i1> [[TMP0]], ptr [[TMP2]], i32 15, i32 [[TMP4]]) +// CHECK-C-NEXT: [[TMP1:%.*]] = tail call i64 @llvm.vscale.i64() +// CHECK-C-NEXT: [[TMP2:%.*]] = shl i64 [[VNUM]], 4 +// CHECK-C-NEXT: [[MULVL:%.*]] = mul i64 [[TMP2]], [[TMP1]] +// CHECK-C-NEXT: [[TMP3:%.*]] = getelementptr i8, ptr [[PTR]], i64 [[MULVL]] +// CHECK-C-NEXT: [[TMP4:%.*]] = trunc i64 [[VNUM]] to i32 +// CHECK-C-NEXT: [[TMP5:%.*]] = add i32 [[SLICE_BASE]], [[TMP4]] +// CHECK-C-NEXT: tail call void @llvm.aarch64.sme.ld1q.horiz(<vscale x 1 x i1> [[TMP0]], ptr [[TMP3]], i32 0, i32 [[TMP5]]) +// CHECK-C-NEXT: tail call void @llvm.aarch64.sme.ld1q.horiz(<vscale x 1 x i1> [[TMP0]], ptr [[TMP3]], i32 15, i32 [[TMP5]]) // CHECK-C-NEXT: ret void // // CHECK-CXX-LABEL: define dso_local void @_Z25test_svld1_hor_vnum_za128ju10__SVBool_tPKvl( // CHECK-CXX-SAME: i32 noundef [[SLICE_BASE:%.*]], <vscale x 16 x i1> [[PG:%.*]], ptr noundef [[PTR:%.*]], i64 noundef [[VNUM:%.*]]) local_unnamed_addr #[[ATTR0]] { // CHECK-CXX-NEXT: entry: // CHECK-CXX-NEXT: [[TMP0:%.*]] = tail call <vscale x 1 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv1i1(<vscale x 16 x i1> [[PG]]) -// CHECK-CXX-NEXT: [[TMP1:%.*]] = tail call i64 @llvm.aarch64.sme.cntsb() -// CHECK-CXX-NEXT: [[MULVL:%.*]] = mul i64 [[TMP1]], [[VNUM]] -// CHECK-CXX-NEXT: [[TMP2:%.*]] = getelementptr i8, ptr [[PTR]], i64 [[MULVL]] -// CHECK-CXX-NEXT: [[TMP3:%.*]] = trunc i64 [[VNUM]] to i32 -// CHECK-CXX-NEXT: [[TMP4:%.*]] = add i32 [[SLICE_BASE]], [[TMP3]] -// CHECK-CXX-NEXT: tail call void @llvm.aarch64.sme.ld1q.horiz(<vscale x 1 x i1> [[TMP0]], ptr [[TMP2]], i32 0, i32 [[TMP4]]) -// CHECK-CXX-NEXT: tail call void @llvm.aarch64.sme.ld1q.horiz(<vscale x 1 x i1> [[TMP0]], ptr [[TMP2]], i32 15, i32 [[TMP4]]) +// CHECK-CXX-NEXT: [[TMP1:%.*]] = tail call i64 @llvm.vscale.i64() +// CHECK-CXX-NEXT: [[TMP2:%.*]] = shl i64 [[VNUM]], 4 +// CHECK-CXX-NEXT: [[MULVL:%.*]] = mul i64 [[TMP2]], [[TMP1]] +// CHECK-CXX-NEXT: [[TMP3:%.*]] = getelementptr i8, ptr [[PTR]], i64 [[MULVL]] +// CHECK-CXX-NEXT: [[TMP4:%.*]] = trunc i64 [[VNUM]] to i32 +// CHECK-CXX-NEXT: [[TMP5:%.*]] = add i32 [[SLICE_BASE]], [[TMP4]] +// CHECK-CXX-NEXT: tail call void @llvm.aarch64.sme.ld1q.horiz(<vscale x 1 x i1> [[TMP0]], ptr [[TMP3]], i32 0, i32 [[TMP5]]) +// CHECK-CXX-NEXT: tail call void @llvm.aarch64.sme.ld1q.horiz(<vscale x 1 x i1> [[TMP0]], ptr [[TMP3]], i32 15, i32 [[TMP5]]) // CHECK-CXX-NEXT: ret void // void test_svld1_hor_vnum_za128(uint32_t slice_base, svbool_t pg, const void *ptr, int64_t vnum) __arm_streaming __arm_out("za") { @@ -178,29 +188,31 @@ void test_svld1_hor_vnum_za128(uint32_t slice_base, svbool_t pg, const void *ptr // CHECK-C-LABEL: define dso_local void @test_svld1_ver_hor_za8( // CHECK-C-SAME: i32 noundef [[SLICE_BASE:%.*]], <vscale x 16 x i1> [[PG:%.*]], ptr noundef [[PTR:%.*]], i64 noundef [[VNUM:%.*]]) local_unnamed_addr #[[ATTR0]] { // CHECK-C-NEXT: entry: -// CHECK-C-NEXT: [[TMP0:%.*]] = tail call i64 @llvm.aarch64.sme.cntsb() -// CHECK-C-NEXT: [[MULVL:%.*]] = mul i64 [[TMP0]], [[VNUM]] -// CHECK-C-NEXT: [[TMP1:%.*]] = getelementptr i8, ptr [[PTR]], i64 [[MULVL]] -// CHECK-C-NEXT: [[TMP2:%.*]] = trunc i64 [[VNUM]] to i32 -// CHECK-C-NEXT: [[TMP3:%.*]] = add i32 [[SLICE_BASE]], [[TMP2]] -// CHECK-C-NEXT: tail call void @llvm.aarch64.sme.ld1b.vert(<vscale x 16 x i1> [[PG]], ptr [[TMP1]], i32 0, i32 [[TMP3]]) -// CHECK-C-NEXT: [[ADD:%.*]] = add i32 [[SLICE_BASE]], [[TMP2]] -// CHECK-C-NEXT: [[TMP4:%.*]] = add i32 [[ADD]], 15 -// CHECK-C-NEXT: tail call void @llvm.aarch64.sme.ld1b.vert(<vscale x 16 x i1> [[PG]], ptr [[TMP1]], i32 0, i32 [[TMP4]]) +// CHECK-C-NEXT: [[TMP0:%.*]] = tail call i64 @llvm.vscale.i64() +// CHECK-C-NEXT: [[TMP1:%.*]] = shl i64 [[VNUM]], 4 +// CHECK-C-NEXT: [[MULVL:%.*]] = mul i64 [[TMP1]], [[TMP0]] +// CHECK-C-NEXT: [[TMP2:%.*]] = getelementptr i8, ptr [[PTR]], i64 [[MULVL]] +// CHECK-C-NEXT: [[TMP3:%.*]] = trunc i64 [[VNUM]] to i32 +// CHECK-C-NEXT: [[TMP4:%.*]] = add i32 [[SLICE_BASE]], [[TMP3]] +// CHECK-C-NEXT: tail call void @llvm.aarch64.sme.ld1b.vert(<vscale x 16 x i1> [[PG]], ptr [[TMP2]], i32 0, i32 [[TMP4]]) +// CHECK-C-NEXT: [[ADD:%.*]] = add i32 [[SLICE_BASE]], [[TMP3]] +// CHECK-C-NEXT: [[TMP5:%.*]] = add i32 [[ADD]], 15 +// CHECK-C-NEXT: tail call void @llvm.aarch64.sme.ld1b.vert(<vscale x 16 x i1> [[PG]], ptr [[TMP2]], i32 0, i32 [[TMP5]]) // CHECK-C-NEXT: ret void // // CHECK-CXX-LABEL: define dso_local void @_Z22test_svld1_ver_hor_za8ju10__SVBool_tPKvl( // CHECK-CXX-SAME: i32 noundef [[SLICE_BASE:%.*]], <vscale x 16 x i1> [[PG:%.*]], ptr noundef [[PTR:%.*]], i64 noundef [[VNUM:%.*]]) local_unnamed_addr #[[ATTR0]] { // CHECK-CXX-NEXT: entry: -// CHECK-CXX-NEXT: [[TMP0:%.*]] = tail call i64 @llvm.aarch64.sme.cntsb() -// CHECK-CXX-NEXT: [[MULVL:%.*]] = mul i64 [[TMP0]], [[VNUM]] -// CHECK-CXX-NEXT: [[TMP1:%.*]] = getelementptr i8, ptr [[PTR]], i64 [[MULVL]] -// CHECK-CXX-NEXT: [[TMP2:%.*]] = trunc i64 [[VNUM]] to i32 -// CHECK-CXX-NEXT: [[TMP3:%.*]] = add i32 [[SLICE_BASE]], [[TMP2]] -// CHECK-CXX-NEXT: tail call void @llvm.aarch64.sme.ld1b.vert(<vscale x 16 x i1> [[PG]], ptr [[TMP1]], i32 0, i32 [[TMP3]]) -// CHECK-CXX-NEXT: [[ADD:%.*]] = add i32 [[SLICE_BASE]], [[TMP2]] -// CHECK-CXX-NEXT: [[TMP4:%.*]] = add i32 [[ADD]], 15 -// CHECK-CXX-NEXT: tail call void @llvm.aarch64.sme.ld1b.vert(<vscale x 16 x i1> [[PG]], ptr [[TMP1]], i32 0, i32 [[TMP4]]) +// CHECK-CXX-NEXT: [[TMP0:%.*]] = tail call i64 @llvm.vscale.i64() +// CHECK-CXX-NEXT: [[TMP1:%.*]] = shl i64 [[VNUM]], 4 +// CHECK-CXX-NEXT: [[MULVL:%.*]] = mul i64 [[TMP1]], [[TMP0]] +// CHECK-CXX-NEXT: [[TMP2:%.*]] = getelementptr i8, ptr [[PTR]], i64 [[MULVL]] +// CHECK-CXX-NEXT: [[TMP3:%.*]] = trunc i64 [[VNUM]] to i32 +// CHECK-CXX-NEXT: [[TMP4:%.*]] = add i32 [[SLICE_BASE]], [[TMP3]] +// CHECK-CXX-NEXT: tail call void @llvm.aarch64.sme.ld1b.vert(<vscale x 16 x i1> [[PG]], ptr [[TMP2]], i32 0, i32 [[TMP4]]) +// CHECK-CXX-NEXT: [[ADD:%.*]] = add i32 [[SLICE_BASE]], [[TMP3]] +// CHECK-CXX-NEXT: [[TMP5:%.*]] = add i32 [[ADD]], 15 +// CHECK-CXX-NEXT: tail call void @llvm.aarch64.sme.ld1b.vert(<vscale x 16 x i1> [[PG]], ptr [[TMP2]], i32 0, i32 [[TMP5]]) // CHECK-CXX-NEXT: ret void // void test_svld1_ver_hor_za8(uint32_t slice_base, svbool_t pg, const void *ptr, int64_t vnum) __arm_streaming __arm_out("za") { @@ -212,30 +224,32 @@ void test_svld1_ver_hor_za8(uint32_t slice_base, svbool_t pg, const void *ptr, i // CHECK-C-SAME: i32 noundef [[SLICE_BASE:%.*]], <vscale x 16 x i1> [[PG:%.*]], ptr noundef [[PTR:%.*]], i64 noundef [[VNUM:%.*]]) local_unnamed_addr #[[ATTR0]] { // CHECK-C-NEXT: entry: // CHECK-C-NEXT: [[TMP0:%.*]] = tail call <vscale x 8 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv8i1(<vscale x 16 x i1> [[PG]]) -// CHECK-C-NEXT: [[TMP1:%.*]] = tail call i64 @llvm.aarch64.sme.cntsb() -// CHECK-C-NEXT: [[MULVL:%.*]] = mul i64 [[TMP1]], [[VNUM]] -// CHECK-C-NEXT: [[TMP2:%.*]] = getelementptr i8, ptr [[PTR]], i64 [[MULVL]] -// CHECK-C-NEXT: [[TMP3:%.*]] = trunc i64 [[VNUM]] to i32 -// CHECK-C-NEXT: [[TMP4:%.*]] = add i32 [[SLICE_BASE]], [[TMP3]] -// CHECK-C-NEXT: tail call void @llvm.aarch64.sme.ld1h.vert(<vscale x 8 x i1> [[TMP0]], ptr [[TMP2]], i32 0, i32 [[TMP4]]) -// CHECK-C-NEXT: [[ADD:%.*]] = add i32 [[SLICE_BASE]], [[TMP3]] -// CHECK-C-NEXT: [[TMP5:%.*]] = add i32 [[ADD]], 7 -// CHECK-C-NEXT: tail call void @llvm.aarch64.sme.ld1h.vert(<vscale x 8 x i1> [[TMP0]], ptr [[TMP2]], i32 1, i32 [[TMP5]]) +// CHECK-C-NEXT: [[TMP1:%.*]] = tail call i64 @llvm.vscale.i64() +// CHECK-C-NEXT: [[TMP2:%.*]] = shl i64 [[VNUM]], 4 +// CHECK-C-NEXT: [[MULVL:%.*]] = mul i64 [[TMP2]], [[TMP1]] +// CHECK-C-NEXT: [[TMP3:%.*]] = getelementptr i8, ptr [[PTR]], i64 [[MULVL]] +// CHECK-C-NEXT: [[TMP4:%.*]] = trunc i64 [[VNUM]] to i32 +// CHECK-C-NEXT: [[TMP5:%.*]] = add i32 [[SLICE_BASE]], [[TMP4]] +// CHECK-C-NEXT: tail call void @llvm.aarch64.sme.ld1h.vert(<vscale x 8 x i1> [[TMP0]], ptr [[TMP3]], i32 0, i32 [[TMP5]]) +// CHECK-C-NEXT: [[ADD:%.*]] = add i32 [[SLICE_BASE]], [[TMP4]] +// CHECK-C-NEXT: [[TMP6:%.*]] = add i32 [[ADD]], 7 +// CHECK-C-NEXT: tail call void @llvm.aarch64.sme.ld1h.vert(<vscale x 8 x i1> [[TMP0]], ptr [[TMP3]], i32 1, i32 [[TMP6]]) // CHECK-C-NEXT: ret void // // CHECK-CXX-LABEL: define dso_local void @_Z24test_svld1_ver_vnum_za16ju10__SVBool_tPKvl( // CHECK-CXX-SAME: i32 noundef [[SLICE_BASE:%.*]], <vscale x 16 x i1> [[PG:%.*]], ptr noundef [[PTR:%.*]], i64 noundef [[VNUM:%.*]]) local_unnamed_addr #[[ATTR0]] { // CHECK-CXX-NEXT: entry: // CHECK-CXX-NEXT: [[TMP0:%.*]] = tail call <vscale x 8 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv8i1(<vscale x 16 x i1> [[PG]]) -// CHECK-CXX-NEXT: [[TMP1:%.*]] = tail call i64 @llvm.aarch64.sme.cntsb() -// CHECK-CXX-NEXT: [[MULVL:%.*]] = mul i64 [[TMP1]], [[VNUM]] -// CHECK-CXX-NEXT: [[TMP2:%.*]] = getelementptr i8, ptr [[PTR]], i64 [[MULVL]] -// CHECK-CXX-NEXT: [[TMP3:%.*]] = trunc i64 [[VNUM]] to i32 -// CHECK-CXX-NEXT: [[TMP4:%.*]] = add i32 [[SLICE_BASE]], [[TMP3]] -// CHECK-CXX-NEXT: tail call void @llvm.aarch64.sme.ld1h.vert(<vscale x 8 x i1> [[TMP0]], ptr [[TMP2]], i32 0, i32 [[TMP4]]) -// CHECK-CXX-NEXT: [[ADD:%.*]] = add i32 [[SLICE_BASE]], [[TMP3]] -// CHECK-CXX-NEXT: [[TMP5:%.*]] = add i32 [[ADD]], 7 -// CHECK-CXX-NEXT: tail call void @llvm.aarch64.sme.ld1h.vert(<vscale x 8 x i1> [[TMP0]], ptr [[TMP2]], i32 1, i32 [[TMP5]]) +// CHECK-CXX-NEXT: [[TMP1:%.*]] = tail call i64 @llvm.vscale.i64() +// CHECK-CXX-NEXT: [[TMP2:%.*]] = shl i64 [[VNUM]], 4 +// CHECK-CXX-NEXT: [[MULVL:%.*]] = mul i64 [[TMP2]], [[TMP1]] +// CHECK-CXX-NEXT: [[TMP3:%.*]] = getelementptr i8, ptr [[PTR]], i64 [[MULVL]] +// CHECK-CXX-NEXT: [[TMP4:%.*]] = trunc i64 [[VNUM]] to i32 +// CHECK-CXX-NEXT: [[TMP5:%.*]] = add i32 [[SLICE_BASE]], [[TMP4]] +// CHECK-CXX-NEXT: tail call void @llvm.aarch64.sme.ld1h.vert(<vscale x 8 x i1> [[TMP0]], ptr [[TMP3]], i32 0, i32 [[TMP5]]) +// CHECK-CXX-NEXT: [[ADD:%.*]] = add i32 [[SLICE_BASE]], [[TMP4]] +// CHECK-CXX-NEXT: [[TMP6:%.*]] = add i32 [[ADD]], 7 +// CHECK-CXX-NEXT: tail call void @llvm.aarch64.sme.ld1h.vert(<vscale x 8 x i1> [[TMP0]], ptr [[TMP3]], i32 1, i32 [[TMP6]]) // CHECK-CXX-NEXT: ret void // void test_svld1_ver_vnum_za16(uint32_t slice_base, svbool_t pg, const void *ptr, int64_t vnum) __arm_streaming __arm_out("za") { @@ -247,30 +261,32 @@ void test_svld1_ver_vnum_za16(uint32_t slice_base, svbool_t pg, const void *ptr, // CHECK-C-SAME: i32 noundef [[SLICE_BASE:%.*]], <vscale x 16 x i1> [[PG:%.*]], ptr noundef [[PTR:%.*]], i64 noundef [[VNUM:%.*]]) local_unnamed_addr #[[ATTR0]] { // CHECK-C-NEXT: entry: // CHECK-C-NEXT: [[TMP0:%.*]] = tail call <vscale x 4 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv4i1(<vscale x 16 x i1> [[PG]]) -// CHECK-C-NEXT: [[TMP1:%.*]] = tail call i64 @llvm.aarch64.sme.cntsb() -// CHECK-C-NEXT: [[MULVL:%.*]] = mul i64 [[TMP1]], [[VNUM]] -// CHECK-C-NEXT: [[TMP2:%.*]] = getelementptr i8, ptr [[PTR]], i64 [[MULVL]] -// CHECK-C-NEXT: [[TMP3:%.*]] = trunc i64 [[VNUM]] to i32 -// CHECK-C-NEXT: [[TMP4:%.*]] = add i32 [[SLICE_BASE]], [[TMP3]] -// CHECK-C-NEXT: tail call void @llvm.aarch64.sme.ld1w.vert(<vscale x 4 x i1> [[TMP0]], ptr [[TMP2]], i32 0, i32 [[TMP4]]) -// CHECK-C-NEXT: [[ADD:%.*]] = add i32 [[SLICE_BASE]], [[TMP3]] -// CHECK-C-NEXT: [[TMP5:%.*]] = add i32 [[ADD]], 3 -// CHECK-C-NEXT: tail call void @llvm.aarch64.sme.ld1w.vert(<vscale x 4 x i1> [[TMP0]], ptr [[TMP2]], i32 3, i32 [[TMP5]]) +// CHECK-C-NEXT: [[TMP1:%.*]] = tail call i64 @llvm.vscale.i64() +// CHECK-C-NEXT: [[TMP2:%.*]] = shl i64 [[VNUM]], 4 +// CHECK-C-NEXT: [[MULVL:%.*]] = mul i64 [[TMP2]], [[TMP1]] +// CHECK-C-NEXT: [[TMP3:%.*]] = getelementptr i8, ptr [[PTR]], i64 [[MULVL]] +// CHECK-C-NEXT: [[TMP4:%.*]] = trunc i64 [[VNUM]] to i32 +// CHECK-C-NEXT: [[TMP5:%.*]] = add i32 [[SLICE_BASE]], [[TMP4]] +// CHECK-C-NEXT: tail call void @llvm.aarch64.sme.ld1w.vert(<vscale x 4 x i1> [[TMP0]], ptr [[TMP3]], i32 0, i32 [[TMP5]]) +// CHECK-C-NEXT: [[ADD:%.*]] = add i32 [[SLICE_BASE]], [[TMP4]] +// CHECK-C-NEXT: [[TMP6:%.*]] = add i32 [[ADD]], 3 +// CHECK-C-NEXT: tail call void @llvm.aarch64.sme.ld1w.vert(<vscale x 4 x i1> [[TMP0]], ptr [[TMP3]], i32 3, i32 [[TMP6]]) // CHECK-C-NEXT: ret void // // CHECK-CXX-LABEL: define dso_local void @_Z24test_svld1_ver_vnum_za32ju10__SVBool_tPKvl( // CHECK-CXX-SAME: i32 noundef [[SLICE_BASE:%.*]], <vscale x 16 x i1> [[PG:%.*]], ptr noundef [[PTR:%.*]], i64 noundef [[VNUM:%.*]]) local_unnamed_addr #[[ATTR0]] { // CHECK-CXX-NEXT: entry: // CHECK-CXX-NEXT: [[TMP0:%.*]] = tail call <vscale x 4 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv4i1(<vscale x 16 x i1> [[PG]]) -// CHECK-CXX-NEXT: [[TMP1:%.*]] = tail call i64 @llvm.aarch64.sme.cntsb() -// CHECK-CXX-NEXT: [[MULVL:%.*]] = mul i64 [[TMP1]], [[VNUM]] -// CHECK-CXX-NEXT: [[TMP2:%.*]] = getelementptr i8, ptr [[PTR]], i64 [[MULVL]] -// CHECK-CXX-NEXT: [[TMP3:%.*]] = trunc i64 [[VNUM]] to i32 -// CHECK-CXX-NEXT: [[TMP4:%.*]] = add i32 [[SLICE_BASE]], [[TMP3]] -// CHECK-CXX-NEXT: tail call void @llvm.aarch64.sme.ld1w.vert(<vscale x 4 x i1> [[TMP0]], ptr [[TMP2]], i32 0, i32 [[TMP4]]) -// CHECK-CXX-NEXT: [[ADD:%.*]] = add i32 [[SLICE_BASE]], [[TMP3]] -// CHECK-CXX-NEXT: [[TMP5:%.*]] = add i32 [[ADD]], 3 -// CHECK-CXX-NEXT: tail call void @llvm.aarch64.sme.ld1w.vert(<vscale x 4 x i1> [[TMP0]], ptr [[TMP2]], i32 3, i32 [[TMP5]]) +// CHECK-CXX-NEXT: [[TMP1:%.*]] = tail call i64 @llvm.vscale.i64() +// CHECK-CXX-NEXT: [[TMP2:%.*]] = shl i64 [[VNUM]], 4 +// CHECK-CXX-NEXT: [[MULVL:%.*]] = mul i64 [[TMP2]], [[TMP1]] +// CHECK-CXX-NEXT: [[TMP3:%.*]] = getelementptr i8, ptr [[PTR]], i64 [[MULVL]] +// CHECK-CXX-NEXT: [[TMP4:%.*]] = trunc i64 [[VNUM]] to i32 +// CHECK-CXX-NEXT: [[TMP5:%.*]] = add i32 [[SLICE_BASE]], [[TMP4]] +// CHECK-CXX-NEXT: tail call void @llvm.aarch64.sme.ld1w.vert(<vscale x 4 x i1> [[TMP0]], ptr [[TMP3]], i32 0, i32 [[TMP5]]) +// CHECK-CXX-NEXT: [[ADD:%.*]] = add i32 [[SLICE_BASE]], [[TMP4]] +// CHECK-CXX-NEXT: [[TMP6:%.*]] = add i32 [[ADD]], 3 +// CHECK-CXX-NEXT: tail call void @llvm.aarch64.sme.ld1w.vert(<vscale x 4 x i1> [[TMP0]], ptr [[TMP3]], i32 3, i32 [[TMP6]]) // CHECK-CXX-NEXT: ret void // void test_svld1_ver_vnum_za32(uint32_t slice_base, svbool_t pg, const void *ptr, int64_t vnum) __arm_streaming __arm_out("za") { @@ -282,30 +298,32 @@ void test_svld1_ver_vnum_za32(uint32_t slice_base, svbool_t pg, const void *ptr, // CHECK-C-SAME: i32 noundef [[SLICE_BASE:%.*]], <vscale x 16 x i1> [[PG:%.*]], ptr noundef [[PTR:%.*]], i64 noundef [[VNUM:%.*]]) local_unnamed_addr #[[ATTR0]] { // CHECK-C-NEXT: entry: // CHECK-C-NEXT: [[TMP0:%.*]] = tail call <vscale x 2 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv2i1(<vscale x 16 x i1> [[PG]]) -// CHECK-C-NEXT: [[TMP1:%.*]] = tail call i64 @llvm.aarch64.sme.cntsb() -// CHECK-C-NEXT: [[MULVL:%.*]] = mul i64 [[TMP1]], [[VNUM]] -// CHECK-C-NEXT: [[TMP2:%.*]] = getelementptr i8, ptr [[PTR]], i64 [[MULVL]] -// CHECK-C-NEXT: [[TMP3:%.*]] = trunc i64 [[VNUM]] to i32 -// CHECK-C-NEXT: [[TMP4:%.*]] = add i32 [[SLICE_BASE]], [[TMP3]] -// CHECK-C-NEXT: tail call void @llvm.aarch64.sme.ld1d.vert(<vscale x 2 x i1> [[TMP0]], ptr [[TMP2]], i32 0, i32 [[TMP4]]) -// CHECK-C-NEXT: [[ADD:%.*]] = add i32 [[SLICE_BASE]], [[TMP3]] -// CHECK-C-NEXT: [[TMP5:%.*]] = add i32 [[ADD]], 1 -// CHECK-C-NEXT: tail call void @llvm.aarch64.sme.ld1d.vert(<vscale x 2 x i1> [[TMP0]], ptr [[TMP2]], i32 7, i32 [[TMP5]]) +// CHECK-C-NEXT: [[TMP1:%.*]] = tail call i64 @llvm.vscale.i64() +// CHECK-C-NEXT: [[TMP2:%.*]] = shl i64 [[VNUM]], 4 +// CHECK-C-NEXT: [[MULVL:%.*]] = mul i64 [[TMP2]], [[TMP1]] +// CHECK-C-NEXT: [[TMP3:%.*]] = getelementptr i8, ptr [[PTR]], i64 [[MULVL]] +// CHECK-C-NEXT: [[TMP4:%.*]] = trunc i64 [[VNUM]] to i32 +// CHECK-C-NEXT: [[TMP5:%.*]] = add i32 [[SLICE_BASE]], [[TMP4]] +// CHECK-C-NEXT: tail call void @llvm.aarch64.sme.ld1d.vert(<vscale x 2 x i1> [[TMP0]], ptr [[TMP3]], i32 0, i32 [[TMP5]]) +// CHECK-C-NEXT: [[ADD:%.*]] = add i32 [[SLICE_BASE]], [[TMP4]] +// CHECK-C-NEXT: [[TMP6:%.*]] = add i32 [[ADD]], 1 +// CHECK-C-NEXT: tail call void @llvm.aarch64.sme.ld1d.vert(<vscale x 2 x i1> [[TMP0]], ptr [[TMP3]], i32 7, i32 [[TMP6]]) // CHECK-C-NEXT: ret void // // CHECK-CXX-LABEL: define dso_local void @_Z24test_svld1_ver_vnum_za64ju10__SVBool_tPKvl( // CHECK-CXX-SAME: i32 noundef [[SLICE_BASE:%.*]], <vscale x 16 x i1> [[PG:%.*]], ptr noundef [[PTR:%.*]], i64 noundef [[VNUM:%.*]]) local_unnamed_addr #[[ATTR0]] { // CHECK-CXX-NEXT: entry: // CHECK-CXX-NEXT: [[TMP0:%.*]] = tail call <vscale x 2 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv2i1(<vscale x 16 x i1> [[PG]]) -// CHECK-CXX-NEXT: [[TMP1:%.*]] = tail call i64 @llvm.aarch64.sme.cntsb() -// CHECK-CXX-NEXT: [[MULVL:%.*]] = mul i64 [[TMP1]], [[VNUM]] -// CHECK-CXX-NEXT: [[TMP2:%.*]] = getelementptr i8, ptr [[PTR]], i64 [[MULVL]] -// CHECK-CXX-NEXT: [[TMP3:%.*]] = trunc i64 [[VNUM]] to i32 -// CHECK-CXX-NEXT: [[TMP4:%.*]] = add i32 [[SLICE_BASE]], [[TMP3]] -// CHECK-CXX-NEXT: tail call void @llvm.aarch64.sme.ld1d.vert(<vscale x 2 x i1> [[TMP0]], ptr [[TMP2]], i32 0, i32 [[TMP4]]) -// CHECK-CXX-NEXT: [[ADD:%.*]] = add i32 [[SLICE_BASE]], [[TMP3]] -// CHECK-CXX-NEXT: [[TMP5:%.*]] = add i32 [[ADD]], 1 -// CHECK-CXX-NEXT: tail call void @llvm.aarch64.sme.ld1d.vert(<vscale x 2 x i1> [[TMP0]], ptr [[TMP2]], i32 7, i32 [[TMP5]]) +// CHECK-CXX-NEXT: [[TMP1:%.*]] = tail call i64 @llvm.vscale.i64() +// CHECK-CXX-NEXT: [[TMP2:%.*]] = shl i64 [[VNUM]], 4 +// CHECK-CXX-NEXT: [[MULVL:%.*]] = mul i64 [[TMP2]], [[TMP1]] +// CHECK-CXX-NEXT: [[TMP3:%.*]] = getelementptr i8, ptr [[PTR]], i64 [[MULVL]] +// CHECK-CXX-NEXT: [[TMP4:%.*]] = trunc i64 [[VNUM]] to i32 +// CHECK-CXX-NEXT: [[TMP5:%.*]] = add i32 [[SLICE_BASE]], [[TMP4]] +// CHECK-CXX-NEXT: tail call void @llvm.aarch64.sme.ld1d.vert(<vscale x 2 x i1> [[TMP0]], ptr [[TMP3]], i32 0, i32 [[TMP5]]) +// CHECK-CXX-NEXT: [[ADD:%.*]] = add i32 [[SLICE_BASE]], [[TMP4]] +// CHECK-CXX-NEXT: [[TMP6:%.*]] = add i32 [[ADD]], 1 +// CHECK-CXX-NEXT: tail call void @llvm.aarch64.sme.ld1d.vert(<vscale x 2 x i1> [[TMP0]], ptr [[TMP3]], i32 7, i32 [[TMP6]]) // CHECK-CXX-NEXT: ret void // void test_svld1_ver_vnum_za64(uint32_t slice_base, svbool_t pg, const void *ptr, int64_t vnum) __arm_streaming __arm_out("za") { @@ -317,26 +335,28 @@ void test_svld1_ver_vnum_za64(uint32_t slice_base, svbool_t pg, const void *ptr, // CHECK-C-SAME: i32 noundef [[SLICE_BASE:%.*]], <vscale x 16 x i1> [[PG:%.*]], ptr noundef [[PTR:%.*]], i64 noundef [[VNUM:%.*]]) local_unnamed_addr #[[ATTR0]] { // CHECK-C-NEXT: entry: // CHECK-C-NEXT: [[TMP0:%.*]] = tail call <vscale x 1 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv1i1(<vscale x 16 x i1> [[PG]]) -// CHECK-C-NEXT: [[TMP1:%.*]] = tail call i64 @llvm.aarch64.sme.cntsb() -// CHECK-C-NEXT: [[MULVL:%.*]] = mul i64 [[TMP1]], [[VNUM]] -// CHECK-C-NEXT: [[TMP2:%.*]] = getelementptr i8, ptr [[PTR]], i64 [[MULVL]] -// CHECK-C-NEXT: [[TMP3:%.*]] = trunc i64 [[VNUM]] to i32 -// CHECK-C-NEXT: [[TMP4:%.*]] = add i32 [[SLICE_BASE]], [[TMP3]] -// CHECK-C-NEXT: tail call void @llvm.aarch64.sme.ld1q.vert(<vscale x 1 x i1> [[TMP0]], ptr [[TMP2]], i32 0, i32 [[TMP4]]) -// CHECK-C-NEXT: tail call void @llvm.aarch64.sme.ld1q.vert(<vscale x 1 x i1> [[TMP0]], ptr [[TMP2]], i32 15, i32 [[TMP4]]) +// CHECK-C-NEXT: [[TMP1:%.*]] = tail call i64 @llvm.vscale.i64() +// CHECK-C-NEXT: [[TMP2:%.*]] = shl i64 [[VNUM]], 4 +// CHECK-C-NEXT: [[MULVL:%.*]] = mul i64 [[TMP2]], [[TMP1]] +// CHECK-C-NEXT: [[TMP3:%.*]] = getelementptr i8, ptr [[PTR]], i64 [[MULVL]] +// CHECK-C-NEXT: [[TMP4:%.*]] = trunc i64 [[VNUM]] to i32 +// CHECK-C-NEXT: [[TMP5:%.*]] = add i32 [[SLICE_BASE]], [[TMP4]] +// CHECK-C-NEXT: tail call void @llvm.aarch64.sme.ld1q.vert(<vscale x 1 x i1> [[TMP0]], ptr [[TMP3]], i32 0, i32 [[TMP5]]) +// CHECK-C-NEXT: tail call void @llvm.aarch64.sme.ld1q.vert(<vscale x 1 x i1> [[TMP0]], ptr [[TMP3]], i32 15, i32 [[TMP5]]) // CHECK-C-NEXT: ret void // // CHECK-CXX-LABEL: define dso_local void @_Z25test_svld1_ver_vnum_za128ju10__SVBool_tPKvl( // CHECK-CXX-SAME: i32 noundef [[SLICE_BASE:%.*]], <vscale x 16 x i1> [[PG:%.*]], ptr noundef [[PTR:%.*]], i64 noundef [[VNUM:%.*]]) local_unnamed_addr #[[ATTR0]] { // CHECK-CXX-NEXT: entry: // CHECK-CXX-NEXT: [[TMP0:%.*]] = tail call <vscale x 1 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv1i1(<vscale x 16 x i1> [[PG]]) -// CHECK-CXX-NEXT: [[TMP1:%.*]] = tail call i64 @llvm.aarch64.sme.cntsb() -// CHECK-CXX-NEXT: [[MULVL:%.*]] = mul i64 [[TMP1]], [[VNUM]] -// CHECK-CXX-NEXT: [[TMP2:%.*]] = getelementptr i8, ptr [[PTR]], i64 [[MULVL]] -// CHECK-CXX-NEXT: [[TMP3:%.*]] = trunc i64 [[VNUM]] to i32 -// CHECK-CXX-NEXT: [[TMP4:%.*]] = add i32 [[SLICE_BASE]], [[TMP3]] -// CHECK-CXX-NEXT: tail call void @llvm.aarch64.sme.ld1q.vert(<vscale x 1 x i1> [[TMP0]], ptr [[TMP2]], i32 0, i32 [[TMP4]]) -// CHECK-CXX-NEXT: tail call void @llvm.aarch64.sme.ld1q.vert(<vscale x 1 x i1> [[TMP0]], ptr [[TMP2]], i32 15, i32 [[TMP4]]) +// CHECK-CXX-NEXT: [[TMP1:%.*]] = tail call i64 @llvm.vscale.i64() +// CHECK-CXX-NEXT: [[TMP2:%.*]] = shl i64 [[VNUM]], 4 +// CHECK-CXX-NEXT: [[MULVL:%.*]] = mul i64 [[TMP2]], [[TMP1]] +// CHECK-CXX-NEXT: [[TMP3:%.*]] = getelementptr i8, ptr [[PTR]], i64 [[MULVL]] +// CHECK-CXX-NEXT: [[TMP4:%.*]] = trunc i64 [[VNUM]] to i32 +// CHECK-CXX-NEXT: [[TMP5:%.*]] = add i32 [[SLICE_BASE]], [[TMP4]] +// CHECK-CXX-NEXT: tail call void @llvm.aarch64.sme.ld1q.vert(<vscale x 1 x i1> [[TMP0]], ptr [[TMP3]], i32 0, i32 [[TMP5]]) +// CHECK-CXX-NEXT: tail call void @llvm.aarch64.sme.ld1q.vert(<vscale x 1 x i1> [[TMP0]], ptr [[TMP3]], i32 15, i32 [[TMP5]]) // CHECK-CXX-NEXT: ret void // void test_svld1_ver_vnum_za128(uint32_t slice_base, svbool_t pg, const void *ptr, int64_t vnum) __arm_streaming __arm_out("za") { diff --git a/clang/test/CodeGen/AArch64/sme-intrinsics/acle_sme_st1_vnum.c b/clang/test/CodeGen/AArch64/sme-intrinsics/acle_sme_st1_vnum.c index dafc3d6..22a0b9e 100644 --- a/clang/test/CodeGen/AArch64/sme-intrinsics/acle_sme_st1_vnum.c +++ b/clang/test/CodeGen/AArch64/sme-intrinsics/acle_sme_st1_vnum.c @@ -9,29 +9,31 @@ // CHECK-C-LABEL: define dso_local void @test_svst1_hor_vnum_za8( // CHECK-C-SAME: i32 noundef [[SLICE_BASE:%.*]], <vscale x 16 x i1> [[PG:%.*]], ptr noundef [[PTR:%.*]], i64 noundef [[VNUM:%.*]]) local_unnamed_addr #[[ATTR0:[0-9]+]] { // CHECK-C-NEXT: entry: -// CHECK-C-NEXT: [[TMP0:%.*]] = tail call i64 @llvm.aarch64.sme.cntsb() -// CHECK-C-NEXT: [[MULVL:%.*]] = mul i64 [[TMP0]], [[VNUM]] -// CHECK-C-NEXT: [[TMP1:%.*]] = getelementptr i8, ptr [[PTR]], i64 [[MULVL]] -// CHECK-C-NEXT: [[TMP2:%.*]] = trunc i64 [[VNUM]] to i32 -// CHECK-C-NEXT: [[TMP3:%.*]] = add i32 [[SLICE_BASE]], [[TMP2]] -// CHECK-C-NEXT: tail call void @llvm.aarch64.sme.st1b.horiz(<vscale x 16 x i1> [[PG]], ptr [[TMP1]], i32 0, i32 [[TMP3]]) -// CHECK-C-NEXT: [[ADD:%.*]] = add i32 [[SLICE_BASE]], [[TMP2]] -// CHECK-C-NEXT: [[TMP4:%.*]] = add i32 [[ADD]], 15 -// CHECK-C-NEXT: tail call void @llvm.aarch64.sme.st1b.horiz(<vscale x 16 x i1> [[PG]], ptr [[TMP1]], i32 0, i32 [[TMP4]]) +// CHECK-C-NEXT: [[TMP0:%.*]] = tail call i64 @llvm.vscale.i64() +// CHECK-C-NEXT: [[TMP1:%.*]] = shl i64 [[VNUM]], 4 +// CHECK-C-NEXT: [[MULVL:%.*]] = mul i64 [[TMP1]], [[TMP0]] +// CHECK-C-NEXT: [[TMP2:%.*]] = getelementptr i8, ptr [[PTR]], i64 [[MULVL]] +// CHECK-C-NEXT: [[TMP3:%.*]] = trunc i64 [[VNUM]] to i32 +// CHECK-C-NEXT: [[TMP4:%.*]] = add i32 [[SLICE_BASE]], [[TMP3]] +// CHECK-C-NEXT: tail call void @llvm.aarch64.sme.st1b.horiz(<vscale x 16 x i1> [[PG]], ptr [[TMP2]], i32 0, i32 [[TMP4]]) +// CHECK-C-NEXT: [[ADD:%.*]] = add i32 [[SLICE_BASE]], [[TMP3]] +// CHECK-C-NEXT: [[TMP5:%.*]] = add i32 [[ADD]], 15 +// CHECK-C-NEXT: tail call void @llvm.aarch64.sme.st1b.horiz(<vscale x 16 x i1> [[PG]], ptr [[TMP2]], i32 0, i32 [[TMP5]]) // CHECK-C-NEXT: ret void // // CHECK-CXX-LABEL: define dso_local void @_Z23test_svst1_hor_vnum_za8ju10__SVBool_tPvl( // CHECK-CXX-SAME: i32 noundef [[SLICE_BASE:%.*]], <vscale x 16 x i1> [[PG:%.*]], ptr noundef [[PTR:%.*]], i64 noundef [[VNUM:%.*]]) local_unnamed_addr #[[ATTR0:[0-9]+]] { // CHECK-CXX-NEXT: entry: -// CHECK-CXX-NEXT: [[TMP0:%.*]] = tail call i64 @llvm.aarch64.sme.cntsb() -// CHECK-CXX-NEXT: [[MULVL:%.*]] = mul i64 [[TMP0]], [[VNUM]] -// CHECK-CXX-NEXT: [[TMP1:%.*]] = getelementptr i8, ptr [[PTR]], i64 [[MULVL]] -// CHECK-CXX-NEXT: [[TMP2:%.*]] = trunc i64 [[VNUM]] to i32 -// CHECK-CXX-NEXT: [[TMP3:%.*]] = add i32 [[SLICE_BASE]], [[TMP2]] -// CHECK-CXX-NEXT: tail call void @llvm.aarch64.sme.st1b.horiz(<vscale x 16 x i1> [[PG]], ptr [[TMP1]], i32 0, i32 [[TMP3]]) -// CHECK-CXX-NEXT: [[ADD:%.*]] = add i32 [[SLICE_BASE]], [[TMP2]] -// CHECK-CXX-NEXT: [[TMP4:%.*]] = add i32 [[ADD]], 15 -// CHECK-CXX-NEXT: tail call void @llvm.aarch64.sme.st1b.horiz(<vscale x 16 x i1> [[PG]], ptr [[TMP1]], i32 0, i32 [[TMP4]]) +// CHECK-CXX-NEXT: [[TMP0:%.*]] = tail call i64 @llvm.vscale.i64() +// CHECK-CXX-NEXT: [[TMP1:%.*]] = shl i64 [[VNUM]], 4 +// CHECK-CXX-NEXT: [[MULVL:%.*]] = mul i64 [[TMP1]], [[TMP0]] +// CHECK-CXX-NEXT: [[TMP2:%.*]] = getelementptr i8, ptr [[PTR]], i64 [[MULVL]] +// CHECK-CXX-NEXT: [[TMP3:%.*]] = trunc i64 [[VNUM]] to i32 +// CHECK-CXX-NEXT: [[TMP4:%.*]] = add i32 [[SLICE_BASE]], [[TMP3]] +// CHECK-CXX-NEXT: tail call void @llvm.aarch64.sme.st1b.horiz(<vscale x 16 x i1> [[PG]], ptr [[TMP2]], i32 0, i32 [[TMP4]]) +// CHECK-CXX-NEXT: [[ADD:%.*]] = add i32 [[SLICE_BASE]], [[TMP3]] +// CHECK-CXX-NEXT: [[TMP5:%.*]] = add i32 [[ADD]], 15 +// CHECK-CXX-NEXT: tail call void @llvm.aarch64.sme.st1b.horiz(<vscale x 16 x i1> [[PG]], ptr [[TMP2]], i32 0, i32 [[TMP5]]) // CHECK-CXX-NEXT: ret void // void test_svst1_hor_vnum_za8(uint32_t slice_base, svbool_t pg, void *ptr, int64_t vnum) __arm_streaming __arm_in("za") { @@ -43,30 +45,32 @@ void test_svst1_hor_vnum_za8(uint32_t slice_base, svbool_t pg, void *ptr, int64_ // CHECK-C-SAME: i32 noundef [[SLICE_BASE:%.*]], <vscale x 16 x i1> [[PG:%.*]], ptr noundef [[PTR:%.*]], i64 noundef [[VNUM:%.*]]) local_unnamed_addr #[[ATTR0]] { // CHECK-C-NEXT: entry: // CHECK-C-NEXT: [[TMP0:%.*]] = tail call <vscale x 8 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv8i1(<vscale x 16 x i1> [[PG]]) -// CHECK-C-NEXT: [[TMP1:%.*]] = tail call i64 @llvm.aarch64.sme.cntsb() -// CHECK-C-NEXT: [[MULVL:%.*]] = mul i64 [[TMP1]], [[VNUM]] -// CHECK-C-NEXT: [[TMP2:%.*]] = getelementptr i8, ptr [[PTR]], i64 [[MULVL]] -// CHECK-C-NEXT: [[TMP3:%.*]] = trunc i64 [[VNUM]] to i32 -// CHECK-C-NEXT: [[TMP4:%.*]] = add i32 [[SLICE_BASE]], [[TMP3]] -// CHECK-C-NEXT: tail call void @llvm.aarch64.sme.st1h.horiz(<vscale x 8 x i1> [[TMP0]], ptr [[TMP2]], i32 0, i32 [[TMP4]]) -// CHECK-C-NEXT: [[ADD:%.*]] = add i32 [[SLICE_BASE]], [[TMP3]] -// CHECK-C-NEXT: [[TMP5:%.*]] = add i32 [[ADD]], 7 -// CHECK-C-NEXT: tail call void @llvm.aarch64.sme.st1h.horiz(<vscale x 8 x i1> [[TMP0]], ptr [[TMP2]], i32 1, i32 [[TMP5]]) +// CHECK-C-NEXT: [[TMP1:%.*]] = tail call i64 @llvm.vscale.i64() +// CHECK-C-NEXT: [[TMP2:%.*]] = shl i64 [[VNUM]], 4 +// CHECK-C-NEXT: [[MULVL:%.*]] = mul i64 [[TMP2]], [[TMP1]] +// CHECK-C-NEXT: [[TMP3:%.*]] = getelementptr i8, ptr [[PTR]], i64 [[MULVL]] +// CHECK-C-NEXT: [[TMP4:%.*]] = trunc i64 [[VNUM]] to i32 +// CHECK-C-NEXT: [[TMP5:%.*]] = add i32 [[SLICE_BASE]], [[TMP4]] +// CHECK-C-NEXT: tail call void @llvm.aarch64.sme.st1h.horiz(<vscale x 8 x i1> [[TMP0]], ptr [[TMP3]], i32 0, i32 [[TMP5]]) +// CHECK-C-NEXT: [[ADD:%.*]] = add i32 [[SLICE_BASE]], [[TMP4]] +// CHECK-C-NEXT: [[TMP6:%.*]] = add i32 [[ADD]], 7 +// CHECK-C-NEXT: tail call void @llvm.aarch64.sme.st1h.horiz(<vscale x 8 x i1> [[TMP0]], ptr [[TMP3]], i32 1, i32 [[TMP6]]) // CHECK-C-NEXT: ret void // // CHECK-CXX-LABEL: define dso_local void @_Z24test_svst1_hor_vnum_za16ju10__SVBool_tPvl( // CHECK-CXX-SAME: i32 noundef [[SLICE_BASE:%.*]], <vscale x 16 x i1> [[PG:%.*]], ptr noundef [[PTR:%.*]], i64 noundef [[VNUM:%.*]]) local_unnamed_addr #[[ATTR0]] { // CHECK-CXX-NEXT: entry: // CHECK-CXX-NEXT: [[TMP0:%.*]] = tail call <vscale x 8 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv8i1(<vscale x 16 x i1> [[PG]]) -// CHECK-CXX-NEXT: [[TMP1:%.*]] = tail call i64 @llvm.aarch64.sme.cntsb() -// CHECK-CXX-NEXT: [[MULVL:%.*]] = mul i64 [[TMP1]], [[VNUM]] -// CHECK-CXX-NEXT: [[TMP2:%.*]] = getelementptr i8, ptr [[PTR]], i64 [[MULVL]] -// CHECK-CXX-NEXT: [[TMP3:%.*]] = trunc i64 [[VNUM]] to i32 -// CHECK-CXX-NEXT: [[TMP4:%.*]] = add i32 [[SLICE_BASE]], [[TMP3]] -// CHECK-CXX-NEXT: tail call void @llvm.aarch64.sme.st1h.horiz(<vscale x 8 x i1> [[TMP0]], ptr [[TMP2]], i32 0, i32 [[TMP4]]) -// CHECK-CXX-NEXT: [[ADD:%.*]] = add i32 [[SLICE_BASE]], [[TMP3]] -// CHECK-CXX-NEXT: [[TMP5:%.*]] = add i32 [[ADD]], 7 -// CHECK-CXX-NEXT: tail call void @llvm.aarch64.sme.st1h.horiz(<vscale x 8 x i1> [[TMP0]], ptr [[TMP2]], i32 1, i32 [[TMP5]]) +// CHECK-CXX-NEXT: [[TMP1:%.*]] = tail call i64 @llvm.vscale.i64() +// CHECK-CXX-NEXT: [[TMP2:%.*]] = shl i64 [[VNUM]], 4 +// CHECK-CXX-NEXT: [[MULVL:%.*]] = mul i64 [[TMP2]], [[TMP1]] +// CHECK-CXX-NEXT: [[TMP3:%.*]] = getelementptr i8, ptr [[PTR]], i64 [[MULVL]] +// CHECK-CXX-NEXT: [[TMP4:%.*]] = trunc i64 [[VNUM]] to i32 +// CHECK-CXX-NEXT: [[TMP5:%.*]] = add i32 [[SLICE_BASE]], [[TMP4]] +// CHECK-CXX-NEXT: tail call void @llvm.aarch64.sme.st1h.horiz(<vscale x 8 x i1> [[TMP0]], ptr [[TMP3]], i32 0, i32 [[TMP5]]) +// CHECK-CXX-NEXT: [[ADD:%.*]] = add i32 [[SLICE_BASE]], [[TMP4]] +// CHECK-CXX-NEXT: [[TMP6:%.*]] = add i32 [[ADD]], 7 +// CHECK-CXX-NEXT: tail call void @llvm.aarch64.sme.st1h.horiz(<vscale x 8 x i1> [[TMP0]], ptr [[TMP3]], i32 1, i32 [[TMP6]]) // CHECK-CXX-NEXT: ret void // void test_svst1_hor_vnum_za16(uint32_t slice_base, svbool_t pg, void *ptr, int64_t vnum) __arm_streaming __arm_in("za") { @@ -78,30 +82,32 @@ void test_svst1_hor_vnum_za16(uint32_t slice_base, svbool_t pg, void *ptr, int64 // CHECK-C-SAME: i32 noundef [[SLICE_BASE:%.*]], <vscale x 16 x i1> [[PG:%.*]], ptr noundef [[PTR:%.*]], i64 noundef [[VNUM:%.*]]) local_unnamed_addr #[[ATTR0]] { // CHECK-C-NEXT: entry: // CHECK-C-NEXT: [[TMP0:%.*]] = tail call <vscale x 4 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv4i1(<vscale x 16 x i1> [[PG]]) -// CHECK-C-NEXT: [[TMP1:%.*]] = tail call i64 @llvm.aarch64.sme.cntsb() -// CHECK-C-NEXT: [[MULVL:%.*]] = mul i64 [[TMP1]], [[VNUM]] -// CHECK-C-NEXT: [[TMP2:%.*]] = getelementptr i8, ptr [[PTR]], i64 [[MULVL]] -// CHECK-C-NEXT: [[TMP3:%.*]] = trunc i64 [[VNUM]] to i32 -// CHECK-C-NEXT: [[TMP4:%.*]] = add i32 [[SLICE_BASE]], [[TMP3]] -// CHECK-C-NEXT: tail call void @llvm.aarch64.sme.st1w.horiz(<vscale x 4 x i1> [[TMP0]], ptr [[TMP2]], i32 0, i32 [[TMP4]]) -// CHECK-C-NEXT: [[ADD:%.*]] = add i32 [[SLICE_BASE]], [[TMP3]] -// CHECK-C-NEXT: [[TMP5:%.*]] = add i32 [[ADD]], 3 -// CHECK-C-NEXT: tail call void @llvm.aarch64.sme.st1w.horiz(<vscale x 4 x i1> [[TMP0]], ptr [[TMP2]], i32 3, i32 [[TMP5]]) +// CHECK-C-NEXT: [[TMP1:%.*]] = tail call i64 @llvm.vscale.i64() +// CHECK-C-NEXT: [[TMP2:%.*]] = shl i64 [[VNUM]], 4 +// CHECK-C-NEXT: [[MULVL:%.*]] = mul i64 [[TMP2]], [[TMP1]] +// CHECK-C-NEXT: [[TMP3:%.*]] = getelementptr i8, ptr [[PTR]], i64 [[MULVL]] +// CHECK-C-NEXT: [[TMP4:%.*]] = trunc i64 [[VNUM]] to i32 +// CHECK-C-NEXT: [[TMP5:%.*]] = add i32 [[SLICE_BASE]], [[TMP4]] +// CHECK-C-NEXT: tail call void @llvm.aarch64.sme.st1w.horiz(<vscale x 4 x i1> [[TMP0]], ptr [[TMP3]], i32 0, i32 [[TMP5]]) +// CHECK-C-NEXT: [[ADD:%.*]] = add i32 [[SLICE_BASE]], [[TMP4]] +// CHECK-C-NEXT: [[TMP6:%.*]] = add i32 [[ADD]], 3 +// CHECK-C-NEXT: tail call void @llvm.aarch64.sme.st1w.horiz(<vscale x 4 x i1> [[TMP0]], ptr [[TMP3]], i32 3, i32 [[TMP6]]) // CHECK-C-NEXT: ret void // // CHECK-CXX-LABEL: define dso_local void @_Z24test_svst1_hor_vnum_za32ju10__SVBool_tPvl( // CHECK-CXX-SAME: i32 noundef [[SLICE_BASE:%.*]], <vscale x 16 x i1> [[PG:%.*]], ptr noundef [[PTR:%.*]], i64 noundef [[VNUM:%.*]]) local_unnamed_addr #[[ATTR0]] { // CHECK-CXX-NEXT: entry: // CHECK-CXX-NEXT: [[TMP0:%.*]] = tail call <vscale x 4 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv4i1(<vscale x 16 x i1> [[PG]]) -// CHECK-CXX-NEXT: [[TMP1:%.*]] = tail call i64 @llvm.aarch64.sme.cntsb() -// CHECK-CXX-NEXT: [[MULVL:%.*]] = mul i64 [[TMP1]], [[VNUM]] -// CHECK-CXX-NEXT: [[TMP2:%.*]] = getelementptr i8, ptr [[PTR]], i64 [[MULVL]] -// CHECK-CXX-NEXT: [[TMP3:%.*]] = trunc i64 [[VNUM]] to i32 -// CHECK-CXX-NEXT: [[TMP4:%.*]] = add i32 [[SLICE_BASE]], [[TMP3]] -// CHECK-CXX-NEXT: tail call void @llvm.aarch64.sme.st1w.horiz(<vscale x 4 x i1> [[TMP0]], ptr [[TMP2]], i32 0, i32 [[TMP4]]) -// CHECK-CXX-NEXT: [[ADD:%.*]] = add i32 [[SLICE_BASE]], [[TMP3]] -// CHECK-CXX-NEXT: [[TMP5:%.*]] = add i32 [[ADD]], 3 -// CHECK-CXX-NEXT: tail call void @llvm.aarch64.sme.st1w.horiz(<vscale x 4 x i1> [[TMP0]], ptr [[TMP2]], i32 3, i32 [[TMP5]]) +// CHECK-CXX-NEXT: [[TMP1:%.*]] = tail call i64 @llvm.vscale.i64() +// CHECK-CXX-NEXT: [[TMP2:%.*]] = shl i64 [[VNUM]], 4 +// CHECK-CXX-NEXT: [[MULVL:%.*]] = mul i64 [[TMP2]], [[TMP1]] +// CHECK-CXX-NEXT: [[TMP3:%.*]] = getelementptr i8, ptr [[PTR]], i64 [[MULVL]] +// CHECK-CXX-NEXT: [[TMP4:%.*]] = trunc i64 [[VNUM]] to i32 +// CHECK-CXX-NEXT: [[TMP5:%.*]] = add i32 [[SLICE_BASE]], [[TMP4]] +// CHECK-CXX-NEXT: tail call void @llvm.aarch64.sme.st1w.horiz(<vscale x 4 x i1> [[TMP0]], ptr [[TMP3]], i32 0, i32 [[TMP5]]) +// CHECK-CXX-NEXT: [[ADD:%.*]] = add i32 [[SLICE_BASE]], [[TMP4]] +// CHECK-CXX-NEXT: [[TMP6:%.*]] = add i32 [[ADD]], 3 +// CHECK-CXX-NEXT: tail call void @llvm.aarch64.sme.st1w.horiz(<vscale x 4 x i1> [[TMP0]], ptr [[TMP3]], i32 3, i32 [[TMP6]]) // CHECK-CXX-NEXT: ret void // void test_svst1_hor_vnum_za32(uint32_t slice_base, svbool_t pg, void *ptr, int64_t vnum) __arm_streaming __arm_in("za") { @@ -113,30 +119,32 @@ void test_svst1_hor_vnum_za32(uint32_t slice_base, svbool_t pg, void *ptr, int64 // CHECK-C-SAME: i32 noundef [[SLICE_BASE:%.*]], <vscale x 16 x i1> [[PG:%.*]], ptr noundef [[PTR:%.*]], i64 noundef [[VNUM:%.*]]) local_unnamed_addr #[[ATTR0]] { // CHECK-C-NEXT: entry: // CHECK-C-NEXT: [[TMP0:%.*]] = tail call <vscale x 2 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv2i1(<vscale x 16 x i1> [[PG]]) -// CHECK-C-NEXT: [[TMP1:%.*]] = tail call i64 @llvm.aarch64.sme.cntsb() -// CHECK-C-NEXT: [[MULVL:%.*]] = mul i64 [[TMP1]], [[VNUM]] -// CHECK-C-NEXT: [[TMP2:%.*]] = getelementptr i8, ptr [[PTR]], i64 [[MULVL]] -// CHECK-C-NEXT: [[TMP3:%.*]] = trunc i64 [[VNUM]] to i32 -// CHECK-C-NEXT: [[TMP4:%.*]] = add i32 [[SLICE_BASE]], [[TMP3]] -// CHECK-C-NEXT: tail call void @llvm.aarch64.sme.st1d.horiz(<vscale x 2 x i1> [[TMP0]], ptr [[TMP2]], i32 0, i32 [[TMP4]]) -// CHECK-C-NEXT: [[ADD:%.*]] = add i32 [[SLICE_BASE]], [[TMP3]] -// CHECK-C-NEXT: [[TMP5:%.*]] = add i32 [[ADD]], 1 -// CHECK-C-NEXT: tail call void @llvm.aarch64.sme.st1d.horiz(<vscale x 2 x i1> [[TMP0]], ptr [[TMP2]], i32 7, i32 [[TMP5]]) +// CHECK-C-NEXT: [[TMP1:%.*]] = tail call i64 @llvm.vscale.i64() +// CHECK-C-NEXT: [[TMP2:%.*]] = shl i64 [[VNUM]], 4 +// CHECK-C-NEXT: [[MULVL:%.*]] = mul i64 [[TMP2]], [[TMP1]] +// CHECK-C-NEXT: [[TMP3:%.*]] = getelementptr i8, ptr [[PTR]], i64 [[MULVL]] +// CHECK-C-NEXT: [[TMP4:%.*]] = trunc i64 [[VNUM]] to i32 +// CHECK-C-NEXT: [[TMP5:%.*]] = add i32 [[SLICE_BASE]], [[TMP4]] +// CHECK-C-NEXT: tail call void @llvm.aarch64.sme.st1d.horiz(<vscale x 2 x i1> [[TMP0]], ptr [[TMP3]], i32 0, i32 [[TMP5]]) +// CHECK-C-NEXT: [[ADD:%.*]] = add i32 [[SLICE_BASE]], [[TMP4]] +// CHECK-C-NEXT: [[TMP6:%.*]] = add i32 [[ADD]], 1 +// CHECK-C-NEXT: tail call void @llvm.aarch64.sme.st1d.horiz(<vscale x 2 x i1> [[TMP0]], ptr [[TMP3]], i32 7, i32 [[TMP6]]) // CHECK-C-NEXT: ret void // // CHECK-CXX-LABEL: define dso_local void @_Z24test_svst1_hor_vnum_za64ju10__SVBool_tPvl( // CHECK-CXX-SAME: i32 noundef [[SLICE_BASE:%.*]], <vscale x 16 x i1> [[PG:%.*]], ptr noundef [[PTR:%.*]], i64 noundef [[VNUM:%.*]]) local_unnamed_addr #[[ATTR0]] { // CHECK-CXX-NEXT: entry: // CHECK-CXX-NEXT: [[TMP0:%.*]] = tail call <vscale x 2 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv2i1(<vscale x 16 x i1> [[PG]]) -// CHECK-CXX-NEXT: [[TMP1:%.*]] = tail call i64 @llvm.aarch64.sme.cntsb() -// CHECK-CXX-NEXT: [[MULVL:%.*]] = mul i64 [[TMP1]], [[VNUM]] -// CHECK-CXX-NEXT: [[TMP2:%.*]] = getelementptr i8, ptr [[PTR]], i64 [[MULVL]] -// CHECK-CXX-NEXT: [[TMP3:%.*]] = trunc i64 [[VNUM]] to i32 -// CHECK-CXX-NEXT: [[TMP4:%.*]] = add i32 [[SLICE_BASE]], [[TMP3]] -// CHECK-CXX-NEXT: tail call void @llvm.aarch64.sme.st1d.horiz(<vscale x 2 x i1> [[TMP0]], ptr [[TMP2]], i32 0, i32 [[TMP4]]) -// CHECK-CXX-NEXT: [[ADD:%.*]] = add i32 [[SLICE_BASE]], [[TMP3]] -// CHECK-CXX-NEXT: [[TMP5:%.*]] = add i32 [[ADD]], 1 -// CHECK-CXX-NEXT: tail call void @llvm.aarch64.sme.st1d.horiz(<vscale x 2 x i1> [[TMP0]], ptr [[TMP2]], i32 7, i32 [[TMP5]]) +// CHECK-CXX-NEXT: [[TMP1:%.*]] = tail call i64 @llvm.vscale.i64() +// CHECK-CXX-NEXT: [[TMP2:%.*]] = shl i64 [[VNUM]], 4 +// CHECK-CXX-NEXT: [[MULVL:%.*]] = mul i64 [[TMP2]], [[TMP1]] +// CHECK-CXX-NEXT: [[TMP3:%.*]] = getelementptr i8, ptr [[PTR]], i64 [[MULVL]] +// CHECK-CXX-NEXT: [[TMP4:%.*]] = trunc i64 [[VNUM]] to i32 +// CHECK-CXX-NEXT: [[TMP5:%.*]] = add i32 [[SLICE_BASE]], [[TMP4]] +// CHECK-CXX-NEXT: tail call void @llvm.aarch64.sme.st1d.horiz(<vscale x 2 x i1> [[TMP0]], ptr [[TMP3]], i32 0, i32 [[TMP5]]) +// CHECK-CXX-NEXT: [[ADD:%.*]] = add i32 [[SLICE_BASE]], [[TMP4]] +// CHECK-CXX-NEXT: [[TMP6:%.*]] = add i32 [[ADD]], 1 +// CHECK-CXX-NEXT: tail call void @llvm.aarch64.sme.st1d.horiz(<vscale x 2 x i1> [[TMP0]], ptr [[TMP3]], i32 7, i32 [[TMP6]]) // CHECK-CXX-NEXT: ret void // void test_svst1_hor_vnum_za64(uint32_t slice_base, svbool_t pg, void *ptr, int64_t vnum) __arm_streaming __arm_in("za") { @@ -148,26 +156,28 @@ void test_svst1_hor_vnum_za64(uint32_t slice_base, svbool_t pg, void *ptr, int64 // CHECK-C-SAME: i32 noundef [[SLICE_BASE:%.*]], <vscale x 16 x i1> [[PG:%.*]], ptr noundef [[PTR:%.*]], i64 noundef [[VNUM:%.*]]) local_unnamed_addr #[[ATTR0]] { // CHECK-C-NEXT: entry: // CHECK-C-NEXT: [[TMP0:%.*]] = tail call <vscale x 1 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv1i1(<vscale x 16 x i1> [[PG]]) -// CHECK-C-NEXT: [[TMP1:%.*]] = tail call i64 @llvm.aarch64.sme.cntsb() -// CHECK-C-NEXT: [[MULVL:%.*]] = mul i64 [[TMP1]], [[VNUM]] -// CHECK-C-NEXT: [[TMP2:%.*]] = getelementptr i8, ptr [[PTR]], i64 [[MULVL]] -// CHECK-C-NEXT: [[TMP3:%.*]] = trunc i64 [[VNUM]] to i32 -// CHECK-C-NEXT: [[TMP4:%.*]] = add i32 [[SLICE_BASE]], [[TMP3]] -// CHECK-C-NEXT: tail call void @llvm.aarch64.sme.st1q.horiz(<vscale x 1 x i1> [[TMP0]], ptr [[TMP2]], i32 0, i32 [[TMP4]]) -// CHECK-C-NEXT: tail call void @llvm.aarch64.sme.st1q.horiz(<vscale x 1 x i1> [[TMP0]], ptr [[TMP2]], i32 15, i32 [[TMP4]]) +// CHECK-C-NEXT: [[TMP1:%.*]] = tail call i64 @llvm.vscale.i64() +// CHECK-C-NEXT: [[TMP2:%.*]] = shl i64 [[VNUM]], 4 +// CHECK-C-NEXT: [[MULVL:%.*]] = mul i64 [[TMP2]], [[TMP1]] +// CHECK-C-NEXT: [[TMP3:%.*]] = getelementptr i8, ptr [[PTR]], i64 [[MULVL]] +// CHECK-C-NEXT: [[TMP4:%.*]] = trunc i64 [[VNUM]] to i32 +// CHECK-C-NEXT: [[TMP5:%.*]] = add i32 [[SLICE_BASE]], [[TMP4]] +// CHECK-C-NEXT: tail call void @llvm.aarch64.sme.st1q.horiz(<vscale x 1 x i1> [[TMP0]], ptr [[TMP3]], i32 0, i32 [[TMP5]]) +// CHECK-C-NEXT: tail call void @llvm.aarch64.sme.st1q.horiz(<vscale x 1 x i1> [[TMP0]], ptr [[TMP3]], i32 15, i32 [[TMP5]]) // CHECK-C-NEXT: ret void // // CHECK-CXX-LABEL: define dso_local void @_Z25test_svst1_hor_vnum_za128ju10__SVBool_tPvl( // CHECK-CXX-SAME: i32 noundef [[SLICE_BASE:%.*]], <vscale x 16 x i1> [[PG:%.*]], ptr noundef [[PTR:%.*]], i64 noundef [[VNUM:%.*]]) local_unnamed_addr #[[ATTR0]] { // CHECK-CXX-NEXT: entry: // CHECK-CXX-NEXT: [[TMP0:%.*]] = tail call <vscale x 1 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv1i1(<vscale x 16 x i1> [[PG]]) -// CHECK-CXX-NEXT: [[TMP1:%.*]] = tail call i64 @llvm.aarch64.sme.cntsb() -// CHECK-CXX-NEXT: [[MULVL:%.*]] = mul i64 [[TMP1]], [[VNUM]] -// CHECK-CXX-NEXT: [[TMP2:%.*]] = getelementptr i8, ptr [[PTR]], i64 [[MULVL]] -// CHECK-CXX-NEXT: [[TMP3:%.*]] = trunc i64 [[VNUM]] to i32 -// CHECK-CXX-NEXT: [[TMP4:%.*]] = add i32 [[SLICE_BASE]], [[TMP3]] -// CHECK-CXX-NEXT: tail call void @llvm.aarch64.sme.st1q.horiz(<vscale x 1 x i1> [[TMP0]], ptr [[TMP2]], i32 0, i32 [[TMP4]]) -// CHECK-CXX-NEXT: tail call void @llvm.aarch64.sme.st1q.horiz(<vscale x 1 x i1> [[TMP0]], ptr [[TMP2]], i32 15, i32 [[TMP4]]) +// CHECK-CXX-NEXT: [[TMP1:%.*]] = tail call i64 @llvm.vscale.i64() +// CHECK-CXX-NEXT: [[TMP2:%.*]] = shl i64 [[VNUM]], 4 +// CHECK-CXX-NEXT: [[MULVL:%.*]] = mul i64 [[TMP2]], [[TMP1]] +// CHECK-CXX-NEXT: [[TMP3:%.*]] = getelementptr i8, ptr [[PTR]], i64 [[MULVL]] +// CHECK-CXX-NEXT: [[TMP4:%.*]] = trunc i64 [[VNUM]] to i32 +// CHECK-CXX-NEXT: [[TMP5:%.*]] = add i32 [[SLICE_BASE]], [[TMP4]] +// CHECK-CXX-NEXT: tail call void @llvm.aarch64.sme.st1q.horiz(<vscale x 1 x i1> [[TMP0]], ptr [[TMP3]], i32 0, i32 [[TMP5]]) +// CHECK-CXX-NEXT: tail call void @llvm.aarch64.sme.st1q.horiz(<vscale x 1 x i1> [[TMP0]], ptr [[TMP3]], i32 15, i32 [[TMP5]]) // CHECK-CXX-NEXT: ret void // void test_svst1_hor_vnum_za128(uint32_t slice_base, svbool_t pg, void *ptr, int64_t vnum) __arm_streaming __arm_in("za") { @@ -178,29 +188,31 @@ void test_svst1_hor_vnum_za128(uint32_t slice_base, svbool_t pg, void *ptr, int6 // CHECK-C-LABEL: define dso_local void @test_svst1_ver_vnum_za8( // CHECK-C-SAME: i32 noundef [[SLICE_BASE:%.*]], <vscale x 16 x i1> [[PG:%.*]], ptr noundef [[PTR:%.*]], i64 noundef [[VNUM:%.*]]) local_unnamed_addr #[[ATTR0]] { // CHECK-C-NEXT: entry: -// CHECK-C-NEXT: [[TMP0:%.*]] = tail call i64 @llvm.aarch64.sme.cntsb() -// CHECK-C-NEXT: [[MULVL:%.*]] = mul i64 [[TMP0]], [[VNUM]] -// CHECK-C-NEXT: [[TMP1:%.*]] = getelementptr i8, ptr [[PTR]], i64 [[MULVL]] -// CHECK-C-NEXT: [[TMP2:%.*]] = trunc i64 [[VNUM]] to i32 -// CHECK-C-NEXT: [[TMP3:%.*]] = add i32 [[SLICE_BASE]], [[TMP2]] -// CHECK-C-NEXT: tail call void @llvm.aarch64.sme.st1b.vert(<vscale x 16 x i1> [[PG]], ptr [[TMP1]], i32 0, i32 [[TMP3]]) -// CHECK-C-NEXT: [[ADD:%.*]] = add i32 [[SLICE_BASE]], [[TMP2]] -// CHECK-C-NEXT: [[TMP4:%.*]] = add i32 [[ADD]], 15 -// CHECK-C-NEXT: tail call void @llvm.aarch64.sme.st1b.vert(<vscale x 16 x i1> [[PG]], ptr [[TMP1]], i32 0, i32 [[TMP4]]) +// CHECK-C-NEXT: [[TMP0:%.*]] = tail call i64 @llvm.vscale.i64() +// CHECK-C-NEXT: [[TMP1:%.*]] = shl i64 [[VNUM]], 4 +// CHECK-C-NEXT: [[MULVL:%.*]] = mul i64 [[TMP1]], [[TMP0]] +// CHECK-C-NEXT: [[TMP2:%.*]] = getelementptr i8, ptr [[PTR]], i64 [[MULVL]] +// CHECK-C-NEXT: [[TMP3:%.*]] = trunc i64 [[VNUM]] to i32 +// CHECK-C-NEXT: [[TMP4:%.*]] = add i32 [[SLICE_BASE]], [[TMP3]] +// CHECK-C-NEXT: tail call void @llvm.aarch64.sme.st1b.vert(<vscale x 16 x i1> [[PG]], ptr [[TMP2]], i32 0, i32 [[TMP4]]) +// CHECK-C-NEXT: [[ADD:%.*]] = add i32 [[SLICE_BASE]], [[TMP3]] +// CHECK-C-NEXT: [[TMP5:%.*]] = add i32 [[ADD]], 15 +// CHECK-C-NEXT: tail call void @llvm.aarch64.sme.st1b.vert(<vscale x 16 x i1> [[PG]], ptr [[TMP2]], i32 0, i32 [[TMP5]]) // CHECK-C-NEXT: ret void // // CHECK-CXX-LABEL: define dso_local void @_Z23test_svst1_ver_vnum_za8ju10__SVBool_tPvl( // CHECK-CXX-SAME: i32 noundef [[SLICE_BASE:%.*]], <vscale x 16 x i1> [[PG:%.*]], ptr noundef [[PTR:%.*]], i64 noundef [[VNUM:%.*]]) local_unnamed_addr #[[ATTR0]] { // CHECK-CXX-NEXT: entry: -// CHECK-CXX-NEXT: [[TMP0:%.*]] = tail call i64 @llvm.aarch64.sme.cntsb() -// CHECK-CXX-NEXT: [[MULVL:%.*]] = mul i64 [[TMP0]], [[VNUM]] -// CHECK-CXX-NEXT: [[TMP1:%.*]] = getelementptr i8, ptr [[PTR]], i64 [[MULVL]] -// CHECK-CXX-NEXT: [[TMP2:%.*]] = trunc i64 [[VNUM]] to i32 -// CHECK-CXX-NEXT: [[TMP3:%.*]] = add i32 [[SLICE_BASE]], [[TMP2]] -// CHECK-CXX-NEXT: tail call void @llvm.aarch64.sme.st1b.vert(<vscale x 16 x i1> [[PG]], ptr [[TMP1]], i32 0, i32 [[TMP3]]) -// CHECK-CXX-NEXT: [[ADD:%.*]] = add i32 [[SLICE_BASE]], [[TMP2]] -// CHECK-CXX-NEXT: [[TMP4:%.*]] = add i32 [[ADD]], 15 -// CHECK-CXX-NEXT: tail call void @llvm.aarch64.sme.st1b.vert(<vscale x 16 x i1> [[PG]], ptr [[TMP1]], i32 0, i32 [[TMP4]]) +// CHECK-CXX-NEXT: [[TMP0:%.*]] = tail call i64 @llvm.vscale.i64() +// CHECK-CXX-NEXT: [[TMP1:%.*]] = shl i64 [[VNUM]], 4 +// CHECK-CXX-NEXT: [[MULVL:%.*]] = mul i64 [[TMP1]], [[TMP0]] +// CHECK-CXX-NEXT: [[TMP2:%.*]] = getelementptr i8, ptr [[PTR]], i64 [[MULVL]] +// CHECK-CXX-NEXT: [[TMP3:%.*]] = trunc i64 [[VNUM]] to i32 +// CHECK-CXX-NEXT: [[TMP4:%.*]] = add i32 [[SLICE_BASE]], [[TMP3]] +// CHECK-CXX-NEXT: tail call void @llvm.aarch64.sme.st1b.vert(<vscale x 16 x i1> [[PG]], ptr [[TMP2]], i32 0, i32 [[TMP4]]) +// CHECK-CXX-NEXT: [[ADD:%.*]] = add i32 [[SLICE_BASE]], [[TMP3]] +// CHECK-CXX-NEXT: [[TMP5:%.*]] = add i32 [[ADD]], 15 +// CHECK-CXX-NEXT: tail call void @llvm.aarch64.sme.st1b.vert(<vscale x 16 x i1> [[PG]], ptr [[TMP2]], i32 0, i32 [[TMP5]]) // CHECK-CXX-NEXT: ret void // void test_svst1_ver_vnum_za8(uint32_t slice_base, svbool_t pg, void *ptr, int64_t vnum) __arm_streaming __arm_in("za") { @@ -212,30 +224,32 @@ void test_svst1_ver_vnum_za8(uint32_t slice_base, svbool_t pg, void *ptr, int64_ // CHECK-C-SAME: i32 noundef [[SLICE_BASE:%.*]], <vscale x 16 x i1> [[PG:%.*]], ptr noundef [[PTR:%.*]], i64 noundef [[VNUM:%.*]]) local_unnamed_addr #[[ATTR0]] { // CHECK-C-NEXT: entry: // CHECK-C-NEXT: [[TMP0:%.*]] = tail call <vscale x 8 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv8i1(<vscale x 16 x i1> [[PG]]) -// CHECK-C-NEXT: [[TMP1:%.*]] = tail call i64 @llvm.aarch64.sme.cntsb() -// CHECK-C-NEXT: [[MULVL:%.*]] = mul i64 [[TMP1]], [[VNUM]] -// CHECK-C-NEXT: [[TMP2:%.*]] = getelementptr i8, ptr [[PTR]], i64 [[MULVL]] -// CHECK-C-NEXT: [[TMP3:%.*]] = trunc i64 [[VNUM]] to i32 -// CHECK-C-NEXT: [[TMP4:%.*]] = add i32 [[SLICE_BASE]], [[TMP3]] -// CHECK-C-NEXT: tail call void @llvm.aarch64.sme.st1h.vert(<vscale x 8 x i1> [[TMP0]], ptr [[TMP2]], i32 0, i32 [[TMP4]]) -// CHECK-C-NEXT: [[ADD:%.*]] = add i32 [[SLICE_BASE]], [[TMP3]] -// CHECK-C-NEXT: [[TMP5:%.*]] = add i32 [[ADD]], 7 -// CHECK-C-NEXT: tail call void @llvm.aarch64.sme.st1h.vert(<vscale x 8 x i1> [[TMP0]], ptr [[TMP2]], i32 1, i32 [[TMP5]]) +// CHECK-C-NEXT: [[TMP1:%.*]] = tail call i64 @llvm.vscale.i64() +// CHECK-C-NEXT: [[TMP2:%.*]] = shl i64 [[VNUM]], 4 +// CHECK-C-NEXT: [[MULVL:%.*]] = mul i64 [[TMP2]], [[TMP1]] +// CHECK-C-NEXT: [[TMP3:%.*]] = getelementptr i8, ptr [[PTR]], i64 [[MULVL]] +// CHECK-C-NEXT: [[TMP4:%.*]] = trunc i64 [[VNUM]] to i32 +// CHECK-C-NEXT: [[TMP5:%.*]] = add i32 [[SLICE_BASE]], [[TMP4]] +// CHECK-C-NEXT: tail call void @llvm.aarch64.sme.st1h.vert(<vscale x 8 x i1> [[TMP0]], ptr [[TMP3]], i32 0, i32 [[TMP5]]) +// CHECK-C-NEXT: [[ADD:%.*]] = add i32 [[SLICE_BASE]], [[TMP4]] +// CHECK-C-NEXT: [[TMP6:%.*]] = add i32 [[ADD]], 7 +// CHECK-C-NEXT: tail call void @llvm.aarch64.sme.st1h.vert(<vscale x 8 x i1> [[TMP0]], ptr [[TMP3]], i32 1, i32 [[TMP6]]) // CHECK-C-NEXT: ret void // // CHECK-CXX-LABEL: define dso_local void @_Z24test_svst1_ver_vnum_za16ju10__SVBool_tPvl( // CHECK-CXX-SAME: i32 noundef [[SLICE_BASE:%.*]], <vscale x 16 x i1> [[PG:%.*]], ptr noundef [[PTR:%.*]], i64 noundef [[VNUM:%.*]]) local_unnamed_addr #[[ATTR0]] { // CHECK-CXX-NEXT: entry: // CHECK-CXX-NEXT: [[TMP0:%.*]] = tail call <vscale x 8 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv8i1(<vscale x 16 x i1> [[PG]]) -// CHECK-CXX-NEXT: [[TMP1:%.*]] = tail call i64 @llvm.aarch64.sme.cntsb() -// CHECK-CXX-NEXT: [[MULVL:%.*]] = mul i64 [[TMP1]], [[VNUM]] -// CHECK-CXX-NEXT: [[TMP2:%.*]] = getelementptr i8, ptr [[PTR]], i64 [[MULVL]] -// CHECK-CXX-NEXT: [[TMP3:%.*]] = trunc i64 [[VNUM]] to i32 -// CHECK-CXX-NEXT: [[TMP4:%.*]] = add i32 [[SLICE_BASE]], [[TMP3]] -// CHECK-CXX-NEXT: tail call void @llvm.aarch64.sme.st1h.vert(<vscale x 8 x i1> [[TMP0]], ptr [[TMP2]], i32 0, i32 [[TMP4]]) -// CHECK-CXX-NEXT: [[ADD:%.*]] = add i32 [[SLICE_BASE]], [[TMP3]] -// CHECK-CXX-NEXT: [[TMP5:%.*]] = add i32 [[ADD]], 7 -// CHECK-CXX-NEXT: tail call void @llvm.aarch64.sme.st1h.vert(<vscale x 8 x i1> [[TMP0]], ptr [[TMP2]], i32 1, i32 [[TMP5]]) +// CHECK-CXX-NEXT: [[TMP1:%.*]] = tail call i64 @llvm.vscale.i64() +// CHECK-CXX-NEXT: [[TMP2:%.*]] = shl i64 [[VNUM]], 4 +// CHECK-CXX-NEXT: [[MULVL:%.*]] = mul i64 [[TMP2]], [[TMP1]] +// CHECK-CXX-NEXT: [[TMP3:%.*]] = getelementptr i8, ptr [[PTR]], i64 [[MULVL]] +// CHECK-CXX-NEXT: [[TMP4:%.*]] = trunc i64 [[VNUM]] to i32 +// CHECK-CXX-NEXT: [[TMP5:%.*]] = add i32 [[SLICE_BASE]], [[TMP4]] +// CHECK-CXX-NEXT: tail call void @llvm.aarch64.sme.st1h.vert(<vscale x 8 x i1> [[TMP0]], ptr [[TMP3]], i32 0, i32 [[TMP5]]) +// CHECK-CXX-NEXT: [[ADD:%.*]] = add i32 [[SLICE_BASE]], [[TMP4]] +// CHECK-CXX-NEXT: [[TMP6:%.*]] = add i32 [[ADD]], 7 +// CHECK-CXX-NEXT: tail call void @llvm.aarch64.sme.st1h.vert(<vscale x 8 x i1> [[TMP0]], ptr [[TMP3]], i32 1, i32 [[TMP6]]) // CHECK-CXX-NEXT: ret void // void test_svst1_ver_vnum_za16(uint32_t slice_base, svbool_t pg, void *ptr, int64_t vnum) __arm_streaming __arm_in("za") { @@ -247,30 +261,32 @@ void test_svst1_ver_vnum_za16(uint32_t slice_base, svbool_t pg, void *ptr, int64 // CHECK-C-SAME: i32 noundef [[SLICE_BASE:%.*]], <vscale x 16 x i1> [[PG:%.*]], ptr noundef [[PTR:%.*]], i64 noundef [[VNUM:%.*]]) local_unnamed_addr #[[ATTR0]] { // CHECK-C-NEXT: entry: // CHECK-C-NEXT: [[TMP0:%.*]] = tail call <vscale x 4 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv4i1(<vscale x 16 x i1> [[PG]]) -// CHECK-C-NEXT: [[TMP1:%.*]] = tail call i64 @llvm.aarch64.sme.cntsb() -// CHECK-C-NEXT: [[MULVL:%.*]] = mul i64 [[TMP1]], [[VNUM]] -// CHECK-C-NEXT: [[TMP2:%.*]] = getelementptr i8, ptr [[PTR]], i64 [[MULVL]] -// CHECK-C-NEXT: [[TMP3:%.*]] = trunc i64 [[VNUM]] to i32 -// CHECK-C-NEXT: [[TMP4:%.*]] = add i32 [[SLICE_BASE]], [[TMP3]] -// CHECK-C-NEXT: tail call void @llvm.aarch64.sme.st1w.vert(<vscale x 4 x i1> [[TMP0]], ptr [[TMP2]], i32 0, i32 [[TMP4]]) -// CHECK-C-NEXT: [[ADD:%.*]] = add i32 [[SLICE_BASE]], [[TMP3]] -// CHECK-C-NEXT: [[TMP5:%.*]] = add i32 [[ADD]], 3 -// CHECK-C-NEXT: tail call void @llvm.aarch64.sme.st1w.vert(<vscale x 4 x i1> [[TMP0]], ptr [[TMP2]], i32 3, i32 [[TMP5]]) +// CHECK-C-NEXT: [[TMP1:%.*]] = tail call i64 @llvm.vscale.i64() +// CHECK-C-NEXT: [[TMP2:%.*]] = shl i64 [[VNUM]], 4 +// CHECK-C-NEXT: [[MULVL:%.*]] = mul i64 [[TMP2]], [[TMP1]] +// CHECK-C-NEXT: [[TMP3:%.*]] = getelementptr i8, ptr [[PTR]], i64 [[MULVL]] +// CHECK-C-NEXT: [[TMP4:%.*]] = trunc i64 [[VNUM]] to i32 +// CHECK-C-NEXT: [[TMP5:%.*]] = add i32 [[SLICE_BASE]], [[TMP4]] +// CHECK-C-NEXT: tail call void @llvm.aarch64.sme.st1w.vert(<vscale x 4 x i1> [[TMP0]], ptr [[TMP3]], i32 0, i32 [[TMP5]]) +// CHECK-C-NEXT: [[ADD:%.*]] = add i32 [[SLICE_BASE]], [[TMP4]] +// CHECK-C-NEXT: [[TMP6:%.*]] = add i32 [[ADD]], 3 +// CHECK-C-NEXT: tail call void @llvm.aarch64.sme.st1w.vert(<vscale x 4 x i1> [[TMP0]], ptr [[TMP3]], i32 3, i32 [[TMP6]]) // CHECK-C-NEXT: ret void // // CHECK-CXX-LABEL: define dso_local void @_Z24test_svst1_ver_vnum_za32ju10__SVBool_tPvl( // CHECK-CXX-SAME: i32 noundef [[SLICE_BASE:%.*]], <vscale x 16 x i1> [[PG:%.*]], ptr noundef [[PTR:%.*]], i64 noundef [[VNUM:%.*]]) local_unnamed_addr #[[ATTR0]] { // CHECK-CXX-NEXT: entry: // CHECK-CXX-NEXT: [[TMP0:%.*]] = tail call <vscale x 4 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv4i1(<vscale x 16 x i1> [[PG]]) -// CHECK-CXX-NEXT: [[TMP1:%.*]] = tail call i64 @llvm.aarch64.sme.cntsb() -// CHECK-CXX-NEXT: [[MULVL:%.*]] = mul i64 [[TMP1]], [[VNUM]] -// CHECK-CXX-NEXT: [[TMP2:%.*]] = getelementptr i8, ptr [[PTR]], i64 [[MULVL]] -// CHECK-CXX-NEXT: [[TMP3:%.*]] = trunc i64 [[VNUM]] to i32 -// CHECK-CXX-NEXT: [[TMP4:%.*]] = add i32 [[SLICE_BASE]], [[TMP3]] -// CHECK-CXX-NEXT: tail call void @llvm.aarch64.sme.st1w.vert(<vscale x 4 x i1> [[TMP0]], ptr [[TMP2]], i32 0, i32 [[TMP4]]) -// CHECK-CXX-NEXT: [[ADD:%.*]] = add i32 [[SLICE_BASE]], [[TMP3]] -// CHECK-CXX-NEXT: [[TMP5:%.*]] = add i32 [[ADD]], 3 -// CHECK-CXX-NEXT: tail call void @llvm.aarch64.sme.st1w.vert(<vscale x 4 x i1> [[TMP0]], ptr [[TMP2]], i32 3, i32 [[TMP5]]) +// CHECK-CXX-NEXT: [[TMP1:%.*]] = tail call i64 @llvm.vscale.i64() +// CHECK-CXX-NEXT: [[TMP2:%.*]] = shl i64 [[VNUM]], 4 +// CHECK-CXX-NEXT: [[MULVL:%.*]] = mul i64 [[TMP2]], [[TMP1]] +// CHECK-CXX-NEXT: [[TMP3:%.*]] = getelementptr i8, ptr [[PTR]], i64 [[MULVL]] +// CHECK-CXX-NEXT: [[TMP4:%.*]] = trunc i64 [[VNUM]] to i32 +// CHECK-CXX-NEXT: [[TMP5:%.*]] = add i32 [[SLICE_BASE]], [[TMP4]] +// CHECK-CXX-NEXT: tail call void @llvm.aarch64.sme.st1w.vert(<vscale x 4 x i1> [[TMP0]], ptr [[TMP3]], i32 0, i32 [[TMP5]]) +// CHECK-CXX-NEXT: [[ADD:%.*]] = add i32 [[SLICE_BASE]], [[TMP4]] +// CHECK-CXX-NEXT: [[TMP6:%.*]] = add i32 [[ADD]], 3 +// CHECK-CXX-NEXT: tail call void @llvm.aarch64.sme.st1w.vert(<vscale x 4 x i1> [[TMP0]], ptr [[TMP3]], i32 3, i32 [[TMP6]]) // CHECK-CXX-NEXT: ret void // void test_svst1_ver_vnum_za32(uint32_t slice_base, svbool_t pg, void *ptr, int64_t vnum) __arm_streaming __arm_in("za") { @@ -282,30 +298,32 @@ void test_svst1_ver_vnum_za32(uint32_t slice_base, svbool_t pg, void *ptr, int64 // CHECK-C-SAME: i32 noundef [[SLICE_BASE:%.*]], <vscale x 16 x i1> [[PG:%.*]], ptr noundef [[PTR:%.*]], i64 noundef [[VNUM:%.*]]) local_unnamed_addr #[[ATTR0]] { // CHECK-C-NEXT: entry: // CHECK-C-NEXT: [[TMP0:%.*]] = tail call <vscale x 2 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv2i1(<vscale x 16 x i1> [[PG]]) -// CHECK-C-NEXT: [[TMP1:%.*]] = tail call i64 @llvm.aarch64.sme.cntsb() -// CHECK-C-NEXT: [[MULVL:%.*]] = mul i64 [[TMP1]], [[VNUM]] -// CHECK-C-NEXT: [[TMP2:%.*]] = getelementptr i8, ptr [[PTR]], i64 [[MULVL]] -// CHECK-C-NEXT: [[TMP3:%.*]] = trunc i64 [[VNUM]] to i32 -// CHECK-C-NEXT: [[TMP4:%.*]] = add i32 [[SLICE_BASE]], [[TMP3]] -// CHECK-C-NEXT: tail call void @llvm.aarch64.sme.st1d.vert(<vscale x 2 x i1> [[TMP0]], ptr [[TMP2]], i32 0, i32 [[TMP4]]) -// CHECK-C-NEXT: [[ADD:%.*]] = add i32 [[SLICE_BASE]], [[TMP3]] -// CHECK-C-NEXT: [[TMP5:%.*]] = add i32 [[ADD]], 1 -// CHECK-C-NEXT: tail call void @llvm.aarch64.sme.st1d.vert(<vscale x 2 x i1> [[TMP0]], ptr [[TMP2]], i32 7, i32 [[TMP5]]) +// CHECK-C-NEXT: [[TMP1:%.*]] = tail call i64 @llvm.vscale.i64() +// CHECK-C-NEXT: [[TMP2:%.*]] = shl i64 [[VNUM]], 4 +// CHECK-C-NEXT: [[MULVL:%.*]] = mul i64 [[TMP2]], [[TMP1]] +// CHECK-C-NEXT: [[TMP3:%.*]] = getelementptr i8, ptr [[PTR]], i64 [[MULVL]] +// CHECK-C-NEXT: [[TMP4:%.*]] = trunc i64 [[VNUM]] to i32 +// CHECK-C-NEXT: [[TMP5:%.*]] = add i32 [[SLICE_BASE]], [[TMP4]] +// CHECK-C-NEXT: tail call void @llvm.aarch64.sme.st1d.vert(<vscale x 2 x i1> [[TMP0]], ptr [[TMP3]], i32 0, i32 [[TMP5]]) +// CHECK-C-NEXT: [[ADD:%.*]] = add i32 [[SLICE_BASE]], [[TMP4]] +// CHECK-C-NEXT: [[TMP6:%.*]] = add i32 [[ADD]], 1 +// CHECK-C-NEXT: tail call void @llvm.aarch64.sme.st1d.vert(<vscale x 2 x i1> [[TMP0]], ptr [[TMP3]], i32 7, i32 [[TMP6]]) // CHECK-C-NEXT: ret void // // CHECK-CXX-LABEL: define dso_local void @_Z24test_svst1_ver_vnum_za64ju10__SVBool_tPvl( // CHECK-CXX-SAME: i32 noundef [[SLICE_BASE:%.*]], <vscale x 16 x i1> [[PG:%.*]], ptr noundef [[PTR:%.*]], i64 noundef [[VNUM:%.*]]) local_unnamed_addr #[[ATTR0]] { // CHECK-CXX-NEXT: entry: // CHECK-CXX-NEXT: [[TMP0:%.*]] = tail call <vscale x 2 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv2i1(<vscale x 16 x i1> [[PG]]) -// CHECK-CXX-NEXT: [[TMP1:%.*]] = tail call i64 @llvm.aarch64.sme.cntsb() -// CHECK-CXX-NEXT: [[MULVL:%.*]] = mul i64 [[TMP1]], [[VNUM]] -// CHECK-CXX-NEXT: [[TMP2:%.*]] = getelementptr i8, ptr [[PTR]], i64 [[MULVL]] -// CHECK-CXX-NEXT: [[TMP3:%.*]] = trunc i64 [[VNUM]] to i32 -// CHECK-CXX-NEXT: [[TMP4:%.*]] = add i32 [[SLICE_BASE]], [[TMP3]] -// CHECK-CXX-NEXT: tail call void @llvm.aarch64.sme.st1d.vert(<vscale x 2 x i1> [[TMP0]], ptr [[TMP2]], i32 0, i32 [[TMP4]]) -// CHECK-CXX-NEXT: [[ADD:%.*]] = add i32 [[SLICE_BASE]], [[TMP3]] -// CHECK-CXX-NEXT: [[TMP5:%.*]] = add i32 [[ADD]], 1 -// CHECK-CXX-NEXT: tail call void @llvm.aarch64.sme.st1d.vert(<vscale x 2 x i1> [[TMP0]], ptr [[TMP2]], i32 7, i32 [[TMP5]]) +// CHECK-CXX-NEXT: [[TMP1:%.*]] = tail call i64 @llvm.vscale.i64() +// CHECK-CXX-NEXT: [[TMP2:%.*]] = shl i64 [[VNUM]], 4 +// CHECK-CXX-NEXT: [[MULVL:%.*]] = mul i64 [[TMP2]], [[TMP1]] +// CHECK-CXX-NEXT: [[TMP3:%.*]] = getelementptr i8, ptr [[PTR]], i64 [[MULVL]] +// CHECK-CXX-NEXT: [[TMP4:%.*]] = trunc i64 [[VNUM]] to i32 +// CHECK-CXX-NEXT: [[TMP5:%.*]] = add i32 [[SLICE_BASE]], [[TMP4]] +// CHECK-CXX-NEXT: tail call void @llvm.aarch64.sme.st1d.vert(<vscale x 2 x i1> [[TMP0]], ptr [[TMP3]], i32 0, i32 [[TMP5]]) +// CHECK-CXX-NEXT: [[ADD:%.*]] = add i32 [[SLICE_BASE]], [[TMP4]] +// CHECK-CXX-NEXT: [[TMP6:%.*]] = add i32 [[ADD]], 1 +// CHECK-CXX-NEXT: tail call void @llvm.aarch64.sme.st1d.vert(<vscale x 2 x i1> [[TMP0]], ptr [[TMP3]], i32 7, i32 [[TMP6]]) // CHECK-CXX-NEXT: ret void // void test_svst1_ver_vnum_za64(uint32_t slice_base, svbool_t pg, void *ptr, int64_t vnum) __arm_streaming __arm_in("za") { @@ -317,26 +335,28 @@ void test_svst1_ver_vnum_za64(uint32_t slice_base, svbool_t pg, void *ptr, int64 // CHECK-C-SAME: i32 noundef [[SLICE_BASE:%.*]], <vscale x 16 x i1> [[PG:%.*]], ptr noundef [[PTR:%.*]], i64 noundef [[VNUM:%.*]]) local_unnamed_addr #[[ATTR0]] { // CHECK-C-NEXT: entry: // CHECK-C-NEXT: [[TMP0:%.*]] = tail call <vscale x 1 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv1i1(<vscale x 16 x i1> [[PG]]) -// CHECK-C-NEXT: [[TMP1:%.*]] = tail call i64 @llvm.aarch64.sme.cntsb() -// CHECK-C-NEXT: [[MULVL:%.*]] = mul i64 [[TMP1]], [[VNUM]] -// CHECK-C-NEXT: [[TMP2:%.*]] = getelementptr i8, ptr [[PTR]], i64 [[MULVL]] -// CHECK-C-NEXT: [[TMP3:%.*]] = trunc i64 [[VNUM]] to i32 -// CHECK-C-NEXT: [[TMP4:%.*]] = add i32 [[SLICE_BASE]], [[TMP3]] -// CHECK-C-NEXT: tail call void @llvm.aarch64.sme.st1q.vert(<vscale x 1 x i1> [[TMP0]], ptr [[TMP2]], i32 0, i32 [[TMP4]]) -// CHECK-C-NEXT: tail call void @llvm.aarch64.sme.st1q.vert(<vscale x 1 x i1> [[TMP0]], ptr [[TMP2]], i32 15, i32 [[TMP4]]) +// CHECK-C-NEXT: [[TMP1:%.*]] = tail call i64 @llvm.vscale.i64() +// CHECK-C-NEXT: [[TMP2:%.*]] = shl i64 [[VNUM]], 4 +// CHECK-C-NEXT: [[MULVL:%.*]] = mul i64 [[TMP2]], [[TMP1]] +// CHECK-C-NEXT: [[TMP3:%.*]] = getelementptr i8, ptr [[PTR]], i64 [[MULVL]] +// CHECK-C-NEXT: [[TMP4:%.*]] = trunc i64 [[VNUM]] to i32 +// CHECK-C-NEXT: [[TMP5:%.*]] = add i32 [[SLICE_BASE]], [[TMP4]] +// CHECK-C-NEXT: tail call void @llvm.aarch64.sme.st1q.vert(<vscale x 1 x i1> [[TMP0]], ptr [[TMP3]], i32 0, i32 [[TMP5]]) +// CHECK-C-NEXT: tail call void @llvm.aarch64.sme.st1q.vert(<vscale x 1 x i1> [[TMP0]], ptr [[TMP3]], i32 15, i32 [[TMP5]]) // CHECK-C-NEXT: ret void // // CHECK-CXX-LABEL: define dso_local void @_Z25test_svst1_ver_vnum_za128ju10__SVBool_tPvl( // CHECK-CXX-SAME: i32 noundef [[SLICE_BASE:%.*]], <vscale x 16 x i1> [[PG:%.*]], ptr noundef [[PTR:%.*]], i64 noundef [[VNUM:%.*]]) local_unnamed_addr #[[ATTR0]] { // CHECK-CXX-NEXT: entry: // CHECK-CXX-NEXT: [[TMP0:%.*]] = tail call <vscale x 1 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv1i1(<vscale x 16 x i1> [[PG]]) -// CHECK-CXX-NEXT: [[TMP1:%.*]] = tail call i64 @llvm.aarch64.sme.cntsb() -// CHECK-CXX-NEXT: [[MULVL:%.*]] = mul i64 [[TMP1]], [[VNUM]] -// CHECK-CXX-NEXT: [[TMP2:%.*]] = getelementptr i8, ptr [[PTR]], i64 [[MULVL]] -// CHECK-CXX-NEXT: [[TMP3:%.*]] = trunc i64 [[VNUM]] to i32 -// CHECK-CXX-NEXT: [[TMP4:%.*]] = add i32 [[SLICE_BASE]], [[TMP3]] -// CHECK-CXX-NEXT: tail call void @llvm.aarch64.sme.st1q.vert(<vscale x 1 x i1> [[TMP0]], ptr [[TMP2]], i32 0, i32 [[TMP4]]) -// CHECK-CXX-NEXT: tail call void @llvm.aarch64.sme.st1q.vert(<vscale x 1 x i1> [[TMP0]], ptr [[TMP2]], i32 15, i32 [[TMP4]]) +// CHECK-CXX-NEXT: [[TMP1:%.*]] = tail call i64 @llvm.vscale.i64() +// CHECK-CXX-NEXT: [[TMP2:%.*]] = shl i64 [[VNUM]], 4 +// CHECK-CXX-NEXT: [[MULVL:%.*]] = mul i64 [[TMP2]], [[TMP1]] +// CHECK-CXX-NEXT: [[TMP3:%.*]] = getelementptr i8, ptr [[PTR]], i64 [[MULVL]] +// CHECK-CXX-NEXT: [[TMP4:%.*]] = trunc i64 [[VNUM]] to i32 +// CHECK-CXX-NEXT: [[TMP5:%.*]] = add i32 [[SLICE_BASE]], [[TMP4]] +// CHECK-CXX-NEXT: tail call void @llvm.aarch64.sme.st1q.vert(<vscale x 1 x i1> [[TMP0]], ptr [[TMP3]], i32 0, i32 [[TMP5]]) +// CHECK-CXX-NEXT: tail call void @llvm.aarch64.sme.st1q.vert(<vscale x 1 x i1> [[TMP0]], ptr [[TMP3]], i32 15, i32 [[TMP5]]) // CHECK-CXX-NEXT: ret void // void test_svst1_ver_vnum_za128(uint32_t slice_base, svbool_t pg, void *ptr, int64_t vnum) __arm_streaming __arm_in("za") { diff --git a/clang/test/CodeGen/AArch64/sve-acle-__ARM_FEATURE_SVE_VECTOR_OPERATORS.c b/clang/test/CodeGen/AArch64/sve-acle-__ARM_FEATURE_SVE_VECTOR_OPERATORS.c index d244a8b..4a1185d0 100644 --- a/clang/test/CodeGen/AArch64/sve-acle-__ARM_FEATURE_SVE_VECTOR_OPERATORS.c +++ b/clang/test/CodeGen/AArch64/sve-acle-__ARM_FEATURE_SVE_VECTOR_OPERATORS.c @@ -86,10 +86,10 @@ typedef svint8_t vec2 __attribute__((arm_sve_vector_bits(N))); // CHECK-NEXT: entry: // CHECK-NEXT: [[INDIRECT_ARG_TEMP:%.*]] = alloca <[[#div(VBITS,8)]] x i8>, align 16 // CHECK-NEXT: [[X:%.*]] = tail call <[[#div(VBITS,8)]] x i8> @llvm.vector.extract.v[[#div(VBITS,8)]]i8.nxv16i8(<vscale x 16 x i8> [[X_COERCE:%.*]], i64 0) -// CHECK-NEXT: call void @llvm.lifetime.start.p0(i64 [[SIZE:[0-9]+]], ptr nonnull [[INDIRECT_ARG_TEMP]]) #[[ATTR6:[0-9]+]] +// CHECK-NEXT: call void @llvm.lifetime.start.p0(ptr nonnull [[INDIRECT_ARG_TEMP]]) #[[ATTR6:[0-9]+]] // CHECK-NEXT: store <[[#div(VBITS,8)]] x i8> [[X]], ptr [[INDIRECT_ARG_TEMP]], align 16, [[TBAA6]] // CHECK-NEXT: call void @f3(ptr dead_on_return noundef nonnull [[INDIRECT_ARG_TEMP]]) [[ATTR5:#.*]] -// CHECK-NEXT: call void @llvm.lifetime.end.p0(i64 [[SIZE]], ptr nonnull [[INDIRECT_ARG_TEMP]]) #[[ATTR6:[0-9]+]] +// CHECK-NEXT: call void @llvm.lifetime.end.p0(ptr nonnull [[INDIRECT_ARG_TEMP]]) #[[ATTR6:[0-9]+]] // CHECK-NEXT: ret void // CHECK128-LABEL: declare void @f3(<16 x i8> noundef) diff --git a/clang/test/CodeGen/AArch64/sve-acle-__ARM_FEATURE_SVE_VECTOR_OPERATORS.cpp b/clang/test/CodeGen/AArch64/sve-acle-__ARM_FEATURE_SVE_VECTOR_OPERATORS.cpp index d42ecb6..6211b60 100644 --- a/clang/test/CodeGen/AArch64/sve-acle-__ARM_FEATURE_SVE_VECTOR_OPERATORS.cpp +++ b/clang/test/CodeGen/AArch64/sve-acle-__ARM_FEATURE_SVE_VECTOR_OPERATORS.cpp @@ -73,10 +73,10 @@ typedef svint16_t vec2 __attribute__((arm_sve_vector_bits(N))); // CHECK128-NEXT: ret void // CHECKWIDE-NEXT: [[INDIRECT_ARG_TEMP:%.*]] = alloca <[[#div(VBITS, 16)]] x i16>, align 16 // CHECKWIDE-NEXT: [[X:%.*]] = tail call <[[#div(VBITS, 16)]] x i16> @llvm.vector.extract.v[[#div(VBITS, 16)]]i16.nxv8i16(<vscale x 8 x i16> [[X_COERCE:%.*]], i64 0) -// CHECKWIDE-NEXT: call void @llvm.lifetime.start.p0(i64 [[SIZE:[0-9]+]], ptr nonnull [[INDIRECT_ARG_TEMP]]) #[[ATTR6:[0-9]+]] +// CHECKWIDE-NEXT: call void @llvm.lifetime.start.p0(ptr nonnull [[INDIRECT_ARG_TEMP]]) #[[ATTR6:[0-9]+]] // CHECKWIDE-NEXT: store <[[#div(VBITS, 16)]] x i16> [[X]], ptr [[INDIRECT_ARG_TEMP]], align 16, [[TBAA6:!tbaa !.*]] // CHECKWIDE-NEXT: call void @_Z1fDv[[#div(VBITS, 16)]]_s(ptr dead_on_return noundef nonnull [[INDIRECT_ARG_TEMP]]) [[ATTR5:#.*]] -// CHECKWIDE-NEXT: call void @llvm.lifetime.end.p0(i64 [[SIZE]], ptr nonnull [[INDIRECT_ARG_TEMP]]) #[[ATTR6:[0-9]+]] +// CHECKWIDE-NEXT: call void @llvm.lifetime.end.p0(ptr nonnull [[INDIRECT_ARG_TEMP]]) #[[ATTR6:[0-9]+]] // CHECKWIDE-NEXT: ret void void g(vec2 x) { f(x); } // OK #endif diff --git a/clang/test/CodeGen/AArch64/sve2-intrinsics/acle_sve2_aesd.c b/clang/test/CodeGen/AArch64/sve2-intrinsics/acle_sve2_aesd.c index 0839b32..17f4a54 100644 --- a/clang/test/CodeGen/AArch64/sve2-intrinsics/acle_sve2_aesd.c +++ b/clang/test/CodeGen/AArch64/sve2-intrinsics/acle_sve2_aesd.c @@ -4,6 +4,11 @@ // RUN: %clang_cc1 -fclang-abi-compat=latest -DSVE_OVERLOADED_FORMS -triple aarch64 -target-feature +sve -target-feature +sve2 -target-feature +sve-aes -O1 -Werror -Wall -emit-llvm -o - %s | FileCheck %s // RUN: %clang_cc1 -fclang-abi-compat=latest -DSVE_OVERLOADED_FORMS -triple aarch64 -target-feature +sve -target-feature +sve2 -target-feature +sve-aes -O1 -Werror -Wall -emit-llvm -o - -x c++ %s | FileCheck %s -check-prefix=CPP-CHECK +// RUN: %clang_cc1 -fclang-abi-compat=latest -triple aarch64 -target-feature +sme -target-feature +ssve-aes -O1 -Werror -Wall -emit-llvm -o - %s | FileCheck %s +// RUN: %clang_cc1 -fclang-abi-compat=latest -triple aarch64 -target-feature +sme -target-feature +ssve-aes -O1 -Werror -Wall -emit-llvm -o - -x c++ %s | FileCheck %s -check-prefix=CPP-CHECK +// RUN: %clang_cc1 -fclang-abi-compat=latest -DSVE_OVERLOADED_FORMS -triple aarch64 -target-feature +sme -target-feature +ssve-aes -O1 -Werror -Wall -emit-llvm -o - %s | FileCheck %s +// RUN: %clang_cc1 -fclang-abi-compat=latest -DSVE_OVERLOADED_FORMS -triple aarch64 -target-feature +sme -target-feature +ssve-aes -O1 -Werror -Wall -emit-llvm -o - -x c++ %s | FileCheck %s -check-prefix=CPP-CHECK + // REQUIRES: aarch64-registered-target #include <arm_sve.h> @@ -15,6 +20,12 @@ #define SVE_ACLE_FUNC(A1,A2,A3,A4) A1##A2##A3##A4 #endif +#ifdef __ARM_FEATURE_SME +#define STREAMING __arm_streaming +#else +#define STREAMING +#endif + // CHECK-LABEL: @test_svaesd_u8( // CHECK-NEXT: entry: // CHECK-NEXT: [[TMP0:%.*]] = tail call <vscale x 16 x i8> @llvm.aarch64.sve.aesd(<vscale x 16 x i8> [[OP1:%.*]], <vscale x 16 x i8> [[OP2:%.*]]) @@ -25,7 +36,7 @@ // CPP-CHECK-NEXT: [[TMP0:%.*]] = tail call <vscale x 16 x i8> @llvm.aarch64.sve.aesd(<vscale x 16 x i8> [[OP1:%.*]], <vscale x 16 x i8> [[OP2:%.*]]) // CPP-CHECK-NEXT: ret <vscale x 16 x i8> [[TMP0]] // -svuint8_t test_svaesd_u8(svuint8_t op1, svuint8_t op2) +svuint8_t test_svaesd_u8(svuint8_t op1, svuint8_t op2) STREAMING { return SVE_ACLE_FUNC(svaesd,_u8,,)(op1, op2); } diff --git a/clang/test/CodeGen/AArch64/sve2-intrinsics/acle_sve2_aese.c b/clang/test/CodeGen/AArch64/sve2-intrinsics/acle_sve2_aese.c index 08ca748..768c8ef 100644 --- a/clang/test/CodeGen/AArch64/sve2-intrinsics/acle_sve2_aese.c +++ b/clang/test/CodeGen/AArch64/sve2-intrinsics/acle_sve2_aese.c @@ -4,6 +4,11 @@ // RUN: %clang_cc1 -fclang-abi-compat=latest -DSVE_OVERLOADED_FORMS -triple aarch64 -target-feature +sve -target-feature +sve2 -target-feature +sve-aes -O1 -Werror -Wall -emit-llvm -o - %s | FileCheck %s // RUN: %clang_cc1 -fclang-abi-compat=latest -DSVE_OVERLOADED_FORMS -triple aarch64 -target-feature +sve -target-feature +sve2 -target-feature +sve-aes -O1 -Werror -Wall -emit-llvm -o - -x c++ %s | FileCheck %s -check-prefix=CPP-CHECK +// RUN: %clang_cc1 -fclang-abi-compat=latest -triple aarch64 -target-feature +sme -target-feature +ssve-aes -O1 -Werror -Wall -emit-llvm -o - %s | FileCheck %s +// RUN: %clang_cc1 -fclang-abi-compat=latest -triple aarch64 -target-feature +sme -target-feature +ssve-aes -O1 -Werror -Wall -emit-llvm -o - -x c++ %s | FileCheck %s -check-prefix=CPP-CHECK +// RUN: %clang_cc1 -fclang-abi-compat=latest -DSVE_OVERLOADED_FORMS -triple aarch64 -target-feature +sme -target-feature +ssve-aes -O1 -Werror -Wall -emit-llvm -o - %s | FileCheck %s +// RUN: %clang_cc1 -fclang-abi-compat=latest -DSVE_OVERLOADED_FORMS -triple aarch64 -target-feature +sme -target-feature +ssve-aes -O1 -Werror -Wall -emit-llvm -o - -x c++ %s | FileCheck %s -check-prefix=CPP-CHECK + // REQUIRES: aarch64-registered-target #include <arm_sve.h> @@ -15,6 +20,12 @@ #define SVE_ACLE_FUNC(A1,A2,A3,A4) A1##A2##A3##A4 #endif +#if defined(__ARM_FEATURE_SME) +#define STREAMING __arm_streaming +#else +#define STREAMING +#endif + // CHECK-LABEL: @test_svaese_u8( // CHECK-NEXT: entry: // CHECK-NEXT: [[TMP0:%.*]] = tail call <vscale x 16 x i8> @llvm.aarch64.sve.aese(<vscale x 16 x i8> [[OP1:%.*]], <vscale x 16 x i8> [[OP2:%.*]]) @@ -25,7 +36,7 @@ // CPP-CHECK-NEXT: [[TMP0:%.*]] = tail call <vscale x 16 x i8> @llvm.aarch64.sve.aese(<vscale x 16 x i8> [[OP1:%.*]], <vscale x 16 x i8> [[OP2:%.*]]) // CPP-CHECK-NEXT: ret <vscale x 16 x i8> [[TMP0]] // -svuint8_t test_svaese_u8(svuint8_t op1, svuint8_t op2) +svuint8_t test_svaese_u8(svuint8_t op1, svuint8_t op2) STREAMING { return SVE_ACLE_FUNC(svaese,_u8,,)(op1, op2); } diff --git a/clang/test/CodeGen/AArch64/sve2-intrinsics/acle_sve2_aesimc.c b/clang/test/CodeGen/AArch64/sve2-intrinsics/acle_sve2_aesimc.c index 78d3deb..4574589 100644 --- a/clang/test/CodeGen/AArch64/sve2-intrinsics/acle_sve2_aesimc.c +++ b/clang/test/CodeGen/AArch64/sve2-intrinsics/acle_sve2_aesimc.c @@ -4,6 +4,12 @@ // RUN: %clang_cc1 -DSVE_OVERLOADED_FORMS -triple aarch64 -target-feature +sve -target-feature +sve2 -target-feature +sve-aes -O1 -Werror -Wall -emit-llvm -o - %s | FileCheck %s // RUN: %clang_cc1 -DSVE_OVERLOADED_FORMS -triple aarch64 -target-feature +sve -target-feature +sve2 -target-feature +sve-aes -O1 -Werror -Wall -emit-llvm -o - -x c++ %s | FileCheck %s -check-prefix=CPP-CHECK +// RUN: %clang_cc1 -triple aarch64 -target-feature +sme -target-feature +ssve-aes -O1 -Werror -Wall -emit-llvm -o - %s | FileCheck %s +// RUN: %clang_cc1 -triple aarch64 -target-feature +sme -target-feature +ssve-aes -O1 -Werror -Wall -emit-llvm -o - -x c++ %s | FileCheck %s -check-prefix=CPP-CHECK +// RUN: %clang_cc1 -DSVE_OVERLOADED_FORMS -triple aarch64 -target-feature +sme -target-feature +ssve-aes -O1 -Werror -Wall -emit-llvm -o - %s | FileCheck %s +// RUN: %clang_cc1 -DSVE_OVERLOADED_FORMS -triple aarch64 -target-feature +sme -target-feature +ssve-aes -O1 -Werror -Wall -emit-llvm -o - -x c++ %s | FileCheck %s -check-prefix=CPP-CHECK + + // REQUIRES: aarch64-registered-target #include <arm_sve.h> @@ -15,6 +21,13 @@ #define SVE_ACLE_FUNC(A1,A2,A3,A4) A1##A2##A3##A4 #endif +#if defined(__ARM_FEATURE_SME) +#define STREAMING __arm_streaming +#else +#define STREAMING +#endif + + // CHECK-LABEL: @test_svaesimc_u8( // CHECK-NEXT: entry: // CHECK-NEXT: [[TMP0:%.*]] = tail call <vscale x 16 x i8> @llvm.aarch64.sve.aesimc(<vscale x 16 x i8> [[OP:%.*]]) @@ -25,7 +38,7 @@ // CPP-CHECK-NEXT: [[TMP0:%.*]] = tail call <vscale x 16 x i8> @llvm.aarch64.sve.aesimc(<vscale x 16 x i8> [[OP:%.*]]) // CPP-CHECK-NEXT: ret <vscale x 16 x i8> [[TMP0]] // -svuint8_t test_svaesimc_u8(svuint8_t op) +svuint8_t test_svaesimc_u8(svuint8_t op) STREAMING { return SVE_ACLE_FUNC(svaesimc,_u8,,)(op); } diff --git a/clang/test/CodeGen/AArch64/sve2-intrinsics/acle_sve2_aesmc.c b/clang/test/CodeGen/AArch64/sve2-intrinsics/acle_sve2_aesmc.c index 48d1301..249eaba 100644 --- a/clang/test/CodeGen/AArch64/sve2-intrinsics/acle_sve2_aesmc.c +++ b/clang/test/CodeGen/AArch64/sve2-intrinsics/acle_sve2_aesmc.c @@ -4,6 +4,11 @@ // RUN: %clang_cc1 -DSVE_OVERLOADED_FORMS -triple aarch64 -target-feature +sve -target-feature +sve2 -target-feature +sve-aes -O1 -Werror -Wall -emit-llvm -o - %s | FileCheck %s // RUN: %clang_cc1 -DSVE_OVERLOADED_FORMS -triple aarch64 -target-feature +sve -target-feature +sve2 -target-feature +sve-aes -O1 -Werror -Wall -emit-llvm -o - -x c++ %s | FileCheck %s -check-prefix=CPP-CHECK +// RUN: %clang_cc1 -fclang-abi-compat=latest -triple aarch64 -target-feature +sme -target-feature +ssve-aes -O1 -Werror -Wall -emit-llvm -o - %s | FileCheck %s +// RUN: %clang_cc1 -fclang-abi-compat=latest -triple aarch64 -target-feature +sme -target-feature +ssve-aes -O1 -Werror -Wall -emit-llvm -o - -x c++ %s | FileCheck %s -check-prefix=CPP-CHECK +// RUN: %clang_cc1 -fclang-abi-compat=latest -DSVE_OVERLOADED_FORMS -triple aarch64 -target-feature +sme -target-feature +ssve-aes -O1 -Werror -Wall -emit-llvm -o - %s | FileCheck %s +// RUN: %clang_cc1 -fclang-abi-compat=latest -DSVE_OVERLOADED_FORMS -triple aarch64 -target-feature +sme -target-feature +ssve-aes -O1 -Werror -Wall -emit-llvm -o - -x c++ %s | FileCheck %s -check-prefix=CPP-CHECK + // REQUIRES: aarch64-registered-target #include <arm_sve.h> @@ -15,6 +20,12 @@ #define SVE_ACLE_FUNC(A1,A2,A3,A4) A1##A2##A3##A4 #endif +#if defined(__ARM_FEATURE_SME) +#define MODE_ATTR __arm_streaming +#else +#define MODE_ATTR +#endif + // CHECK-LABEL: @test_svaesmc_u8( // CHECK-NEXT: entry: // CHECK-NEXT: [[TMP0:%.*]] = tail call <vscale x 16 x i8> @llvm.aarch64.sve.aesmc(<vscale x 16 x i8> [[OP:%.*]]) @@ -25,7 +36,7 @@ // CPP-CHECK-NEXT: [[TMP0:%.*]] = tail call <vscale x 16 x i8> @llvm.aarch64.sve.aesmc(<vscale x 16 x i8> [[OP:%.*]]) // CPP-CHECK-NEXT: ret <vscale x 16 x i8> [[TMP0]] // -svuint8_t test_svaesmc_u8(svuint8_t op) +svuint8_t test_svaesmc_u8(svuint8_t op) MODE_ATTR { return SVE_ACLE_FUNC(svaesmc,_u8,,)(op); } diff --git a/clang/test/CodeGen/AArch64/sve2-intrinsics/acle_sve2_pmullb_128.c b/clang/test/CodeGen/AArch64/sve2-intrinsics/acle_sve2_pmullb_128.c index 09583f98..3ca7ff7 100644 --- a/clang/test/CodeGen/AArch64/sve2-intrinsics/acle_sve2_pmullb_128.c +++ b/clang/test/CodeGen/AArch64/sve2-intrinsics/acle_sve2_pmullb_128.c @@ -6,6 +6,11 @@ // RUN: %clang_cc1 -fclang-abi-compat=latest -DSVE_OVERLOADED_FORMS -triple aarch64 -target-feature +sve -target-feature +sve2 -target-feature +sve-aes -O1 -Werror -Wall -emit-llvm -o - %s | FileCheck %s // RUN: %clang_cc1 -fclang-abi-compat=latest -DSVE_OVERLOADED_FORMS -triple aarch64 -target-feature +sve -target-feature +sve2 -target-feature +sve-aes -O1 -Werror -Wall -emit-llvm -o - -x c++ %s | FileCheck %s -check-prefix=CPP-CHECK +// RUN: %clang_cc1 -fclang-abi-compat=latest -triple aarch64 -target-feature +sme -target-feature +ssve-aes -O1 -Werror -Wall -emit-llvm -o - %s | FileCheck %s +// RUN: %clang_cc1 -fclang-abi-compat=latest -triple aarch64 -target-feature +sme -target-feature +ssve-aes -O1 -Werror -Wall -emit-llvm -o - -x c++ %s | FileCheck %s -check-prefix=CPP-CHECK +// RUN: %clang_cc1 -fclang-abi-compat=latest -DSVE_OVERLOADED_FORMS -triple aarch64 -target-feature +sme -target-feature +ssve-aes -O1 -Werror -Wall -emit-llvm -o - %s | FileCheck %s +// RUN: %clang_cc1 -fclang-abi-compat=latest -DSVE_OVERLOADED_FORMS -triple aarch64 -target-feature +sme -target-feature +ssve-aes -O1 -Werror -Wall -emit-llvm -o - -x c++ %s | FileCheck %s -check-prefix=CPP-CHECK + #include <arm_sve.h> #ifdef SVE_OVERLOADED_FORMS @@ -15,6 +20,15 @@ #define SVE_ACLE_FUNC(A1,A2,A3,A4) A1##A2##A3##A4 #endif +#ifdef __ARM_FEATURE_SME +#define STREAMING __arm_streaming +#else +#define STREAMING +#endif + + +// +// // CHECK-LABEL: @test_svpmullb_pair_u64( // CHECK-NEXT: entry: // CHECK-NEXT: [[TMP0:%.*]] = tail call <vscale x 2 x i64> @llvm.aarch64.sve.pmullb.pair.nxv2i64(<vscale x 2 x i64> [[OP1:%.*]], <vscale x 2 x i64> [[OP2:%.*]]) @@ -25,11 +39,14 @@ // CPP-CHECK-NEXT: [[TMP0:%.*]] = tail call <vscale x 2 x i64> @llvm.aarch64.sve.pmullb.pair.nxv2i64(<vscale x 2 x i64> [[OP1:%.*]], <vscale x 2 x i64> [[OP2:%.*]]) // CPP-CHECK-NEXT: ret <vscale x 2 x i64> [[TMP0]] // -svuint64_t test_svpmullb_pair_u64(svuint64_t op1, svuint64_t op2) +svuint64_t test_svpmullb_pair_u64(svuint64_t op1, svuint64_t op2) STREAMING { return SVE_ACLE_FUNC(svpmullb_pair,_u64,,)(op1, op2); } + +// +// // CHECK-LABEL: @test_svpmullb_pair_n_u64( // CHECK-NEXT: entry: // CHECK-NEXT: [[DOTSPLATINSERT:%.*]] = insertelement <vscale x 2 x i64> poison, i64 [[OP2:%.*]], i64 0 @@ -44,7 +61,7 @@ svuint64_t test_svpmullb_pair_u64(svuint64_t op1, svuint64_t op2) // CPP-CHECK-NEXT: [[TMP0:%.*]] = tail call <vscale x 2 x i64> @llvm.aarch64.sve.pmullb.pair.nxv2i64(<vscale x 2 x i64> [[OP1:%.*]], <vscale x 2 x i64> [[DOTSPLAT]]) // CPP-CHECK-NEXT: ret <vscale x 2 x i64> [[TMP0]] // -svuint64_t test_svpmullb_pair_n_u64(svuint64_t op1, uint64_t op2) +svuint64_t test_svpmullb_pair_n_u64(svuint64_t op1, uint64_t op2) STREAMING { return SVE_ACLE_FUNC(svpmullb_pair,_n_u64,,)(op1, op2); } diff --git a/clang/test/CodeGen/AArch64/sve2-intrinsics/acle_sve2_pmullt_128.c b/clang/test/CodeGen/AArch64/sve2-intrinsics/acle_sve2_pmullt_128.c index a4ffc31..d97248c 100644 --- a/clang/test/CodeGen/AArch64/sve2-intrinsics/acle_sve2_pmullt_128.c +++ b/clang/test/CodeGen/AArch64/sve2-intrinsics/acle_sve2_pmullt_128.c @@ -6,6 +6,11 @@ // RUN: %clang_cc1 -fclang-abi-compat=latest -DSVE_OVERLOADED_FORMS -triple aarch64 -target-feature +sve -target-feature +sve2 -target-feature +sve-aes -O1 -Werror -Wall -emit-llvm -o - %s | FileCheck %s // RUN: %clang_cc1 -fclang-abi-compat=latest -DSVE_OVERLOADED_FORMS -triple aarch64 -target-feature +sve -target-feature +sve2 -target-feature +sve-aes -O1 -Werror -Wall -emit-llvm -o - -x c++ %s | FileCheck %s -check-prefix=CPP-CHECK +// RUN: %clang_cc1 -fclang-abi-compat=latest -triple aarch64 -target-feature +sme -target-feature +ssve-aes -O1 -Werror -Wall -emit-llvm -o - %s | FileCheck %s +// RUN: %clang_cc1 -fclang-abi-compat=latest -triple aarch64 -target-feature +sme -target-feature +ssve-aes -O1 -Werror -Wall -emit-llvm -o - -x c++ %s | FileCheck %s -check-prefix=CPP-CHECK +// RUN: %clang_cc1 -fclang-abi-compat=latest -DSVE_OVERLOADED_FORMS -triple aarch64 -target-feature +sme -target-feature +ssve-aes -O1 -Werror -Wall -emit-llvm -o - %s | FileCheck %s +// RUN: %clang_cc1 -fclang-abi-compat=latest -DSVE_OVERLOADED_FORMS -triple aarch64 -target-feature +sme -target-feature +ssve-aes -O1 -Werror -Wall -emit-llvm -o - -x c++ %s | FileCheck %s -check-prefix=CPP-CHECK + #include <arm_sve.h> #ifdef SVE_OVERLOADED_FORMS @@ -15,6 +20,13 @@ #define SVE_ACLE_FUNC(A1,A2,A3,A4) A1##A2##A3##A4 #endif +#ifdef __ARM_FEATURE_SME +#define STREAMING __arm_streaming +#else +#define STREAMING +#endif + + // CHECK-LABEL: @test_svpmullt_pair_u64( // CHECK-NEXT: entry: // CHECK-NEXT: [[TMP0:%.*]] = tail call <vscale x 2 x i64> @llvm.aarch64.sve.pmullt.pair.nxv2i64(<vscale x 2 x i64> [[OP1:%.*]], <vscale x 2 x i64> [[OP2:%.*]]) @@ -25,11 +37,12 @@ // CPP-CHECK-NEXT: [[TMP0:%.*]] = tail call <vscale x 2 x i64> @llvm.aarch64.sve.pmullt.pair.nxv2i64(<vscale x 2 x i64> [[OP1:%.*]], <vscale x 2 x i64> [[OP2:%.*]]) // CPP-CHECK-NEXT: ret <vscale x 2 x i64> [[TMP0]] // -svuint64_t test_svpmullt_pair_u64(svuint64_t op1, svuint64_t op2) +svuint64_t test_svpmullt_pair_u64(svuint64_t op1, svuint64_t op2) STREAMING { return SVE_ACLE_FUNC(svpmullt_pair,_u64,,)(op1, op2); } + // CHECK-LABEL: @test_svpmullt_pair_n_u64( // CHECK-NEXT: entry: // CHECK-NEXT: [[DOTSPLATINSERT:%.*]] = insertelement <vscale x 2 x i64> poison, i64 [[OP2:%.*]], i64 0 @@ -44,7 +57,7 @@ svuint64_t test_svpmullt_pair_u64(svuint64_t op1, svuint64_t op2) // CPP-CHECK-NEXT: [[TMP0:%.*]] = tail call <vscale x 2 x i64> @llvm.aarch64.sve.pmullt.pair.nxv2i64(<vscale x 2 x i64> [[OP1:%.*]], <vscale x 2 x i64> [[DOTSPLAT]]) // CPP-CHECK-NEXT: ret <vscale x 2 x i64> [[TMP0]] // -svuint64_t test_svpmullt_pair_n_u64(svuint64_t op1, uint64_t op2) +svuint64_t test_svpmullt_pair_n_u64(svuint64_t op1, uint64_t op2) STREAMING { return SVE_ACLE_FUNC(svpmullt_pair,_n_u64,,)(op1, op2); } diff --git a/clang/test/CodeGen/AArch64/v8.2a-fp16-intrinsics-constrained.c b/clang/test/CodeGen/AArch64/v8.2a-fp16-intrinsics-constrained.c index 9109626..4c19d75 100644 --- a/clang/test/CodeGen/AArch64/v8.2a-fp16-intrinsics-constrained.c +++ b/clang/test/CodeGen/AArch64/v8.2a-fp16-intrinsics-constrained.c @@ -105,9 +105,8 @@ float16_t test_vcvth_f16_u64 (uint64_t a) { } // COMMON-LABEL: test_vcvth_s16_f16 -// COMMONIR: [[VCVT:%.*]] = call i32 @llvm.aarch64.neon.fcvtzs.i32.f16(half %a) -// COMMONIR: [[TRUNC:%.*]] = trunc i32 [[VCVT]] to i16 -// COMMONIR: ret i16 [[TRUNC]] +// COMMONIR: [[VCVT:%.*]] = call i16 @llvm.aarch64.neon.fcvtzs.i16.f16(half %a) +// COMMONIR: ret i16 [[VCVT]] int16_t test_vcvth_s16_f16 (float16_t a) { return vcvth_s16_f16(a); } @@ -127,9 +126,8 @@ int64_t test_vcvth_s64_f16 (float16_t a) { } // COMMON-LABEL: test_vcvth_u16_f16 -// COMMONIR: [[VCVT:%.*]] = call i32 @llvm.aarch64.neon.fcvtzu.i32.f16(half %a) -// COMMONIR: [[TRUNC:%.*]] = trunc i32 [[VCVT]] to i16 -// COMMONIR: ret i16 [[TRUNC]] +// COMMONIR: [[VCVT:%.*]] = call i16 @llvm.aarch64.neon.fcvtzu.i16.f16(half %a) +// COMMONIR: ret i16 [[VCVT]] uint16_t test_vcvth_u16_f16 (float16_t a) { return vcvth_u16_f16(a); } diff --git a/clang/test/CodeGen/AArch64/v8.2a-fp16-intrinsics.c b/clang/test/CodeGen/AArch64/v8.2a-fp16-intrinsics.c index 90ee74e..c3bbd5a 100644 --- a/clang/test/CodeGen/AArch64/v8.2a-fp16-intrinsics.c +++ b/clang/test/CodeGen/AArch64/v8.2a-fp16-intrinsics.c @@ -97,9 +97,8 @@ float16_t test_vcvth_f16_u64 (uint64_t a) { } // CHECK-LABEL: test_vcvth_s16_f16 -// CHECK: [[VCVT:%.*]] = call i32 @llvm.aarch64.neon.fcvtzs.i32.f16(half %a) -// CHECK: [[TRUNC:%.*]] = trunc i32 [[VCVT]] to i16 -// CHECK: ret i16 [[TRUNC]] +// CHECK: [[VCVT:%.*]] = call i16 @llvm.aarch64.neon.fcvtzs.i16.f16(half %a) +// CHECK: ret i16 [[VCVT]] int16_t test_vcvth_s16_f16 (float16_t a) { return vcvth_s16_f16(a); } @@ -119,9 +118,8 @@ int64_t test_vcvth_s64_f16 (float16_t a) { } // CHECK-LABEL: test_vcvth_u16_f16 -// CHECK: [[VCVT:%.*]] = call i32 @llvm.aarch64.neon.fcvtzu.i32.f16(half %a) -// CHECK: [[TRUNC:%.*]] = trunc i32 [[VCVT]] to i16 -// CHECK: ret i16 [[TRUNC]] +// CHECK: [[VCVT:%.*]] = call i16 @llvm.aarch64.neon.fcvtzu.i16.f16(half %a) +// CHECK: ret i16 [[VCVT]] uint16_t test_vcvth_u16_f16 (float16_t a) { return vcvth_u16_f16(a); } @@ -141,9 +139,8 @@ uint64_t test_vcvth_u64_f16 (float16_t a) { } // CHECK-LABEL: test_vcvtah_s16_f16 -// CHECK: [[FCVT:%.*]] = call i32 @llvm.aarch64.neon.fcvtas.i32.f16(half %a) -// CHECK: [[RET:%.*]] = trunc i32 [[FCVT]] to i16 -// CHECK: ret i16 [[RET]] +// CHECK: [[FCVT:%.*]] = call i16 @llvm.aarch64.neon.fcvtas.i16.f16(half %a) +// CHECK: ret i16 [[FCVT]] int16_t test_vcvtah_s16_f16 (float16_t a) { return vcvtah_s16_f16(a); } @@ -163,9 +160,8 @@ int64_t test_vcvtah_s64_f16 (float16_t a) { } // CHECK-LABEL: test_vcvtah_u16_f16 -// CHECK: [[FCVT:%.*]] = call i32 @llvm.aarch64.neon.fcvtau.i32.f16(half %a) -// CHECK: [[RET:%.*]] = trunc i32 [[FCVT]] to i16 -// CHECK: ret i16 [[RET]] +// CHECK: [[FCVT:%.*]] = call i16 @llvm.aarch64.neon.fcvtau.i16.f16(half %a) +// CHECK: ret i16 [[FCVT]] uint16_t test_vcvtah_u16_f16 (float16_t a) { return vcvtah_u16_f16(a); } @@ -185,9 +181,8 @@ uint64_t test_vcvtah_u64_f16 (float16_t a) { } // CHECK-LABEL: test_vcvtmh_s16_f16 -// CHECK: [[FCVT:%.*]] = call i32 @llvm.aarch64.neon.fcvtms.i32.f16(half %a) -// CHECK: [[RET:%.*]] = trunc i32 [[FCVT]] to i16 -// CHECK: ret i16 [[RET]] +// CHECK: [[FCVT:%.*]] = call i16 @llvm.aarch64.neon.fcvtms.i16.f16(half %a) +// CHECK: ret i16 [[FCVT]] int16_t test_vcvtmh_s16_f16 (float16_t a) { return vcvtmh_s16_f16(a); } @@ -207,9 +202,8 @@ int64_t test_vcvtmh_s64_f16 (float16_t a) { } // CHECK-LABEL: test_vcvtmh_u16_f16 -// CHECK: [[FCVT:%.*]] = call i32 @llvm.aarch64.neon.fcvtmu.i32.f16(half %a) -// CHECK: [[RET:%.*]] = trunc i32 [[FCVT]] to i16 -// CHECK: ret i16 [[RET]] +// CHECK: [[FCVT:%.*]] = call i16 @llvm.aarch64.neon.fcvtmu.i16.f16(half %a) +// CHECK: ret i16 [[FCVT]] uint16_t test_vcvtmh_u16_f16 (float16_t a) { return vcvtmh_u16_f16(a); } @@ -229,9 +223,8 @@ uint64_t test_vcvtmh_u64_f16 (float16_t a) { } // CHECK-LABEL: test_vcvtnh_s16_f16 -// CHECK: [[FCVT:%.*]] = call i32 @llvm.aarch64.neon.fcvtns.i32.f16(half %a) -// CHECK: [[RET:%.*]] = trunc i32 [[FCVT]] to i16 -// CHECK: ret i16 [[RET]] +// CHECK: [[FCVT:%.*]] = call i16 @llvm.aarch64.neon.fcvtns.i16.f16(half %a) +// CHECK: ret i16 [[FCVT]] int16_t test_vcvtnh_s16_f16 (float16_t a) { return vcvtnh_s16_f16(a); } @@ -251,9 +244,8 @@ int64_t test_vcvtnh_s64_f16 (float16_t a) { } // CHECK-LABEL: test_vcvtnh_u16_f16 -// CHECK: [[FCVT:%.*]] = call i32 @llvm.aarch64.neon.fcvtnu.i32.f16(half %a) -// CHECK: [[RET:%.*]] = trunc i32 [[FCVT]] to i16 -// CHECK: ret i16 [[RET]] +// CHECK: [[FCVT:%.*]] = call i16 @llvm.aarch64.neon.fcvtnu.i16.f16(half %a) +// CHECK: ret i16 [[FCVT]] uint16_t test_vcvtnh_u16_f16 (float16_t a) { return vcvtnh_u16_f16(a); } @@ -273,9 +265,8 @@ uint64_t test_vcvtnh_u64_f16 (float16_t a) { } // CHECK-LABEL: test_vcvtph_s16_f16 -// CHECK: [[FCVT:%.*]] = call i32 @llvm.aarch64.neon.fcvtps.i32.f16(half %a) -// CHECK: [[RET:%.*]] = trunc i32 [[FCVT]] to i16 -// CHECK: ret i16 [[RET]] +// CHECK: [[FCVT:%.*]] = call i16 @llvm.aarch64.neon.fcvtps.i16.f16(half %a) +// CHECK: ret i16 [[FCVT]] int16_t test_vcvtph_s16_f16 (float16_t a) { return vcvtph_s16_f16(a); } @@ -295,9 +286,8 @@ int64_t test_vcvtph_s64_f16 (float16_t a) { } // CHECK-LABEL: test_vcvtph_u16_f16 -// CHECK: [[FCVT:%.*]] = call i32 @llvm.aarch64.neon.fcvtpu.i32.f16(half %a) -// CHECK: [[RET:%.*]] = trunc i32 [[FCVT]] to i16 -// CHECK: ret i16 [[RET]] +// CHECK: [[FCVT:%.*]] = call i16 @llvm.aarch64.neon.fcvtpu.i16.f16(half %a) +// CHECK: ret i16 [[FCVT]] uint16_t test_vcvtph_u16_f16 (float16_t a) { return vcvtph_u16_f16(a); } diff --git a/clang/test/CodeGen/Inputs/debug-info-embed-source.c b/clang/test/CodeGen/Inputs/debug-info-embed-source.c deleted file mode 100644 index 335ccc9..0000000 --- a/clang/test/CodeGen/Inputs/debug-info-embed-source.c +++ /dev/null @@ -1 +0,0 @@ -void foo(void) { } diff --git a/clang/test/CodeGen/Inputs/debug-info-file-checksum-line.cpp b/clang/test/CodeGen/Inputs/debug-info-file-checksum-line.cpp deleted file mode 100644 index 2e98a11..0000000 --- a/clang/test/CodeGen/Inputs/debug-info-file-checksum-line.cpp +++ /dev/null @@ -1,9 +0,0 @@ -int foo(int x) { - return x+1; -} - -#line 100 -void test1(void) {} - -#line 200 -void test2(void) {} diff --git a/clang/test/CodeGen/Inputs/debug-info-file-checksum-pre.cpp b/clang/test/CodeGen/Inputs/debug-info-file-checksum-pre.cpp deleted file mode 100644 index ade9f16..0000000 --- a/clang/test/CodeGen/Inputs/debug-info-file-checksum-pre.cpp +++ /dev/null @@ -1,10 +0,0 @@ -#line 1 "F:\\svn\\clang\\test\\CodeGen\\Inputs\\debug-info-file-checksum.c" -#line 1 "f:\\svn\\clang\\test\\codegen\\inputs\\code-coverage-filter1.h" -void test1(void) {} -#line 2 "F:\\svn\\clang\\test\\CodeGen\\Inputs\\debug-info-file-checksum.c" -#line 1 "f:\\svn\\clang\\test\\codegen\\inputs\\code-coverage-filter2.h" -void test2(void) {} -#line 3 "F:\\svn\\clang\\test\\CodeGen\\Inputs\\debug-info-file-checksum.c" -int foo(int x) { - return x+1; -} diff --git a/clang/test/CodeGen/Inputs/debug-info-file-checksum.c b/clang/test/CodeGen/Inputs/debug-info-file-checksum.c deleted file mode 100644 index 081f6f0..0000000 --- a/clang/test/CodeGen/Inputs/debug-info-file-checksum.c +++ /dev/null @@ -1,3 +0,0 @@ -int foo(int x) { - return x+1; -} diff --git a/clang/test/CodeGen/Inputs/debug-info-macro.h b/clang/test/CodeGen/Inputs/debug-info-macro.h deleted file mode 100644 index f71d5c3..0000000 --- a/clang/test/CodeGen/Inputs/debug-info-macro.h +++ /dev/null @@ -1,12 +0,0 @@ - -#ifdef D1 -/*Line 3*/ #define A(x, y, z) (x) -#endif - -#ifdef D2 -/*Line 7*/ #define A(x, y, z) (y) -#endif - -#ifdef A -/*Line 11*/ #undef A -#endif diff --git a/clang/test/CodeGen/Inputs/debug-info-slash.cpp b/clang/test/CodeGen/Inputs/debug-info-slash.cpp deleted file mode 100644 index 563077ed..0000000 --- a/clang/test/CodeGen/Inputs/debug-info-slash.cpp +++ /dev/null @@ -1,2 +0,0 @@ -#include "Inputs/debug-info-slash.h" -int main() { a(); return 0; } diff --git a/clang/test/CodeGen/Inputs/debug-info-slash.h b/clang/test/CodeGen/Inputs/debug-info-slash.h deleted file mode 100644 index 9092f4a..0000000 --- a/clang/test/CodeGen/Inputs/debug-info-slash.h +++ /dev/null @@ -1,6 +0,0 @@ -template <typename... T> -void f1() {} -void a() { - auto Lambda = [] {}; - f1<decltype(Lambda)>(); -} diff --git a/clang/test/CodeGen/LoongArch/targetattr-lasx.c b/clang/test/CodeGen/LoongArch/targetattr-lasx.c new file mode 100644 index 0000000..56fd657 --- /dev/null +++ b/clang/test/CodeGen/LoongArch/targetattr-lasx.c @@ -0,0 +1,7 @@ +// RUN: %clang_cc1 -triple loongarch64 -target-feature -lsx -emit-llvm %s -o - | FileCheck %s + +__attribute__((target("lasx"))) +// CHECK: #[[ATTR0:[0-9]+]] { +void testlasx() {} + +// CHECK: attributes #[[ATTR0]] = { {{.*}}"target-features"="+64bit,+lasx,+lsx"{{.*}} } diff --git a/clang/test/CodeGen/PowerPC/builtins-bcd-format-conversion.c b/clang/test/CodeGen/PowerPC/builtins-bcd-format-conversion.c new file mode 100644 index 0000000..0aeb720 --- /dev/null +++ b/clang/test/CodeGen/PowerPC/builtins-bcd-format-conversion.c @@ -0,0 +1,29 @@ +// NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5 +// REQUIRES: powerpc-registered-target +// RUN: %clang_cc1 -triple powerpc64le-unknown-unknown -O2 -target-cpu pwr9 \ +// RUN: -emit-llvm %s -o - | FileCheck %s +// RUN: %clang_cc1 -triple powerpc64-unknown-unknown -O2 -target-cpu pwr9 \ +// RUN: -emit-llvm %s -o - | FileCheck %s +// RUN: %clang_cc1 -triple powerpc-unknown-unknown -O2 -target-cpu pwr9 \ +// RUN: -emit-llvm %s -o - | FileCheck %s + +// CHECK-LABEL: test_bcdcopysign +// CHECK: [[TMP0:%.*]] = tail call <16 x i8> @llvm.ppc.bcdcopysign(<16 x i8> %a, <16 x i8> %b) +// CHECK-NEXT: ret <16 x i8> [[TMP0]] +vector unsigned char test_bcdcopysign(vector unsigned char a, vector unsigned char b) { + return __builtin_ppc_bcdcopysign(a, b); +} + +// CHECK-LABEL: test_bcdsetsign_imm0 +// CHECK: [[TMP0:%.*]] = tail call <16 x i8> @llvm.ppc.bcdsetsign(<16 x i8> %a, i32 0) +// CHECK-NEXT: ret <16 x i8> [[TMP0]] +vector unsigned char test_bcdsetsign_imm0(vector unsigned char a) { + return __builtin_ppc_bcdsetsign(a, '\0'); +} + +// CHECK-LABEL: test_bcdsetsign_imm1 +// CHECK: [[TMP0:%.*]] = tail call <16 x i8> @llvm.ppc.bcdsetsign(<16 x i8> %a, i32 1) +// CHECK-NEXT: ret <16 x i8> [[TMP0]] +vector unsigned char test_bcdsetsign_imm1(vector unsigned char a) { + return __builtin_ppc_bcdsetsign(a, '\1'); +} diff --git a/clang/test/CodeGen/PowerPC/builtins-ppc-dmf.c b/clang/test/CodeGen/PowerPC/builtins-ppc-dmf.c index 4aafc09..c66f5e2 100644 --- a/clang/test/CodeGen/PowerPC/builtins-ppc-dmf.c +++ b/clang/test/CodeGen/PowerPC/builtins-ppc-dmf.c @@ -93,18 +93,36 @@ void test_pmdmxvi8gerx4spp(unsigned char *vdmrp, unsigned char *vpp, vector unsi *((__dmr1024 *)resp) = vdmr; } -// CHECK-LABEL: @test_dmf_basic -// CHECK-NEXT: entry: -// CHECK-NEXT: [[TMP0:%.*]] = tail call <1024 x i1> @llvm.ppc.mma.dmsetdmrz() -// CHECK-NEXT: [[TMP1:%.*]] = tail call <1024 x i1> @llvm.ppc.mma.dmmr(<1024 x i1> [[TMP0]]) -// CHECK-NEXT: store <1024 x i1> [[TMP1]], ptr %res1, align 128 -// CHECK-NEXT: [[TMP2:%.*]] = load <1024 x i1>, ptr %res2, align 128 -// CHECK-NEXT: [[TMP3:%.*]] = load <1024 x i1>, ptr %p, align 128 -// CHECK-NEXT: [[TMP4:%.*]] = tail call <1024 x i1> @llvm.ppc.mma.dmxor(<1024 x i1> [[TMP2]], <1024 x i1> [[TMP3]]) -// CHECK-NEXT: store <1024 x i1> [[TMP4]], ptr %res2, align 128 +// CHECK-LABEL: @test_dmf_basic( +// CHECK-NEXT: entry: +// CHECK-NEXT: [[TMP0:%.*]] = tail call <1024 x i1> @llvm.ppc.mma.dmsetdmrz() +// CHECK-NEXT: [[TMP1:%.*]] = tail call <1024 x i1> @llvm.ppc.mma.dmmr(<1024 x i1> [[TMP0]]) +// CHECK-NEXT: store <1024 x i1> [[TMP1]], ptr [[RES1:%.*]], align 128 +// CHECK-NEXT: [[TMP2:%.*]] = load <1024 x i1>, ptr [[RES2:%.*]], align 128 +// CHECK-NEXT: [[TMP3:%.*]] = load <1024 x i1>, ptr [[P:%.*]], align 128 +// CHECK-NEXT: [[TMP4:%.*]] = tail call <1024 x i1> @llvm.ppc.mma.dmxor(<1024 x i1> [[TMP2]], <1024 x i1> [[TMP3]]) +// CHECK-NEXT: store <1024 x i1> [[TMP4]], ptr [[RES2]], align 128 +// CHECK-NEXT: ret void +// void test_dmf_basic(char *p, char *res1, char *res2) { __dmr1024 x[2]; __builtin_mma_dmsetdmrz(&x[0]); __builtin_mma_dmmr((__dmr1024*)res1, &x[0]); __builtin_mma_dmxor((__dmr1024*)res2, (__dmr1024*)p); } + +// CHECK-LABEL: @test_dmf_basic2( +// CHECK-NEXT: entry: +// CHECK-NEXT: [[TMP0:%.*]] = load <16 x i8>, ptr [[V:%.*]], align 16, !tbaa [[TBAA8:![0-9]+]] +// CHECK-NEXT: [[TMP1:%.*]] = tail call <1024 x i1> @llvm.ppc.mma.build.dmr(<16 x i8> [[TMP0]], <16 x i8> [[TMP0]], <16 x i8> [[TMP0]], <16 x i8> [[TMP0]], <16 x i8> [[TMP0]], <16 x i8> [[TMP0]], <16 x i8> [[TMP0]], <16 x i8> [[TMP0]]) +// CHECK-NEXT: store <1024 x i1> [[TMP1]], ptr [[RES2:%.*]], align 128 +// CHECK-NEXT: [[TMP2:%.*]] = load <1024 x i1>, ptr [[P1:%.*]], align 128 +// CHECK-NEXT: store <1024 x i1> [[TMP2]], ptr [[RES1:%.*]], align 128 +// CHECK-NEXT: ret void +// +void test_dmf_basic2(char *p1, char *res1, char *res2, + vector unsigned char *v) { + vector unsigned char vv = *v; + __builtin_mma_build_dmr((__dmr1024*)res2, vv, vv, vv, vv, vv, vv, vv, vv); + __builtin_mma_disassemble_dmr(res1, (__dmr1024*)p1); +} diff --git a/clang/test/CodeGen/PowerPC/check-zero-vector.c b/clang/test/CodeGen/PowerPC/check-zero-vector.c deleted file mode 100644 index cb6c826..0000000 --- a/clang/test/CodeGen/PowerPC/check-zero-vector.c +++ /dev/null @@ -1,143 +0,0 @@ -// NOTE: Assertions have been autogenerated by utils/update_cc_test_checks.py UTC_ARGS: --version 5 -// RUN: %clang_cc1 -triple powerpc64-ibm-aix -emit-llvm %s -o - | FileCheck %s --check-prefix=POWERPC_64 -// RUN: %clang_cc1 -triple powerpc64le-unknown-linux-gnu -emit-llvm %s -o - | FileCheck %s --check-prefix=POWERPC_64LE -// RUN: %clang_cc1 -triple powerpc-ibm-aix -emit-llvm %s -o - | FileCheck %s --check-prefix=POWERPC_32 - -// POWERPC_64-LABEL: define signext i32 @test_Greater_than( -// POWERPC_64-SAME: ptr noundef [[COLAUTHS:%.*]]) #[[ATTR0:[0-9]+]] { -// POWERPC_64-NEXT: [[ENTRY:.*:]] -// POWERPC_64-NEXT: [[COLAUTHS_ADDR:%.*]] = alloca ptr, align 8 -// POWERPC_64-NEXT: [[RESULT:%.*]] = alloca i16, align 2 -// POWERPC_64-NEXT: [[I:%.*]] = alloca i32, align 4 -// POWERPC_64-NEXT: store ptr [[COLAUTHS]], ptr [[COLAUTHS_ADDR]], align 8 -// POWERPC_64-NEXT: store i16 0, ptr [[RESULT]], align 2 -// POWERPC_64-NEXT: store i32 0, ptr [[I]], align 4 -// POWERPC_64-NEXT: br label %[[FOR_COND:.*]] -// POWERPC_64: [[FOR_COND]]: -// POWERPC_64-NEXT: [[TMP0:%.*]] = load i32, ptr [[I]], align 4 -// POWERPC_64-NEXT: [[CMP:%.*]] = icmp slt i32 [[TMP0]], 4 -// POWERPC_64-NEXT: br i1 [[CMP]], label %[[FOR_BODY:.*]], label %[[FOR_END:.*]] -// POWERPC_64: [[FOR_BODY]]: -// POWERPC_64-NEXT: [[TMP1:%.*]] = load ptr, ptr [[COLAUTHS_ADDR]], align 8 -// POWERPC_64-NEXT: [[TMP2:%.*]] = load i32, ptr [[I]], align 4 -// POWERPC_64-NEXT: [[IDXPROM:%.*]] = sext i32 [[TMP2]] to i64 -// POWERPC_64-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds i16, ptr [[TMP1]], i64 [[IDXPROM]] -// POWERPC_64-NEXT: [[TMP3:%.*]] = load i16, ptr [[ARRAYIDX]], align 2 -// POWERPC_64-NEXT: [[CONV:%.*]] = zext i16 [[TMP3]] to i32 -// POWERPC_64-NEXT: [[CMP1:%.*]] = icmp sgt i32 [[CONV]], 0 -// POWERPC_64-NEXT: br i1 [[CMP1]], label %[[IF_THEN:.*]], label %[[IF_END:.*]] -// POWERPC_64: [[IF_THEN]]: -// POWERPC_64-NEXT: [[TMP4:%.*]] = load i16, ptr [[RESULT]], align 2 -// POWERPC_64-NEXT: [[INC:%.*]] = add i16 [[TMP4]], 1 -// POWERPC_64-NEXT: store i16 [[INC]], ptr [[RESULT]], align 2 -// POWERPC_64-NEXT: br label %[[IF_END]] -// POWERPC_64: [[IF_END]]: -// POWERPC_64-NEXT: br label %[[FOR_INC:.*]] -// POWERPC_64: [[FOR_INC]]: -// POWERPC_64-NEXT: [[TMP5:%.*]] = load i32, ptr [[I]], align 4 -// POWERPC_64-NEXT: [[INC3:%.*]] = add nsw i32 [[TMP5]], 1 -// POWERPC_64-NEXT: store i32 [[INC3]], ptr [[I]], align 4 -// POWERPC_64-NEXT: br label %[[FOR_COND]], !llvm.loop [[LOOP2:![0-9]+]] -// POWERPC_64: [[FOR_END]]: -// POWERPC_64-NEXT: [[TMP6:%.*]] = load i16, ptr [[RESULT]], align 2 -// POWERPC_64-NEXT: [[CONV4:%.*]] = zext i16 [[TMP6]] to i32 -// POWERPC_64-NEXT: ret i32 [[CONV4]] -// -// POWERPC_64LE-LABEL: define dso_local signext i32 @test_Greater_than( -// POWERPC_64LE-SAME: ptr noundef [[COLAUTHS:%.*]]) #[[ATTR0:[0-9]+]] { -// POWERPC_64LE-NEXT: [[ENTRY:.*:]] -// POWERPC_64LE-NEXT: [[COLAUTHS_ADDR:%.*]] = alloca ptr, align 8 -// POWERPC_64LE-NEXT: [[RESULT:%.*]] = alloca i16, align 2 -// POWERPC_64LE-NEXT: [[I:%.*]] = alloca i32, align 4 -// POWERPC_64LE-NEXT: store ptr [[COLAUTHS]], ptr [[COLAUTHS_ADDR]], align 8 -// POWERPC_64LE-NEXT: store i16 0, ptr [[RESULT]], align 2 -// POWERPC_64LE-NEXT: store i32 0, ptr [[I]], align 4 -// POWERPC_64LE-NEXT: br label %[[FOR_COND:.*]] -// POWERPC_64LE: [[FOR_COND]]: -// POWERPC_64LE-NEXT: [[TMP0:%.*]] = load i32, ptr [[I]], align 4 -// POWERPC_64LE-NEXT: [[CMP:%.*]] = icmp slt i32 [[TMP0]], 4 -// POWERPC_64LE-NEXT: br i1 [[CMP]], label %[[FOR_BODY:.*]], label %[[FOR_END:.*]] -// POWERPC_64LE: [[FOR_BODY]]: -// POWERPC_64LE-NEXT: [[TMP1:%.*]] = load ptr, ptr [[COLAUTHS_ADDR]], align 8 -// POWERPC_64LE-NEXT: [[TMP2:%.*]] = load i32, ptr [[I]], align 4 -// POWERPC_64LE-NEXT: [[IDXPROM:%.*]] = sext i32 [[TMP2]] to i64 -// POWERPC_64LE-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds i16, ptr [[TMP1]], i64 [[IDXPROM]] -// POWERPC_64LE-NEXT: [[TMP3:%.*]] = load i16, ptr [[ARRAYIDX]], align 2 -// POWERPC_64LE-NEXT: [[CONV:%.*]] = zext i16 [[TMP3]] to i32 -// POWERPC_64LE-NEXT: [[CMP1:%.*]] = icmp sgt i32 [[CONV]], 0 -// POWERPC_64LE-NEXT: br i1 [[CMP1]], label %[[IF_THEN:.*]], label %[[IF_END:.*]] -// POWERPC_64LE: [[IF_THEN]]: -// POWERPC_64LE-NEXT: [[TMP4:%.*]] = load i16, ptr [[RESULT]], align 2 -// POWERPC_64LE-NEXT: [[INC:%.*]] = add i16 [[TMP4]], 1 -// POWERPC_64LE-NEXT: store i16 [[INC]], ptr [[RESULT]], align 2 -// POWERPC_64LE-NEXT: br label %[[IF_END]] -// POWERPC_64LE: [[IF_END]]: -// POWERPC_64LE-NEXT: br label %[[FOR_INC:.*]] -// POWERPC_64LE: [[FOR_INC]]: -// POWERPC_64LE-NEXT: [[TMP5:%.*]] = load i32, ptr [[I]], align 4 -// POWERPC_64LE-NEXT: [[INC3:%.*]] = add nsw i32 [[TMP5]], 1 -// POWERPC_64LE-NEXT: store i32 [[INC3]], ptr [[I]], align 4 -// POWERPC_64LE-NEXT: br label %[[FOR_COND]], !llvm.loop [[LOOP2:![0-9]+]] -// POWERPC_64LE: [[FOR_END]]: -// POWERPC_64LE-NEXT: [[TMP6:%.*]] = load i16, ptr [[RESULT]], align 2 -// POWERPC_64LE-NEXT: [[CONV4:%.*]] = zext i16 [[TMP6]] to i32 -// POWERPC_64LE-NEXT: ret i32 [[CONV4]] -// -// POWERPC_32-LABEL: define i32 @test_Greater_than( -// POWERPC_32-SAME: ptr noundef [[COLAUTHS:%.*]]) #[[ATTR0:[0-9]+]] { -// POWERPC_32-NEXT: [[ENTRY:.*:]] -// POWERPC_32-NEXT: [[COLAUTHS_ADDR:%.*]] = alloca ptr, align 4 -// POWERPC_32-NEXT: [[RESULT:%.*]] = alloca i16, align 2 -// POWERPC_32-NEXT: [[I:%.*]] = alloca i32, align 4 -// POWERPC_32-NEXT: store ptr [[COLAUTHS]], ptr [[COLAUTHS_ADDR]], align 4 -// POWERPC_32-NEXT: store i16 0, ptr [[RESULT]], align 2 -// POWERPC_32-NEXT: store i32 0, ptr [[I]], align 4 -// POWERPC_32-NEXT: br label %[[FOR_COND:.*]] -// POWERPC_32: [[FOR_COND]]: -// POWERPC_32-NEXT: [[TMP0:%.*]] = load i32, ptr [[I]], align 4 -// POWERPC_32-NEXT: [[CMP:%.*]] = icmp slt i32 [[TMP0]], 4 -// POWERPC_32-NEXT: br i1 [[CMP]], label %[[FOR_BODY:.*]], label %[[FOR_END:.*]] -// POWERPC_32: [[FOR_BODY]]: -// POWERPC_32-NEXT: [[TMP1:%.*]] = load ptr, ptr [[COLAUTHS_ADDR]], align 4 -// POWERPC_32-NEXT: [[TMP2:%.*]] = load i32, ptr [[I]], align 4 -// POWERPC_32-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds i16, ptr [[TMP1]], i32 [[TMP2]] -// POWERPC_32-NEXT: [[TMP3:%.*]] = load i16, ptr [[ARRAYIDX]], align 2 -// POWERPC_32-NEXT: [[CONV:%.*]] = zext i16 [[TMP3]] to i32 -// POWERPC_32-NEXT: [[CMP1:%.*]] = icmp sgt i32 [[CONV]], 0 -// POWERPC_32-NEXT: br i1 [[CMP1]], label %[[IF_THEN:.*]], label %[[IF_END:.*]] -// POWERPC_32: [[IF_THEN]]: -// POWERPC_32-NEXT: [[TMP4:%.*]] = load i16, ptr [[RESULT]], align 2 -// POWERPC_32-NEXT: [[INC:%.*]] = add i16 [[TMP4]], 1 -// POWERPC_32-NEXT: store i16 [[INC]], ptr [[RESULT]], align 2 -// POWERPC_32-NEXT: br label %[[IF_END]] -// POWERPC_32: [[IF_END]]: -// POWERPC_32-NEXT: br label %[[FOR_INC:.*]] -// POWERPC_32: [[FOR_INC]]: -// POWERPC_32-NEXT: [[TMP5:%.*]] = load i32, ptr [[I]], align 4 -// POWERPC_32-NEXT: [[INC3:%.*]] = add nsw i32 [[TMP5]], 1 -// POWERPC_32-NEXT: store i32 [[INC3]], ptr [[I]], align 4 -// POWERPC_32-NEXT: br label %[[FOR_COND]], !llvm.loop [[LOOP2:![0-9]+]] -// POWERPC_32: [[FOR_END]]: -// POWERPC_32-NEXT: [[TMP6:%.*]] = load i16, ptr [[RESULT]], align 2 -// POWERPC_32-NEXT: [[CONV4:%.*]] = zext i16 [[TMP6]] to i32 -// POWERPC_32-NEXT: ret i32 [[CONV4]] -// -int test_Greater_than(unsigned short *colauths) { - unsigned short result = 0; - for (int i = 0; i < 4; i++) { - if (colauths[i] > 0) { - result++; - } - } - return result; -} -//. -// POWERPC_64: [[LOOP2]] = distinct !{[[LOOP2]], [[META3:![0-9]+]]} -// POWERPC_64: [[META3]] = !{!"llvm.loop.mustprogress"} -//. -// POWERPC_64LE: [[LOOP2]] = distinct !{[[LOOP2]], [[META3:![0-9]+]]} -// POWERPC_64LE: [[META3]] = !{!"llvm.loop.mustprogress"} -//. -// POWERPC_32: [[LOOP2]] = distinct !{[[LOOP2]], [[META3:![0-9]+]]} -// POWERPC_32: [[META3]] = !{!"llvm.loop.mustprogress"} -//. diff --git a/clang/test/CodeGen/PowerPC/ppc-dmf-mma-builtin-err.c b/clang/test/CodeGen/PowerPC/ppc-dmf-mma-builtin-err.c index 5a92d6e..ea2b99b 100644 --- a/clang/test/CodeGen/PowerPC/ppc-dmf-mma-builtin-err.c +++ b/clang/test/CodeGen/PowerPC/ppc-dmf-mma-builtin-err.c @@ -16,6 +16,8 @@ void test_mma(unsigned char *vdmrp, unsigned char *vpp, vector unsigned char vc) __builtin_mma_dmsetdmrz(&vdmr); __builtin_mma_dmmr(&vdmr, (__dmr1024*)vpp); __builtin_mma_dmxor(&vdmr, (__dmr1024*)vpp); + __builtin_mma_build_dmr(&vdmr, vc, vc, vc, vc, vc, vc, vc, vc); + __builtin_mma_disassemble_dmr(vdmrp, &vdmr); // CHECK: error: '__builtin_mma_dmxvi8gerx4' needs target feature mma,paired-vector-memops // CHECK: error: '__builtin_mma_pmdmxvi8gerx4' needs target feature mma,paired-vector-memops @@ -26,4 +28,6 @@ void test_mma(unsigned char *vdmrp, unsigned char *vpp, vector unsigned char vc) // CHECK: error: '__builtin_mma_dmsetdmrz' needs target feature mma,isa-future-instructions // CHECK: error: '__builtin_mma_dmmr' needs target feature mma,isa-future-instructions // CHECK: error: '__builtin_mma_dmxor' needs target feature mma,isa-future-instructions +// CHECK: error: '__builtin_mma_build_dmr' needs target feature mma,isa-future-instructions +// CHECK: error: '__builtin_mma_disassemble_dmr' needs target feature mma,isa-future-instructions } diff --git a/clang/test/CodeGen/RISCV/riscv-inline-asm-fixed-length-vector.c b/clang/test/CodeGen/RISCV/riscv-inline-asm-fixed-length-vector.c new file mode 100644 index 0000000..699c588 --- /dev/null +++ b/clang/test/CodeGen/RISCV/riscv-inline-asm-fixed-length-vector.c @@ -0,0 +1,66 @@ +// REQUIRES: riscv-registered-target + +// RUN: %clang_cc1 -triple riscv32 -target-feature +v \ +// RUN: -mvscale-min=2 -mvscale-max=2 -O2 -emit-llvm %s -o - \ +// RUN: | FileCheck %s +// RUN: %clang_cc1 -triple riscv64 -target-feature +v \ +// RUN: -mvscale-min=2 -mvscale-max=2 -O2 -emit-llvm %s -o - \ +// RUN: | FileCheck %s + +// Test RISC-V V-extension fixed-length vector inline assembly constraints. +#include <riscv_vector.h> +#include <stdbool.h> + +typedef vbool1_t fixed_bool1_t __attribute__((riscv_rvv_vector_bits(__riscv_v_fixed_vlen))); +typedef vint32m1_t fixed_i32m1_t __attribute__((riscv_rvv_vector_bits(__riscv_v_fixed_vlen))); +typedef vint8mf2_t fixed_i8mf2_t __attribute__((riscv_rvv_vector_bits(__riscv_v_fixed_vlen / 2))); + +typedef bool bx2 __attribute__((ext_vector_type(16))); +typedef int i32x2 __attribute__((ext_vector_type(2))); +typedef char i8x4 __attribute__((ext_vector_type(4))); + +fixed_i32m1_t test_vr(fixed_i32m1_t a) { +// CHECK-LABEL: define{{.*}} @test_vr +// CHECK: %0 = tail call <4 x i32> asm sideeffect "vadd.vv $0, $1, $2", "=^vr,^vr,^vr"(<4 x i32> %a, <4 x i32> %a) + fixed_i32m1_t ret; + asm volatile ("vadd.vv %0, %1, %2" : "=vr"(ret) : "vr"(a), "vr"(a)); + return ret; +} + +i32x2 test_vr2(i32x2 a) { +// CHECK-LABEL: define{{.*}} @test_vr2 +// CHECK: %1 = tail call <2 x i32> asm sideeffect "vadd.vv $0, $1, $2", "=^vr,^vr,^vr"(<2 x i32> %0, <2 x i32> %0) + i32x2 ret; + asm volatile ("vadd.vv %0, %1, %2" : "=vr"(ret) : "vr"(a), "vr"(a)); + return ret; +} + +fixed_i8mf2_t test_vd(fixed_i8mf2_t a) { +// CHECK-LABEL: define{{.*}} @test_vd +// CHECK: %0 = tail call <8 x i8> asm sideeffect "vadd.vv $0, $1, $2", "=^vd,^vr,^vr"(<8 x i8> %a, <8 x i8> %a) + fixed_i8mf2_t ret; + asm volatile ("vadd.vv %0, %1, %2" : "=vd"(ret) : "vr"(a), "vr"(a)); + return ret; +} + +i8x4 test_vd2(i8x4 a) { +// CHECK-LABEL: define{{.*}} @test_vd2 +// CHECK: %1 = tail call <4 x i8> asm sideeffect "vadd.vv $0, $1, $2", "=^vd,^vr,^vr"(<4 x i8> %0, <4 x i8> %0) + i8x4 ret; + asm volatile ("vadd.vv %0, %1, %2" : "=vd"(ret) : "vr"(a), "vr"(a)); + return ret; +} + +fixed_bool1_t test_vm(fixed_bool1_t a) { +// CHECK-LABEL: define{{.*}} @test_vm +// CHECK: %1 = tail call <16 x i8> asm sideeffect "vmand.mm $0, $1, $2", "=^vm,^vm,^vm"(<16 x i8> %a, <16 x i8> %a) + fixed_bool1_t ret; + asm volatile ("vmand.mm %0, %1, %2" : "=vm"(ret) : "vm"(a), "vm"(a)); + return ret; +} + +void test_vm2(bx2 a) { +// CHECK-LABEL: define{{.*}} @test_vm2 +// CHECK: tail call void asm sideeffect "dummy $0", "^vm"(<16 x i1> %a1) + asm volatile ("dummy %0" :: "vm"(a)); +} diff --git a/clang/test/CodeGen/RISCV/riscv-v-debuginfo.c b/clang/test/CodeGen/RISCV/riscv-v-debuginfo.c deleted file mode 100644 index fb0ee98..0000000 --- a/clang/test/CodeGen/RISCV/riscv-v-debuginfo.c +++ /dev/null @@ -1,84 +0,0 @@ -// RUN: %clang_cc1 -triple riscv64 -target-feature +v \ -// RUN: -dwarf-version=4 -debug-info-kind=limited -emit-llvm -o - %s \ -// RUN: | FileCheck --check-prefix=DEBUGINFO %s -#include <stdint.h> - -__rvv_int16m2_t f1(__rvv_int16m2_t arg_0, __rvv_int16m2_t arg_1, int64_t arg_2) { - __rvv_int16m2_t ret; - return ret; -} - -// !DISubrange(lowerBound: 0, upperBound: !DIExpression(DW_OP_bregx, 7202, 0, DW_OP_constu, 2, DW_OP_div, -// DEBUGINFO: DW_OP_constu, 2, DW_OP_mul, DW_OP_constu, 1, DW_OP_minus)) - -__rvv_int16mf2_t f2(__rvv_int16mf2_t arg_0, __rvv_int16mf2_t arg_1, int64_t arg_2) { - __rvv_int16mf2_t ret; - return ret; -} - -// !DISubrange(lowerBound: 0, upperBound: !DIExpression(DW_OP_bregx, 7202, 0, DW_OP_constu, 2, DW_OP_div, -// DEBUGINFO: DW_OP_constu, 2, DW_OP_div, DW_OP_constu, 1, DW_OP_minus)) - -__rvv_int32mf2_t f3(__rvv_int32mf2_t arg_0, __rvv_int32mf2_t arg_1, int64_t arg_2) { - __rvv_int32mf2_t ret; - return ret; -} - -// !DISubrange(lowerBound: 0, upperBound: !DIExpression(DW_OP_bregx, 7202, 0, DW_OP_constu, 4, DW_OP_div, -// DEBUGINFO: DW_OP_constu, 2, DW_OP_div, DW_OP_constu, 1, DW_OP_minus)) - -__rvv_int16m2x2_t f4 (__rvv_int16m2x2_t arg_0, __rvv_int16m2x2_t arg_1, int64_t arg_2){ - __rvv_int16m2x2_t ret; - return ret; -} - -// !DISubrange(lowerBound: 0, upperBound: !DIExpression(DW_OP_bregx, 7202, 0, DW_OP_constu, 2, DW_OP_div, -// DEBUGINFO: DW_OP_constu, 2, DW_OP_mul, DW_OP_constu, 2, DW_OP_mul, DW_OP_constu, 1, DW_OP_minus)) - -__rvv_int16m2x4_t f5 (__rvv_int16m2x4_t arg_0, __rvv_int16m2x4_t arg_1, int64_t arg_2){ - __rvv_int16m2x4_t ret; - return ret; -} - -// !DISubrange(lowerBound: 0, upperBound: !DIExpression(DW_OP_bregx, 7202, 0, DW_OP_constu, 2, DW_OP_div, -// DEBUGINFO: DW_OP_constu, 2, DW_OP_mul, DW_OP_constu, 4, DW_OP_mul, DW_OP_constu, 1, DW_OP_minus)) - -__rvv_int32m2x2_t f6(__rvv_int32m2x2_t arg_0, __rvv_int32m2x2_t arg_1, int64_t arg_2) { - __rvv_int32m2x2_t ret; - return ret; -} - -// !DISubrange(lowerBound: 0, upperBound: !DIExpression(DW_OP_bregx, 7202, 0, DW_OP_constu, 4, DW_OP_div, -// DEBUGINFO: DW_OP_constu, 2, DW_OP_mul, DW_OP_constu, 2, DW_OP_mul, DW_OP_constu, 1, DW_OP_minus)) - -__rvv_int32m2x4_t f7(__rvv_int32m2x4_t arg_0, __rvv_int32m2x4_t arg_1, int64_t arg_2) { - __rvv_int32m2x4_t ret; - return ret; -} - -// !DISubrange(lowerBound: 0, upperBound: !DIExpression(DW_OP_bregx, 7202, 0, DW_OP_constu, 4, DW_OP_div, -// DEBUGINFO: DW_OP_constu, 2, DW_OP_mul, DW_OP_constu, 4, DW_OP_mul, DW_OP_constu, 1, DW_OP_minus)) - -__rvv_int32mf2x2_t f8(__rvv_int32mf2x2_t arg_0, __rvv_int32mf2x2_t arg_1, int64_t arg_2) { - __rvv_int32mf2x2_t ret; - return ret; -} - -// !DISubrange(lowerBound: 0, upperBound: !DIExpression(DW_OP_bregx, 7202, 0, DW_OP_constu, 4, DW_OP_div, -// DEBUGINFO: DW_OP_constu, 2, DW_OP_div, DW_OP_constu, 2, DW_OP_mul, DW_OP_constu, 1, DW_OP_minus)) - -__rvv_int32mf2x4_t f9(__rvv_int32mf2x4_t arg_0, __rvv_int32mf2x4_t arg_1, int64_t arg_2) { - __rvv_int32mf2x4_t ret; - return ret; -} - -// !DISubrange(lowerBound: 0, upperBound: !DIExpression(DW_OP_bregx, 7202, 0, DW_OP_constu, 4, DW_OP_div, -// DEBUGINFO: DW_OP_constu, 2, DW_OP_div, DW_OP_constu, 4, DW_OP_mul, DW_OP_constu, 1, DW_OP_minus)) - -__rvv_int32mf2x8_t f10(__rvv_int32mf2x8_t arg_0, __rvv_int32mf2x8_t arg_1, int64_t arg_2) { - __rvv_int32mf2x8_t ret; - return ret; -} - -// !DISubrange(lowerBound: 0, upperBound: !DIExpression(DW_OP_bregx, 7202, 0, DW_OP_constu, 4, DW_OP_div, -// DEBUGINFO: DW_OP_constu, 2, DW_OP_div, DW_OP_constu, 8, DW_OP_mul, DW_OP_constu, 1, DW_OP_minus)) diff --git a/clang/test/CodeGen/RISCV/riscv-v-lifetime.cpp b/clang/test/CodeGen/RISCV/riscv-v-lifetime.cpp index 4c91fef..c5b863b 100644 --- a/clang/test/CodeGen/RISCV/riscv-v-lifetime.cpp +++ b/clang/test/CodeGen/RISCV/riscv-v-lifetime.cpp @@ -10,10 +10,10 @@ vint32m1_t Baz(); // CHECK-NEXT: entry: // CHECK-NEXT: [[A:%.*]] = alloca ptr, align 8 // CHECK-NEXT: [[REF_TMP:%.*]] = alloca <vscale x 2 x i32>, align 4 -// CHECK-NEXT: call void @llvm.lifetime.start.p0(i64 8, ptr [[A]]) #[[ATTR3:[0-9]+]] -// CHECK-NEXT: call void @llvm.lifetime.start.p0(i64 -1, ptr [[REF_TMP]]) #[[ATTR3]] -// CHECK: call void @llvm.lifetime.end.p0(i64 -1, ptr [[REF_TMP]]) #[[ATTR3]] -// CHECK-NEXT: call void @llvm.lifetime.end.p0(i64 8, ptr [[A]]) #[[ATTR3]] +// CHECK-NEXT: call void @llvm.lifetime.start.p0(ptr [[A]]) #[[ATTR3:[0-9]+]] +// CHECK-NEXT: call void @llvm.lifetime.start.p0(ptr [[REF_TMP]]) #[[ATTR3]] +// CHECK: call void @llvm.lifetime.end.p0(ptr [[REF_TMP]]) #[[ATTR3]] +// CHECK-NEXT: call void @llvm.lifetime.end.p0(ptr [[A]]) #[[ATTR3]] // vint32m1_t Test() { const vint32m1_t &a = Baz(); diff --git a/clang/test/CodeGen/RISCV/riscv-vector-callingconv-llvm-ir.c b/clang/test/CodeGen/RISCV/riscv-vector-callingconv-llvm-ir.c index bc89cb5..6866fe0 100644 --- a/clang/test/CodeGen/RISCV/riscv-vector-callingconv-llvm-ir.c +++ b/clang/test/CodeGen/RISCV/riscv-vector-callingconv-llvm-ir.c @@ -143,34 +143,34 @@ void __attribute__((riscv_vls_cc)) test_too_large(int32x64_t arg) {} // CHECK-LLVM: define dso_local riscv_vls_cc(256) void @test_too_large_256(<vscale x 16 x i32> noundef %arg.coerce) void __attribute__((riscv_vls_cc(256))) test_too_large_256(int32x64_t arg) {} -// CHECK-LLVM: define dso_local riscv_vls_cc(128) void @test_st_i32x4(<vscale x 2 x i32> %arg) +// CHECK-LLVM: define dso_local riscv_vls_cc(128) void @test_st_i32x4(<vscale x 2 x i32> %arg.target_coerce) void __attribute__((riscv_vls_cc)) test_st_i32x4(struct st_i32x4 arg) {} -// CHECK-LLVM: define dso_local riscv_vls_cc(256) void @test_st_i32x4_256(<vscale x 1 x i32> %arg) +// CHECK-LLVM: define dso_local riscv_vls_cc(256) void @test_st_i32x4_256(<vscale x 1 x i32> %arg.target_coerce) void __attribute__((riscv_vls_cc(256))) test_st_i32x4_256(struct st_i32x4 arg) {} -// CHECK-LLVM: define dso_local riscv_vls_cc(128) void @test_st_i32x4_arr1(<vscale x 2 x i32> %arg) +// CHECK-LLVM: define dso_local riscv_vls_cc(128) void @test_st_i32x4_arr1(<vscale x 2 x i32> %arg.target_coerce) void __attribute__((riscv_vls_cc)) test_st_i32x4_arr1(struct st_i32x4_arr1 arg) {} -// CHECK-LLVM: define dso_local riscv_vls_cc(256) void @test_st_i32x4_arr1_256(<vscale x 1 x i32> %arg) +// CHECK-LLVM: define dso_local riscv_vls_cc(256) void @test_st_i32x4_arr1_256(<vscale x 1 x i32> %arg.target_coerce) void __attribute__((riscv_vls_cc(256))) test_st_i32x4_arr1_256(struct st_i32x4_arr1 arg) {} -// CHECK-LLVM: define dso_local riscv_vls_cc(128) void @test_st_i32x4_arr4(target("riscv.vector.tuple", <vscale x 8 x i8>, 4) %arg) +// CHECK-LLVM: define dso_local riscv_vls_cc(128) void @test_st_i32x4_arr4(target("riscv.vector.tuple", <vscale x 8 x i8>, 4) %arg.target_coerce) void __attribute__((riscv_vls_cc)) test_st_i32x4_arr4(struct st_i32x4_arr4 arg) {} -// CHECK-LLVM: define dso_local riscv_vls_cc(256) void @test_st_i32x4_arr4_256(target("riscv.vector.tuple", <vscale x 4 x i8>, 4) %arg) +// CHECK-LLVM: define dso_local riscv_vls_cc(256) void @test_st_i32x4_arr4_256(target("riscv.vector.tuple", <vscale x 4 x i8>, 4) %arg.target_coerce) void __attribute__((riscv_vls_cc(256))) test_st_i32x4_arr4_256(struct st_i32x4_arr4 arg) {} -// CHECK-LLVM: define dso_local riscv_vls_cc(128) void @test_st_i32x4_arr8(target("riscv.vector.tuple", <vscale x 8 x i8>, 8) %arg) +// CHECK-LLVM: define dso_local riscv_vls_cc(128) void @test_st_i32x4_arr8(target("riscv.vector.tuple", <vscale x 8 x i8>, 8) %arg.target_coerce) void __attribute__((riscv_vls_cc)) test_st_i32x4_arr8(struct st_i32x4_arr8 arg) {} -// CHECK-LLVM: define dso_local riscv_vls_cc(256) void @test_st_i32x4_arr8_256(target("riscv.vector.tuple", <vscale x 4 x i8>, 8) %arg) +// CHECK-LLVM: define dso_local riscv_vls_cc(256) void @test_st_i32x4_arr8_256(target("riscv.vector.tuple", <vscale x 4 x i8>, 8) %arg.target_coerce) void __attribute__((riscv_vls_cc(256))) test_st_i32x4_arr8_256(struct st_i32x4_arr8 arg) {} -// CHECK-LLVM: define dso_local riscv_vls_cc(128) void @test_st_i32x4x2(target("riscv.vector.tuple", <vscale x 8 x i8>, 2) %arg) +// CHECK-LLVM: define dso_local riscv_vls_cc(128) void @test_st_i32x4x2(target("riscv.vector.tuple", <vscale x 8 x i8>, 2) %arg.target_coerce) void __attribute__((riscv_vls_cc)) test_st_i32x4x2(struct st_i32x4x2 arg) {} -// CHECK-LLVM: define dso_local riscv_vls_cc(256) void @test_st_i32x4x2_256(target("riscv.vector.tuple", <vscale x 4 x i8>, 2) %arg) +// CHECK-LLVM: define dso_local riscv_vls_cc(256) void @test_st_i32x4x2_256(target("riscv.vector.tuple", <vscale x 4 x i8>, 2) %arg.target_coerce) void __attribute__((riscv_vls_cc(256))) test_st_i32x4x2_256(struct st_i32x4x2 arg) {} -// CHECK-LLVM: define dso_local riscv_vls_cc(128) void @test_st_i32x8x2(target("riscv.vector.tuple", <vscale x 16 x i8>, 2) %arg) +// CHECK-LLVM: define dso_local riscv_vls_cc(128) void @test_st_i32x8x2(target("riscv.vector.tuple", <vscale x 16 x i8>, 2) %arg.target_coerce) void __attribute__((riscv_vls_cc)) test_st_i32x8x2(struct st_i32x8x2 arg) {} -// CHECK-LLVM: define dso_local riscv_vls_cc(256) void @test_st_i32x8x2_256(target("riscv.vector.tuple", <vscale x 8 x i8>, 2) %arg) +// CHECK-LLVM: define dso_local riscv_vls_cc(256) void @test_st_i32x8x2_256(target("riscv.vector.tuple", <vscale x 8 x i8>, 2) %arg.target_coerce) void __attribute__((riscv_vls_cc(256))) test_st_i32x8x2_256(struct st_i32x8x2 arg) {} // CHECK-LLVM: define dso_local riscv_vls_cc(128) void @test_st_i32x64x2(ptr dead_on_return noundef %arg) @@ -178,17 +178,78 @@ void __attribute__((riscv_vls_cc)) test_st_i32x64x2(struct st_i32x64x2 arg) {} // CHECK-LLVM: define dso_local riscv_vls_cc(256) void @test_st_i32x64x2_256(ptr dead_on_return noundef %arg) void __attribute__((riscv_vls_cc(256))) test_st_i32x64x2_256(struct st_i32x64x2 arg) {} -// CHECK-LLVM: define dso_local riscv_vls_cc(128) void @test_st_i32x4x3(target("riscv.vector.tuple", <vscale x 8 x i8>, 3) %arg) +// CHECK-LLVM: define dso_local riscv_vls_cc(128) void @test_st_i32x4x3(target("riscv.vector.tuple", <vscale x 8 x i8>, 3) %arg.target_coerce) void __attribute__((riscv_vls_cc)) test_st_i32x4x3(struct st_i32x4x3 arg) {} -// CHECK-LLVM: define dso_local riscv_vls_cc(256) void @test_st_i32x4x3_256(target("riscv.vector.tuple", <vscale x 4 x i8>, 3) %arg) +// CHECK-LLVM: define dso_local riscv_vls_cc(256) void @test_st_i32x4x3_256(target("riscv.vector.tuple", <vscale x 4 x i8>, 3) %arg.target_coerce) void __attribute__((riscv_vls_cc(256))) test_st_i32x4x3_256(struct st_i32x4x3 arg) {} -// CHECK-LLVM: define dso_local riscv_vls_cc(128) void @test_st_i32x4x8(target("riscv.vector.tuple", <vscale x 8 x i8>, 8) %arg) +// CHECK-LLVM: define dso_local riscv_vls_cc(128) void @test_st_i32x4x8(target("riscv.vector.tuple", <vscale x 8 x i8>, 8) %arg.target_coerce) void __attribute__((riscv_vls_cc)) test_st_i32x4x8(struct st_i32x4x8 arg) {} -// CHECK-LLVM: define dso_local riscv_vls_cc(256) void @test_st_i32x4x8_256(target("riscv.vector.tuple", <vscale x 4 x i8>, 8) %arg) +// CHECK-LLVM: define dso_local riscv_vls_cc(256) void @test_st_i32x4x8_256(target("riscv.vector.tuple", <vscale x 4 x i8>, 8) %arg.target_coerce) void __attribute__((riscv_vls_cc(256))) test_st_i32x4x8_256(struct st_i32x4x8 arg) {} // CHECK-LLVM: define dso_local riscv_vls_cc(128) void @test_st_i32x4x9(ptr dead_on_return noundef %arg) void __attribute__((riscv_vls_cc)) test_st_i32x4x9(struct st_i32x4x9 arg) {} // CHECK-LLVM: define dso_local riscv_vls_cc(256) void @test_st_i32x4x9_256(ptr dead_on_return noundef %arg) void __attribute__((riscv_vls_cc(256))) test_st_i32x4x9_256(struct st_i32x4x9 arg) {} + +// CHECK-LLVM-LABEL: define dso_local riscv_vls_cc(128) target("riscv.vector.tuple", <vscale x 8 x i8>, 4) @test_function_prolog_epilog(target("riscv.vector.tuple", <vscale x 8 x i8>, 4) %arg.target_coerce) #0 { +// CHECK-LLVM-NEXT: entry: +// CHECK-LLVM-NEXT: %retval = alloca %struct.st_i32x4_arr4, align 16 +// CHECK-LLVM-NEXT: %arg = alloca %struct.st_i32x4_arr4, align 16 +// CHECK-LLVM-NEXT: %0 = call <vscale x 2 x i32> @llvm.riscv.tuple.extract.nxv2i32.triscv.vector.tuple_nxv8i8_4t(target("riscv.vector.tuple", <vscale x 8 x i8>, 4) %arg.target_coerce, i32 0) +// CHECK-LLVM-NEXT: %1 = call <4 x i32> @llvm.vector.extract.v4i32.nxv2i32(<vscale x 2 x i32> %0, i64 0) +// CHECK-LLVM-NEXT: %2 = getelementptr inbounds [4 x <4 x i32>], ptr %arg, i64 0, i64 0 +// CHECK-LLVM-NEXT: store <4 x i32> %1, ptr %2, align 16 +// CHECK-LLVM-NEXT: %3 = call <vscale x 2 x i32> @llvm.riscv.tuple.extract.nxv2i32.triscv.vector.tuple_nxv8i8_4t(target("riscv.vector.tuple", <vscale x 8 x i8>, 4) %arg.target_coerce, i32 1) +// CHECK-LLVM-NEXT: %4 = call <4 x i32> @llvm.vector.extract.v4i32.nxv2i32(<vscale x 2 x i32> %3, i64 0) +// CHECK-LLVM-NEXT: %5 = getelementptr inbounds [4 x <4 x i32>], ptr %arg, i64 0, i64 1 +// CHECK-LLVM-NEXT: store <4 x i32> %4, ptr %5, align 16 +// CHECK-LLVM-NEXT: %6 = call <vscale x 2 x i32> @llvm.riscv.tuple.extract.nxv2i32.triscv.vector.tuple_nxv8i8_4t(target("riscv.vector.tuple", <vscale x 8 x i8>, 4) %arg.target_coerce, i32 2) +// CHECK-LLVM-NEXT: %7 = call <4 x i32> @llvm.vector.extract.v4i32.nxv2i32(<vscale x 2 x i32> %6, i64 0) +// CHECK-LLVM-NEXT: %8 = getelementptr inbounds [4 x <4 x i32>], ptr %arg, i64 0, i64 2 +// CHECK-LLVM-NEXT: store <4 x i32> %7, ptr %8, align 16 +// CHECK-LLVM-NEXT: %9 = call <vscale x 2 x i32> @llvm.riscv.tuple.extract.nxv2i32.triscv.vector.tuple_nxv8i8_4t(target("riscv.vector.tuple", <vscale x 8 x i8>, 4) %arg.target_coerce, i32 3) +// CHECK-LLVM-NEXT: %10 = call <4 x i32> @llvm.vector.extract.v4i32.nxv2i32(<vscale x 2 x i32> %9, i64 0) +// CHECK-LLVM-NEXT: %11 = getelementptr inbounds [4 x <4 x i32>], ptr %arg, i64 0, i64 3 +// CHECK-LLVM-NEXT: store <4 x i32> %10, ptr %11, align 16 +// CHECK-LLVM-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 16 %retval, ptr align 16 %arg, i64 64, i1 false) +// CHECK-LLVM-NEXT: %12 = load [4 x <4 x i32>], ptr %retval, align 16 +// CHECK-LLVM-NEXT: %13 = extractvalue [4 x <4 x i32>] %12, 0 +// CHECK-LLVM-NEXT: %cast.scalable = call <vscale x 2 x i32> @llvm.vector.insert.nxv2i32.v4i32(<vscale x 2 x i32> poison, <4 x i32> %13, i64 0) +// CHECK-LLVM-NEXT: %14 = call target("riscv.vector.tuple", <vscale x 8 x i8>, 4) @llvm.riscv.tuple.insert.triscv.vector.tuple_nxv8i8_4t.nxv2i32(target("riscv.vector.tuple", <vscale x 8 x i8>, 4) poison, <vscale x 2 x i32> %cast.scalable, i32 0) +// CHECK-LLVM-NEXT: %15 = extractvalue [4 x <4 x i32>] %12, 1 +// CHECK-LLVM-NEXT: %cast.scalable1 = call <vscale x 2 x i32> @llvm.vector.insert.nxv2i32.v4i32(<vscale x 2 x i32> poison, <4 x i32> %15, i64 0) +// CHECK-LLVM-NEXT: %16 = call target("riscv.vector.tuple", <vscale x 8 x i8>, 4) @llvm.riscv.tuple.insert.triscv.vector.tuple_nxv8i8_4t.nxv2i32(target("riscv.vector.tuple", <vscale x 8 x i8>, 4) %14, <vscale x 2 x i32> %cast.scalable1, i32 1) +// CHECK-LLVM-NEXT: %17 = extractvalue [4 x <4 x i32>] %12, 2 +// CHECK-LLVM-NEXT: %cast.scalable2 = call <vscale x 2 x i32> @llvm.vector.insert.nxv2i32.v4i32(<vscale x 2 x i32> poison, <4 x i32> %17, i64 0) +// CHECK-LLVM-NEXT: %18 = call target("riscv.vector.tuple", <vscale x 8 x i8>, 4) @llvm.riscv.tuple.insert.triscv.vector.tuple_nxv8i8_4t.nxv2i32(target("riscv.vector.tuple", <vscale x 8 x i8>, 4) %16, <vscale x 2 x i32> %cast.scalable2, i32 2) +// CHECK-LLVM-NEXT: %19 = extractvalue [4 x <4 x i32>] %12, 3 +// CHECK-LLVM-NEXT: %cast.scalable3 = call <vscale x 2 x i32> @llvm.vector.insert.nxv2i32.v4i32(<vscale x 2 x i32> poison, <4 x i32> %19, i64 0) +// CHECK-LLVM-NEXT: %20 = call target("riscv.vector.tuple", <vscale x 8 x i8>, 4) @llvm.riscv.tuple.insert.triscv.vector.tuple_nxv8i8_4t.nxv2i32(target("riscv.vector.tuple", <vscale x 8 x i8>, 4) %18, <vscale x 2 x i32> %cast.scalable3, i32 3) +// CHECK-LLVM-NEXT: ret target("riscv.vector.tuple", <vscale x 8 x i8>, 4) %20 +// CHECK-LLVM-NEXT: } +struct st_i32x4_arr4 __attribute__((riscv_vls_cc)) test_function_prolog_epilog(struct st_i32x4_arr4 arg) { + return arg; +} + +struct st_i32x4 __attribute__((riscv_vls_cc)) dummy(struct st_i32x4); +// CHECK-LLVM-LABEL: define dso_local riscv_vls_cc(128) <vscale x 2 x i32> @test_call(<vscale x 2 x i32> %arg.target_coerce) #0 { +// CHECK-LLVM-NEXT: entry: +// CHECK-LLVM-NEXT: %retval = alloca %struct.st_i32x4, align 16 +// CHECK-LLVM-NEXT: %arg = alloca %struct.st_i32x4, align 16 +// CHECK-LLVM-NEXT: %0 = call <4 x i32> @llvm.vector.extract.v4i32.nxv2i32(<vscale x 2 x i32> %arg.target_coerce, i64 0) +// CHECK-LLVM-NEXT: store <4 x i32> %0, ptr %arg, align 16 +// CHECK-LLVM-NEXT: %1 = load <4 x i32>, ptr %arg, align 16 +// CHECK-LLVM-NEXT: %cast.scalable = call <vscale x 2 x i32> @llvm.vector.insert.nxv2i32.v4i32(<vscale x 2 x i32> poison, <4 x i32> %1, i64 0) +// CHECK-LLVM-NEXT: %call = call riscv_vls_cc(128) <vscale x 2 x i32> @dummy(<vscale x 2 x i32> %cast.scalable) +// CHECK-LLVM-NEXT: %2 = call <4 x i32> @llvm.vector.extract.v4i32.nxv2i32(<vscale x 2 x i32> %call, i64 0) +// CHECK-LLVM-NEXT: store <4 x i32> %2, ptr %retval, align 16 +// CHECK-LLVM-NEXT: %3 = load <4 x i32>, ptr %retval, align 16 +// CHECK-LLVM-NEXT: %cast.scalable1 = call <vscale x 2 x i32> @llvm.vector.insert.nxv2i32.v4i32(<vscale x 2 x i32> poison, <4 x i32> %3, i64 0) +// CHECK-LLVM-NEXT: ret <vscale x 2 x i32> %cast.scalable1 +// CHECK-LLVM-NEXT: } +struct st_i32x4 __attribute__((riscv_vls_cc)) test_call(struct st_i32x4 arg) { + struct st_i32x4 abc = dummy(arg); + return abc; +} diff --git a/clang/test/CodeGen/RISCV/riscv-vector-callingconv-llvm-ir.cpp b/clang/test/CodeGen/RISCV/riscv-vector-callingconv-llvm-ir.cpp index 128610e..3ed4f59 100644 --- a/clang/test/CodeGen/RISCV/riscv-vector-callingconv-llvm-ir.cpp +++ b/clang/test/CodeGen/RISCV/riscv-vector-callingconv-llvm-ir.cpp @@ -123,34 +123,34 @@ typedef int __attribute__((vector_size(256))) int32x64_t; // CHECK-LLVM: define dso_local riscv_vls_cc(256) void @_Z18test_too_large_256Dv64_i(<vscale x 16 x i32> noundef %arg.coerce) [[riscv::vls_cc(256)]] void test_too_large_256(int32x64_t arg) {} -// CHECK-LLVM: define dso_local riscv_vls_cc(128) void @_Z13test_st_i32x48st_i32x4(<vscale x 2 x i32> %arg) +// CHECK-LLVM: define dso_local riscv_vls_cc(128) void @_Z13test_st_i32x48st_i32x4(<vscale x 2 x i32> %arg.target_coerce) [[riscv::vls_cc]] void test_st_i32x4(struct st_i32x4 arg) {} -// CHECK-LLVM: define dso_local riscv_vls_cc(256) void @_Z17test_st_i32x4_2568st_i32x4(<vscale x 1 x i32> %arg) +// CHECK-LLVM: define dso_local riscv_vls_cc(256) void @_Z17test_st_i32x4_2568st_i32x4(<vscale x 1 x i32> %arg.target_coerce) [[riscv::vls_cc(256)]] void test_st_i32x4_256(struct st_i32x4 arg) {} -// CHECK-LLVM: define dso_local riscv_vls_cc(128) void @_Z18test_st_i32x4_arr113st_i32x4_arr1(<vscale x 2 x i32> %arg) +// CHECK-LLVM: define dso_local riscv_vls_cc(128) void @_Z18test_st_i32x4_arr113st_i32x4_arr1(<vscale x 2 x i32> %arg.target_coerce) [[riscv::vls_cc]] void test_st_i32x4_arr1(struct st_i32x4_arr1 arg) {} -// CHECK-LLVM: define dso_local riscv_vls_cc(256) void @_Z22test_st_i32x4_arr1_25613st_i32x4_arr1(<vscale x 1 x i32> %arg) +// CHECK-LLVM: define dso_local riscv_vls_cc(256) void @_Z22test_st_i32x4_arr1_25613st_i32x4_arr1(<vscale x 1 x i32> %arg.target_coerce) [[riscv::vls_cc(256)]] void test_st_i32x4_arr1_256(struct st_i32x4_arr1 arg) {} -// CHECK-LLVM: define dso_local riscv_vls_cc(128) void @_Z18test_st_i32x4_arr413st_i32x4_arr4(target("riscv.vector.tuple", <vscale x 8 x i8>, 4) %arg) +// CHECK-LLVM: define dso_local riscv_vls_cc(128) void @_Z18test_st_i32x4_arr413st_i32x4_arr4(target("riscv.vector.tuple", <vscale x 8 x i8>, 4) %arg.target_coerce) [[riscv::vls_cc]] void test_st_i32x4_arr4(struct st_i32x4_arr4 arg) {} -// CHECK-LLVM: define dso_local riscv_vls_cc(256) void @_Z22test_st_i32x4_arr4_25613st_i32x4_arr4(target("riscv.vector.tuple", <vscale x 4 x i8>, 4) %arg) +// CHECK-LLVM: define dso_local riscv_vls_cc(256) void @_Z22test_st_i32x4_arr4_25613st_i32x4_arr4(target("riscv.vector.tuple", <vscale x 4 x i8>, 4) %arg.target_coerce) [[riscv::vls_cc(256)]] void test_st_i32x4_arr4_256(struct st_i32x4_arr4 arg) {} -// CHECK-LLVM: define dso_local riscv_vls_cc(128) void @_Z18test_st_i32x4_arr813st_i32x4_arr8(target("riscv.vector.tuple", <vscale x 8 x i8>, 8) %arg) +// CHECK-LLVM: define dso_local riscv_vls_cc(128) void @_Z18test_st_i32x4_arr813st_i32x4_arr8(target("riscv.vector.tuple", <vscale x 8 x i8>, 8) %arg.target_coerce) [[riscv::vls_cc]] void test_st_i32x4_arr8(struct st_i32x4_arr8 arg) {} -// CHECK-LLVM: define dso_local riscv_vls_cc(256) void @_Z22test_st_i32x4_arr8_25613st_i32x4_arr8(target("riscv.vector.tuple", <vscale x 4 x i8>, 8) %arg) +// CHECK-LLVM: define dso_local riscv_vls_cc(256) void @_Z22test_st_i32x4_arr8_25613st_i32x4_arr8(target("riscv.vector.tuple", <vscale x 4 x i8>, 8) %arg.target_coerce) [[riscv::vls_cc(256)]] void test_st_i32x4_arr8_256(struct st_i32x4_arr8 arg) {} -// CHECK-LLVM: define dso_local riscv_vls_cc(128) void @_Z15test_st_i32x4x210st_i32x4x2(target("riscv.vector.tuple", <vscale x 8 x i8>, 2) %arg) +// CHECK-LLVM: define dso_local riscv_vls_cc(128) void @_Z15test_st_i32x4x210st_i32x4x2(target("riscv.vector.tuple", <vscale x 8 x i8>, 2) %arg.target_coerce) [[riscv::vls_cc]] void test_st_i32x4x2(struct st_i32x4x2 arg) {} -// CHECK-LLVM: define dso_local riscv_vls_cc(256) void @_Z19test_st_i32x4x2_25610st_i32x4x2(target("riscv.vector.tuple", <vscale x 4 x i8>, 2) %arg) +// CHECK-LLVM: define dso_local riscv_vls_cc(256) void @_Z19test_st_i32x4x2_25610st_i32x4x2(target("riscv.vector.tuple", <vscale x 4 x i8>, 2) %arg.target_coerce) [[riscv::vls_cc(256)]] void test_st_i32x4x2_256(struct st_i32x4x2 arg) {} -// CHECK-LLVM: define dso_local riscv_vls_cc(128) void @_Z15test_st_i32x8x210st_i32x8x2(target("riscv.vector.tuple", <vscale x 16 x i8>, 2) %arg) +// CHECK-LLVM: define dso_local riscv_vls_cc(128) void @_Z15test_st_i32x8x210st_i32x8x2(target("riscv.vector.tuple", <vscale x 16 x i8>, 2) %arg.target_coerce) [[riscv::vls_cc]] void test_st_i32x8x2(struct st_i32x8x2 arg) {} -// CHECK-LLVM: define dso_local riscv_vls_cc(256) void @_Z19test_st_i32x8x2_25610st_i32x8x2(target("riscv.vector.tuple", <vscale x 8 x i8>, 2) %arg) +// CHECK-LLVM: define dso_local riscv_vls_cc(256) void @_Z19test_st_i32x8x2_25610st_i32x8x2(target("riscv.vector.tuple", <vscale x 8 x i8>, 2) %arg.target_coerce) [[riscv::vls_cc(256)]] void test_st_i32x8x2_256(struct st_i32x8x2 arg) {} // CHECK-LLVM: define dso_local riscv_vls_cc(128) void @_Z16test_st_i32x64x211st_i32x64x2(ptr dead_on_return noundef %arg) @@ -158,14 +158,14 @@ typedef int __attribute__((vector_size(256))) int32x64_t; // CHECK-LLVM: define dso_local riscv_vls_cc(256) void @_Z20test_st_i32x64x2_25611st_i32x64x2(ptr dead_on_return noundef %arg) [[riscv::vls_cc(256)]] void test_st_i32x64x2_256(struct st_i32x64x2 arg) {} -// CHECK-LLVM: define dso_local riscv_vls_cc(128) void @_Z15test_st_i32x4x310st_i32x4x3(target("riscv.vector.tuple", <vscale x 8 x i8>, 3) %arg) +// CHECK-LLVM: define dso_local riscv_vls_cc(128) void @_Z15test_st_i32x4x310st_i32x4x3(target("riscv.vector.tuple", <vscale x 8 x i8>, 3) %arg.target_coerce) [[riscv::vls_cc]] void test_st_i32x4x3(struct st_i32x4x3 arg) {} -// CHECK-LLVM: define dso_local riscv_vls_cc(256) void @_Z19test_st_i32x4x3_25610st_i32x4x3(target("riscv.vector.tuple", <vscale x 4 x i8>, 3) %arg) +// CHECK-LLVM: define dso_local riscv_vls_cc(256) void @_Z19test_st_i32x4x3_25610st_i32x4x3(target("riscv.vector.tuple", <vscale x 4 x i8>, 3) %arg.target_coerce) [[riscv::vls_cc(256)]] void test_st_i32x4x3_256(struct st_i32x4x3 arg) {} -// CHECK-LLVM: define dso_local riscv_vls_cc(128) void @_Z15test_st_i32x4x810st_i32x4x8(target("riscv.vector.tuple", <vscale x 8 x i8>, 8) %arg) +// CHECK-LLVM: define dso_local riscv_vls_cc(128) void @_Z15test_st_i32x4x810st_i32x4x8(target("riscv.vector.tuple", <vscale x 8 x i8>, 8) %arg.target_coerce) [[riscv::vls_cc]] void test_st_i32x4x8(struct st_i32x4x8 arg) {} -// CHECK-LLVM: define dso_local riscv_vls_cc(256) void @_Z19test_st_i32x4x8_25610st_i32x4x8(target("riscv.vector.tuple", <vscale x 4 x i8>, 8) %arg) +// CHECK-LLVM: define dso_local riscv_vls_cc(256) void @_Z19test_st_i32x4x8_25610st_i32x4x8(target("riscv.vector.tuple", <vscale x 4 x i8>, 8) %arg.target_coerce) [[riscv::vls_cc(256)]] void test_st_i32x4x8_256(struct st_i32x4x8 arg) {} // CHECK-LLVM: define dso_local riscv_vls_cc(128) void @_Z15test_st_i32x4x910st_i32x4x9(ptr dead_on_return noundef %arg) diff --git a/clang/test/CodeGen/RISCV/rvv-intrinsics-handcrafted/vfncvtbf16-out-of-range.c b/clang/test/CodeGen/RISCV/rvv-intrinsics-handcrafted/vfncvtbf16-out-of-range.c new file mode 100644 index 0000000..899ec29 --- /dev/null +++ b/clang/test/CodeGen/RISCV/rvv-intrinsics-handcrafted/vfncvtbf16-out-of-range.c @@ -0,0 +1,31 @@ +// REQUIRES: riscv-registered-target +// RUN: %clang_cc1 -triple riscv64 -target-feature +f -target-feature +d \ +// RUN: -target-feature +v -target-feature +zvfbfmin \ +// RUN: -fsyntax-only -verify %s + +#include <riscv_vector.h> + +vbfloat16m1_t test_vfncvtbf16_f_f_w_bf16m1_rm_m(vbool16_t mask, vfloat32m2_t src, size_t vl) { + // expected-error@+1 {{argument value 5 is outside the valid range [0, 4]}} + return __riscv_vfncvtbf16_f_f_w_bf16m1_rm_m(mask, src, 5, vl); +} + +vbfloat16m1_t test_vfncvtbf16_f_f_w_bf16m1_rm_tu(vbfloat16m1_t maskedoff, vfloat32m2_t src, size_t vl) { + // expected-error@+1 {{argument value 5 is outside the valid range [0, 4]}} + return __riscv_vfncvtbf16_f_f_w_bf16m1_rm_tu(maskedoff, src, 5, vl); +} + +vbfloat16m1_t test_vfncvtbf16_f_f_w_bf16m1_rm_tum(vbool16_t mask, vbfloat16m1_t maskedoff, vfloat32m2_t src, size_t vl) { + // expected-error@+1 {{argument value 5 is outside the valid range [0, 4]}} + return __riscv_vfncvtbf16_f_f_w_bf16m1_rm_tum(mask, maskedoff, src, 5, vl); +} + +vbfloat16m1_t test_vfncvtbf16_f_f_w_bf16m1_rm_tumu(vbool16_t mask, vbfloat16m1_t maskedoff, vfloat32m2_t src, size_t vl) { + // expected-error@+1 {{argument value 5 is outside the valid range [0, 4]}} + return __riscv_vfncvtbf16_f_f_w_bf16m1_rm_tumu(mask, maskedoff, src, 5, vl); +} + +vbfloat16m1_t test_vfncvtbf16_f_f_w_bf16m1_rm_mu(vbool16_t mask, vbfloat16m1_t maskedoff, vfloat32m2_t src, size_t vl) { + // expected-error@+1 {{argument value 5 is outside the valid range [0, 4]}} + return __riscv_vfncvtbf16_f_f_w_bf16m1_rm_mu(mask, maskedoff, src, 5, vl); +} diff --git a/clang/test/CodeGen/RISCV/rvv-intrinsics-handcrafted/vfwmaccbf16-out-of-range.c b/clang/test/CodeGen/RISCV/rvv-intrinsics-handcrafted/vfwmaccbf16-out-of-range.c new file mode 100644 index 0000000..84b822d1 --- /dev/null +++ b/clang/test/CodeGen/RISCV/rvv-intrinsics-handcrafted/vfwmaccbf16-out-of-range.c @@ -0,0 +1,66 @@ +// REQUIRES: riscv-registered-target +// RUN: %clang_cc1 -triple riscv64 -target-feature +f -target-feature +d \ +// RUN: -target-feature +v -target-feature +zvfbfwma \ +// RUN: -fsyntax-only -verify %s + +#include <riscv_vector.h> + +vfloat32m1_t test_vfwmaccbf16_vv_f32m1_rm(vfloat32m1_t vd, vbfloat16mf2_t vs1, vbfloat16mf2_t vs2, size_t vl) { + // expected-error@+1 {{argument value 5 is outside the valid range [0, 4]}} + return __riscv_vfwmaccbf16_vv_f32m1_rm(vd, vs1, vs2, 5, vl); +} + +vfloat32m1_t test_vfwmaccbf16_vf_f32m1_rm(vfloat32m1_t vd, __bf16 vs1, vbfloat16mf2_t vs2, size_t vl) { + // expected-error@+1 {{argument value 5 is outside the valid range [0, 4]}} + return __riscv_vfwmaccbf16_vf_f32m1_rm(vd, vs1, vs2, 5, vl); +} + +vfloat32m1_t test_vfwmaccbf16_vv_f32m1_rm_m(vbool32_t mask, vfloat32m1_t vd, vbfloat16mf2_t vs1, vbfloat16mf2_t vs2, size_t vl) { + // expected-error@+1 {{argument value 5 is outside the valid range [0, 4]}} + return __riscv_vfwmaccbf16_vv_f32m1_rm_m(mask, vd, vs1, vs2, 5, vl); +} + +vfloat32m1_t test_vfwmaccbf16_vf_f32m1_rm_m(vbool32_t mask, vfloat32m1_t vd, __bf16 vs1, vbfloat16mf2_t vs2, size_t vl) { + // expected-error@+1 {{argument value 5 is outside the valid range [0, 4]}} + return __riscv_vfwmaccbf16_vf_f32m1_rm_m(mask, vd, vs1, vs2, 5, vl); +} + +vfloat32m1_t test_vfwmaccbf16_vv_f32m1_rm_tu(vfloat32m1_t vd, vbfloat16mf2_t vs1, vbfloat16mf2_t vs2, size_t vl) { + // expected-error@+1 {{argument value 5 is outside the valid range [0, 4]}} + return __riscv_vfwmaccbf16_vv_f32m1_rm_tu(vd, vs1, vs2, 5, vl); +} + +vfloat32m1_t test_vfwmaccbf16_vf_f32m1_rm_tu(vfloat32m1_t vd, __bf16 vs1, vbfloat16mf2_t vs2, size_t vl) { + // expected-error@+1 {{argument value 5 is outside the valid range [0, 4]}} + return __riscv_vfwmaccbf16_vf_f32m1_rm_tu(vd, vs1, vs2, 5, vl); +} + +vfloat32m1_t test_vfwmaccbf16_vv_f32m1_rm_tum(vbool32_t mask, vfloat32m1_t vd, vbfloat16mf2_t vs1, vbfloat16mf2_t vs2, size_t vl) { + // expected-error@+1 {{argument value 5 is outside the valid range [0, 4]}} + return __riscv_vfwmaccbf16_vv_f32m1_rm_tum(mask, vd, vs1, vs2, 5, vl); +} + +vfloat32m1_t test_vfwmaccbf16_vf_f32m1_rm_tum(vbool32_t mask, vfloat32m1_t vd, __bf16 vs1, vbfloat16mf2_t vs2, size_t vl) { + // expected-error@+1 {{argument value 5 is outside the valid range [0, 4]}} + return __riscv_vfwmaccbf16_vf_f32m1_rm_tum(mask, vd, vs1, vs2, 5, vl); +} + +vfloat32m1_t test_vfwmaccbf16_vv_f32m1_rm_tumu(vbool32_t mask, vfloat32m1_t vd, vbfloat16mf2_t vs1, vbfloat16mf2_t vs2, size_t vl) { + // expected-error@+1 {{argument value 5 is outside the valid range [0, 4]}} + return __riscv_vfwmaccbf16_vv_f32m1_rm_tumu(mask, vd, vs1, vs2, 5, vl); +} + +vfloat32m1_t test_vfwmaccbf16_vf_f32m1_rm_tumu(vbool32_t mask, vfloat32m1_t vd, __bf16 vs1, vbfloat16mf2_t vs2, size_t vl) { + // expected-error@+1 {{argument value 5 is outside the valid range [0, 4]}} + return __riscv_vfwmaccbf16_vf_f32m1_rm_tumu(mask, vd, vs1, vs2, 5, vl); +} + +vfloat32m1_t test_vfwmaccbf16_vv_f32m1_rm_mu(vbool32_t mask, vfloat32m1_t vd, vbfloat16mf2_t vs1, vbfloat16mf2_t vs2, size_t vl) { + // expected-error@+1 {{argument value 5 is outside the valid range [0, 4]}} + return __riscv_vfwmaccbf16_vv_f32m1_rm_mu(mask, vd, vs1, vs2, 5, vl); +} + +vfloat32m1_t test_vfwmaccbf16_vf_f32m1_rm_mu(vbool32_t mask, vfloat32m1_t vd, __bf16 vs1, vbfloat16mf2_t vs2, size_t vl) { + // expected-error@+1 {{argument value 5 is outside the valid range [0, 4]}} + return __riscv_vfwmaccbf16_vf_f32m1_rm_mu(mask, vd, vs1, vs2, 5, vl); +} diff --git a/clang/test/CodeGen/WebAssembly/builtins-test-fp-sig.c b/clang/test/CodeGen/WebAssembly/builtins-test-fp-sig.c new file mode 100644 index 0000000..88447f7 --- /dev/null +++ b/clang/test/CodeGen/WebAssembly/builtins-test-fp-sig.c @@ -0,0 +1,70 @@ +// RUN: %clang_cc1 -triple wasm32-unknown-unknown -target-feature +gc -O3 -emit-llvm -DSINGLE_VALUE -o - %s | FileCheck %s -check-prefixes WEBASSEMBLY,WEBASSEMBLY-SV +// RUN: %clang_cc1 -triple wasm64-unknown-unknown -target-feature +gc -O3 -emit-llvm -DSINGLE_VALUE -o - %s | FileCheck %s -check-prefixes WEBASSEMBLY,WEBASSEMBLY-SV +// RUN: %clang_cc1 -triple wasm64-unknown-unknown -target-feature +gc -target-abi experimental-mv -O3 -emit-llvm -o - %s 2>&1 | FileCheck %s -check-prefixes WEBASSEMBLY +// RUN: not %clang_cc1 -triple wasm64-unknown-unknown -O3 -emit-llvm -o - %s 2>&1 | FileCheck %s -check-prefixes MISSING-GC + +void use(int); + +typedef void (*Fvoid)(void); +void test_function_pointer_signature_void(Fvoid func) { + // MISSING-GC: error: '__builtin_wasm_test_function_pointer_signature' needs target feature gc + // WEBASSEMBLY: %0 = tail call i32 (ptr, ...) @llvm.wasm.ref.test.func(ptr %func, token poison) + use(__builtin_wasm_test_function_pointer_signature(func)); +} + +typedef float (*Ffloats)(float, double, int); +void test_function_pointer_signature_floats(Ffloats func) { + // WEBASSEMBLY: %0 = tail call i32 (ptr, ...) @llvm.wasm.ref.test.func(ptr %func, float poison, token poison, float poison, double poison, i32 poison) + use(__builtin_wasm_test_function_pointer_signature(func)); +} + +typedef void (*Fpointers)(Fvoid, Ffloats, void*, int*, int***, char[5]); +void test_function_pointer_signature_pointers(Fpointers func) { + // WEBASSEMBLY: %0 = tail call i32 (ptr, ...) @llvm.wasm.ref.test.func(ptr %func, token poison, ptr poison, ptr poison, ptr poison, ptr poison, ptr poison, ptr poison) + use(__builtin_wasm_test_function_pointer_signature(func)); +} + +typedef void (*FVarArgs)(int, ...); +void test_function_pointer_signature_varargs(FVarArgs func) { + // WEBASSEMBLY: %0 = tail call i32 (ptr, ...) @llvm.wasm.ref.test.func(ptr %func, token poison, i32 poison, ptr poison) + use(__builtin_wasm_test_function_pointer_signature(func)); +} + +typedef __externref_t (*FExternRef)(__externref_t, __externref_t); +void test_function_pointer_externref(FExternRef func) { + // WEBASSEMBLY: %0 = tail call i32 (ptr, ...) @llvm.wasm.ref.test.func(ptr %func, ptr addrspace(10) poison, token poison, ptr addrspace(10) poison, ptr addrspace(10) poison) + use(__builtin_wasm_test_function_pointer_signature(func)); +} + +typedef __funcref Fpointers (*FFuncRef)(__funcref Fvoid, __funcref Ffloats); +void test_function_pointer_funcref(FFuncRef func) { + // WEBASSEMBLY: %0 = tail call i32 (ptr, ...) @llvm.wasm.ref.test.func(ptr %func, ptr addrspace(20) poison, token poison, ptr addrspace(20) poison, ptr addrspace(20) poison) + use(__builtin_wasm_test_function_pointer_signature(func)); +} + +#ifdef SINGLE_VALUE +// Some tests that we get struct ABIs correct. There is no special code in +// __builtin_wasm_test_function_pointer_signature for this, it gets handled by +// the normal type lowering code. +// Single element structs are unboxed, multi element structs are passed on +// stack. +typedef struct {double x;} (*Fstructs1)(struct {double x;}, struct {float x;}, struct {double x; float y;}); +void test_function_pointer_structs1(Fstructs1 func) { + // WEBASSEMBLY-SV: %0 = tail call i32 (ptr, ...) @llvm.wasm.ref.test.func(ptr %func, double poison, token poison, double poison, float poison, ptr poison) + use(__builtin_wasm_test_function_pointer_signature(func)); +} + +// Two element return struct ==> return ptr on stack +typedef struct {double x; double y;} (*Fstructs2)(void); +void test_function_pointer_structs2(Fstructs2 func) { + // WEBASSEMBLY-SV: %0 = tail call i32 (ptr, ...) @llvm.wasm.ref.test.func(ptr %func, token poison, ptr poison) + use(__builtin_wasm_test_function_pointer_signature(func)); +} + +// Return union ==> return ptr on stack, one element union => unboxed +typedef union {double x; float y;} (*FUnions)(union {double x; float y;}, union {double x;}); +void test_function_pointer_unions(FUnions func) { + // WEBASSEMBLY-SV: %0 = tail call i32 (ptr, ...) @llvm.wasm.ref.test.func(ptr %func, token poison, ptr poison, ptr poison, double poison) + use(__builtin_wasm_test_function_pointer_signature(func)); +} +#endif diff --git a/clang/test/CodeGen/X86/avx-builtins.c b/clang/test/CodeGen/X86/avx-builtins.c index ed39862..622ac5d 100644 --- a/clang/test/CodeGen/X86/avx-builtins.c +++ b/clang/test/CodeGen/X86/avx-builtins.c @@ -9,6 +9,17 @@ // RUN: %clang_cc1 -x c++ -flax-vector-conversions=none -ffreestanding %s -triple=i386-apple-darwin -target-feature +avx -fno-signed-char -emit-llvm -o - -Wall -Werror | FileCheck %s --check-prefixes=CHECK,X86 // RUN: %clang_cc1 -x c++ -flax-vector-conversions=none -fms-extensions -fms-compatibility -ffreestanding %s -triple=x86_64-windows-msvc -target-feature +avx -emit-llvm -o - -Wall -Werror | FileCheck %s --check-prefixes=CHECK,X64 +// RUN: %clang_cc1 -x c -flax-vector-conversions=none -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +avx -emit-llvm -o - -Wall -Werror -fexperimental-new-constant-interpreter | FileCheck %s --check-prefixes=CHECK,X64 +// RUN: %clang_cc1 -x c -flax-vector-conversions=none -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +avx -fno-signed-char -emit-llvm -o - -Wall -Werror -fexperimental-new-constant-interpreter | FileCheck %s --check-prefixes=CHECK,X64 +// RUN: %clang_cc1 -x c -flax-vector-conversions=none -ffreestanding %s -triple=i386-apple-darwin -target-feature +avx -emit-llvm -o - -Wall -Werror -fexperimental-new-constant-interpreter | FileCheck %s --check-prefixes=CHECK,X86 +// RUN: %clang_cc1 -x c -flax-vector-conversions=none -ffreestanding %s -triple=i386-apple-darwin -target-feature +avx -fno-signed-char -emit-llvm -o - -Wall -Werror -fexperimental-new-constant-interpreter | FileCheck %s --check-prefixes=CHECK,X86 +// RUN: %clang_cc1 -x c -flax-vector-conversions=none -fms-extensions -fms-compatibility -ffreestanding %s -triple=x86_64-windows-msvc -target-feature +avx -emit-llvm -o - -Wall -Werror -fexperimental-new-constant-interpreter | FileCheck %s --check-prefixes=CHECK,X64 +// RUN: %clang_cc1 -x c++ -flax-vector-conversions=none -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +avx -emit-llvm -o - -Wall -Werror -fexperimental-new-constant-interpreter | FileCheck %s --check-prefixes=CHECK,X64 +// RUN: %clang_cc1 -x c++ -flax-vector-conversions=none -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +avx -fno-signed-char -emit-llvm -o - -Wall -Werror -fexperimental-new-constant-interpreter | FileCheck %s --check-prefixes=CHECK,X64 +// RUN: %clang_cc1 -x c++ -flax-vector-conversions=none -ffreestanding %s -triple=i386-apple-darwin -target-feature +avx -emit-llvm -o - -Wall -Werror -fexperimental-new-constant-interpreter | FileCheck %s --check-prefixes=CHECK,X86 +// RUN: %clang_cc1 -x c++ -flax-vector-conversions=none -ffreestanding %s -triple=i386-apple-darwin -target-feature +avx -fno-signed-char -emit-llvm -o - -Wall -Werror -fexperimental-new-constant-interpreter | FileCheck %s --check-prefixes=CHECK,X86 +// RUN: %clang_cc1 -x c++ -flax-vector-conversions=none -fms-extensions -fms-compatibility -ffreestanding %s -triple=x86_64-windows-msvc -target-feature +avx -emit-llvm -o - -Wall -Werror -fexperimental-new-constant-interpreter | FileCheck %s --check-prefixes=CHECK,X64 + #include <immintrin.h> #include "builtin_test_helpers.h" @@ -20,12 +31,14 @@ __m256d test_mm256_add_pd(__m256d A, __m256d B) { // CHECK: fadd <4 x double> return _mm256_add_pd(A, B); } +TEST_CONSTEXPR(match_m256d( _mm256_add_pd((__m256d){-4.0, -5.0, +6.0, +7.0}, (__m256d){-4.0, -5.0, +6.0, +7.0}), -8.0, -10.0, +12.0, +14.0)); __m256 test_mm256_add_ps(__m256 A, __m256 B) { // CHECK-LABEL: test_mm256_add_ps // CHECK: fadd <8 x float> return _mm256_add_ps(A, B); } +TEST_CONSTEXPR(match_m256(_mm256_add_ps((__m256){-4.0f, -5.0f, +6.0f, +7.0f, +7.0f, +6.0f, -5.0f, -4.0f}, (__m256){-4.0f, -5.0f, +6.0f, +7.0f, +7.0f, +6.0f, -5.0f, -4.0f}), -8.0f, -10.0f, +12.0f, +14.0f, +14.0f, +12.0f, -10.0f, -8.0f)); __m256d test_mm256_addsub_pd(__m256d A, __m256d B) { // CHECK-LABEL: test_mm256_addsub_pd @@ -44,12 +57,14 @@ __m256d test_mm256_and_pd(__m256d A, __m256d B) { // CHECK: and <4 x i64> return _mm256_and_pd(A, B); } +TEST_CONSTEXPR(match_m256d(_mm256_and_pd((__m256d){-4.0, -5.0, +6.0, +7.0}, (__m256d){+0.0, -0.0, -0.0, +7.0}), +0.0, -0.0, +0.0, +7.0)); __m256 test_mm256_and_ps(__m256 A, __m256 B) { // CHECK-LABEL: test_mm256_and_ps // CHECK: and <8 x i32> return _mm256_and_ps(A, B); } +TEST_CONSTEXPR(match_m256(_mm256_and_ps((__m256){-4.0f, -5.0f, +6.0f, +7.0f, +7.0f, +6.0f, -5.0f, -4.0f}, (__m256){+0.0f, -0.0f, -0.0f, +7.0f, +7.0f, -0.0f, -0.0f, +0.0f}), +0.0f, -0.0f, +0.0f, +7.0f, +7.0f, +0.0f, -0.0f, +0.0f)); __m256d test_mm256_andnot_pd(__m256d A, __m256d B) { // CHECK-LABEL: test_mm256_andnot_pd @@ -57,6 +72,7 @@ __m256d test_mm256_andnot_pd(__m256d A, __m256d B) { // CHECK: and <4 x i64> return _mm256_andnot_pd(A, B); } +TEST_CONSTEXPR(match_m256d(_mm256_andnot_pd((__m256d){-4.0, -5.0, +6.0, +7.0}, (__m256d){+0.0, -0.0, -0.0, +7.0}), +0.0, +0.0, -0.0, +0.0)); __m256 test_mm256_andnot_ps(__m256 A, __m256 B) { // CHECK-LABEL: test_mm256_andnot_ps @@ -64,6 +80,7 @@ __m256 test_mm256_andnot_ps(__m256 A, __m256 B) { // CHECK: and <8 x i32> return _mm256_andnot_ps(A, B); } +TEST_CONSTEXPR(match_m256(_mm256_andnot_ps((__m256){-4.0f, -5.0f, +6.0f, +7.0f, +7.0f, +6.0f, -5.0f, -4.0f}, (__m256){+0.0f, -0.0f, -0.0f, +7.0f, +7.0f, -0.0f, -0.0f, +0.0f}), +0.0f, +0.0f, -0.0f, +0.0f, +0.0f, -0.0f, +0.0f, +0.0f)); __m256d test_mm256_blend_pd(__m256d A, __m256d B) { // CHECK-LABEL: test_mm256_blend_pd @@ -141,11 +158,13 @@ __m256 test_mm256_castpd_ps(__m256d A) { // CHECK-LABEL: test_mm256_castpd_ps return _mm256_castpd_ps(A); } +TEST_CONSTEXPR(match_m256(_mm256_castpd_ps((__m256d){-1.0, +2.0, +4.0, -6.0}), +0.0f, -1.875f, +0.0f, +2.0f, +0.0f, +2.25f, 0.0f, -2.375f)); __m256i test_mm256_castpd_si256(__m256d A) { // CHECK-LABEL: test_mm256_castpd_si256 return _mm256_castpd_si256(A); } +TEST_CONSTEXPR(match_m256i(_mm256_castpd_si256((__m256d){-1.0, +2.0, -3.0, +4.0}), 0xBFF0000000000000ULL, 0x4000000000000000ULL, 0xC008000000000000ULL, 0x4010000000000000ULL)); __m256d test_mm256_castpd128_pd256(__m128d A) { // CHECK-LABEL: test_mm256_castpd128_pd256 @@ -159,16 +178,19 @@ __m128d test_mm256_castpd256_pd128(__m256d A) { // CHECK: shufflevector <4 x double> %{{.*}}, <4 x double> %{{.*}}, <2 x i32> <i32 0, i32 1> return _mm256_castpd256_pd128(A); } +TEST_CONSTEXPR(match_m128d(_mm256_castpd256_pd128((__m256d){-1.0, +2.0, -3.0, +4.0}), -1.0, +2.0)); __m256d test_mm256_castps_pd(__m256 A) { // CHECK-LABEL: test_mm256_castps_pd return _mm256_castps_pd(A); } +TEST_CONSTEXPR(match_m256d(_mm256_castps_pd((__m256){0.0f, -1.0f, 0.0f, 4.0f, 0.0f, -2.0f, 0.0f, 6.0f}), -0.0078125, 512.0, -2.0, +8192.0)); __m256i test_mm256_castps_si256(__m256 A) { // CHECK-LABEL: test_mm256_castps_si256 return _mm256_castps_si256(A); } +TEST_CONSTEXPR(match_m256i(_mm256_castps_si256((__m256){1.0f, -2.0f, -4.0f, 8.0f, -16.0f, +16.0f, +32.0f, -32.0f}), 0xC00000003F800000ULL, 0x41000000c0800000ULL, 0x41800000C1800000ULL, 0xC200000042000000ULL)); __m256 test_mm256_castps128_ps256(__m128 A) { // CHECK-LABEL: test_mm256_castps128_ps256 @@ -182,6 +204,7 @@ __m128 test_mm256_castps256_ps128(__m256 A) { // CHECK: shufflevector <8 x float> %{{.*}}, <8 x float> %{{.*}}, <4 x i32> <i32 0, i32 1, i32 2, i32 3> return _mm256_castps256_ps128(A); } +TEST_CONSTEXPR(match_m128(_mm256_castps256_ps128((__m256){1.0f, -2.0f, -4.0f, 8.0f, -16.0f, +16.0f, +32.0f, -32.0f}), 1.0f, -2.0f, -4.0f, 8.0f)); __m256i test_mm256_castsi128_si256(__m128i A) { // CHECK-LABEL: test_mm256_castsi128_si256 @@ -194,17 +217,20 @@ __m256d test_mm256_castsi256_pd(__m256i A) { // CHECK-LABEL: test_mm256_castsi256_pd return _mm256_castsi256_pd(A); } +TEST_CONSTEXPR(match_m256d(_mm256_castsi256_pd((__m256i)(__v4du){0x4070000000000000ULL, 0xC000000000000000ULL, 0xBFF0000000000000ULL, 0xC008000000000000ULL}), 256.0, -2.0, -1.0, -3.0)); __m256 test_mm256_castsi256_ps(__m256i A) { // CHECK-LABEL: test_mm256_castsi256_ps return _mm256_castsi256_ps(A); } +TEST_CONSTEXPR(match_m256(_mm256_castsi256_ps((__m256i)(__v4du){0x42000000c1800000ULL, 0x43000000c2800000ULL, 0x41000000c0800000ULL, 0xC00000003F800000ULL}), -16.0f, 32.0f, -64.0f, 128.0f, -4.0f, 8.0f, 1.0f, -2.0f)); __m128i test_mm256_castsi256_si128(__m256i A) { // CHECK-LABEL: test_mm256_castsi256_si128 // CHECK: shufflevector <4 x i64> %{{.*}}, <4 x i64> %{{.*}}, <2 x i32> <i32 0, i32 1> return _mm256_castsi256_si128(A); } +TEST_CONSTEXPR(match_m128i(_mm256_castsi256_si128((__m256i)(__v4du){0xBFF0000000000000ULL, 0x4070000000000000ULL, 0xC000000000000000ULL, 0xC008000000000000ULL}), 0xBFF0000000000000ULL, 0x4070000000000000ULL)); __m256d test_mm256_ceil_pd(__m256d x) { // CHECK-LABEL: test_mm256_ceil_pd @@ -908,12 +934,16 @@ __m256d test_mm256_cvtepi32_pd(__m128i A) { return _mm256_cvtepi32_pd(A); } +TEST_CONSTEXPR(match_m256d(_mm256_cvtepi32_pd((__m128i)(__v4si){-2, -1, 0, 1}), -2.0, -1.0, 0.0, 1.0)); + __m256 test_mm256_cvtepi32_ps(__m256i A) { // CHECK-LABEL: test_mm256_cvtepi32_ps // CHECK: sitofp <8 x i32> %{{.*}} to <8 x float> return _mm256_cvtepi32_ps(A); } +TEST_CONSTEXPR(match_m256(_mm256_cvtepi32_ps((__m256i)(__v8si){-8, -4, -2, -1, 0, 1, 2, 4}), -8.0f, -4.0f, -2.0f, -1.0f, 0.0f, 1.0f, 2.0f, 4.0f)); + __m128i test_mm256_cvtpd_epi32(__m256d A) { // CHECK-LABEL: test_mm256_cvtpd_epi32 // CHECK: call <4 x i32> @llvm.x86.avx.cvt.pd2dq.256(<4 x double> %{{.*}}) @@ -938,6 +968,8 @@ __m256d test_mm256_cvtps_pd(__m128 A) { return _mm256_cvtps_pd(A); } +TEST_CONSTEXPR(match_m256d(_mm256_cvtps_pd((__m128){0.25f, 1.75f, -1.75f, 16777216.0f}), 0.25, 1.75, -1.75, 16777216.0)); + double test_mm256_cvtsd_f64(__m256d __a) { // CHECK-LABEL: test_mm256_cvtsd_f64 // CHECK: extractelement <4 x double> %{{.*}}, i32 0 @@ -973,12 +1005,14 @@ __m256d test_mm256_div_pd(__m256d A, __m256d B) { // CHECK: fdiv <4 x double> return _mm256_div_pd(A, B); } +TEST_CONSTEXPR(match_m256d( _mm256_div_pd((__m256d){-4.0, -5.0, +6.0, +7.0}, (__m256d){-1.0, +1.0, -1.0, +1.0}), +4.0, -5.0, -6.0, +7.0)); __m256 test_mm256_div_ps(__m256 A, __m256 B) { // CHECK-LABEL: test_mm256_div_ps // CHECK: fdiv <8 x float> return _mm256_div_ps(A, B); } +TEST_CONSTEXPR(match_m256( _mm256_div_ps((__m256){-4.0f, -5.0f, +6.0f, +7.0f, +7.0f, +6.0f, -5.0f, -4.0f}, (__m256){-1.0f, +1.0f, -1.0f, +1.0f, +1.0f, -1.0f, +1.0f, -1.0f}), +4.0f, -5.0f, -6.0f, +7.0f, +7.0f, -6.0f, -5.0f, +4.0f)); __m256 test_mm256_dp_ps(__m256 A, __m256 B) { // CHECK-LABEL: test_mm256_dp_ps @@ -1258,18 +1292,21 @@ __m256d test_mm256_movedup_pd(__m256d A) { // CHECK: shufflevector <4 x double> %{{.*}}, <4 x double> %{{.*}}, <4 x i32> <i32 0, i32 0, i32 2, i32 2> return _mm256_movedup_pd(A); } +TEST_CONSTEXPR(match_m256d(_mm256_movedup_pd((__m256d){+7.0, -7.0, -42.0, +42.0}), +7.0, +7.0, -42.0, -42.0)); __m256 test_mm256_movehdup_ps(__m256 A) { // CHECK-LABEL: test_mm256_movehdup_ps // CHECK: shufflevector <8 x float> %{{.*}}, <8 x float> %{{.*}}, <8 x i32> <i32 1, i32 1, i32 3, i32 3, i32 5, i32 5, i32 7, i32 7> return _mm256_movehdup_ps(A); } +TEST_CONSTEXPR(match_m256(_mm256_movehdup_ps((__m256){+1.0f,-1.0f,+2.0f,+4.0f,+8.0f,-8.0f,-3.0f,+3.0f}), -1.0f, -1.0f, +4.0f, +4.0f, -8.0f, -8.0f, +3.0f, +3.0f)); __m256 test_mm256_moveldup_ps(__m256 A) { // CHECK-LABEL: test_mm256_moveldup_ps // CHECK: shufflevector <8 x float> %{{.*}}, <8 x float> %{{.*}}, <8 x i32> <i32 0, i32 0, i32 2, i32 2, i32 4, i32 4, i32 6, i32 6> return _mm256_moveldup_ps(A); } +TEST_CONSTEXPR(match_m256(_mm256_moveldup_ps((__m256){+1.0f,-1.0f,+2.0f,+4.0f,+8.0f,-8.0f,-3.0f,+3.0f}), +1.0f, +1.0f, +2.0f, +2.0f, +8.0f, +8.0f, -3.0f, -3.0f)); int test_mm256_movemask_pd(__m256d A) { // CHECK-LABEL: test_mm256_movemask_pd @@ -1288,24 +1325,28 @@ __m256d test_mm256_mul_pd(__m256d A, __m256d B) { // CHECK: fmul <4 x double> return _mm256_mul_pd(A, B); } +TEST_CONSTEXPR(match_m256d( _mm256_mul_pd((__m256d){-4.0, -5.0, +6.0, +7.0}, (__m256d){-4.0, -5.0, +6.0, +7.0}), +16.0, +25.0, +36.0, +49.0)); __m256 test_mm256_mul_ps(__m256 A, __m256 B) { // CHECK-LABEL: test_mm256_mul_ps // CHECK: fmul <8 x float> return _mm256_mul_ps(A, B); } +TEST_CONSTEXPR(match_m256( _mm256_mul_ps((__m256){-4.0f, -5.0f, +6.0f, +7.0f, +7.0f, +6.0f, -5.0f, -4.0f}, (__m256){-4.0f, -5.0f, +6.0f, +7.0f, +7.0f, +6.0f, -5.0f, -4.0f}), +16.0f, +25.0f, +36.0f, +49.0f, +49.0f, +36.0f, +25.0f, +16.0f)); __m256d test_mm256_or_pd(__m256d A, __m256d B) { // CHECK-LABEL: test_mm256_or_pd // CHECK: or <4 x i64> return _mm256_or_pd(A, B); } +TEST_CONSTEXPR(match_m256d(_mm256_or_pd((__m256d){-4.0, -5.0, +6.0, +7.0}, (__m256d){+0.0, -0.0, -0.0, +7.0}), -4.0, -5.0, -6.0, +7.0)); __m256 test_mm256_or_ps(__m256 A, __m256 B) { // CHECK-LABEL: test_mm256_or_ps // CHECK: or <8 x i32> return _mm256_or_ps(A, B); } +TEST_CONSTEXPR(match_m256(_mm256_or_ps((__m256){-4.0f, -5.0f, +6.0f, +7.0f, +7.0f, +6.0f, -5.0f, -4.0f}, (__m256){+0.0f, -0.0f, -0.0f, +7.0f, +7.0f, -0.0f, -0.0f, +0.0f}), -4.0f, -5.0f, -6.0f, +7.0f, +7.0f, -6.0f, -5.0f, -4.0f)); __m128d test_mm_permute_pd(__m128d A) { // CHECK-LABEL: test_mm_permute_pd @@ -1443,6 +1484,7 @@ __m256i test_mm256_set_epi8(char A0, char A1, char A2, char A3, char A4, char A5 // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 31 return _mm256_set_epi8(A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30, A31); } +TEST_CONSTEXPR(match_v32qi(_mm256_set_epi8(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31), 31, 30, 29, 28, 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0)); __m256i test_mm256_set_epi16(short A0, short A1, short A2, short A3, short A4, short A5, short A6, short A7, short A8, short A9, short A10, short A11, short A12, short A13, short A14, short A15) { @@ -1465,6 +1507,7 @@ __m256i test_mm256_set_epi16(short A0, short A1, short A2, short A3, short A4, s // CHECK: insertelement <16 x i16> %{{.*}}, i16 %{{.*}}, i32 15 return _mm256_set_epi16(A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15); } +TEST_CONSTEXPR(match_v16hi(_mm256_set_epi16(0, -1, -2, -3, -4, -5, -6, -7, -8, -9, -10, -11, -12, -13, -14, -15), -15, -14, -13, -12, -11, -10, -9, -8, -7, -6, -5, -4, -3, -2, -1, 0)); __m256i test_mm256_set_epi32(int A0, int A1, int A2, int A3, int A4, int A5, int A6, int A7) { // CHECK-LABEL: test_mm256_set_epi32 @@ -1478,6 +1521,7 @@ __m256i test_mm256_set_epi32(int A0, int A1, int A2, int A3, int A4, int A5, int // CHECK: insertelement <8 x i32> %{{.*}}, i32 %{{.*}}, i32 7 return _mm256_set_epi32(A0, A1, A2, A3, A4, A5, A6, A7); } +TEST_CONSTEXPR(match_v8si(_mm256_set_epi32(1, -3, 5, -7, 9, -11, 13, -15), -15, 13, -11, 9, -7, 5, -3, 1)); __m256i test_mm256_set_epi64x(long long A0, long long A1, long long A2, long long A3) { // CHECK-LABEL: test_mm256_set_epi64x @@ -1487,6 +1531,7 @@ __m256i test_mm256_set_epi64x(long long A0, long long A1, long long A2, long lon // CHECK: insertelement <4 x i64> %{{.*}}, i64 %{{.*}}, i32 3 return _mm256_set_epi64x(A0, A1, A2, A3); } +TEST_CONSTEXPR(match_v4di(_mm256_set_epi64x(100, -1000, 2000, -200), -200, 2000, -1000, 100)); __m256 test_mm256_set_m128(__m128 A, __m128 B) { // CHECK-LABEL: test_mm256_set_m128 @@ -1566,6 +1611,7 @@ __m256i test_mm256_set1_epi8(char A) { // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 31 return _mm256_set1_epi8(A); } +TEST_CONSTEXPR(match_v32qi(_mm256_set1_epi8(99), 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99)); __m256i test_mm256_set1_epi16(short A) { // CHECK-LABEL: test_mm256_set1_epi16 @@ -1587,6 +1633,7 @@ __m256i test_mm256_set1_epi16(short A) { // CHECK: insertelement <16 x i16> %{{.*}}, i16 %{{.*}}, i32 15 return _mm256_set1_epi16(A); } +TEST_CONSTEXPR(match_v16hi(_mm256_set1_epi16(-128), -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128)); __m256i test_mm256_set1_epi32(int A) { // CHECK-LABEL: test_mm256_set1_epi32 @@ -1600,6 +1647,7 @@ __m256i test_mm256_set1_epi32(int A) { // CHECK: insertelement <8 x i32> %{{.*}}, i32 %{{.*}}, i32 7 return _mm256_set1_epi32(A); } +TEST_CONSTEXPR(match_v8si(_mm256_set1_epi32(55), 55, 55, 55, 55, 55, 55, 55, 55)); __m256i test_mm256_set1_epi64x(long long A) { // CHECK-LABEL: test_mm256_set1_epi64x @@ -1609,6 +1657,7 @@ __m256i test_mm256_set1_epi64x(long long A) { // CHECK: insertelement <4 x i64> %{{.*}}, i64 %{{.*}}, i32 3 return _mm256_set1_epi64x(A); } +TEST_CONSTEXPR(match_v4di(_mm256_set1_epi64x(-65535), -65535, -65535, -65535, -65535)); __m256d test_mm256_set1_pd(double A) { // CHECK-LABEL: test_mm256_set1_pd @@ -1673,6 +1722,7 @@ __m256i test_mm256_setr_epi8(char A0, char A1, char A2, char A3, char A4, char A // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 31 return _mm256_setr_epi8(A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30, A31); } +TEST_CONSTEXPR(match_v32qi(_mm256_setr_epi8(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31), 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31)); __m256i test_mm256_setr_epi16(short A0, short A1, short A2, short A3, short A4, short A5, short A6, short A7, short A8, short A9, short A10, short A11, short A12, short A13, short A14, short A15) { @@ -1695,6 +1745,7 @@ __m256i test_mm256_setr_epi16(short A0, short A1, short A2, short A3, short A4, // CHECK: insertelement <16 x i16> %{{.*}}, i16 %{{.*}}, i32 15 return _mm256_setr_epi16(A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15); } +TEST_CONSTEXPR(match_v16hi(_mm256_setr_epi16(0, -1, -2, -3, -4, -5, -6, -7, -8, -9, -10, -11, -12, -13, -14, -15), 0, -1, -2, -3, -4, -5, -6, -7, -8, -9, -10, -11, -12, -13, -14, -15)); __m256i test_mm256_setr_epi32(int A0, int A1, int A2, int A3, int A4, int A5, int A6, int A7) { // CHECK-LABEL: test_mm256_setr_epi32 @@ -1708,6 +1759,7 @@ __m256i test_mm256_setr_epi32(int A0, int A1, int A2, int A3, int A4, int A5, in // CHECK: insertelement <8 x i32> %{{.*}}, i32 %{{.*}}, i32 7 return _mm256_setr_epi32(A0, A1, A2, A3, A4, A5, A6, A7); } +TEST_CONSTEXPR(match_v8si(_mm256_setr_epi32(1, -3, 5, -7, 9, -11, 13, -15), 1, -3, 5, -7, 9, -11, 13, -15)); __m256i test_mm256_setr_epi64x(long long A0, long long A1, long long A2, long long A3) { // CHECK-LABEL: test_mm256_setr_epi64x @@ -1717,6 +1769,7 @@ __m256i test_mm256_setr_epi64x(long long A0, long long A1, long long A2, long lo // CHECK: insertelement <4 x i64> %{{.*}}, i64 %{{.*}}, i32 3 return _mm256_setr_epi64x(A0, A1, A2, A3); } +TEST_CONSTEXPR(match_v4di(_mm256_setr_epi64x(100, -1000, 2000, -200), 100, -1000, 2000, -200)); __m256 test_mm256_setr_m128(__m128 A, __m128 B) { // CHECK-LABEL: test_mm256_setr_m128 @@ -1912,12 +1965,14 @@ __m256d test_mm256_sub_pd(__m256d A, __m256d B) { // CHECK: fsub <4 x double> return _mm256_sub_pd(A, B); } +TEST_CONSTEXPR(match_m256d( _mm256_sub_pd((__m256d){-4.0, -5.0, +6.0, +7.0}, (__m256d){-0.0, +0.0, +2.0, -1.0}), -4.0, -5.0, 4.0, 8.0)); __m256 test_mm256_sub_ps(__m256 A, __m256 B) { // CHECK-LABEL: test_mm256_sub_ps // CHECK: fsub <8 x float> return _mm256_sub_ps(A, B); } +TEST_CONSTEXPR(match_m256( _mm256_sub_ps((__m256){-4.0f, -5.0f, +6.0f, +7.0f, +7.0f, +6.0f, -5.0f, -4.0f}, (__m256){-0.0f, +0.0f, +2.0f, -1.0f, -1.0f, +2.0f, +0.0f, -0.0f}), -4.0f, -5.0f, 4.0f, 8.0f, 8.0f, 4.0f, -5.0f, -4.0f)); int test_mm_testc_pd(__m128d A, __m128d B) { // CHECK-LABEL: test_mm_testc_pd @@ -2041,36 +2096,42 @@ __m256d test_mm256_unpackhi_pd(__m256d A, __m256d B) { // CHECK: shufflevector <4 x double> %{{.*}}, <4 x double> %{{.*}}, <4 x i32> <i32 1, i32 5, i32 3, i32 7> return _mm256_unpackhi_pd(A, B); } +TEST_CONSTEXPR(match_m256d(_mm256_unpackhi_pd((__m256d){+1.0, +2.0, +3.0, +4.0}, (__m256d){+5.0, +6.0, +7.0, +8.0}), +2.0, +6.0, +4.0, +8.0)); __m256 test_mm256_unpackhi_ps(__m256 A, __m256 B) { // CHECK-LABEL: test_mm256_unpackhi_ps // CHECK: shufflevector <8 x float> %{{.*}}, <8 x float> %{{.*}}, <8 x i32> <i32 2, i32 10, i32 3, i32 11, i32 6, i32 14, i32 7, i32 15> return _mm256_unpackhi_ps(A, B); } +TEST_CONSTEXPR(match_m256(_mm256_unpackhi_ps((__m256){+0.0f, +1.0f, +2.0f, +3.0f, +4.0f, +5.0f, +6.0f, +7.0f}, (__m256){+10.0f, +11.0f, +12.0f, +13.0f, +14.0f, +15.0f, +16.0f, +17.0f}), +2.0f, +12.0f, +3.0f, +13.0f, +6.0f, +16.0f, +7.0f, +17.0f)); __m256d test_mm256_unpacklo_pd(__m256d A, __m256d B) { // CHECK-LABEL: test_mm256_unpacklo_pd // CHECK: shufflevector <4 x double> %{{.*}}, <4 x double> %{{.*}}, <4 x i32> <i32 0, i32 4, i32 2, i32 6> return _mm256_unpacklo_pd(A, B); } +TEST_CONSTEXPR(match_m256d(_mm256_unpacklo_pd((__m256d){+1.0, +2.0, +3.0, +4.0}, (__m256d){+5.0, +6.0, +7.0, +8.0}), +1.0, +5.0, +3.0, +7.0)); __m256 test_mm256_unpacklo_ps(__m256 A, __m256 B) { // CHECK-LABEL: test_mm256_unpacklo_ps // CHECK: shufflevector <8 x float> %{{.*}}, <8 x float> %{{.*}}, <8 x i32> <i32 0, i32 8, i32 1, i32 9, i32 4, i32 12, i32 5, i32 13> return _mm256_unpacklo_ps(A, B); } +TEST_CONSTEXPR(match_m256(_mm256_unpacklo_ps((__m256){+0.0f, +1.0f, +2.0f, +3.0f, +4.0f, +5.0f, +6.0f, +7.0f}, (__m256){+10.0f, +11.0f, +12.0f, +13.0f, +14.0f, +15.0f, +16.0f, +17.0f}), +0.0f, +10.0f, +1.0f, +11.0f, +4.0f, +14.0f, +5.0f, +15.0f)); __m256d test_mm256_xor_pd(__m256d A, __m256d B) { // CHECK-LABEL: test_mm256_xor_pd // CHECK: xor <4 x i64> return _mm256_xor_pd(A, B); } +TEST_CONSTEXPR(match_m256d(_mm256_xor_pd((__m256d){-4.0, -5.0, +6.0, +7.0}, (__m256d){+0.0, -0.0, -0.0, +7.0}), -4.0, +5.0, -6.0, +0.0)); __m256 test_mm256_xor_ps(__m256 A, __m256 B) { // CHECK-LABEL: test_mm256_xor_ps // CHECK: xor <8 x i32> return _mm256_xor_ps(A, B); } +TEST_CONSTEXPR(match_m256(_mm256_xor_ps((__m256){-4.0f, -5.0f, +6.0f, +7.0f, +7.0f, +6.0f, -5.0f, -4.0f}, (__m256){+0.0f, -0.0f, -0.0f, +7.0f, +7.0f, -0.0f, -0.0f, +0.0f}), -4.0f, +5.0f, -6.0f, +0.0f, +0.0f, -6.0f, +5.0f, -4.0f)); void test_mm256_zeroall(void) { // CHECK-LABEL: test_mm256_zeroall @@ -2090,6 +2151,7 @@ __m256d test_mm256_zextpd128_pd256(__m128d A) { // CHECK: shufflevector <2 x double> %{{.*}}, <2 x double> %{{.*}}, <4 x i32> <i32 0, i32 1, i32 2, i32 3> return _mm256_zextpd128_pd256(A); } +TEST_CONSTEXPR(match_m256d(_mm256_zextpd128_pd256((__m128d){-4.0, -5.0}), -4.0, -5.0, +0.0, +0.0)); __m256 test_mm256_zextps128_ps256(__m128 A) { // CHECK-LABEL: test_mm256_zextps128_ps256 @@ -2097,6 +2159,7 @@ __m256 test_mm256_zextps128_ps256(__m128 A) { // CHECK: shufflevector <4 x float> %{{.*}}, <4 x float> %{{.*}}, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7> return _mm256_zextps128_ps256(A); } +TEST_CONSTEXPR(match_m256(_mm256_zextps128_ps256((__m128){1.0f, 2.0f, 3.0f, 4.0f}), 1.0f, 2.0f, 3.0f, 4.0f, 0.0f, 0.0f, 0.0f, 0.0f)); __m256i test_mm256_zextsi128_si256(__m128i A) { // CHECK-LABEL: test_mm256_zextsi128_si256 @@ -2104,3 +2167,4 @@ __m256i test_mm256_zextsi128_si256(__m128i A) { // CHECK: shufflevector <2 x i64> %{{.*}}, <2 x i64> %{{.*}}, <4 x i32> <i32 0, i32 1, i32 2, i32 3> return _mm256_zextsi128_si256(A); } +TEST_CONSTEXPR(match_m256i(_mm256_zextsi128_si256((__m128i){1, 2}), 1, 2, 0, 0)); diff --git a/clang/test/CodeGen/X86/avx2-builtins.c b/clang/test/CodeGen/X86/avx2-builtins.c index 27da56f..c9b6f69 100644 --- a/clang/test/CodeGen/X86/avx2-builtins.c +++ b/clang/test/CodeGen/X86/avx2-builtins.c @@ -7,8 +7,17 @@ // RUN: %clang_cc1 -x c++ -flax-vector-conversions=none -ffreestanding %s -triple=i386-apple-darwin -target-feature +avx2 -emit-llvm -o - -Wall -Werror | FileCheck %s --check-prefixes=CHECK,X86 // RUN: %clang_cc1 -x c++ -flax-vector-conversions=none -ffreestanding %s -triple=i386-apple-darwin -target-feature +avx2 -fno-signed-char -emit-llvm -o - -Wall -Werror | FileCheck %s --check-prefixes=CHECK,X86 +// RUN: %clang_cc1 -x c -flax-vector-conversions=none -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +avx2 -emit-llvm -o - -Wall -Werror -fexperimental-new-constant-interpreter | FileCheck %s --check-prefixes=CHECK,X64 +// RUN: %clang_cc1 -x c -flax-vector-conversions=none -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +avx2 -fno-signed-char -emit-llvm -o - -Wall -Werror -fexperimental-new-constant-interpreter | FileCheck %s --check-prefixes=CHECK,X64 +// RUN: %clang_cc1 -x c -flax-vector-conversions=none -ffreestanding %s -triple=i386-apple-darwin -target-feature +avx2 -emit-llvm -o - -Wall -Werror -fexperimental-new-constant-interpreter | FileCheck %s --check-prefixes=CHECK,X86 +// RUN: %clang_cc1 -x c -flax-vector-conversions=none -ffreestanding %s -triple=i386-apple-darwin -target-feature +avx2 -fno-signed-char -emit-llvm -o - -Wall -Werror -fexperimental-new-constant-interpreter | FileCheck %s --check-prefixes=CHECK,X86 +// RUN: %clang_cc1 -x c++ -flax-vector-conversions=none -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +avx2 -emit-llvm -o - -Wall -Werror -fexperimental-new-constant-interpreter | FileCheck %s --check-prefixes=CHECK,X64 +// RUN: %clang_cc1 -x c++ -flax-vector-conversions=none -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +avx2 -fno-signed-char -emit-llvm -o - -Wall -Werror -fexperimental-new-constant-interpreter | FileCheck %s --check-prefixes=CHECK,X64 +// RUN: %clang_cc1 -x c++ -flax-vector-conversions=none -ffreestanding %s -triple=i386-apple-darwin -target-feature +avx2 -emit-llvm -o - -Wall -Werror -fexperimental-new-constant-interpreter | FileCheck %s --check-prefixes=CHECK,X86 +// RUN: %clang_cc1 -x c++ -flax-vector-conversions=none -ffreestanding %s -triple=i386-apple-darwin -target-feature +avx2 -fno-signed-char -emit-llvm -o - -Wall -Werror -fexperimental-new-constant-interpreter | FileCheck %s --check-prefixes=CHECK,X86 #include <immintrin.h> +#include "builtin_test_helpers.h" // NOTE: This should match the tests in llvm/test/CodeGen/X86/avx2-intrinsics-fast-isel.ll @@ -17,18 +26,21 @@ __m256i test_mm256_abs_epi8(__m256i a) { // CHECK: [[ABS:%.*]] = call <32 x i8> @llvm.abs.v32i8(<32 x i8> %{{.*}}, i1 false) return _mm256_abs_epi8(a); } +TEST_CONSTEXPR(match_v32qi(_mm256_abs_epi8((__m256i)(__v32qs){0, +1, +2, +3, +4, +5, +6, +7, +8, +9, +10, +11, +12, +13, +14, +15, +100, +50, -100, +20, +80, -50, +120, -20, -100, -50, +100, -20, -80, +50, -120, +20}), 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 100, 50, 100, 20, 80, 50, 120, 20, 100, 50, 100, 20, 80, 50, 120, 20)); __m256i test_mm256_abs_epi16(__m256i a) { // CHECK-LABEL: test_mm256_abs_epi16 // CHECK: [[ABS:%.*]] = call <16 x i16> @llvm.abs.v16i16(<16 x i16> %{{.*}}, i1 false) return _mm256_abs_epi16(a); } +TEST_CONSTEXPR(match_v16hi(_mm256_abs_epi16((__m256i)(__v16hi){+5, -3, -32767, +32767, -10, +8, 0, -256, +256, -128, +3, +9, +15, +33, +63, +129}), 5, 3, 32767, 32767, 10, 8, 0, 256, 256, 128, 3, 9, 15, 33, 63, 129)); __m256i test_mm256_abs_epi32(__m256i a) { // CHECK-LABEL: test_mm256_abs_epi32 // CHECK: [[ABS:%.*]] = call <8 x i32> @llvm.abs.v8i32(<8 x i32> %{{.*}}, i1 false) return _mm256_abs_epi32(a); } +TEST_CONSTEXPR(match_v8si(_mm256_abs_epi32((__m256i)(__v8si){+5, -3, -2147483647, +2147483647, 0, -256, +256, +1025}), 5, 3, 2147483647, 2147483647, 0, 256, 256, 1025)); __m256i test_mm256_add_epi8(__m256i a, __m256i b) { // CHECK-LABEL: test_mm256_add_epi8 @@ -59,12 +71,14 @@ __m256i test_mm256_adds_epi8(__m256i a, __m256i b) { // CHECK: call <32 x i8> @llvm.sadd.sat.v32i8(<32 x i8> %{{.*}}, <32 x i8> %{{.*}}) return _mm256_adds_epi8(a, b); } +TEST_CONSTEXPR(match_v32qi(_mm256_adds_epi8((__m256i)(__v32qs){0, +1, +2, +3, +4, +5, +6, +7, +8, +9, +10, +11, +12, +13, +14, +15, +100, +50, -100, +20, +80, -50, +120, -20, -100, -50, +100, -20, -80, +50, -120, +20}, (__m256i)(__v32qs){0, +1, +2, +3, +4, +5, +6, +7, +8, +9, +10, +11, +12, +13, +14, +15, +50, +80, -50, +110, +60, -30, +20, -10, +50, +80, -50, +110, +60, -30, +20, -10}), 0, +2, +4, +6, +8, +10, +12, +14, +16, +18, +20, +22, +24, +26, +28, +30, +127, +127, -128, +127, +127, -80, +127, -30, -50, +30, +50, +90, -20, +20, -100, +10)); __m256i test_mm256_adds_epi16(__m256i a, __m256i b) { // CHECK-LABEL: test_mm256_adds_epi16 // CHECK: call <16 x i16> @llvm.sadd.sat.v16i16(<16 x i16> %{{.*}}, <16 x i16> %{{.*}}) return _mm256_adds_epi16(a, b); } +TEST_CONSTEXPR(match_v16hi(_mm256_adds_epi16((__m256i)(__v16hi){0, -1, -2, -3, -4, -5, -6, -7, -8, -9, -10, -11, +32000, -32000, +32000, -32000}, (__m256i)(__v16hi){0, -1, -2, -3, -4, -5, -6, -7, -8, -9, -10, -11, +800, -800, -800, +800}), 0, -2, -4, -6, -8, -10, -12, -14, -16, -18, -20, -22, +32767, -32768, +31200, -31200)); __m256i test_mm256_adds_epu8(__m256i a, __m256i b) { // CHECK-LABEL: test_mm256_adds_epu8 @@ -72,6 +86,7 @@ __m256i test_mm256_adds_epu8(__m256i a, __m256i b) { // CHECK: call <32 x i8> @llvm.uadd.sat.v32i8(<32 x i8> %{{.*}}, <32 x i8> %{{.*}}) return _mm256_adds_epu8(a, b); } +TEST_CONSTEXPR(match_v32qu(_mm256_adds_epu8((__m256i)(__v32qu){0, 0, 0, 0, +64, +64, +64, +64, +64, +64, +127, +127, +127, +127, +127, +127, +128, +128, +128, +128, +128, +128, +192, +192, +192, +192, +192, +192, +255, +255, +255, +255}, (__m256i)(__v32qu){0, +127, +128, +255, 0, +64, +127, +128, +192, +255, 0, +64, +127, +128, +192, +255, 0, +64, +127, +128, +192, +255, 0, +64, +127, +128, +192, +255, 0, +127, +128, +255}), 0, +127, +128, +255, +64, +128, +191, +192, +255, +255, +127, +191, +254, +255, +255, +255, +128, +192, +255, +255, +255, +255, +192, +255, +255, +255, +255, +255, +255, +255, +255, +255)); __m256i test_mm256_adds_epu16(__m256i a, __m256i b) { // CHECK-LABEL: test_mm256_adds_epu16 @@ -79,6 +94,7 @@ __m256i test_mm256_adds_epu16(__m256i a, __m256i b) { // CHECK: call <16 x i16> @llvm.uadd.sat.v16i16(<16 x i16> %{{.*}}, <16 x i16> %{{.*}}) return _mm256_adds_epu16(a, b); } +TEST_CONSTEXPR(match_v16hu(_mm256_adds_epu16((__m256i)(__v16hu){0, 0, 0, 0, +32767, +32767, +32767, +32767, +32768, +32768, +32768, +32768, +65535, +65535, +65535, +65535}, (__m256i)(__v16hu){0, +32767, +32768, +65535, 0, +32767, +32768, +65535, 0, +32767, +32768, +65535, 0, +32767, +32768, +65535}), 0, +32767, +32768, +65535, +32767, +65534, +65535, +65535, +32768, +65535, +65535, +65535, +65535, +65535, +65535, +65535)); __m256i test_mm256_alignr_epi8(__m256i a, __m256i b) { // CHECK-LABEL: test_mm256_alignr_epi8 @@ -97,6 +113,7 @@ __m256i test_mm256_and_si256(__m256i a, __m256i b) { // CHECK: and <4 x i64> return _mm256_and_si256(a, b); } +TEST_CONSTEXPR(match_v4di(_mm256_and_si256((__m256i)(__v4di){0, -1, 0, -1}, (__m256i)(__v4di){0, 0, -1, -1}), 0, 0, 0, -1)); __m256i test_mm256_andnot_si256(__m256i a, __m256i b) { // CHECK-LABEL: test_mm256_andnot_si256 @@ -104,6 +121,7 @@ __m256i test_mm256_andnot_si256(__m256i a, __m256i b) { // CHECK: and <4 x i64> return _mm256_andnot_si256(a, b); } +TEST_CONSTEXPR(match_v4di(_mm256_andnot_si256((__m256i)(__v4di){0, -1, 0, -1}, (__m256i)(__v4di){0, 0, -1, -1}), 0, 0, -1, 0)); __m256i test_mm256_avg_epu8(__m256i a, __m256i b) { // CHECK-LABEL: test_mm256_avg_epu8 @@ -153,6 +171,7 @@ __m128i test_mm_broadcastb_epi8(__m128i a) { // CHECK: shufflevector <16 x i8> %{{.*}}, <16 x i8> %{{.*}}, <16 x i32> zeroinitializer return _mm_broadcastb_epi8(a); } +TEST_CONSTEXPR(match_v16qi(_mm_broadcastb_epi8((__m128i)(__v16qi){42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}), 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42)); __m256i test_mm256_broadcastb_epi8(__m128i a) { // CHECK-LABEL: test_mm256_broadcastb_epi8 @@ -160,6 +179,7 @@ __m256i test_mm256_broadcastb_epi8(__m128i a) { // CHECK: shufflevector <16 x i8> %{{.*}}, <16 x i8> %{{.*}}, <32 x i32> zeroinitializer return _mm256_broadcastb_epi8(a); } +TEST_CONSTEXPR(match_v32qi(_mm256_broadcastb_epi8((__m128i)(__v16qi){42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}), 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42)); __m128i test_mm_broadcastd_epi32(__m128i a) { // CHECK-LABEL: test_mm_broadcastd_epi32 @@ -167,6 +187,7 @@ __m128i test_mm_broadcastd_epi32(__m128i a) { // CHECK: shufflevector <4 x i32> %{{.*}}, <4 x i32> %{{.*}}, <4 x i32> zeroinitializer return _mm_broadcastd_epi32(a); } +TEST_CONSTEXPR(match_v4si(_mm_broadcastd_epi32((__m128i)(__v4si){-42, 0, 0, 0}), -42, -42, -42, -42)); __m256i test_mm256_broadcastd_epi32(__m128i a) { // CHECK-LABEL: test_mm256_broadcastd_epi32 @@ -174,6 +195,7 @@ __m256i test_mm256_broadcastd_epi32(__m128i a) { // CHECK: shufflevector <4 x i32> %{{.*}}, <4 x i32> %{{.*}}, <8 x i32> zeroinitializer return _mm256_broadcastd_epi32(a); } +TEST_CONSTEXPR(match_v8si(_mm256_broadcastd_epi32((__m128i)(__v4si){-42, 0, 0, 0}), -42, -42, -42, -42, -42, -42, -42, -42)); __m128i test_mm_broadcastq_epi64(__m128i a) { // CHECK-LABEL: test_mm_broadcastq_epi64 @@ -181,6 +203,7 @@ __m128i test_mm_broadcastq_epi64(__m128i a) { // CHECK: shufflevector <2 x i64> %{{.*}}, <2 x i64> %{{.*}}, <2 x i32> zeroinitializer return _mm_broadcastq_epi64(a); } +TEST_CONSTEXPR(match_v2di(_mm_broadcastq_epi64((__m128i)(__v2di){-42, 0}), -42, -42)); __m256i test_mm256_broadcastq_epi64(__m128i a) { // CHECK-LABEL: test_mm256_broadcastq_epi64 @@ -188,12 +211,14 @@ __m256i test_mm256_broadcastq_epi64(__m128i a) { // CHECK: shufflevector <2 x i64> %{{.*}}, <2 x i64> %{{.*}}, <4 x i32> zeroinitializer return _mm256_broadcastq_epi64(a); } +TEST_CONSTEXPR(match_v4di(_mm256_broadcastq_epi64((__m128i)(__v2di){-42, 0}), -42, -42, -42, -42)); __m128d test_mm_broadcastsd_pd(__m128d a) { // CHECK-LABEL: test_mm_broadcastsd_pd // CHECK: shufflevector <2 x double> %{{.*}}, <2 x double> %{{.*}}, <2 x i32> zeroinitializer return _mm_broadcastsd_pd(a); } +TEST_CONSTEXPR(match_m128d(_mm_broadcastsd_pd((__m128d){+7.0, -7.0}), +7.0, +7.0)); __m256d test_mm256_broadcastsd_pd(__m128d a) { // CHECK-LABEL: test_mm256_broadcastsd_pd @@ -201,12 +226,14 @@ __m256d test_mm256_broadcastsd_pd(__m128d a) { // CHECK: shufflevector <2 x double> %{{.*}}, <2 x double> %{{.*}}, <4 x i32> zeroinitializer return _mm256_broadcastsd_pd(a); } +TEST_CONSTEXPR(match_m256d(_mm256_broadcastsd_pd((__m128d){+7.0, -7.0}), +7.0, +7.0, +7.0, +7.0)); __m256i test_mm256_broadcastsi128_si256(__m128i a) { // CHECK-LABEL: test_mm256_broadcastsi128_si256 // CHECK: shufflevector <2 x i64> %{{.*}}, <2 x i64> %{{.*}}, <4 x i32> <i32 0, i32 1, i32 0, i32 1> return _mm256_broadcastsi128_si256(a); } +TEST_CONSTEXPR(match_m256i(_mm256_broadcastsi128_si256((__m128i)(__v2di){3, 45}), 3, 45, 3, 45)); __m256i test_mm_broadcastsi128_si256(__m128i a) { // CHECK-LABEL: test_mm_broadcastsi128_si256 @@ -220,6 +247,7 @@ __m128 test_mm_broadcastss_ps(__m128 a) { // CHECK: shufflevector <4 x float> %{{.*}}, <4 x float> %{{.*}}, <4 x i32> zeroinitializer return _mm_broadcastss_ps(a); } +TEST_CONSTEXPR(match_m128(_mm_broadcastss_ps((__m128){-4.0f, +5.0f, +6.0f, +7.0f}), -4.0f, -4.0f, -4.0f, -4.0f)); __m256 test_mm256_broadcastss_ps(__m128 a) { // CHECK-LABEL: test_mm256_broadcastss_ps @@ -227,6 +255,7 @@ __m256 test_mm256_broadcastss_ps(__m128 a) { // CHECK: shufflevector <4 x float> %{{.*}}, <4 x float> %{{.*}}, <8 x i32> zeroinitializer return _mm256_broadcastss_ps(a); } +TEST_CONSTEXPR(match_m256(_mm256_broadcastss_ps((__m128){-4.0f, +5.0f, +6.0f, +7.0f}), -4.0f, -4.0f, -4.0f, -4.0f, -4.0f, -4.0f, -4.0f, -4.0f)); __m128i test_mm_broadcastw_epi16(__m128i a) { // CHECK-LABEL: test_mm_broadcastw_epi16 @@ -234,6 +263,7 @@ __m128i test_mm_broadcastw_epi16(__m128i a) { // CHECK: shufflevector <8 x i16> %{{.*}}, <8 x i16> %{{.*}}, <8 x i32> zeroinitializer return _mm_broadcastw_epi16(a); } +TEST_CONSTEXPR(match_v8hi(_mm_broadcastw_epi16((__m128i)(__v8hi){42, 0, 0, 0, 0, 0, 0, 0}), 42, 42, 42, 42, 42, 42, 42, 42)); __m256i test_mm256_broadcastw_epi16(__m128i a) { // CHECK-LABEL: test_mm256_broadcastw_epi16 @@ -241,6 +271,7 @@ __m256i test_mm256_broadcastw_epi16(__m128i a) { // CHECK: shufflevector <8 x i16> %{{.*}}, <8 x i16> %{{.*}}, <16 x i32> zeroinitializer return _mm256_broadcastw_epi16(a); } +TEST_CONSTEXPR(match_v16hi(_mm256_broadcastw_epi16((__m128i)(__v8hi){42, 0, 0, 0, 0, 0, 0, 0}), 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42)); __m256i test_mm256_bslli_epi128(__m256i a) { // CHECK-LABEL: test_mm256_bslli_epi128 @@ -259,54 +290,69 @@ __m256i test_mm256_cmpeq_epi8(__m256i a, __m256i b) { // CHECK: icmp eq <32 x i8> return _mm256_cmpeq_epi8(a, b); } +TEST_CONSTEXPR(match_v16qi(_mm_cmpeq_epi8( + (__m128i)(__v16qs){1,-2,3,-4,-5,6,-7,8,-9,10,-11,12,-13,14,-15,16}, + (__m128i)(__v16qs){10,-2,6,-4,-5,12,-14,8,-9,20,-22,12,-26,14,-30,16}), + 0,-1,0,-1,-1,0,0,-1,-1,0,0,-1,0,-1,0,-1)); __m256i test_mm256_cmpeq_epi16(__m256i a, __m256i b) { // CHECK-LABEL: test_mm256_cmpeq_epi16 // CHECK: icmp eq <16 x i16> return _mm256_cmpeq_epi16(a, b); } +TEST_CONSTEXPR(match_v16hi(_mm256_cmpeq_epi16((__m256i)(__v16hi){+1, -2, +3, -4, +5, -6, +7, -8, +9, -10, +11, -12, +13, -14, +15, -16}, (__m256i)(__v16hi){-10, -2, +6, -4, +5, -12, +14, -8, +9, -20, +22, -12, +26, -14, +30, -16}), 0, -1, 0, -1, -1, 0, 0, -1, -1, 0, 0, -1, 0, -1, 0, -1)); __m256i test_mm256_cmpeq_epi32(__m256i a, __m256i b) { // CHECK-LABEL: test_mm256_cmpeq_epi32 // CHECK: icmp eq <8 x i32> return _mm256_cmpeq_epi32(a, b); } +TEST_CONSTEXPR(match_v8si(_mm256_cmpeq_epi32((__m256i)(__v8si){+1, -2, +3, -4, +5, -6, +7, -8}, (__m256i)(__v8si){-10, -2, +6, -4, +5, -12, +14, -8}), 0, -1, 0, -1, -1, 0, 0, -1)); __m256i test_mm256_cmpeq_epi64(__m256i a, __m256i b) { // CHECK-LABEL: test_mm256_cmpeq_epi64 // CHECK: icmp eq <4 x i64> return _mm256_cmpeq_epi64(a, b); } +TEST_CONSTEXPR(match_v4di(_mm256_cmpeq_epi64((__m256i)(__v4di){+1, -2, +3, -4}, (__m256i)(__v4di){-10, -2, +6, -4}), 0, -1, 0, -1)); __m256i test_mm256_cmpgt_epi8(__m256i a, __m256i b) { // CHECK-LABEL: test_mm256_cmpgt_epi8 // CHECK: icmp sgt <32 x i8> return _mm256_cmpgt_epi8(a, b); } +TEST_CONSTEXPR(match_v32qi(_mm256_cmpgt_epi8( + (__m256i)(__v32qs){1, -2, 3, -4, 5, -6, 7, -8, 9, -10, 11, -12, 13, -14, 15, -16, -1, 2, -3, 4, -5, 6, -7, 8, -9, 10, -11, 12, -13, 14, -15, 16}, + (__m256i)(__v32qs){10, -2, 6, -5, 30, -7, 8, -1, 20, -3, 12, -8, 25, -10, 9, -2, -10, 2, -6, 5, -30, 7, -8, 1, -20, 3, -12, 8, -25, 10, -9, 2}), + 0, 0, 0, -1, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, -1, -1, -1, -1, -1, -1, -1, 0, -1)); __m256i test_mm256_cmpgt_epi16(__m256i a, __m256i b) { // CHECK-LABEL: test_mm256_cmpgt_epi16 // CHECK: icmp sgt <16 x i16> return _mm256_cmpgt_epi16(a, b); } +TEST_CONSTEXPR(match_v16hi(_mm256_cmpgt_epi16((__m256i)(__v16hi){+1, -2, +3, -4, +5, -6, +7, -8, +1, -2, +3, -4, +5, -6, +7, -8}, (__m256i)(__v16hi){-10, -2, +6, -5, +30, -7, +8, -1, -10, -2, +6, -5, +30, -7, +8, -1}), -1, 0, 0, -1, 0, -1, 0, 0, -1, 0, 0, -1, 0, -1, 0, 0)); __m256i test_mm256_cmpgt_epi32(__m256i a, __m256i b) { // CHECK-LABEL: test_mm256_cmpgt_epi32 // CHECK: icmp sgt <8 x i32> return _mm256_cmpgt_epi32(a, b); } +TEST_CONSTEXPR(match_v8si(_mm256_cmpgt_epi32((__m256i)(__v8si){+1, -2, +3, -4, +5, -6, +7, -8}, (__m256i)(__v8si){-10, -2, +6, -5, +30, -7, +8, -1}), -1, 0, 0, -1, 0, -1, 0, 0)); __m256i test_mm256_cmpgt_epi64(__m256i a, __m256i b) { // CHECK-LABEL: test_mm256_cmpgt_epi64 // CHECK: icmp sgt <4 x i64> return _mm256_cmpgt_epi64(a, b); } +TEST_CONSTEXPR(match_v4di(_mm256_cmpgt_epi64((__m256i)(__v4di){+1, -2, +3, -4}, (__m256i)(__v4di){-10, -2, +6, -5}), -1, 0, 0, -1)); __m256i test_mm256_cvtepi8_epi16(__m128i a) { // CHECK-LABEL: test_mm256_cvtepi8_epi16 // CHECK: sext <16 x i8> %{{.*}} to <16 x i16> return _mm256_cvtepi8_epi16(a); } +TEST_CONSTEXPR(match_v16hi(_mm256_cvtepi8_epi16(_mm_setr_epi8(-3, 2, -1, 0, 1, -2, 3, -4, 5, -6, 7, -8, 9, -10, 11, -12)), -3, 2, -1, 0, 1, -2, 3, -4, 5, -6, 7, -8, 9, -10, 11, -12)); __m256i test_mm256_cvtepi8_epi32(__m128i a) { // CHECK-LABEL: test_mm256_cvtepi8_epi32 @@ -314,6 +360,7 @@ __m256i test_mm256_cvtepi8_epi32(__m128i a) { // CHECK: sext <8 x i8> %{{.*}} to <8 x i32> return _mm256_cvtepi8_epi32(a); } +TEST_CONSTEXPR(match_v8si(_mm256_cvtepi8_epi32(_mm_setr_epi8(-3, 2, -1, 0, 1, -2, 3, -4, 5, -6, 7, -8, 9, -10, 11, -12)), -3, 2, -1, 0, 1, -2, 3, -4)); __m256i test_mm256_cvtepi8_epi64(__m128i a) { // CHECK-LABEL: test_mm256_cvtepi8_epi64 @@ -321,12 +368,14 @@ __m256i test_mm256_cvtepi8_epi64(__m128i a) { // CHECK: sext <4 x i8> %{{.*}} to <4 x i64> return _mm256_cvtepi8_epi64(a); } +TEST_CONSTEXPR(match_v4di(_mm256_cvtepi8_epi64(_mm_setr_epi8(-3, 2, -1, 0, 1, -2, 3, -4, 5, -6, 7, -8, 9, -10, 11, -12)), -3, 2, -1, 0)); __m256i test_mm256_cvtepi16_epi32(__m128i a) { // CHECK-LABEL: test_mm256_cvtepi16_epi32 // CHECK: sext <8 x i16> %{{.*}} to <8 x i32> return _mm256_cvtepi16_epi32(a); } +TEST_CONSTEXPR(match_v8si(_mm256_cvtepi16_epi32(_mm_setr_epi16(-300, 2, -1, 0, 1, -2, 3, -4)), -300, 2, -1, 0, 1, -2, 3, -4)); __m256i test_mm256_cvtepi16_epi64(__m128i a) { // CHECK-LABEL: test_mm256_cvtepi16_epi64 @@ -334,18 +383,21 @@ __m256i test_mm256_cvtepi16_epi64(__m128i a) { // CHECK: sext <4 x i16> %{{.*}} to <4 x i64> return _mm256_cvtepi16_epi64(a); } +TEST_CONSTEXPR(match_v4di(_mm256_cvtepi16_epi64(_mm_setr_epi16(-300, 2, -1, 0, 1, -2, 3, -4)), -300, 2, -1, 0)); __m256i test_mm256_cvtepi32_epi64(__m128i a) { // CHECK-LABEL: test_mm256_cvtepi32_epi64 // CHECK: sext <4 x i32> %{{.*}} to <4 x i64> return _mm256_cvtepi32_epi64(a); } +TEST_CONSTEXPR(match_v4di(_mm256_cvtepi32_epi64(_mm_setr_epi32(-70000, 2, -1, 0)), -70000, 2, -1, 0)); __m256i test_mm256_cvtepu8_epi16(__m128i a) { // CHECK-LABEL: test_mm256_cvtepu8_epi16 // CHECK: zext <16 x i8> %{{.*}} to <16 x i16> return _mm256_cvtepu8_epi16(a); } +TEST_CONSTEXPR(match_v16hi(_mm256_cvtepu8_epi16(_mm_setr_epi8(-3, 2, -1, 0, 1, -2, 3, -4, 5, -6, 7, -8, 9, -10, 11, -12)), 253, 2, 255, 0, 1, 254, 3, 252, 5, 250, 7, 248, 9, 246, 11, 244)); __m256i test_mm256_cvtepu8_epi32(__m128i a) { // CHECK-LABEL: test_mm256_cvtepu8_epi32 @@ -353,6 +405,7 @@ __m256i test_mm256_cvtepu8_epi32(__m128i a) { // CHECK: zext <8 x i8> %{{.*}} to <8 x i32> return _mm256_cvtepu8_epi32(a); } +TEST_CONSTEXPR(match_v8si(_mm256_cvtepu8_epi32(_mm_setr_epi8(-3, 2, -1, 0, 1, -2, 3, -4, 5, -6, 7, -8, 9, -10, 11, -12)), 253, 2, 255, 0, 1, 254, 3, 252)); __m256i test_mm256_cvtepu8_epi64(__m128i a) { // CHECK-LABEL: test_mm256_cvtepu8_epi64 @@ -360,12 +413,14 @@ __m256i test_mm256_cvtepu8_epi64(__m128i a) { // CHECK: zext <4 x i8> %{{.*}} to <4 x i64> return _mm256_cvtepu8_epi64(a); } +TEST_CONSTEXPR(match_v4di(_mm256_cvtepu8_epi64(_mm_setr_epi8(-3, 2, -1, 0, 1, -2, 3, -4, 5, -6, 7, -8, 9, -10, 11, -12)), 253, 2, 255, 0)); __m256i test_mm256_cvtepu16_epi32(__m128i a) { // CHECK-LABEL: test_mm256_cvtepu16_epi32 // CHECK: zext <8 x i16> {{.*}} to <8 x i32> return _mm256_cvtepu16_epi32(a); } +TEST_CONSTEXPR(match_v8si(_mm256_cvtepu16_epi32(_mm_setr_epi16(-300, 2, -1, 0, 1, -2, 3, -4)), 65236, 2, 65535, 0, 1, 65534, 3, 65532)); __m256i test_mm256_cvtepu16_epi64(__m128i a) { // CHECK-LABEL: test_mm256_cvtepu16_epi64 @@ -373,12 +428,14 @@ __m256i test_mm256_cvtepu16_epi64(__m128i a) { // CHECK: zext <4 x i16> %{{.*}} to <4 x i64> return _mm256_cvtepu16_epi64(a); } +TEST_CONSTEXPR(match_v4di(_mm256_cvtepu16_epi64(_mm_setr_epi16(-300, 2, -1, 0, 1, -2, 3, -4)), 65236, 2, 65535, 0)); __m256i test_mm256_cvtepu32_epi64(__m128i a) { // CHECK-LABEL: test_mm256_cvtepu32_epi64 // CHECK: zext <4 x i32> %{{.*}} to <4 x i64> return _mm256_cvtepu32_epi64(a); } +TEST_CONSTEXPR(match_v4di(_mm256_cvtepu32_epi64(_mm_setr_epi32(-70000, 2, -1, 0)), 4294897296, 2, 4294967295, 0)); __m128i test0_mm256_extracti128_si256_0(__m256i a) { // CHECK-LABEL: test0_mm256_extracti128_si256 @@ -876,6 +933,7 @@ __m256i test_mm256_mul_epi32(__m256i a, __m256i b) { // CHECK: mul <4 x i64> %{{.*}}, %{{.*}} return _mm256_mul_epi32(a, b); } +TEST_CONSTEXPR(match_m256i(_mm256_mul_epi32((__m256i)(__v8si){+1, -2, +3, -4, +5, -6, +7, -8}, (__m256i)(__v8si){-16, -14, +12, +10, -8, +6, -4, +2}), -16, 36, -40, -28)); __m256i test_mm256_mul_epu32(__m256i a, __m256i b) { // CHECK-LABEL: test_mm256_mul_epu32 @@ -884,18 +942,21 @@ __m256i test_mm256_mul_epu32(__m256i a, __m256i b) { // CHECK: mul <4 x i64> %{{.*}}, %{{.*}} return _mm256_mul_epu32(a, b); } +TEST_CONSTEXPR(match_m256i(_mm256_mul_epu32((__m256i)(__v8si){+1, -2, +3, -4, +5, -6, +7, -8}, (__m256i)(__v8si){-16, -14, +12, +10, -8, +6, -4, +2}), 4294967280, 36, 21474836440, 30064771044)); __m256i test_mm256_mulhi_epu16(__m256i a, __m256i b) { // CHECK-LABEL: test_mm256_mulhi_epu16 // CHECK: call <16 x i16> @llvm.x86.avx2.pmulhu.w(<16 x i16> %{{.*}}, <16 x i16> %{{.*}}) return _mm256_mulhi_epu16(a, b); } +TEST_CONSTEXPR(match_v16hi(_mm256_mulhi_epu16((__m256i)(__v16hi){+1, -2, +3, -4, +5, -6, +7, -8, +9, -10, +11, -12, +13, -14, +15, -16}, (__m256i)(__v16hi){-32, -30, +28, +26, -24, -22, +20, +18, -16, -14, +12, +10, -8, +6, -4, +2}), 0, -32, 0, 25, 4, -28, 0, 17, 8, -24, 0, 9, 12, 5, 14, 1)); __m256i test_mm256_mulhi_epi16(__m256i a, __m256i b) { // CHECK-LABEL: test_mm256_mulhi_epi16 // CHECK: call <16 x i16> @llvm.x86.avx2.pmulh.w(<16 x i16> %{{.*}}, <16 x i16> %{{.*}}) return _mm256_mulhi_epi16(a, b); } +TEST_CONSTEXPR(match_v16hi(_mm256_mulhi_epi16((__m256i)(__v16hi){+1, -2, +3, -4, +5, -6, +7, -8, +9, -10, +11, -12, +13, -14, +15, -16}, (__m256i)(__v16hi){-32, -30, +28, +26, -24, -22, +20, +18, -16, -14, +12, +10, -8, +6, -4, +2}), -1, 0, 0, -1, -1, 0, 0, -1, -1, 0, 0, -1, -1, -1, -1, -1)); __m256i test_mm256_mulhrs_epi16(__m256i a, __m256i b) { // CHECK-LABEL: test_mm256_mulhrs_epi16 @@ -908,18 +969,21 @@ __m256i test_mm256_mullo_epi16(__m256i a, __m256i b) { // CHECK: mul <16 x i16> return _mm256_mullo_epi16(a, b); } +TEST_CONSTEXPR(match_v16hi(_mm256_mullo_epi16((__m256i)(__v16hi){+1, -2, +3, -4, +5, -6, +7, -8, +9, -10, +11, -12, +13, -14, +15, -16}, (__m256i)(__v16hi){-32, -30, +28, +26, -24, -22, +20, +18, -16, -14, +12, +10, -8, +6, -4, +2}), -32, 60, 84, -104, -120, 132, 140, -144, -144, 140, 132, -120, -104, -84, -60, -32)); __m256i test_mm256_mullo_epi32(__m256i a, __m256i b) { // CHECK-LABEL: test_mm256_mullo_epi32 // CHECK: mul <8 x i32> return _mm256_mullo_epi32(a, b); } +TEST_CONSTEXPR(match_v8si(_mm256_mullo_epi32((__m256i)(__v8si){+1, -2, +3, -4, +5, -6, +7, -8}, (__m256i)(__v8si){-16, -14, +12, +10, -8, +6, -4, +2}), -16, 28, 36, -40, -40, -36, -28, -16)); __m256i test_mm256_or_si256(__m256i a, __m256i b) { // CHECK-LABEL: test_mm256_or_si256 // CHECK: or <4 x i64> return _mm256_or_si256(a, b); } +TEST_CONSTEXPR(match_v4di(_mm256_or_si256((__m256i)(__v4di){0, -1, 0, -1}, (__m256i)(__v4di){0, 0, -1, -1}), 0, -1, -1, -1)); __m256i test_mm256_packs_epi16(__m256i a, __m256i b) { // CHECK-LABEL: test_mm256_packs_epi16 @@ -1028,6 +1092,11 @@ __m256i test_mm256_slli_epi16(__m256i a) { // CHECK: call <16 x i16> @llvm.x86.avx2.pslli.w(<16 x i16> %{{.*}}, i32 %{{.*}}) return _mm256_slli_epi16(a, 3); } +TEST_CONSTEXPR(match_v16hi(_mm256_slli_epi16((__m256i)(__v16hi){0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, 0), 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)); +TEST_CONSTEXPR(match_v16hi(_mm256_slli_epi16((__m256i)(__v16hi){0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, 1), 0, 0x2, 0x4, 0x6, 0x8, 0xa, 0xc, 0xe, 0x10, 0x12, 0x14, 0x16, 0x18, 0x1a, 0x1c, 0x1e)); +TEST_CONSTEXPR(match_v16hi(_mm256_slli_epi16((__m256i)(__v16hi){0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, 15), 0, 0x8000, 0x0, 0x8000, 0x0, 0x8000, 0x0, 0x8000, 0x0, 0x8000, 0x0, 0x8000, 0x0, 0x8000, 0x0, 0x8000)); +TEST_CONSTEXPR(match_v16hi(_mm256_slli_epi16((__m256i)(__v16hi){0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, 16), 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)); +TEST_CONSTEXPR(match_v16hi(_mm256_slli_epi16((__m256i)(__v16hi){0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, 17), 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)); __m256i test_mm256_slli_epi16_2(__m256i a, int b) { // CHECK-LABEL: test_mm256_slli_epi16_2 @@ -1040,6 +1109,11 @@ __m256i test_mm256_slli_epi32(__m256i a) { // CHECK: call <8 x i32> @llvm.x86.avx2.pslli.d(<8 x i32> %{{.*}}, i32 %{{.*}}) return _mm256_slli_epi32(a, 3); } +TEST_CONSTEXPR(match_v8si(_mm256_slli_epi32((__m256i)(__v8si){0, 1, 2, 3, 4, 5, 6, 7}, 0), 0, 1, 2, 3, 4, 5, 6, 7)); +TEST_CONSTEXPR(match_v8si(_mm256_slli_epi32((__m256i)(__v8si){0, 1, 2, 3, 4, 5, 6, 7}, 1), 0, 0x2, 0x4, 0x6, 0x8, 0xa, 0xc, 0xe)); +TEST_CONSTEXPR(match_v8su(_mm256_slli_epi32((__m256i)(__v8su){0, 1, 2, 3, 4, 5, 6, 7}, 31), 0, 0x80000000, 0x0, 0x80000000, 0x0, 0x80000000, 0x0, 0x80000000)); +TEST_CONSTEXPR(match_v8si(_mm256_slli_epi32((__m256i)(__v8si){0, 1, 2, 3, 4, 5, 6, 7}, 32), 0, 0, 0, 0, 0, 0, 0, 0)); +TEST_CONSTEXPR(match_v8si(_mm256_slli_epi32((__m256i)(__v8si){0, 1, 2, 3, 4, 5, 6, 7}, 33), 0, 0, 0, 0, 0, 0, 0, 0)); __m256i test_mm256_slli_epi32_2(__m256i a, int b) { // CHECK-LABEL: test_mm256_slli_epi32_2 @@ -1052,6 +1126,11 @@ __m256i test_mm256_slli_epi64(__m256i a) { // CHECK: call {{.*}}<4 x i64> @llvm.x86.avx2.pslli.q(<4 x i64> %{{.*}}, i32 %{{.*}}) return _mm256_slli_epi64(a, 3); } +TEST_CONSTEXPR(match_v4di(_mm256_slli_epi64((__m256i)(__v4di){0, 1, 2, 3}, 0), 0, 1, 2, 3)); +TEST_CONSTEXPR(match_v4di(_mm256_slli_epi64((__m256i)(__v4di){0, 1, 2, 3}, 1), 0, 0x2, 0x4, 0x6)); +TEST_CONSTEXPR(match_v4di(_mm256_slli_epi64((__m256i)(__v4di){0, 1, 2, 3}, 33), 0, 0x200000000LL, 0x400000000LL, 0x600000000LL)); +TEST_CONSTEXPR(match_v4di(_mm256_slli_epi64((__m256i)(__v4di){0, 1, 2, 3}, 64), 0, 0, 0, 0)); +TEST_CONSTEXPR(match_v4di(_mm256_slli_epi64((__m256i)(__v4di){0, 1, 2, 3}, 65), 0, 0, 0, 0)); __m256i test_mm256_slli_epi64_2(__m256i a, int b) { // CHECK-LABEL: test_mm256_slli_epi64_2 @@ -1070,24 +1149,28 @@ __m128i test_mm_sllv_epi32(__m128i a, __m128i b) { // CHECK: call <4 x i32> @llvm.x86.avx2.psllv.d(<4 x i32> %{{.*}}, <4 x i32> %{{.*}}) return _mm_sllv_epi32(a, b); } +TEST_CONSTEXPR(match_v4si(_mm_sllv_epi32((__m128i)(__v4si){1, -2, 3, -4}, (__m128i)(__v4si){1, 2, 3, -4}), 2, -8, 24, 0)); __m256i test_mm256_sllv_epi32(__m256i a, __m256i b) { // CHECK-LABEL: test_mm256_sllv_epi32 // CHECK: call <8 x i32> @llvm.x86.avx2.psllv.d.256(<8 x i32> %{{.*}}, <8 x i32> %{{.*}}) return _mm256_sllv_epi32(a, b); } +TEST_CONSTEXPR(match_v8si(_mm256_sllv_epi32((__m256i)(__v8si){1, -2, 3, -4, 5, -6, 7, -8}, (__m256i)(__v8si){1, 2, 3, 4, -17, 31, 33, 29}), 2, -8, 24, -64, 0, 0, 0, 0)); __m128i test_mm_sllv_epi64(__m128i a, __m128i b) { // CHECK-LABEL: test_mm_sllv_epi64 // CHECK: call {{.*}}<2 x i64> @llvm.x86.avx2.psllv.q(<2 x i64> %{{.*}}, <2 x i64> %{{.*}}) return _mm_sllv_epi64(a, b); } +TEST_CONSTEXPR(match_m128i(_mm_sllv_epi64((__m128i)(__v2di){1, -3}, (__m128i)(__v2di){8, 63}), 256, 0x8000000000000000ULL)); __m256i test_mm256_sllv_epi64(__m256i a, __m256i b) { // CHECK-LABEL: test_mm256_sllv_epi64 // CHECK: call {{.*}}<4 x i64> @llvm.x86.avx2.psllv.q.256(<4 x i64> %{{.*}}, <4 x i64> %{{.*}}) return _mm256_sllv_epi64(a, b); } +TEST_CONSTEXPR(match_m256i(_mm256_sllv_epi64((__m256i)(__v4di){1, -2, 3, -4}, (__m256i)(__v4di){1, 2, 3, -4}), 2, -8, 24, 0)); __m256i test_mm256_sra_epi16(__m256i a, __m128i b) { // CHECK-LABEL: test_mm256_sra_epi16 @@ -1106,6 +1189,7 @@ __m256i test_mm256_srai_epi16(__m256i a) { // CHECK: call <16 x i16> @llvm.x86.avx2.psrai.w(<16 x i16> %{{.*}}, i32 %{{.*}}) return _mm256_srai_epi16(a, 3); } +TEST_CONSTEXPR(match_v16hi(_mm256_srai_epi16((__m256i)(__v16hi){-32768, 32767, -3, -2, -1, 0, 1, 2, -32768, 32767, -3, -2, -1, 0, 1, 2}, 1), -16384, 16383, -2, -1, -1, 0, 0, 1, -16384, 16383, -2, -1, -1, 0, 0, 1)); __m256i test_mm256_srai_epi16_2(__m256i a, int b) { // CHECK-LABEL: test_mm256_srai_epi16_2 @@ -1118,6 +1202,7 @@ __m256i test_mm256_srai_epi32(__m256i a) { // CHECK: call <8 x i32> @llvm.x86.avx2.psrai.d(<8 x i32> %{{.*}}, i32 %{{.*}}) return _mm256_srai_epi32(a, 3); } +TEST_CONSTEXPR(match_v8si(_mm256_srai_epi32((__m256i)(__v8si){-32768, 32767, -3, -2, -1, 0, 1, 2}, 1), -16384, 16383, -2, -1, -1, 0, 0, 1)); __m256i test_mm256_srai_epi32_2(__m256i a, int b) { // CHECK-LABEL: test_mm256_srai_epi32_2 @@ -1130,12 +1215,14 @@ __m128i test_mm_srav_epi32(__m128i a, __m128i b) { // CHECK: call <4 x i32> @llvm.x86.avx2.psrav.d(<4 x i32> %{{.*}}, <4 x i32> %{{.*}}) return _mm_srav_epi32(a, b); } +TEST_CONSTEXPR(match_v4si(_mm_srav_epi32((__m128i)(__v4si){1, -2, 3, -4}, (__m128i)(__v4si){1, 2, 3, -4}), 0, -1, 0, -1)); __m256i test_mm256_srav_epi32(__m256i a, __m256i b) { // CHECK-LABEL: test_mm256_srav_epi32 // CHECK: call <8 x i32> @llvm.x86.avx2.psrav.d.256(<8 x i32> %{{.*}}, <8 x i32> %{{.*}}) return _mm256_srav_epi32(a, b); } +TEST_CONSTEXPR(match_v8si(_mm256_srav_epi32((__m256i)(__v8si){1, -2, 3, -4, 5, -6, 7, -8}, (__m256i)(__v8si){1, 2, 3, 4, -17, 31, 33, 29}), 0, -1, 0, -1, 0, -1, 0, -1)); __m256i test_mm256_srl_epi16(__m256i a, __m128i b) { // CHECK-LABEL: test_mm256_srl_epi16 @@ -1160,6 +1247,7 @@ __m256i test_mm256_srli_epi16(__m256i a) { // CHECK: call <16 x i16> @llvm.x86.avx2.psrli.w(<16 x i16> %{{.*}}, i32 %{{.*}}) return _mm256_srli_epi16(a, 3); } +TEST_CONSTEXPR(match_v16hi(_mm256_srli_epi16((__m256i)(__v16hi){0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, 1), 0, 0x0, 0x1, 0x1, 0x2, 0x2, 0x3, 0x3, 0x4, 0x4, 0x5, 0x5, 0x6, 0x6, 0x7, 0x7)); __m256i test_mm256_srli_epi16_2(__m256i a, int b) { // CHECK-LABEL: test_mm256_srli_epi16_2 @@ -1172,6 +1260,7 @@ __m256i test_mm256_srli_epi32(__m256i a) { // CHECK: call <8 x i32> @llvm.x86.avx2.psrli.d(<8 x i32> %{{.*}}, i32 %{{.*}}) return _mm256_srli_epi32(a, 3); } +TEST_CONSTEXPR(match_v8si(_mm256_srli_epi32((__m256i)(__v8si){0, 1, 2, 3, 4, 5, 6, 7}, 31), 0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0)); __m256i test_mm256_srli_epi32_2(__m256i a, int b) { // CHECK-LABEL: test_mm256_srli_epi32_2 @@ -1184,6 +1273,7 @@ __m256i test_mm256_srli_epi64(__m256i a) { // CHECK: call {{.*}}<4 x i64> @llvm.x86.avx2.psrli.q(<4 x i64> %{{.*}}, i32 %{{.*}}) return _mm256_srli_epi64(a, 3); } +TEST_CONSTEXPR(match_v4di(_mm256_srli_epi64((__m256i)(__v4di){0, 1, 2, 3}, 33), 0, 0x0, 0x0, 0x0)); __m256i test_mm256_srli_epi64_2(__m256i a, int b) { // CHECK-LABEL: test_mm256_srli_epi64_2 @@ -1202,24 +1292,28 @@ __m128i test_mm_srlv_epi32(__m128i a, __m128i b) { // CHECK: call <4 x i32> @llvm.x86.avx2.psrlv.d(<4 x i32> %{{.*}}, <4 x i32> %{{.*}}) return _mm_srlv_epi32(a, b); } +TEST_CONSTEXPR(match_v4si(_mm_srlv_epi32((__m128i)(__v4si){1, -2, 3, -4}, (__m128i)(__v4si){1, 2, 3, -4}), 0, 1073741823, 0, 0)); __m256i test_mm256_srlv_epi32(__m256i a, __m256i b) { // CHECK-LABEL: test_mm256_srlv_epi32 // CHECK: call <8 x i32> @llvm.x86.avx2.psrlv.d.256(<8 x i32> %{{.*}}, <8 x i32> %{{.*}}) return _mm256_srlv_epi32(a, b); } +TEST_CONSTEXPR(match_v8si(_mm256_srlv_epi32((__m256i)(__v8si){1, -2, 3, -4, 5, -6, 7, -8}, (__m256i)(__v8si){1, 2, 3, 4, -17, 31, 33, 29}), 0, 1073741823, 0, 268435455, 0, 1, 0, 7)); __m128i test_mm_srlv_epi64(__m128i a, __m128i b) { // CHECK-LABEL: test_mm_srlv_epi64 // CHECK: call {{.*}}<2 x i64> @llvm.x86.avx2.psrlv.q(<2 x i64> %{{.*}}, <2 x i64> %{{.*}}) return _mm_srlv_epi64(a, b); } +TEST_CONSTEXPR(match_m128i(_mm_srlv_epi64((__m128i)(__v2di){1, -3}, (__m128i)(__v2di){8, 63}), 0, 1)); __m256i test_mm256_srlv_epi64(__m256i a, __m256i b) { // CHECK-LABEL: test_mm256_srlv_epi64 // CHECK: call {{.*}}<4 x i64> @llvm.x86.avx2.psrlv.q.256(<4 x i64> %{{.*}}, <4 x i64> %{{.*}}) return _mm256_srlv_epi64(a, b); } +TEST_CONSTEXPR(match_m256i(_mm256_srlv_epi64((__m256i)(__v4di){1, -2, 3, -4}, (__m256i)(__v4di){1, 2, 3, -4}), 0, 0x3FFFFFFFFFFFFFFFULL, 0, 0)); __m256i test_mm256_stream_load_si256(__m256i const *a) { // CHECK-LABEL: test_mm256_stream_load_si256 @@ -1262,12 +1356,14 @@ __m256i test_mm256_subs_epi8(__m256i a, __m256i b) { // CHECK: call <32 x i8> @llvm.ssub.sat.v32i8(<32 x i8> %{{.*}}, <32 x i8> %{{.*}}) return _mm256_subs_epi8(a, b); } +TEST_CONSTEXPR(match_v32qi(_mm256_subs_epi8((__m256i)(__v32qs){0, +1, +2, +3, +4, +5, +6, +7, +8, +9, +10, +11, +12, +13, +14, +15, +100, +50, -100, +20, +80, -50, +120, -20, -100, -50, +100, -20, -80, +50, -120, +20}, (__m256i)(__v32qs){0, -1, -2, -3, -4, -5, -6, -7, -8, -9, -10, -11, -12, -13, -14, -15, -50, -80, +50, -110, -60, +30, -20, +10, -50, -80, +50, -110, -60, +30, -20, +10}), 0, +2, +4, +6, +8, +10, +12, +14, +16, +18, +20, +22, +24, +26, +28, +30, +127, +127, -128, +127, +127, -80, +127, -30, -50, +30, +50, +90, -20, +20, -100, +10)); __m256i test_mm256_subs_epi16(__m256i a, __m256i b) { // CHECK-LABEL: test_mm256_subs_epi16 // CHECK: call <16 x i16> @llvm.ssub.sat.v16i16(<16 x i16> %{{.*}}, <16 x i16> %{{.*}}) return _mm256_subs_epi16(a, b); } +TEST_CONSTEXPR(match_v16hi(_mm256_subs_epi16((__m256i)(__v16hi){0, -1, -2, -3, -4, -5, -6, -7, -8, -9, -10, -11, +32000, -32000, +32000, -32000}, (__m256i)(__v16hi){0, +1, +2, +3, +4, +5, +6, +7, +8, +9, +10, +11, -800, +800, +800, -800}),0, -2, -4, -6, -8, -10, -12, -14, -16, -18, -20, -22, +32767, -32768, +31200, -31200)); __m256i test_mm256_subs_epu8(__m256i a, __m256i b) { // CHECK-LABEL: test_mm256_subs_epu8 @@ -1275,6 +1371,7 @@ __m256i test_mm256_subs_epu8(__m256i a, __m256i b) { // CHECK: call <32 x i8> @llvm.usub.sat.v32i8(<32 x i8> %{{.*}}, <32 x i8> %{{.*}}) return _mm256_subs_epu8(a, b); } +TEST_CONSTEXPR(match_v32qu(_mm256_subs_epu8((__m256i)(__v32qu){0, 0, 0, 0, +64, +64, +64, +64, +64, +64, +127, +127, +127, +127, +127, +127, +128, +128, +128, +128, +128, +128, +192, +192, +192, +192, +192, +192, +255, +255, +255, +255}, (__m256i)(__v32qu){0, +127, +128, +255, 0, +64, +127, +128, +192, +255, 0, +64, +127, +128, +192, +255, 0, +64, +127, +128, +192, +255, 0, +64, +127, +128, +192, +255, 0, +127, +128, +255}), 0, 0, 0, 0, +64, 0, 0, 0, 0, 0, +127, +63, 0, 0, 0, 0, +128, +64, +1, 0, 0, 0, +192, +128, +65, +64, 0, 0, +255, +128, +127, 0)); __m256i test_mm256_subs_epu16(__m256i a, __m256i b) { // CHECK-LABEL: test_mm256_subs_epu16 @@ -1282,57 +1379,67 @@ __m256i test_mm256_subs_epu16(__m256i a, __m256i b) { // CHECK: call <16 x i16> @llvm.usub.sat.v16i16(<16 x i16> %{{.*}}, <16 x i16> %{{.*}}) return _mm256_subs_epu16(a, b); } +TEST_CONSTEXPR(match_v16hu(_mm256_subs_epu16((__m256i)(__v16hu){0, 0, 0, 0, +32767, +32767, +32767, +32767, +32768, +32768, +32768, +32768, +65535, +65535, +65535, +65535}, (__m256i)(__v16hu){0, +32767, +32768, +65535, 0, +32767, +32768, +65535, 0, +32767, +32768, +65535, 0, +32767, +32768, +65535}), 0, 0, 0, 0, +32767, 0, 0, 0, +32768, +1, 0, 0, +65535, +32768, +32767, 0)); __m256i test_mm256_unpackhi_epi8(__m256i a, __m256i b) { // CHECK-LABEL: test_mm256_unpackhi_epi8 // CHECK: shufflevector <32 x i8> %{{.*}}, <32 x i8> %{{.*}}, <32 x i32> <i32 8, i32 40, i32 9, i32 41, i32 10, i32 42, i32 11, i32 43, i32 12, i32 44, i32 13, i32 45, i32 14, i32 46, i32 15, i32 47, i32 24, i32 56, i32 25, i32 57, i32 26, i32 58, i32 27, i32 59, i32 28, i32 60, i32 29, i32 61, i32 30, i32 62, i32 31, i32 63> return _mm256_unpackhi_epi8(a, b); } +TEST_CONSTEXPR(match_v32qi(_mm256_unpackhi_epi8((__m256i)(__v32qi){0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31}, (__m256i)(__v32qi){32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63}), 8, 40, 9, 41, 10, 42, 11, 43, 12, 44, 13, 45, 14, 46, 15, 47, 24, 56, 25, 57, 26, 58, 27, 59, 28, 60, 29, 61, 30, 62, 31, 63)); __m256i test_mm256_unpackhi_epi16(__m256i a, __m256i b) { // CHECK-LABEL: test_mm256_unpackhi_epi16 // CHECK: shufflevector <16 x i16> %{{.*}}, <16 x i16> %{{.*}}, <16 x i32> <i32 4, i32 20, i32 5, i32 21, i32 6, i32 22, i32 7, i32 23, i32 12, i32 28, i32 13, i32 29, i32 14, i32 30, i32 15, i32 31> return _mm256_unpackhi_epi16(a, b); } +TEST_CONSTEXPR(match_v16hi(_mm256_unpackhi_epi16((__m256i)(__v16hi){0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, (__m256i)(__v16hi){16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31}), 4, 20, 5, 21, 6, 22, 7, 23, 12, 28, 13, 29, 14, 30, 15, 31)); __m256i test_mm256_unpackhi_epi32(__m256i a, __m256i b) { // CHECK-LABEL: test_mm256_unpackhi_epi32 // CHECK: shufflevector <8 x i32> %{{.*}}, <8 x i32> %{{.*}}, <8 x i32> <i32 2, i32 10, i32 3, i32 11, i32 6, i32 14, i32 7, i32 15> return _mm256_unpackhi_epi32(a, b); } +TEST_CONSTEXPR(match_v8si(_mm256_unpackhi_epi32((__m256i)(__v8si){0, 1, 2, 3, 4, 5, 6, 7}, (__m256i)(__v8si){8, 9, 10, 11, 12, 13, 14, 15}), 2, 10, 3, 11, 6, 14, 7, 15)); __m256i test_mm256_unpackhi_epi64(__m256i a, __m256i b) { // CHECK-LABEL: test_mm256_unpackhi_epi64 // CHECK: shufflevector <4 x i64> %{{.*}}, <4 x i64> %{{.*}}, <4 x i32> <i32 1, i32 5, i32 3, i32 7> return _mm256_unpackhi_epi64(a, b); } +TEST_CONSTEXPR(match_v4di(_mm256_unpackhi_epi64((__m256i)(__v4di){0, 1, 2, 3}, (__m256i)(__v4di){ 4, 5, 6, 7}), 1, 5, 3, 7)); __m256i test_mm256_unpacklo_epi8(__m256i a, __m256i b) { // CHECK-LABEL: test_mm256_unpacklo_epi8 // CHECK: shufflevector <32 x i8> %{{.*}}, <32 x i8> %{{.*}}, <32 x i32> <i32 0, i32 32, i32 1, i32 33, i32 2, i32 34, i32 3, i32 35, i32 4, i32 36, i32 5, i32 37, i32 6, i32 38, i32 7, i32 39, i32 16, i32 48, i32 17, i32 49, i32 18, i32 50, i32 19, i32 51, i32 20, i32 52, i32 21, i32 53, i32 22, i32 54, i32 23, i32 55> return _mm256_unpacklo_epi8(a, b); } +TEST_CONSTEXPR(match_v32qi(_mm256_unpacklo_epi8((__m256i)(__v32qi){0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31}, (__m256i)(__v32qi){32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63}), 0, 32, 1, 33, 2, 34, 3, 35, 4, 36, 5, 37, 6, 38, 7, 39, 16, 48, 17, 49, 18, 50, 19, 51, 20, 52, 21, 53, 22, 54, 23, 55)); __m256i test_mm256_unpacklo_epi16(__m256i a, __m256i b) { // CHECK-LABEL: test_mm256_unpacklo_epi16 // CHECK: shufflevector <16 x i16> %{{.*}}, <16 x i16> %{{.*}}, <16 x i32> <i32 0, i32 16, i32 1, i32 17, i32 2, i32 18, i32 3, i32 19, i32 8, i32 24, i32 9, i32 25, i32 10, i32 26, i32 11, i32 27> return _mm256_unpacklo_epi16(a, b); } +TEST_CONSTEXPR(match_v16hi(_mm256_unpacklo_epi16((__m256i)(__v16hi){0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, (__m256i)(__v16hi){16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31}), 0, 16, 1, 17, 2, 18, 3, 19, 8, 24, 9, 25, 10, 26, 11, 27)); __m256i test_mm256_unpacklo_epi32(__m256i a, __m256i b) { // CHECK-LABEL: test_mm256_unpacklo_epi32 // CHECK: shufflevector <8 x i32> %{{.*}}, <8 x i32> %{{.*}}, <8 x i32> <i32 0, i32 8, i32 1, i32 9, i32 4, i32 12, i32 5, i32 13> return _mm256_unpacklo_epi32(a, b); } +TEST_CONSTEXPR(match_v8si(_mm256_unpacklo_epi32((__m256i)(__v8si){0, 1, 2, 3, 4, 5, 6, 7}, (__m256i)(__v8si){ 8, 9, 10, 11, 12, 13, 14, 15}), 0, 8, 1, 9, 4, 12, 5, 13)); __m256i test_mm256_unpacklo_epi64(__m256i a, __m256i b) { // CHECK-LABEL: test_mm256_unpacklo_epi64 // CHECK: shufflevector <4 x i64> %{{.*}}, <4 x i64> %{{.*}}, <4 x i32> <i32 0, i32 4, i32 2, i32 6> return _mm256_unpacklo_epi64(a, b); } +TEST_CONSTEXPR(match_v4di(_mm256_unpacklo_epi64((__m256i)(__v4di){0, 1, 2, 3}, (__m256i)(__v4di){ 4, 5, 6, 7}), 0, 4, 2, 6)); __m256i test_mm256_xor_si256(__m256i a, __m256i b) { // CHECK-LABEL: test_mm256_xor_si256 // CHECK: xor <4 x i64> return _mm256_xor_si256(a, b); } +TEST_CONSTEXPR(match_v4di(_mm256_xor_si256((__m256i)(__v4di){0, -1, 0, -1}, (__m256i)(__v4di){0, 0, -1, -1}), 0, -1, -1, 0)); diff --git a/clang/test/CodeGen/X86/avx512-reduceIntrin.c b/clang/test/CodeGen/X86/avx512-reduceIntrin.c index 2ceac3a..598bca4 100644 --- a/clang/test/CodeGen/X86/avx512-reduceIntrin.c +++ b/clang/test/CodeGen/X86/avx512-reduceIntrin.c @@ -1,162 +1,180 @@ -// RUN: %clang_cc1 -ffreestanding %s -O0 -triple=x86_64-apple-darwin -target-cpu skylake-avx512 -emit-llvm -o - -Wall -Werror | FileCheck %s +// RUN: %clang_cc1 -x c -ffreestanding %s -O0 -triple=x86_64-apple-darwin -target-cpu skylake-avx512 -emit-llvm -o - -Wall -Werror | FileCheck %s +// RUN: %clang_cc1 -x c -ffreestanding %s -O0 -triple=i386-apple-darwin -target-cpu skylake-avx512 -emit-llvm -o - -Wall -Werror | FileCheck %s +// RUN: %clang_cc1 -x c++ -ffreestanding %s -O0 -triple=x86_64-apple-darwin -target-cpu skylake-avx512 -emit-llvm -o - -Wall -Werror | FileCheck %s +// RUN: %clang_cc1 -x c++ -ffreestanding %s -O0 -triple=i386-apple-darwin -target-cpu skylake-avx512 -emit-llvm -o - -Wall -Werror | FileCheck %s + +// RUN: %clang_cc1 -x c -ffreestanding %s -O0 -triple=x86_64-apple-darwin -target-cpu skylake-avx512 -emit-llvm -o - -Wall -Werror -fexperimental-new-constant-interpreter | FileCheck %s +// RUN: %clang_cc1 -x c -ffreestanding %s -O0 -triple=i386-apple-darwin -target-cpu skylake-avx512 -emit-llvm -o - -Wall -Werror -fexperimental-new-constant-interpreter | FileCheck %s +// RUN: %clang_cc1 -x c++ -ffreestanding %s -O0 -triple=x86_64-apple-darwin -target-cpu skylake-avx512 -emit-llvm -o - -Wall -Werror -fexperimental-new-constant-interpreter | FileCheck %s +// RUN: %clang_cc1 -x c++ -ffreestanding %s -O0 -triple=i386-apple-darwin -target-cpu skylake-avx512 -emit-llvm -o - -Wall -Werror -fexperimental-new-constant-interpreter | FileCheck %s + #include <immintrin.h> +#include "builtin_test_helpers.h" long long test_mm512_reduce_add_epi64(__m512i __W){ -// CHECK-LABEL: @test_mm512_reduce_add_epi64( -// CHECK: call i64 @llvm.vector.reduce.add.v8i64(<8 x i64> %{{.*}}) +// CHECK-LABEL: test_mm512_reduce_add_epi64 +// CHECK: call {{.*}}i64 @llvm.vector.reduce.add.v8i64(<8 x i64> %{{.*}}) return _mm512_reduce_add_epi64(__W); } +TEST_CONSTEXPR(_mm512_reduce_add_epi64((__m512i)(__v8di){-4, -3, -2, -1, 0, 1, 2, 3}) == -4); long long test_mm512_reduce_mul_epi64(__m512i __W){ -// CHECK-LABEL: @test_mm512_reduce_mul_epi64( -// CHECK: call i64 @llvm.vector.reduce.mul.v8i64(<8 x i64> %{{.*}}) +// CHECK-LABEL: test_mm512_reduce_mul_epi64 +// CHECK: call {{.*}}i64 @llvm.vector.reduce.mul.v8i64(<8 x i64> %{{.*}}) return _mm512_reduce_mul_epi64(__W); } +TEST_CONSTEXPR(_mm512_reduce_mul_epi64((__m512i)(__v8di){1, 2, 3, 4, 5, 6, 7, 8}) == 40320); long long test_mm512_reduce_or_epi64(__m512i __W){ -// CHECK-LABEL: @test_mm512_reduce_or_epi64( -// CHECK: call i64 @llvm.vector.reduce.or.v8i64(<8 x i64> %{{.*}}) +// CHECK-LABEL: test_mm512_reduce_or_epi64 +// CHECK: call {{.*}}i64 @llvm.vector.reduce.or.v8i64(<8 x i64> %{{.*}}) return _mm512_reduce_or_epi64(__W); } +TEST_CONSTEXPR(_mm512_reduce_or_epi64((__m512i)(__v8di){0x100, 0x200, 0x400, 0x800, 0, 0, 0, 0}) == 0xF00); long long test_mm512_reduce_and_epi64(__m512i __W){ -// CHECK-LABEL: @test_mm512_reduce_and_epi64( -// CHECK: call i64 @llvm.vector.reduce.and.v8i64(<8 x i64> %{{.*}}) +// CHECK-LABEL: test_mm512_reduce_and_epi64 +// CHECK: call {{.*}}i64 @llvm.vector.reduce.and.v8i64(<8 x i64> %{{.*}}) return _mm512_reduce_and_epi64(__W); } +TEST_CONSTEXPR(_mm512_reduce_and_epi64((__m512i)(__v8di){0xFFFF, 0xFF00, 0x00FF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFF00, 0x00FF}) == 0x0000); long long test_mm512_mask_reduce_add_epi64(__mmask8 __M, __m512i __W){ -// CHECK-LABEL: @test_mm512_mask_reduce_add_epi64( +// CHECK-LABEL: test_mm512_mask_reduce_add_epi64 // CHECK: select <8 x i1> %{{.*}}, <8 x i64> %{{.*}}, <8 x i64> %{{.*}} -// CHECK: call i64 @llvm.vector.reduce.add.v8i64(<8 x i64> %{{.*}}) +// CHECK: call {{.*}}i64 @llvm.vector.reduce.add.v8i64(<8 x i64> %{{.*}}) return _mm512_mask_reduce_add_epi64(__M, __W); } long long test_mm512_mask_reduce_mul_epi64(__mmask8 __M, __m512i __W){ -// CHECK-LABEL: @test_mm512_mask_reduce_mul_epi64( +// CHECK-LABEL: test_mm512_mask_reduce_mul_epi64 // CHECK: select <8 x i1> %{{.*}}, <8 x i64> %{{.*}}, <8 x i64> %{{.*}} -// CHECK: call i64 @llvm.vector.reduce.mul.v8i64(<8 x i64> %{{.*}}) +// CHECK: call {{.*}}i64 @llvm.vector.reduce.mul.v8i64(<8 x i64> %{{.*}}) return _mm512_mask_reduce_mul_epi64(__M, __W); } long long test_mm512_mask_reduce_and_epi64(__mmask8 __M, __m512i __W){ -// CHECK-LABEL: @test_mm512_mask_reduce_and_epi64( +// CHECK-LABEL: test_mm512_mask_reduce_and_epi64 // CHECK: select <8 x i1> %{{.*}}, <8 x i64> %{{.*}}, <8 x i64> %{{.*}} -// CHECK: call i64 @llvm.vector.reduce.and.v8i64(<8 x i64> %{{.*}}) +// CHECK: call {{.*}}i64 @llvm.vector.reduce.and.v8i64(<8 x i64> %{{.*}}) return _mm512_mask_reduce_and_epi64(__M, __W); } long long test_mm512_mask_reduce_or_epi64(__mmask8 __M, __m512i __W){ -// CHECK-LABEL: @test_mm512_mask_reduce_or_epi64( +// CHECK-LABEL: test_mm512_mask_reduce_or_epi64 // CHECK: select <8 x i1> %{{.*}}, <8 x i64> %{{.*}}, <8 x i64> %{{.*}} -// CHECK: call i64 @llvm.vector.reduce.or.v8i64(<8 x i64> %{{.*}}) +// CHECK: call {{.*}}i64 @llvm.vector.reduce.or.v8i64(<8 x i64> %{{.*}}) return _mm512_mask_reduce_or_epi64(__M, __W); } int test_mm512_reduce_add_epi32(__m512i __W){ -// CHECK-LABEL: @test_mm512_reduce_add_epi32( -// CHECK: call i32 @llvm.vector.reduce.add.v16i32(<16 x i32> %{{.*}}) +// CHECK-LABEL: test_mm512_reduce_add_epi32 +// CHECK: call {{.*}}i32 @llvm.vector.reduce.add.v16i32(<16 x i32> %{{.*}}) return _mm512_reduce_add_epi32(__W); } +TEST_CONSTEXPR(_mm512_reduce_add_epi32((__m512i)(__v16si){-8, -7, -6, -5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5, 6, 7}) == -8); int test_mm512_reduce_mul_epi32(__m512i __W){ -// CHECK-LABEL: @test_mm512_reduce_mul_epi32( -// CHECK: call i32 @llvm.vector.reduce.mul.v16i32(<16 x i32> %{{.*}}) +// CHECK-LABEL: test_mm512_reduce_mul_epi32 +// CHECK: call {{.*}}i32 @llvm.vector.reduce.mul.v16i32(<16 x i32> %{{.*}}) return _mm512_reduce_mul_epi32(__W); } +TEST_CONSTEXPR(_mm512_reduce_mul_epi32((__m512i)(__v16si){1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 3, 1, 1, -3, 1, 1}) == -36); int test_mm512_reduce_or_epi32(__m512i __W){ -// CHECK: call i32 @llvm.vector.reduce.or.v16i32(<16 x i32> %{{.*}}) +// CHECK: call {{.*}}i32 @llvm.vector.reduce.or.v16i32(<16 x i32> %{{.*}}) return _mm512_reduce_or_epi32(__W); } +TEST_CONSTEXPR(_mm512_reduce_or_epi32((__m512i)(__v16si){0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0, 0, 0, 0, 0, 0, 0, 0}) == 0xFF); int test_mm512_reduce_and_epi32(__m512i __W){ -// CHECK-LABEL: @test_mm512_reduce_and_epi32( -// CHECK: call i32 @llvm.vector.reduce.and.v16i32(<16 x i32> %{{.*}}) +// CHECK-LABEL: test_mm512_reduce_and_epi32 +// CHECK: call {{.*}}i32 @llvm.vector.reduce.and.v16i32(<16 x i32> %{{.*}}) return _mm512_reduce_and_epi32(__W); } +TEST_CONSTEXPR(_mm512_reduce_and_epi32((__m512i)(__v16si){0xFF, 0xF0, 0x0F, 0xFF, 0xFF, 0xFF, 0xF0, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0xF0, 0x0F, 0x0F}) == 0x00); int test_mm512_mask_reduce_add_epi32(__mmask16 __M, __m512i __W){ -// CHECK-LABEL: @test_mm512_mask_reduce_add_epi32( +// CHECK-LABEL: test_mm512_mask_reduce_add_epi32 // CHECK: select <16 x i1> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}} -// CHECK: call i32 @llvm.vector.reduce.add.v16i32(<16 x i32> %{{.*}}) +// CHECK: call {{.*}}i32 @llvm.vector.reduce.add.v16i32(<16 x i32> %{{.*}}) return _mm512_mask_reduce_add_epi32(__M, __W); } int test_mm512_mask_reduce_mul_epi32(__mmask16 __M, __m512i __W){ -// CHECK-LABEL: @test_mm512_mask_reduce_mul_epi32( +// CHECK-LABEL: test_mm512_mask_reduce_mul_epi32 // CHECK: select <16 x i1> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}} -// CHECK: call i32 @llvm.vector.reduce.mul.v16i32(<16 x i32> %{{.*}}) +// CHECK: call {{.*}}i32 @llvm.vector.reduce.mul.v16i32(<16 x i32> %{{.*}}) return _mm512_mask_reduce_mul_epi32(__M, __W); } int test_mm512_mask_reduce_and_epi32(__mmask16 __M, __m512i __W){ -// CHECK-LABEL: @test_mm512_mask_reduce_and_epi32( +// CHECK-LABEL: test_mm512_mask_reduce_and_epi32 // CHECK: select <16 x i1> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}} -// CHECK: call i32 @llvm.vector.reduce.and.v16i32(<16 x i32> %{{.*}}) +// CHECK: call {{.*}}i32 @llvm.vector.reduce.and.v16i32(<16 x i32> %{{.*}}) return _mm512_mask_reduce_and_epi32(__M, __W); } int test_mm512_mask_reduce_or_epi32(__mmask16 __M, __m512i __W){ -// CHECK-LABEL: @test_mm512_mask_reduce_or_epi32( +// CHECK-LABEL: test_mm512_mask_reduce_or_epi32 // CHECK: select <16 x i1> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}} -// CHECK: call i32 @llvm.vector.reduce.or.v16i32(<16 x i32> %{{.*}}) +// CHECK: call {{.*}}i32 @llvm.vector.reduce.or.v16i32(<16 x i32> %{{.*}}) return _mm512_mask_reduce_or_epi32(__M, __W); } double test_mm512_reduce_add_pd(__m512d __W, double ExtraAddOp){ -// CHECK-LABEL: @test_mm512_reduce_add_pd( +// CHECK-LABEL: test_mm512_reduce_add_pd // CHECK-NOT: reassoc -// CHECK: call reassoc double @llvm.vector.reduce.fadd.v8f64(double -0.000000e+00, <8 x double> %{{.*}}) +// CHECK: call reassoc {{.*}}double @llvm.vector.reduce.fadd.v8f64(double -0.000000e+00, <8 x double> %{{.*}}) // CHECK-NOT: reassoc return _mm512_reduce_add_pd(__W) + ExtraAddOp; } double test_mm512_reduce_mul_pd(__m512d __W, double ExtraMulOp){ -// CHECK-LABEL: @test_mm512_reduce_mul_pd( +// CHECK-LABEL: test_mm512_reduce_mul_pd // CHECK-NOT: reassoc -// CHECK: call reassoc double @llvm.vector.reduce.fmul.v8f64(double 1.000000e+00, <8 x double> %{{.*}}) +// CHECK: call reassoc {{.*}}double @llvm.vector.reduce.fmul.v8f64(double 1.000000e+00, <8 x double> %{{.*}}) // CHECK-NOT: reassoc return _mm512_reduce_mul_pd(__W) * ExtraMulOp; } float test_mm512_reduce_add_ps(__m512 __W){ -// CHECK-LABEL: @test_mm512_reduce_add_ps( -// CHECK: call reassoc float @llvm.vector.reduce.fadd.v16f32(float -0.000000e+00, <16 x float> %{{.*}}) +// CHECK-LABEL: test_mm512_reduce_add_ps +// CHECK: call reassoc {{.*}}float @llvm.vector.reduce.fadd.v16f32(float -0.000000e+00, <16 x float> %{{.*}}) return _mm512_reduce_add_ps(__W); } float test_mm512_reduce_mul_ps(__m512 __W){ -// CHECK-LABEL: @test_mm512_reduce_mul_ps( -// CHECK: call reassoc float @llvm.vector.reduce.fmul.v16f32(float 1.000000e+00, <16 x float> %{{.*}}) +// CHECK-LABEL: test_mm512_reduce_mul_ps +// CHECK: call reassoc {{.*}}float @llvm.vector.reduce.fmul.v16f32(float 1.000000e+00, <16 x float> %{{.*}}) return _mm512_reduce_mul_ps(__W); } double test_mm512_mask_reduce_add_pd(__mmask8 __M, __m512d __W){ -// CHECK-LABEL: @test_mm512_mask_reduce_add_pd( +// CHECK-LABEL: test_mm512_mask_reduce_add_pd // CHECK: select <8 x i1> %{{.*}}, <8 x double> %{{.*}}, <8 x double> %{{.*}} -// CHECK: call reassoc double @llvm.vector.reduce.fadd.v8f64(double -0.000000e+00, <8 x double> %{{.*}}) +// CHECK: call reassoc {{.*}}double @llvm.vector.reduce.fadd.v8f64(double -0.000000e+00, <8 x double> %{{.*}}) return _mm512_mask_reduce_add_pd(__M, __W); } double test_mm512_mask_reduce_mul_pd(__mmask8 __M, __m512d __W){ -// CHECK-LABEL: @test_mm512_mask_reduce_mul_pd( +// CHECK-LABEL: test_mm512_mask_reduce_mul_pd // CHECK: select <8 x i1> %{{.*}}, <8 x double> %{{.*}}, <8 x double> %{{.*}} -// CHECK: call reassoc double @llvm.vector.reduce.fmul.v8f64(double 1.000000e+00, <8 x double> %{{.*}}) +// CHECK: call reassoc {{.*}}double @llvm.vector.reduce.fmul.v8f64(double 1.000000e+00, <8 x double> %{{.*}}) return _mm512_mask_reduce_mul_pd(__M, __W); } float test_mm512_mask_reduce_add_ps(__mmask16 __M, __m512 __W){ -// CHECK-LABEL: @test_mm512_mask_reduce_add_ps( +// CHECK-LABEL: test_mm512_mask_reduce_add_ps // CHECK: select <16 x i1> %{{.*}}, <16 x float> {{.*}}, <16 x float> {{.*}} -// CHECK: call reassoc float @llvm.vector.reduce.fadd.v16f32(float -0.000000e+00, <16 x float> %{{.*}}) +// CHECK: call reassoc {{.*}}float @llvm.vector.reduce.fadd.v16f32(float -0.000000e+00, <16 x float> %{{.*}}) return _mm512_mask_reduce_add_ps(__M, __W); } float test_mm512_mask_reduce_mul_ps(__mmask16 __M, __m512 __W){ -// CHECK-LABEL: @test_mm512_mask_reduce_mul_ps( +// CHECK-LABEL: test_mm512_mask_reduce_mul_ps // CHECK: select <16 x i1> %{{.*}}, <16 x float> {{.*}}, <16 x float> %{{.*}} -// CHECK: call reassoc float @llvm.vector.reduce.fmul.v16f32(float 1.000000e+00, <16 x float> %{{.*}}) +// CHECK: call reassoc {{.*}}float @llvm.vector.reduce.fmul.v16f32(float 1.000000e+00, <16 x float> %{{.*}}) return _mm512_mask_reduce_mul_ps(__M, __W); } diff --git a/clang/test/CodeGen/X86/avx512-reduceMinMaxIntrin.c b/clang/test/CodeGen/X86/avx512-reduceMinMaxIntrin.c index 3e33ec5..309fc28 100644 --- a/clang/test/CodeGen/X86/avx512-reduceMinMaxIntrin.c +++ b/clang/test/CodeGen/X86/avx512-reduceMinMaxIntrin.c @@ -1,164 +1,180 @@ -// RUN: %clang_cc1 -ffreestanding %s -O0 -triple=x86_64-apple-darwin -target-cpu skylake-avx512 -emit-llvm -o - -Wall -Werror | FileCheck %s +// RUN: %clang_cc1 -x c -ffreestanding %s -O0 -triple=x86_64-apple-darwin -target-cpu skylake-avx512 -emit-llvm -o - -Wall -Werror | FileCheck %s +// RUN: %clang_cc1 -x c -ffreestanding %s -O0 -triple=i386-apple-darwin -target-cpu skylake-avx512 -emit-llvm -o - -Wall -Werror | FileCheck %s +// RUN: %clang_cc1 -x c++ -ffreestanding %s -O0 -triple=x86_64-apple-darwin -target-cpu skylake-avx512 -emit-llvm -o - -Wall -Werror | FileCheck %s +// RUN: %clang_cc1 -x c++ -ffreestanding %s -O0 -triple=i386-apple-darwin -target-cpu skylake-avx512 -emit-llvm -o - -Wall -Werror | FileCheck %s + +// RUN: %clang_cc1 -x c -ffreestanding %s -O0 -triple=x86_64-apple-darwin -target-cpu skylake-avx512 -emit-llvm -o - -Wall -Werror -fexperimental-new-constant-interpreter | FileCheck %s +// RUN: %clang_cc1 -x c -ffreestanding %s -O0 -triple=i386-apple-darwin -target-cpu skylake-avx512 -emit-llvm -o - -Wall -Werror -fexperimental-new-constant-interpreter | FileCheck %s +// RUN: %clang_cc1 -x c++ -ffreestanding %s -O0 -triple=x86_64-apple-darwin -target-cpu skylake-avx512 -emit-llvm -o - -Wall -Werror -fexperimental-new-constant-interpreter | FileCheck %s +// RUN: %clang_cc1 -x c++ -ffreestanding %s -O0 -triple=i386-apple-darwin -target-cpu skylake-avx512 -emit-llvm -o - -Wall -Werror -fexperimental-new-constant-interpreter | FileCheck %s #include <immintrin.h> +#include "builtin_test_helpers.h" long long test_mm512_reduce_max_epi64(__m512i __W){ -// CHECK-LABEL: @test_mm512_reduce_max_epi64( -// CHECK: call i64 @llvm.vector.reduce.smax.v8i64(<8 x i64> %{{.*}}) +// CHECK-LABEL: test_mm512_reduce_max_epi64 +// CHECK: call {{.*}}i64 @llvm.vector.reduce.smax.v8i64(<8 x i64> %{{.*}}) return _mm512_reduce_max_epi64(__W); } +TEST_CONSTEXPR(_mm512_reduce_max_epi64((__m512i)(__v8di){-4, -3, -2, -1, 0, 1, 2, 3}) == 3); unsigned long long test_mm512_reduce_max_epu64(__m512i __W){ -// CHECK-LABEL: @test_mm512_reduce_max_epu64( -// CHECK: call i64 @llvm.vector.reduce.umax.v8i64(<8 x i64> %{{.*}}) +// CHECK-LABEL: test_mm512_reduce_max_epu64 +// CHECK: call {{.*}}i64 @llvm.vector.reduce.umax.v8i64(<8 x i64> %{{.*}}) return _mm512_reduce_max_epu64(__W); } +TEST_CONSTEXPR(_mm512_reduce_max_epu64((__m512i)(__v8du){0, 1, 2, 3, 4, 5, 6, 7}) == 7); double test_mm512_reduce_max_pd(__m512d __W, double ExtraAddOp){ -// CHECK-LABEL: @test_mm512_reduce_max_pd( +// CHECK-LABEL: test_mm512_reduce_max_pd // CHECK-NOT: nnan -// CHECK: call nnan double @llvm.vector.reduce.fmax.v8f64(<8 x double> %{{.*}}) +// CHECK: call nnan {{.*}}double @llvm.vector.reduce.fmax.v8f64(<8 x double> %{{.*}}) // CHECK-NOT: nnan return _mm512_reduce_max_pd(__W) + ExtraAddOp; } long long test_mm512_reduce_min_epi64(__m512i __W){ -// CHECK-LABEL: @test_mm512_reduce_min_epi64( -// CHECK: call i64 @llvm.vector.reduce.smin.v8i64(<8 x i64> %{{.*}}) +// CHECK-LABEL: test_mm512_reduce_min_epi64 +// CHECK: call {{.*}}i64 @llvm.vector.reduce.smin.v8i64(<8 x i64> %{{.*}}) return _mm512_reduce_min_epi64(__W); } +TEST_CONSTEXPR(_mm512_reduce_min_epi64((__m512i)(__v8di){-4, -3, -2, -1, 0, 1, 2, 3}) == -4); unsigned long long test_mm512_reduce_min_epu64(__m512i __W){ -// CHECK-LABEL: @test_mm512_reduce_min_epu64( -// CHECK: call i64 @llvm.vector.reduce.umin.v8i64(<8 x i64> %{{.*}}) +// CHECK-LABEL: test_mm512_reduce_min_epu64 +// CHECK: call {{.*}}i64 @llvm.vector.reduce.umin.v8i64(<8 x i64> %{{.*}}) return _mm512_reduce_min_epu64(__W); } +TEST_CONSTEXPR(_mm512_reduce_min_epu64((__m512i)(__v8du){0, 1, 2, 3, 4, 5, 6, 7}) == 0); double test_mm512_reduce_min_pd(__m512d __W, double ExtraMulOp){ -// CHECK-LABEL: @test_mm512_reduce_min_pd( +// CHECK-LABEL: test_mm512_reduce_min_pd // CHECK-NOT: nnan -// CHECK: call nnan double @llvm.vector.reduce.fmin.v8f64(<8 x double> %{{.*}}) +// CHECK: call nnan {{.*}}double @llvm.vector.reduce.fmin.v8f64(<8 x double> %{{.*}}) // CHECK-NOT: nnan return _mm512_reduce_min_pd(__W) * ExtraMulOp; } long long test_mm512_mask_reduce_max_epi64(__mmask8 __M, __m512i __W){ -// CHECK-LABEL: @test_mm512_mask_reduce_max_epi64( +// CHECK-LABEL: test_mm512_mask_reduce_max_epi64 // CHECK: select <8 x i1> %{{.*}}, <8 x i64> %{{.*}}, <8 x i64> %{{.*}} -// CHECK: call i64 @llvm.vector.reduce.smax.v8i64(<8 x i64> %{{.*}}) +// CHECK: call {{.*}}i64 @llvm.vector.reduce.smax.v8i64(<8 x i64> %{{.*}}) return _mm512_mask_reduce_max_epi64(__M, __W); } unsigned long test_mm512_mask_reduce_max_epu64(__mmask8 __M, __m512i __W){ -// CHECK-LABEL: @test_mm512_mask_reduce_max_epu64( +// CHECK-LABEL: test_mm512_mask_reduce_max_epu64 // CHECK: select <8 x i1> %{{.*}}, <8 x i64> %{{.*}}, <8 x i64> %{{.*}} -// CHECK: call i64 @llvm.vector.reduce.umax.v8i64(<8 x i64> %{{.*}}) +// CHECK: call {{.*}}i64 @llvm.vector.reduce.umax.v8i64(<8 x i64> %{{.*}}) return _mm512_mask_reduce_max_epu64(__M, __W); } double test_mm512_mask_reduce_max_pd(__mmask8 __M, __m512d __W){ -// CHECK-LABEL: @test_mm512_mask_reduce_max_pd( +// CHECK-LABEL: test_mm512_mask_reduce_max_pd // CHECK: select <8 x i1> %{{.*}}, <8 x double> %{{.*}}, <8 x double> %{{.*}} -// CHECK: call nnan double @llvm.vector.reduce.fmax.v8f64(<8 x double> %{{.*}}) +// CHECK: call nnan {{.*}}double @llvm.vector.reduce.fmax.v8f64(<8 x double> %{{.*}}) return _mm512_mask_reduce_max_pd(__M, __W); } long long test_mm512_mask_reduce_min_epi64(__mmask8 __M, __m512i __W){ -// CHECK-LABEL: @test_mm512_mask_reduce_min_epi64( +// CHECK-LABEL: test_mm512_mask_reduce_min_epi64 // CHECK: select <8 x i1> %{{.*}}, <8 x i64> %{{.*}}, <8 x i64> %{{.*}} -// CHECK: call i64 @llvm.vector.reduce.smin.v8i64(<8 x i64> %{{.*}}) +// CHECK: call {{.*}}i64 @llvm.vector.reduce.smin.v8i64(<8 x i64> %{{.*}}) return _mm512_mask_reduce_min_epi64(__M, __W); } unsigned long long test_mm512_mask_reduce_min_epu64(__mmask8 __M, __m512i __W){ -// CHECK-LABEL: @test_mm512_mask_reduce_min_epu64( +// CHECK-LABEL: test_mm512_mask_reduce_min_epu64 // CHECK: select <8 x i1> %{{.*}}, <8 x i64> %{{.*}}, <8 x i64> %{{.*}} -// CHECK: call i64 @llvm.vector.reduce.umin.v8i64(<8 x i64> %{{.*}}) +// CHECK: call {{.*}}i64 @llvm.vector.reduce.umin.v8i64(<8 x i64> %{{.*}}) return _mm512_mask_reduce_min_epu64(__M, __W); } double test_mm512_mask_reduce_min_pd(__mmask8 __M, __m512d __W){ -// CHECK-LABEL: @test_mm512_mask_reduce_min_pd( +// CHECK-LABEL: test_mm512_mask_reduce_min_pd // CHECK: select <8 x i1> %{{.*}}, <8 x double> %{{.*}}, <8 x double> %{{.*}} -// CHECK: call nnan double @llvm.vector.reduce.fmin.v8f64(<8 x double> %{{.*}}) +// CHECK: call nnan {{.*}}double @llvm.vector.reduce.fmin.v8f64(<8 x double> %{{.*}}) return _mm512_mask_reduce_min_pd(__M, __W); } int test_mm512_reduce_max_epi32(__m512i __W){ -// CHECK-LABEL: @test_mm512_reduce_max_epi32( -// CHECK: call i32 @llvm.vector.reduce.smax.v16i32(<16 x i32> %{{.*}}) +// CHECK-LABEL: test_mm512_reduce_max_epi32 +// CHECK: call {{.*}}i32 @llvm.vector.reduce.smax.v16i32(<16 x i32> %{{.*}}) return _mm512_reduce_max_epi32(__W); } +TEST_CONSTEXPR(_mm512_reduce_max_epi32((__m512i)(__v16si){-8, -7, -6, -5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5, 6, 7}) == 7); unsigned int test_mm512_reduce_max_epu32(__m512i __W){ -// CHECK-LABEL: @test_mm512_reduce_max_epu32( -// CHECK: call i32 @llvm.vector.reduce.umax.v16i32(<16 x i32> %{{.*}}) +// CHECK-LABEL: test_mm512_reduce_max_epu32 +// CHECK: call {{.*}}i32 @llvm.vector.reduce.umax.v16i32(<16 x i32> %{{.*}}) return _mm512_reduce_max_epu32(__W); } +TEST_CONSTEXPR(_mm512_reduce_max_epu32((__m512i)(__v16su){0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}) == 15); float test_mm512_reduce_max_ps(__m512 __W){ -// CHECK-LABEL: @test_mm512_reduce_max_ps( -// CHECK: call nnan float @llvm.vector.reduce.fmax.v16f32(<16 x float> %{{.*}}) +// CHECK-LABEL: test_mm512_reduce_max_ps +// CHECK: call nnan {{.*}}float @llvm.vector.reduce.fmax.v16f32(<16 x float> %{{.*}}) return _mm512_reduce_max_ps(__W); } int test_mm512_reduce_min_epi32(__m512i __W){ -// CHECK-LABEL: @test_mm512_reduce_min_epi32( -// CHECK: call i32 @llvm.vector.reduce.smin.v16i32(<16 x i32> %{{.*}}) +// CHECK-LABEL: test_mm512_reduce_min_epi32 +// CHECK: call {{.*}}i32 @llvm.vector.reduce.smin.v16i32(<16 x i32> %{{.*}}) return _mm512_reduce_min_epi32(__W); } +TEST_CONSTEXPR(_mm512_reduce_min_epi32((__m512i)(__v16si){-8, -7, -6, -5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5, 6, 7}) == -8); unsigned int test_mm512_reduce_min_epu32(__m512i __W){ -// CHECK-LABEL: @test_mm512_reduce_min_epu32( -// CHECK: call i32 @llvm.vector.reduce.umin.v16i32(<16 x i32> %{{.*}}) +// CHECK-LABEL: test_mm512_reduce_min_epu32 +// CHECK: call {{.*}}i32 @llvm.vector.reduce.umin.v16i32(<16 x i32> %{{.*}}) return _mm512_reduce_min_epu32(__W); } +TEST_CONSTEXPR(_mm512_reduce_min_epu32((__m512i)(__v16su){0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}) == 0); float test_mm512_reduce_min_ps(__m512 __W){ -// CHECK-LABEL: @test_mm512_reduce_min_ps( -// CHECK: call nnan float @llvm.vector.reduce.fmin.v16f32(<16 x float> %{{.*}}) +// CHECK-LABEL: test_mm512_reduce_min_ps +// CHECK: call nnan {{.*}}float @llvm.vector.reduce.fmin.v16f32(<16 x float> %{{.*}}) return _mm512_reduce_min_ps(__W); } int test_mm512_mask_reduce_max_epi32(__mmask16 __M, __m512i __W){ -// CHECK-LABEL: @test_mm512_mask_reduce_max_epi32( +// CHECK-LABEL: test_mm512_mask_reduce_max_epi32 // CHECK: select <16 x i1> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}} -// CHECK: call i32 @llvm.vector.reduce.smax.v16i32(<16 x i32> %{{.*}}) +// CHECK: call {{.*}}i32 @llvm.vector.reduce.smax.v16i32(<16 x i32> %{{.*}}) return _mm512_mask_reduce_max_epi32(__M, __W); } unsigned int test_mm512_mask_reduce_max_epu32(__mmask16 __M, __m512i __W){ -// CHECK-LABEL: @test_mm512_mask_reduce_max_epu32( +// CHECK-LABEL: test_mm512_mask_reduce_max_epu32 // CHECK: select <16 x i1> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}} -// CHECK: call i32 @llvm.vector.reduce.umax.v16i32(<16 x i32> %{{.*}}) +// CHECK: call {{.*}}i32 @llvm.vector.reduce.umax.v16i32(<16 x i32> %{{.*}}) return _mm512_mask_reduce_max_epu32(__M, __W); } float test_mm512_mask_reduce_max_ps(__mmask16 __M, __m512 __W){ -// CHECK-LABEL: @test_mm512_mask_reduce_max_ps( +// CHECK-LABEL: test_mm512_mask_reduce_max_ps // CHECK: select <16 x i1> %{{.*}}, <16 x float> %{{.*}}, <16 x float> %{{.*}} -// CHECK: call nnan float @llvm.vector.reduce.fmax.v16f32(<16 x float> %{{.*}}) +// CHECK: call nnan {{.*}}float @llvm.vector.reduce.fmax.v16f32(<16 x float> %{{.*}}) return _mm512_mask_reduce_max_ps(__M, __W); } int test_mm512_mask_reduce_min_epi32(__mmask16 __M, __m512i __W){ -// CHECK-LABEL: @test_mm512_mask_reduce_min_epi32( +// CHECK-LABEL: test_mm512_mask_reduce_min_epi32 // CHECK: select <16 x i1> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}} -// CHECK: call i32 @llvm.vector.reduce.smin.v16i32(<16 x i32> %{{.*}}) +// CHECK: call {{.*}}i32 @llvm.vector.reduce.smin.v16i32(<16 x i32> %{{.*}}) return _mm512_mask_reduce_min_epi32(__M, __W); } unsigned int test_mm512_mask_reduce_min_epu32(__mmask16 __M, __m512i __W){ -// CHECK-LABEL: @test_mm512_mask_reduce_min_epu32( +// CHECK-LABEL: test_mm512_mask_reduce_min_epu32 // CHECK: select <16 x i1> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}} -// CHECK: call i32 @llvm.vector.reduce.umin.v16i32(<16 x i32> %{{.*}}) +// CHECK: call {{.*}}i32 @llvm.vector.reduce.umin.v16i32(<16 x i32> %{{.*}}) return _mm512_mask_reduce_min_epu32(__M, __W); } float test_mm512_mask_reduce_min_ps(__mmask16 __M, __m512 __W){ -// CHECK-LABEL: @test_mm512_mask_reduce_min_ps( +// CHECK-LABEL: test_mm512_mask_reduce_min_ps // CHECK: select <16 x i1> %{{.*}}, <16 x float> %{{.*}}, <16 x float> %{{.*}} -// CHECK: call nnan float @llvm.vector.reduce.fmin.v16f32(<16 x float> %{{.*}}) +// CHECK: call nnan {{.*}}float @llvm.vector.reduce.fmin.v16f32(<16 x float> %{{.*}}) return _mm512_mask_reduce_min_ps(__M, __W); } - diff --git a/clang/test/CodeGen/X86/avx512bf16-builtins.c b/clang/test/CodeGen/X86/avx512bf16-builtins.c index 8eb93e6..52c20aa 100644 --- a/clang/test/CodeGen/X86/avx512bf16-builtins.c +++ b/clang/test/CodeGen/X86/avx512bf16-builtins.c @@ -1,107 +1,96 @@ -// RUN: %clang_cc1 -flax-vector-conversions=none -ffreestanding %s -triple=x86_64-apple-darwin \ -// RUN: -target-feature +avx512bf16 -emit-llvm -o - -Wall -Werror \ -// RUN: | FileCheck %s +// RUN: %clang_cc1 -x c -flax-vector-conversions=none -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +avx512bf16 -emit-llvm -o - -Wall -Werror | FileCheck %s +// RUN: %clang_cc1 -x c -flax-vector-conversions=none -ffreestanding %s -triple=i386-apple-darwin -target-feature +avx512bf16 -emit-llvm -o - -Wall -Werror | FileCheck %s +// RUN: %clang_cc1 -x c++ -flax-vector-conversions=none -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +avx512bf16 -emit-llvm -o - -Wall -Werror | FileCheck %s +// RUN: %clang_cc1 -x c++ -flax-vector-conversions=none -ffreestanding %s -triple=i386-apple-darwin -target-feature +avx512bf16 -emit-llvm -o - -Wall -Werror | FileCheck %s #include <immintrin.h> float test_mm_cvtsbh_ss(__bf16 A) { - // CHECK-LABEL: @test_mm_cvtsbh_ss + // CHECK-LABEL: test_mm_cvtsbh_ss // CHECK: fpext bfloat %{{.*}} to float // CHECK: ret float %{{.*}} return _mm_cvtsbh_ss(A); } __m512bh test_mm512_cvtne2ps_pbh(__m512 A, __m512 B) { - // CHECK-LABEL: @test_mm512_cvtne2ps_pbh - // CHECK: @llvm.x86.avx512bf16.cvtne2ps2bf16.512 - // CHECK: ret <32 x bfloat> %{{.*}} + // CHECK-LABEL: test_mm512_cvtne2ps_pbh + // CHECK: call {{.*}}<32 x bfloat> @llvm.x86.avx512bf16.cvtne2ps2bf16.512(<16 x float> %{{.*}}, <16 x float> %{{.*}}) return _mm512_cvtne2ps_pbh(A, B); } __m512bh test_mm512_maskz_cvtne2ps_pbh(__m512 A, __m512 B, __mmask32 U) { - // CHECK-LABEL: @test_mm512_maskz_cvtne2ps_pbh - // CHECK: @llvm.x86.avx512bf16.cvtne2ps2bf16.512 + // CHECK-LABEL: test_mm512_maskz_cvtne2ps_pbh + // CHECK: call {{.*}}<32 x bfloat> @llvm.x86.avx512bf16.cvtne2ps2bf16.512(<16 x float> %{{.*}}, <16 x float> %{{.*}}) // CHECK: select <32 x i1> %{{.*}}, <32 x bfloat> %{{.*}}, <32 x bfloat> %{{.*}} - // CHECK: ret <32 x bfloat> %{{.*}} return _mm512_maskz_cvtne2ps_pbh(U, A, B); } __m512bh test_mm512_mask_cvtne2ps_pbh(__m512bh C, __mmask32 U, __m512 A, __m512 B) { - // CHECK-LABEL: @test_mm512_mask_cvtne2ps_pbh - // CHECK: @llvm.x86.avx512bf16.cvtne2ps2bf16.512 + // CHECK-LABEL: test_mm512_mask_cvtne2ps_pbh + // CHECK: call {{.*}}<32 x bfloat> @llvm.x86.avx512bf16.cvtne2ps2bf16.512(<16 x float> %{{.*}}, <16 x float> %{{.*}}) // CHECK: select <32 x i1> %{{.*}}, <32 x bfloat> %{{.*}}, <32 x bfloat> %{{.*}} - // CHECK: ret <32 x bfloat> %{{.*}} return _mm512_mask_cvtne2ps_pbh(C, U, A, B); } __m256bh test_mm512_cvtneps_pbh(__m512 A) { - // CHECK-LABEL: @test_mm512_cvtneps_pbh - // CHECK: @llvm.x86.avx512bf16.cvtneps2bf16.512 - // CHECK: ret <16 x bfloat> %{{.*}} + // CHECK-LABEL: test_mm512_cvtneps_pbh + // CHECK: call {{.*}}<16 x bfloat> @llvm.x86.avx512bf16.cvtneps2bf16.512(<16 x float> %{{.*}}) return _mm512_cvtneps_pbh(A); } __m256bh test_mm512_mask_cvtneps_pbh(__m256bh C, __mmask16 U, __m512 A) { - // CHECK-LABEL: @test_mm512_mask_cvtneps_pbh - // CHECK: @llvm.x86.avx512bf16.cvtneps2bf16.512 + // CHECK-LABEL: test_mm512_mask_cvtneps_pbh + // CHECK: call {{.*}}<16 x bfloat> @llvm.x86.avx512bf16.cvtneps2bf16.512(<16 x float> %{{.*}}) // CHECK: select <16 x i1> %{{.*}}, <16 x bfloat> %{{.*}}, <16 x bfloat> %{{.*}} - // CHECK: ret <16 x bfloat> %{{.*}} return _mm512_mask_cvtneps_pbh(C, U, A); } __m256bh test_mm512_maskz_cvtneps_pbh(__m512 A, __mmask16 U) { - // CHECK-LABEL: @test_mm512_maskz_cvtneps_pbh - // CHECK: @llvm.x86.avx512bf16.cvtneps2bf16.512 + // CHECK-LABEL: test_mm512_maskz_cvtneps_pbh + // CHECK: call {{.*}}<16 x bfloat> @llvm.x86.avx512bf16.cvtneps2bf16.512(<16 x float> %{{.*}}) // CHECK: select <16 x i1> %{{.*}}, <16 x bfloat> %{{.*}}, <16 x bfloat> %{{.*}} - // CHECK: ret <16 x bfloat> %{{.*}} return _mm512_maskz_cvtneps_pbh(U, A); } __m512 test_mm512_dpbf16_ps(__m512 D, __m512bh A, __m512bh B) { - // CHECK-LABEL: @test_mm512_dpbf16_ps - // CHECK: @llvm.x86.avx512bf16.dpbf16ps.512 - // CHECK: ret <16 x float> %{{.*}} + // CHECK-LABEL: test_mm512_dpbf16_ps + // CHECK: call {{.*}}<16 x float> @llvm.x86.avx512bf16.dpbf16ps.512(<16 x float> %{{.*}}, <32 x bfloat> %{{.*}}, <32 x bfloat> %{{.*}}) return _mm512_dpbf16_ps(D, A, B); } __m512 test_mm512_maskz_dpbf16_ps(__m512 D, __m512bh A, __m512bh B, __mmask16 U) { - // CHECK-LABEL: @test_mm512_maskz_dpbf16_ps - // CHECK: @llvm.x86.avx512bf16.dpbf16ps.512 + // CHECK-LABEL: test_mm512_maskz_dpbf16_ps + // CHECK: call {{.*}}<16 x float> @llvm.x86.avx512bf16.dpbf16ps.512(<16 x float> %{{.*}}, <32 x bfloat> %{{.*}}, <32 x bfloat> %{{.*}}) // CHECK: select <16 x i1> %{{.*}}, <16 x float> %{{.*}}, <16 x float> %{{.*}} - // CHECK: ret <16 x float> %{{.*}} return _mm512_maskz_dpbf16_ps(U, D, A, B); } __m512 test_mm512_mask_dpbf16_ps(__m512 D, __m512bh A, __m512bh B, __mmask16 U) { - // CHECK-LABEL: @test_mm512_mask_dpbf16_ps - // CHECK: @llvm.x86.avx512bf16.dpbf16ps.512 + // CHECK-LABEL: test_mm512_mask_dpbf16_ps + // CHECK: call {{.*}}<16 x float> @llvm.x86.avx512bf16.dpbf16ps.512(<16 x float> %{{.*}}, <32 x bfloat> %{{.*}}, <32 x bfloat> %{{.*}}) // CHECK: select <16 x i1> %{{.*}}, <16 x float> %{{.*}}, <16 x float> %{{.*}} - // CHECK: ret <16 x float> %{{.*}} return _mm512_mask_dpbf16_ps(D, U, A, B); } __m512 test_mm512_cvtpbh_ps(__m256bh A) { - // CHECK-LABEL: @test_mm512_cvtpbh_ps + // CHECK-LABEL: test_mm512_cvtpbh_ps // CHECK: sext <16 x i16> %{{.*}} to <16 x i32> - // CHECK: @llvm.x86.avx512.pslli.d.512 - // CHECK: ret <16 x float> %{{.*}} + // CHECK: call <16 x i32> @llvm.x86.avx512.pslli.d.512(<16 x i32> %{{.*}}, i32 %{{.*}}) return _mm512_cvtpbh_ps(A); } __m512 test_mm512_maskz_cvtpbh_ps(__mmask16 M, __m256bh A) { - // CHECK-LABEL: @test_mm512_maskz_cvtpbh_ps + // CHECK-LABEL: test_mm512_maskz_cvtpbh_ps // CHECK: sext <16 x i16> %{{.*}} to <16 x i32> // CHECK: select <16 x i1> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}} - // CHECK: @llvm.x86.avx512.pslli.d.512 - // CHECK: ret <16 x float> %{{.*}} + // CHECK: call <16 x i32> @llvm.x86.avx512.pslli.d.512(<16 x i32> %{{.*}}, i32 %{{.*}}) return _mm512_maskz_cvtpbh_ps(M, A); } __m512 test_mm512_mask_cvtpbh_ps(__m512 S, __mmask16 M, __m256bh A) { - // CHECK-LABEL: @test_mm512_mask_cvtpbh_ps + // CHECK-LABEL: test_mm512_mask_cvtpbh_ps // CHECK: sext <16 x i16> %{{.*}} to <16 x i32> - // CHECK: @llvm.x86.avx512.pslli.d.512 + // CHECK: call <16 x i32> @llvm.x86.avx512.pslli.d.512(<16 x i32> %{{.*}}, i32 %{{.*}}) // CHECK: select <16 x i1> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}} - // CHECK: ret <16 x float> %{{.*}} return _mm512_mask_cvtpbh_ps(S, M, A); } diff --git a/clang/test/CodeGen/X86/avx512bitalg-builtins.c b/clang/test/CodeGen/X86/avx512bitalg-builtins.c index c80fb5e..3ac8674 100644 --- a/clang/test/CodeGen/X86/avx512bitalg-builtins.c +++ b/clang/test/CodeGen/X86/avx512bitalg-builtins.c @@ -1,54 +1,72 @@ -// RUN: %clang_cc1 -flax-vector-conversions=none -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +avx512bitalg -emit-llvm -o - -Wall -Werror | FileCheck %s +// RUN: %clang_cc1 -x c -flax-vector-conversions=none -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +avx512bitalg -emit-llvm -o - -Wall -Werror | FileCheck %s +// RUN: %clang_cc1 -x c -flax-vector-conversions=none -ffreestanding %s -triple=i386-apple-darwin -target-feature +avx512bitalg -emit-llvm -o - -Wall -Werror | FileCheck %s +// RUN: %clang_cc1 -x c++ -flax-vector-conversions=none -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +avx512bitalg -emit-llvm -o - -Wall -Werror | FileCheck %s +// RUN: %clang_cc1 -x c++ -flax-vector-conversions=none -ffreestanding %s -triple=i386-apple-darwin -target-feature +avx512bitalg -emit-llvm -o - -Wall -Werror | FileCheck %s + +// RUN: %clang_cc1 -x c -flax-vector-conversions=none -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +avx512bitalg -emit-llvm -o - -Wall -Werror -fexperimental-new-constant-interpreter | FileCheck %s +// RUN: %clang_cc1 -x c -flax-vector-conversions=none -ffreestanding %s -triple=i386-apple-darwin -target-feature +avx512bitalg -emit-llvm -o - -Wall -Werror -fexperimental-new-constant-interpreter | FileCheck %s +// RUN: %clang_cc1 -x c++ -flax-vector-conversions=none -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +avx512bitalg -emit-llvm -o - -Wall -Werror -fexperimental-new-constant-interpreter | FileCheck %s +// RUN: %clang_cc1 -x c++ -flax-vector-conversions=none -ffreestanding %s -triple=i386-apple-darwin -target-feature +avx512bitalg -emit-llvm -o - -Wall -Werror -fexperimental-new-constant-interpreter | FileCheck %s + #include <immintrin.h> +#include "builtin_test_helpers.h" __m512i test_mm512_popcnt_epi16(__m512i __A) { - // CHECK-LABEL: @test_mm512_popcnt_epi16 + // CHECK-LABEL: test_mm512_popcnt_epi16 // CHECK: @llvm.ctpop.v32i16 return _mm512_popcnt_epi16(__A); } +TEST_CONSTEXPR(match_v32hi(_mm512_popcnt_epi16((__m512i)(__v32hi){+5, -3, -10, +8, 0, -256, +256, -128, +3, +9, +15, +33, +63, +129, +511, +1025, +5, -3, -10, +8, 0, -256, +256, -128, +3, +9, +15, +33, +63, +129, +511, +1025}), 2, 15, 14, 1, 0, 8, 1, 9, 2, 2, 4, 2, 6, 2, 9, 2, 2, 15, 14, 1, 0, 8, 1, 9, 2, 2, 4, 2, 6, 2, 9, 2)); __m512i test_mm512_mask_popcnt_epi16(__m512i __A, __mmask32 __U, __m512i __B) { - // CHECK-LABEL: @test_mm512_mask_popcnt_epi16 + // CHECK-LABEL: test_mm512_mask_popcnt_epi16 // CHECK: @llvm.ctpop.v32i16 // CHECK: select <32 x i1> %{{[0-9]+}}, <32 x i16> %{{.*}}, <32 x i16> %{{.*}} return _mm512_mask_popcnt_epi16(__A, __U, __B); } +TEST_CONSTEXPR(match_v32hi(_mm512_mask_popcnt_epi16(_mm512_set1_epi16(-1), 0xF0F0F0F0, (__m512i)(__v32hi){+5, -3, -10, +8, 0, -256, +256, -128, +3, +9, +15, +33, +63, +129, +511, +1025, +5, -3, -10, +8, 0, -256, +256, -128, +3, +9, +15, +33, +63, +129, +511, +1025}), -1, -1, -1, -1, 0, 8, 1, 9, -1, -1, -1, -1, 6, 2, 9, 2, -1, -1, -1, -1, 0, 8, 1, 9, -1, -1, -1, -1, 6, 2, 9, 2)); + __m512i test_mm512_maskz_popcnt_epi16(__mmask32 __U, __m512i __B) { - // CHECK-LABEL: @test_mm512_maskz_popcnt_epi16 + // CHECK-LABEL: test_mm512_maskz_popcnt_epi16 // CHECK: @llvm.ctpop.v32i16 // CHECK: select <32 x i1> %{{[0-9]+}}, <32 x i16> %{{.*}}, <32 x i16> %{{.*}} return _mm512_maskz_popcnt_epi16(__U, __B); } +TEST_CONSTEXPR(match_v32hi(_mm512_maskz_popcnt_epi16(0x0F0F0F0F, (__m512i)(__v32hi){+5, -3, -10, +8, 0, -256, +256, -128, +3, +9, +15, +33, +63, +129, +511, +1025, +5, -3, -10, +8, 0, -256, +256, -128, +3, +9, +15, +33, +63, +129, +511, +1025}), 2, 15, 14, 1, 0, 0, 0, 0, 2, 2, 4, 2, 0, 0, 0, 0, 2, 15, 14, 1, 0, 0, 0, 0, 2, 2, 4, 2, 0, 0, 0, 0)); __m512i test_mm512_popcnt_epi8(__m512i __A) { - // CHECK-LABEL: @test_mm512_popcnt_epi8 + // CHECK-LABEL: test_mm512_popcnt_epi8 // CHECK: @llvm.ctpop.v64i8 return _mm512_popcnt_epi8(__A); } +TEST_CONSTEXPR(match_v64qi(_mm512_popcnt_epi8((__m512i)(__v64qi){+5, -3, -10, +8, 0, -16, +16, -16, +3, +9, +15, +33, +63, +33, +53, +73, +5, -3, -10, +8, 0, -16, +16, -16, +3, +9, +15, +33, +63, +33, +53, +73, +5, -3, -10, +8, 0, -16, +16, -16, +3, +9, +15, +33, +63, +33, +53, +73, +5, -3, -10, +8, 0, -16, +16, -16, +3, +9, +15, +33, +63, +33, +53, +73}), 2, 7, 6, 1, 0, 4, 1, 4, 2, 2, 4, 2, 6, 2, 4, 3, 2, 7, 6, 1, 0, 4, 1, 4, 2, 2, 4, 2, 6, 2, 4, 3, 2, 7, 6, 1, 0, 4, 1, 4, 2, 2, 4, 2, 6, 2, 4, 3, 2, 7, 6, 1, 0, 4, 1, 4, 2, 2, 4, 2, 6, 2, 4, 3)); __m512i test_mm512_mask_popcnt_epi8(__m512i __A, __mmask64 __U, __m512i __B) { - // CHECK-LABEL: @test_mm512_mask_popcnt_epi8 + // CHECK-LABEL: test_mm512_mask_popcnt_epi8 // CHECK: @llvm.ctpop.v64i8 // CHECK: select <64 x i1> %{{[0-9]+}}, <64 x i8> %{{.*}}, <64 x i8> %{{.*}} return _mm512_mask_popcnt_epi8(__A, __U, __B); } +TEST_CONSTEXPR(match_v64qi(_mm512_mask_popcnt_epi8(_mm512_set1_epi8(-1), 0xF0F0F0F00F0F0F0FULL, (__m512i)(__v64qi){+5, -3, -10, +8, 0, -16, +16, -16, +3, +9, +15, +33, +63, +33, +53, +73, +5, -3, -10, +8, 0, -16, +16, -16, +3, +9, +15, +33, +63, +33, +53, +73, +5, -3, -10, +8, 0, -16, +16, -16, +3, +9, +15, +33, +63, +33, +53, +73, +5, -3, -10, +8, 0, -16, +16, -16, +3, +9, +15, +33, +63, +33, +53, +73}), 2, 7, 6, 1, -1, -1, -1, -1, 2, 2, 4, 2, -1, -1, -1, -1, 2, 7, 6, 1, -1, -1, -1, -1, 2, 2, 4, 2, -1, -1, -1, -1, -1, -1, -1, -1, 0, 4, 1, 4, -1, -1, -1, -1, 6, 2, 4, 3, -1, -1, -1, -1, 0, 4, 1, 4, -1, -1, -1, -1, 6, 2, 4, 3)); + __m512i test_mm512_maskz_popcnt_epi8(__mmask64 __U, __m512i __B) { - // CHECK-LABEL: @test_mm512_maskz_popcnt_epi8 + // CHECK-LABEL: test_mm512_maskz_popcnt_epi8 // CHECK: @llvm.ctpop.v64i8 // CHECK: select <64 x i1> %{{[0-9]+}}, <64 x i8> %{{.*}}, <64 x i8> %{{.*}} return _mm512_maskz_popcnt_epi8(__U, __B); } +TEST_CONSTEXPR(match_v64qi(_mm512_maskz_popcnt_epi8(0x0F0F0F0FF0F0F0F0ULL, (__m512i)(__v64qi){+5, -3, -10, +8, 0, -16, +16, -16, +3, +9, +15, +33, +63, +33, +53, +73, +5, -3, -10, +8, 0, -16, +16, -16, +3, +9, +15, +33, +63, +33, +53, +73, +5, -3, -10, +8, 0, -16, +16, -16, +3, +9, +15, +33, +63, +33, +53, +73, +5, -3, -10, +8, 0, -16, +16, -16, +3, +9, +15, +33, +63, +33, +53, +73}), 0, 0, 0, 0, 0, 4, 1, 4, 0, 0, 0, 0, 6, 2, 4, 3, 0, 0, 0, 0, 0, 4, 1, 4, 0, 0, 0, 0, 6, 2, 4, 3, 2, 7, 6, 1, 0, 0, 0, 0, 2, 2, 4, 2, 0, 0, 0, 0, 2, 7, 6, 1, 0, 0, 0, 0, 2, 2, 4, 2, 0, 0, 0, 0)); __mmask64 test_mm512_mask_bitshuffle_epi64_mask(__mmask64 __U, __m512i __A, __m512i __B) { - // CHECK-LABEL: @test_mm512_mask_bitshuffle_epi64_mask + // CHECK-LABEL: test_mm512_mask_bitshuffle_epi64_mask // CHECK: @llvm.x86.avx512.vpshufbitqmb.512 // CHECK: and <64 x i1> %{{.*}}, %{{.*}} return _mm512_mask_bitshuffle_epi64_mask(__U, __A, __B); } __mmask64 test_mm512_bitshuffle_epi64_mask(__m512i __A, __m512i __B) { - // CHECK-LABEL: @test_mm512_bitshuffle_epi64_mask + // CHECK-LABEL: test_mm512_bitshuffle_epi64_mask // CHECK: @llvm.x86.avx512.vpshufbitqmb.512 return _mm512_bitshuffle_epi64_mask(__A, __B); } diff --git a/clang/test/CodeGen/X86/avx512bw-builtins.c b/clang/test/CodeGen/X86/avx512bw-builtins.c index 1d18ca8..5f8497c 100644 --- a/clang/test/CodeGen/X86/avx512bw-builtins.c +++ b/clang/test/CodeGen/X86/avx512bw-builtins.c @@ -1,25 +1,33 @@ -// RUN: %clang_cc1 -flax-vector-conversions=none -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +avx512bw -emit-llvm -o - -Wall -Werror -Wsign-conversion | FileCheck %s -// RUN: %clang_cc1 -flax-vector-conversions=none -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +avx512bw -fno-signed-char -emit-llvm -o - -Wall -Werror -Wsign-conversion | FileCheck %s +// RUN: %clang_cc1 -x c -flax-vector-conversions=none -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +avx512bw -emit-llvm -o - -Wall -Werror -Wsign-conversion | FileCheck %s +// RUN: %clang_cc1 -x c -flax-vector-conversions=none -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +avx512bw -fno-signed-char -emit-llvm -o - -Wall -Werror -Wsign-conversion | FileCheck %s +// RUN: %clang_cc1 -x c++ -flax-vector-conversions=none -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +avx512bw -emit-llvm -o - -Wall -Werror -Wsign-conversion | FileCheck %s +// RUN: %clang_cc1 -x c++ -flax-vector-conversions=none -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +avx512bw -fno-signed-char -emit-llvm -o - -Wall -Werror -Wsign-conversion | FileCheck %s + +// RUN: %clang_cc1 -x c -flax-vector-conversions=none -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +avx512bw -emit-llvm -o - -Wall -Werror -Wsign-conversion -fexperimental-new-constant-interpreter | FileCheck %s +// RUN: %clang_cc1 -x c -flax-vector-conversions=none -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +avx512bw -fno-signed-char -emit-llvm -o - -Wall -Werror -Wsign-conversion -fexperimental-new-constant-interpreter | FileCheck %s +// RUN: %clang_cc1 -x c++ -flax-vector-conversions=none -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +avx512bw -emit-llvm -o - -Wall -Werror -Wsign-conversion -fexperimental-new-constant-interpreter | FileCheck %s +// RUN: %clang_cc1 -x c++ -flax-vector-conversions=none -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +avx512bw -fno-signed-char -emit-llvm -o - -Wall -Werror -Wsign-conversion -fexperimental-new-constant-interpreter | FileCheck %s #include <immintrin.h> +#include "builtin_test_helpers.h" __mmask32 test_knot_mask32(__mmask32 a) { - // CHECK-LABEL: @test_knot_mask32 + // CHECK-LABEL: test_knot_mask32 // CHECK: [[IN:%.*]] = bitcast i32 %{{.*}} to <32 x i1> // CHECK: [[NOT:%.*]] = xor <32 x i1> [[IN]], splat (i1 true) return _knot_mask32(a); } __mmask64 test_knot_mask64(__mmask64 a) { - // CHECK-LABEL: @test_knot_mask64 + // CHECK-LABEL: test_knot_mask64 // CHECK: [[IN:%.*]] = bitcast i64 %{{.*}} to <64 x i1> // CHECK: [[NOT:%.*]] = xor <64 x i1> [[IN]], splat (i1 true) return _knot_mask64(a); } __mmask32 test_kand_mask32(__m512i __A, __m512i __B, __m512i __C, __m512i __D, __m512i __E, __m512i __F) { - // CHECK-LABEL: @test_kand_mask32 + // CHECK-LABEL: test_kand_mask32 // CHECK: [[LHS:%.*]] = bitcast i32 %{{.*}} to <32 x i1> // CHECK: [[RHS:%.*]] = bitcast i32 %{{.*}} to <32 x i1> // CHECK: [[RES:%.*]] = and <32 x i1> [[LHS]], [[RHS]] @@ -29,7 +37,7 @@ __mmask32 test_kand_mask32(__m512i __A, __m512i __B, __m512i __C, __m512i __D, _ } __mmask64 test_kand_mask64(__m512i __A, __m512i __B, __m512i __C, __m512i __D, __m512i __E, __m512i __F) { - // CHECK-LABEL: @test_kand_mask64 + // CHECK-LABEL: test_kand_mask64 // CHECK: [[LHS:%.*]] = bitcast i64 %{{.*}} to <64 x i1> // CHECK: [[RHS:%.*]] = bitcast i64 %{{.*}} to <64 x i1> // CHECK: [[RES:%.*]] = and <64 x i1> [[LHS]], [[RHS]] @@ -39,7 +47,7 @@ __mmask64 test_kand_mask64(__m512i __A, __m512i __B, __m512i __C, __m512i __D, _ } __mmask32 test_kandn_mask32(__m512i __A, __m512i __B, __m512i __C, __m512i __D, __m512i __E, __m512i __F) { - // CHECK-LABEL: @test_kandn_mask32 + // CHECK-LABEL: test_kandn_mask32 // CHECK: [[LHS:%.*]] = bitcast i32 %{{.*}} to <32 x i1> // CHECK: [[RHS:%.*]] = bitcast i32 %{{.*}} to <32 x i1> // CHECK: [[NOT:%.*]] = xor <32 x i1> [[LHS]], splat (i1 true) @@ -50,7 +58,7 @@ __mmask32 test_kandn_mask32(__m512i __A, __m512i __B, __m512i __C, __m512i __D, } __mmask64 test_kandn_mask64(__m512i __A, __m512i __B, __m512i __C, __m512i __D, __m512i __E, __m512i __F) { - // CHECK-LABEL: @test_kandn_mask64 + // CHECK-LABEL: test_kandn_mask64 // CHECK: [[LHS:%.*]] = bitcast i64 %{{.*}} to <64 x i1> // CHECK: [[RHS:%.*]] = bitcast i64 %{{.*}} to <64 x i1> // CHECK: [[NOT:%.*]] = xor <64 x i1> [[LHS]], splat (i1 true) @@ -61,7 +69,7 @@ __mmask64 test_kandn_mask64(__m512i __A, __m512i __B, __m512i __C, __m512i __D, } __mmask32 test_kor_mask32(__m512i __A, __m512i __B, __m512i __C, __m512i __D, __m512i __E, __m512i __F) { - // CHECK-LABEL: @test_kor_mask32 + // CHECK-LABEL: test_kor_mask32 // CHECK: [[LHS:%.*]] = bitcast i32 %{{.*}} to <32 x i1> // CHECK: [[RHS:%.*]] = bitcast i32 %{{.*}} to <32 x i1> // CHECK: [[RES:%.*]] = or <32 x i1> [[LHS]], [[RHS]] @@ -71,7 +79,7 @@ __mmask32 test_kor_mask32(__m512i __A, __m512i __B, __m512i __C, __m512i __D, __ } __mmask64 test_kor_mask64(__m512i __A, __m512i __B, __m512i __C, __m512i __D, __m512i __E, __m512i __F) { - // CHECK-LABEL: @test_kor_mask64 + // CHECK-LABEL: test_kor_mask64 // CHECK: [[LHS:%.*]] = bitcast i64 %{{.*}} to <64 x i1> // CHECK: [[RHS:%.*]] = bitcast i64 %{{.*}} to <64 x i1> // CHECK: [[RES:%.*]] = or <64 x i1> [[LHS]], [[RHS]] @@ -81,7 +89,7 @@ __mmask64 test_kor_mask64(__m512i __A, __m512i __B, __m512i __C, __m512i __D, __ } __mmask32 test_kxnor_mask32(__m512i __A, __m512i __B, __m512i __C, __m512i __D, __m512i __E, __m512i __F) { - // CHECK-LABEL: @test_kxnor_mask32 + // CHECK-LABEL: test_kxnor_mask32 // CHECK: [[LHS:%.*]] = bitcast i32 %{{.*}} to <32 x i1> // CHECK: [[RHS:%.*]] = bitcast i32 %{{.*}} to <32 x i1> // CHECK: [[NOT:%.*]] = xor <32 x i1> [[LHS]], splat (i1 true) @@ -92,7 +100,7 @@ __mmask32 test_kxnor_mask32(__m512i __A, __m512i __B, __m512i __C, __m512i __D, } __mmask64 test_kxnor_mask64(__m512i __A, __m512i __B, __m512i __C, __m512i __D, __m512i __E, __m512i __F) { - // CHECK-LABEL: @test_kxnor_mask64 + // CHECK-LABEL: test_kxnor_mask64 // CHECK: [[LHS:%.*]] = bitcast i64 %{{.*}} to <64 x i1> // CHECK: [[RHS:%.*]] = bitcast i64 %{{.*}} to <64 x i1> // CHECK: [[NOT:%.*]] = xor <64 x i1> [[LHS]], splat (i1 true) @@ -103,7 +111,7 @@ __mmask64 test_kxnor_mask64(__m512i __A, __m512i __B, __m512i __C, __m512i __D, } __mmask32 test_kxor_mask32(__m512i __A, __m512i __B, __m512i __C, __m512i __D, __m512i __E, __m512i __F) { - // CHECK-LABEL: @test_kxor_mask32 + // CHECK-LABEL: test_kxor_mask32 // CHECK: [[LHS:%.*]] = bitcast i32 %{{.*}} to <32 x i1> // CHECK: [[RHS:%.*]] = bitcast i32 %{{.*}} to <32 x i1> // CHECK: [[RES:%.*]] = xor <32 x i1> [[LHS]], [[RHS]] @@ -113,7 +121,7 @@ __mmask32 test_kxor_mask32(__m512i __A, __m512i __B, __m512i __C, __m512i __D, _ } __mmask64 test_kxor_mask64(__m512i __A, __m512i __B, __m512i __C, __m512i __D, __m512i __E, __m512i __F) { - // CHECK-LABEL: @test_kxor_mask64 + // CHECK-LABEL: test_kxor_mask64 // CHECK: [[LHS:%.*]] = bitcast i64 %{{.*}} to <64 x i1> // CHECK: [[RHS:%.*]] = bitcast i64 %{{.*}} to <64 x i1> // CHECK: [[RES:%.*]] = xor <64 x i1> [[LHS]], [[RHS]] @@ -123,7 +131,7 @@ __mmask64 test_kxor_mask64(__m512i __A, __m512i __B, __m512i __C, __m512i __D, _ } unsigned char test_kortestz_mask32_u8(__m512i __A, __m512i __B, __m512i __C, __m512i __D) { - // CHECK-LABEL: @test_kortestz_mask32_u8 + // CHECK-LABEL: test_kortestz_mask32_u8 // CHECK: [[LHS:%.*]] = bitcast i32 %{{.*}} to <32 x i1> // CHECK: [[RHS:%.*]] = bitcast i32 %{{.*}} to <32 x i1> // CHECK: [[OR:%.*]] = or <32 x i1> [[LHS]], [[RHS]] @@ -136,7 +144,7 @@ unsigned char test_kortestz_mask32_u8(__m512i __A, __m512i __B, __m512i __C, __m } unsigned char test_kortestc_mask32_u8(__m512i __A, __m512i __B, __m512i __C, __m512i __D) { - // CHECK-LABEL: @test_kortestc_mask32_u8 + // CHECK-LABEL: test_kortestc_mask32_u8 // CHECK: [[LHS:%.*]] = bitcast i32 %{{.*}} to <32 x i1> // CHECK: [[RHS:%.*]] = bitcast i32 %{{.*}} to <32 x i1> // CHECK: [[OR:%.*]] = or <32 x i1> [[LHS]], [[RHS]] @@ -149,7 +157,7 @@ unsigned char test_kortestc_mask32_u8(__m512i __A, __m512i __B, __m512i __C, __m } unsigned char test_kortest_mask32_u8(__m512i __A, __m512i __B, __m512i __C, __m512i __D, unsigned char *CF) { - // CHECK-LABEL: @test_kortest_mask32_u8 + // CHECK-LABEL: test_kortest_mask32_u8 // CHECK: [[LHS:%.*]] = bitcast i32 %{{.*}} to <32 x i1> // CHECK: [[RHS:%.*]] = bitcast i32 %{{.*}} to <32 x i1> // CHECK: [[OR:%.*]] = or <32 x i1> [[LHS]], [[RHS]] @@ -169,7 +177,7 @@ unsigned char test_kortest_mask32_u8(__m512i __A, __m512i __B, __m512i __C, __m5 } unsigned char test_kortestz_mask64_u8(__m512i __A, __m512i __B, __m512i __C, __m512i __D) { - // CHECK-LABEL: @test_kortestz_mask64_u8 + // CHECK-LABEL: test_kortestz_mask64_u8 // CHECK: [[LHS:%.*]] = bitcast i64 %{{.*}} to <64 x i1> // CHECK: [[RHS:%.*]] = bitcast i64 %{{.*}} to <64 x i1> // CHECK: [[OR:%.*]] = or <64 x i1> [[LHS]], [[RHS]] @@ -182,7 +190,7 @@ unsigned char test_kortestz_mask64_u8(__m512i __A, __m512i __B, __m512i __C, __m } unsigned char test_kortestc_mask64_u8(__m512i __A, __m512i __B, __m512i __C, __m512i __D) { - // CHECK-LABEL: @test_kortestc_mask64_u8 + // CHECK-LABEL: test_kortestc_mask64_u8 // CHECK: [[LHS:%.*]] = bitcast i64 %{{.*}} to <64 x i1> // CHECK: [[RHS:%.*]] = bitcast i64 %{{.*}} to <64 x i1> // CHECK: [[OR:%.*]] = or <64 x i1> [[LHS]], [[RHS]] @@ -195,7 +203,7 @@ unsigned char test_kortestc_mask64_u8(__m512i __A, __m512i __B, __m512i __C, __m } unsigned char test_kortest_mask64_u8(__m512i __A, __m512i __B, __m512i __C, __m512i __D, unsigned char *CF) { - // CHECK-LABEL: @test_kortest_mask64_u8 + // CHECK-LABEL: test_kortest_mask64_u8 // CHECK: [[LHS:%.*]] = bitcast i64 %{{.*}} to <64 x i1> // CHECK: [[RHS:%.*]] = bitcast i64 %{{.*}} to <64 x i1> // CHECK: [[OR:%.*]] = or <64 x i1> [[LHS]], [[RHS]] @@ -215,7 +223,7 @@ unsigned char test_kortest_mask64_u8(__m512i __A, __m512i __B, __m512i __C, __m5 } unsigned char test_ktestz_mask32_u8(__m512i __A, __m512i __B, __m512i __C, __m512i __D) { - // CHECK-LABEL: @test_ktestz_mask32_u8 + // CHECK-LABEL: test_ktestz_mask32_u8 // CHECK: [[LHS:%.*]] = bitcast i32 %{{.*}} to <32 x i1> // CHECK: [[RHS:%.*]] = bitcast i32 %{{.*}} to <32 x i1> // CHECK: [[RES:%.*]] = call i32 @llvm.x86.avx512.ktestz.d(<32 x i1> [[LHS]], <32 x i1> [[RHS]]) @@ -225,7 +233,7 @@ unsigned char test_ktestz_mask32_u8(__m512i __A, __m512i __B, __m512i __C, __m51 } unsigned char test_ktestc_mask32_u8(__m512i __A, __m512i __B, __m512i __C, __m512i __D) { - // CHECK-LABEL: @test_ktestc_mask32_u8 + // CHECK-LABEL: test_ktestc_mask32_u8 // CHECK: [[LHS:%.*]] = bitcast i32 %{{.*}} to <32 x i1> // CHECK: [[RHS:%.*]] = bitcast i32 %{{.*}} to <32 x i1> // CHECK: [[RES:%.*]] = call i32 @llvm.x86.avx512.ktestc.d(<32 x i1> [[LHS]], <32 x i1> [[RHS]]) @@ -235,7 +243,7 @@ unsigned char test_ktestc_mask32_u8(__m512i __A, __m512i __B, __m512i __C, __m51 } unsigned char test_ktest_mask32_u8(__m512i __A, __m512i __B, __m512i __C, __m512i __D, unsigned char *CF) { - // CHECK-LABEL: @test_ktest_mask32_u8 + // CHECK-LABEL: test_ktest_mask32_u8 // CHECK: [[LHS:%.*]] = bitcast i32 %{{.*}} to <32 x i1> // CHECK: [[RHS:%.*]] = bitcast i32 %{{.*}} to <32 x i1> // CHECK: [[RES:%.*]] = call i32 @llvm.x86.avx512.ktestc.d(<32 x i1> [[LHS]], <32 x i1> [[RHS]]) @@ -249,7 +257,7 @@ unsigned char test_ktest_mask32_u8(__m512i __A, __m512i __B, __m512i __C, __m512 } unsigned char test_ktestz_mask64_u8(__m512i __A, __m512i __B, __m512i __C, __m512i __D) { - // CHECK-LABEL: @test_ktestz_mask64_u8 + // CHECK-LABEL: test_ktestz_mask64_u8 // CHECK: [[LHS:%.*]] = bitcast i64 %{{.*}} to <64 x i1> // CHECK: [[RHS:%.*]] = bitcast i64 %{{.*}} to <64 x i1> // CHECK: [[RES:%.*]] = call i32 @llvm.x86.avx512.ktestz.q(<64 x i1> [[LHS]], <64 x i1> [[RHS]]) @@ -259,7 +267,7 @@ unsigned char test_ktestz_mask64_u8(__m512i __A, __m512i __B, __m512i __C, __m51 } unsigned char test_ktestc_mask64_u8(__m512i __A, __m512i __B, __m512i __C, __m512i __D) { - // CHECK-LABEL: @test_ktestc_mask64_u8 + // CHECK-LABEL: test_ktestc_mask64_u8 // CHECK: [[LHS:%.*]] = bitcast i64 %{{.*}} to <64 x i1> // CHECK: [[RHS:%.*]] = bitcast i64 %{{.*}} to <64 x i1> // CHECK: [[RES:%.*]] = call i32 @llvm.x86.avx512.ktestc.q(<64 x i1> [[LHS]], <64 x i1> [[RHS]]) @@ -269,7 +277,7 @@ unsigned char test_ktestc_mask64_u8(__m512i __A, __m512i __B, __m512i __C, __m51 } unsigned char test_ktest_mask64_u8(__m512i __A, __m512i __B, __m512i __C, __m512i __D, unsigned char *CF) { - // CHECK-LABEL: @test_ktest_mask64_u8 + // CHECK-LABEL: test_ktest_mask64_u8 // CHECK: [[LHS:%.*]] = bitcast i64 %{{.*}} to <64 x i1> // CHECK: [[RHS:%.*]] = bitcast i64 %{{.*}} to <64 x i1> // CHECK: [[RES:%.*]] = call i32 @llvm.x86.avx512.ktestc.q(<64 x i1> [[LHS]], <64 x i1> [[RHS]]) @@ -283,7 +291,7 @@ unsigned char test_ktest_mask64_u8(__m512i __A, __m512i __B, __m512i __C, __m512 } __mmask32 test_kadd_mask32(__m512i __A, __m512i __B, __m512i __C, __m512i __D, __m512i __E, __m512i __F) { - // CHECK-LABEL: @test_kadd_mask32 + // CHECK-LABEL: test_kadd_mask32 // CHECK: [[LHS:%.*]] = bitcast i32 %{{.*}} to <32 x i1> // CHECK: [[RHS:%.*]] = bitcast i32 %{{.*}} to <32 x i1> // CHECK: [[RES:%.*]] = call <32 x i1> @llvm.x86.avx512.kadd.d(<32 x i1> [[LHS]], <32 x i1> [[RHS]]) @@ -293,7 +301,7 @@ __mmask32 test_kadd_mask32(__m512i __A, __m512i __B, __m512i __C, __m512i __D, _ } __mmask64 test_kadd_mask64(__m512i __A, __m512i __B, __m512i __C, __m512i __D, __m512i __E, __m512i __F) { - // CHECK-LABEL: @test_kadd_mask64 + // CHECK-LABEL: test_kadd_mask64 // CHECK: [[LHS:%.*]] = bitcast i64 %{{.*}} to <64 x i1> // CHECK: [[RHS:%.*]] = bitcast i64 %{{.*}} to <64 x i1> // CHECK: [[RES:%.*]] = call <64 x i1> @llvm.x86.avx512.kadd.q(<64 x i1> [[LHS]], <64 x i1> [[RHS]]) @@ -303,1592 +311,1656 @@ __mmask64 test_kadd_mask64(__m512i __A, __m512i __B, __m512i __C, __m512i __D, _ } __mmask32 test_kshiftli_mask32(__m512i A, __m512i B, __m512i C, __m512i D) { - // CHECK-LABEL: @test_kshiftli_mask32 + // CHECK-LABEL: test_kshiftli_mask32 // CHECK: [[VAL:%.*]] = bitcast i32 %{{.*}} to <32 x i1> // CHECK: [[RES:%.*]] = shufflevector <32 x i1> zeroinitializer, <32 x i1> [[VAL]], <32 x i32> <i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15, i32 16, i32 17, i32 18, i32 19, i32 20, i32 21, i32 22, i32 23, i32 24, i32 25, i32 26, i32 27, i32 28, i32 29, i32 30, i32 31, i32 32> return _mm512_mask_cmpneq_epu16_mask(_kshiftli_mask32(_mm512_cmpneq_epu16_mask(A, B), 31), C, D); } __mmask32 test_kshiftri_mask32(__m512i A, __m512i B, __m512i C, __m512i D) { - // CHECK-LABEL: @test_kshiftri_mask32 + // CHECK-LABEL: test_kshiftri_mask32 // CHECK: [[VAL:%.*]] = bitcast i32 %{{.*}} to <32 x i1> // CHECK: [[RES:%.*]] = shufflevector <32 x i1> [[VAL]], <32 x i1> zeroinitializer, <32 x i32> <i32 31, i32 32, i32 33, i32 34, i32 35, i32 36, i32 37, i32 38, i32 39, i32 40, i32 41, i32 42, i32 43, i32 44, i32 45, i32 46, i32 47, i32 48, i32 49, i32 50, i32 51, i32 52, i32 53, i32 54, i32 55, i32 56, i32 57, i32 58, i32 59, i32 60, i32 61, i32 62> return _mm512_mask_cmpneq_epu16_mask(_kshiftri_mask32(_mm512_cmpneq_epu16_mask(A, B), 31), C, D); } __mmask64 test_kshiftli_mask64(__m512i A, __m512i B, __m512i C, __m512i D) { - // CHECK-LABEL: @test_kshiftli_mask64 + // CHECK-LABEL: test_kshiftli_mask64 // CHECK: [[VAL:%.*]] = bitcast i64 %{{.*}} to <64 x i1> // CHECK: [[RES:%.*]] = shufflevector <64 x i1> zeroinitializer, <64 x i1> [[VAL]], <64 x i32> <i32 32, i32 33, i32 34, i32 35, i32 36, i32 37, i32 38, i32 39, i32 40, i32 41, i32 42, i32 43, i32 44, i32 45, i32 46, i32 47, i32 48, i32 49, i32 50, i32 51, i32 52, i32 53, i32 54, i32 55, i32 56, i32 57, i32 58, i32 59, i32 60, i32 61, i32 62, i32 63, i32 64, i32 65, i32 66, i32 67, i32 68, i32 69, i32 70, i32 71, i32 72, i32 73, i32 74, i32 75, i32 76, i32 77, i32 78, i32 79, i32 80, i32 81, i32 82, i32 83, i32 84, i32 85, i32 86, i32 87, i32 88, i32 89, i32 90, i32 91, i32 92, i32 93, i32 94, i32 95> return _mm512_mask_cmpneq_epu8_mask(_kshiftli_mask64(_mm512_cmpneq_epu8_mask(A, B), 32), C, D); } __mmask64 test_kshiftri_mask64(__m512i A, __m512i B, __m512i C, __m512i D) { - // CHECK-LABEL: @test_kshiftri_mask64 + // CHECK-LABEL: test_kshiftri_mask64 // CHECK: [[VAL:%.*]] = bitcast i64 %{{.*}} to <64 x i1> // CHECK: [[RES:%.*]] = shufflevector <64 x i1> [[VAL]], <64 x i1> zeroinitializer, <64 x i32> <i32 32, i32 33, i32 34, i32 35, i32 36, i32 37, i32 38, i32 39, i32 40, i32 41, i32 42, i32 43, i32 44, i32 45, i32 46, i32 47, i32 48, i32 49, i32 50, i32 51, i32 52, i32 53, i32 54, i32 55, i32 56, i32 57, i32 58, i32 59, i32 60, i32 61, i32 62, i32 63, i32 64, i32 65, i32 66, i32 67, i32 68, i32 69, i32 70, i32 71, i32 72, i32 73, i32 74, i32 75, i32 76, i32 77, i32 78, i32 79, i32 80, i32 81, i32 82, i32 83, i32 84, i32 85, i32 86, i32 87, i32 88, i32 89, i32 90, i32 91, i32 92, i32 93, i32 94, i32 95> return _mm512_mask_cmpneq_epu8_mask(_kshiftri_mask64(_mm512_cmpneq_epu8_mask(A, B), 32), C, D); } unsigned int test_cvtmask32_u32(__m512i A, __m512i B) { - // CHECK-LABEL: @test_cvtmask32_u32 + // CHECK-LABEL: test_cvtmask32_u32 return _cvtmask32_u32(_mm512_cmpneq_epu16_mask(A, B)); } unsigned long long test_cvtmask64_u64(__m512i A, __m512i B) { - // CHECK-LABEL: @test_cvtmask64_u64 + // CHECK-LABEL: test_cvtmask64_u64 return _cvtmask64_u64(_mm512_cmpneq_epu8_mask(A, B)); } __mmask32 test_cvtu32_mask32(__m512i A, __m512i B, unsigned int C) { - // CHECK-LABEL: @test_cvtu32_mask32 + // CHECK-LABEL: test_cvtu32_mask32 return _mm512_mask_cmpneq_epu16_mask(_cvtu32_mask32(C), A, B); } __mmask64 test_cvtu64_mask64(__m512i A, __m512i B, unsigned long long C) { - // CHECK-LABEL: @test_cvtu64_mask64 + // CHECK-LABEL: test_cvtu64_mask64 return _mm512_mask_cmpneq_epu8_mask(_cvtu64_mask64(C), A, B); } __mmask32 test_load_mask32(__mmask32 *A, __m512i B, __m512i C) { - // CHECK-LABEL: @test_load_mask32 + // CHECK-LABEL: test_load_mask32 // CHECK: [[LOAD:%.*]] = load i32, ptr %{{.*}} return _mm512_mask_cmpneq_epu16_mask(_load_mask32(A), B, C); } __mmask64 test_load_mask64(__mmask64 *A, __m512i B, __m512i C) { - // CHECK-LABEL: @test_load_mask64 + // CHECK-LABEL: test_load_mask64 // CHECK: [[LOAD:%.*]] = load i64, ptr %{{.*}} return _mm512_mask_cmpneq_epu8_mask(_load_mask64(A), B, C); } void test_store_mask32(__mmask32 *A, __m512i B, __m512i C) { - // CHECK-LABEL: @test_store_mask32 + // CHECK-LABEL: test_store_mask32 // CHECK: store i32 %{{.*}}, ptr %{{.*}} _store_mask32(A, _mm512_cmpneq_epu16_mask(B, C)); } void test_store_mask64(__mmask64 *A, __m512i B, __m512i C) { - // CHECK-LABEL: @test_store_mask64 + // CHECK-LABEL: test_store_mask64 // CHECK: store i64 %{{.*}}, ptr %{{.*}} _store_mask64(A, _mm512_cmpneq_epu8_mask(B, C)); } __mmask64 test_mm512_cmpeq_epi8_mask(__m512i __a, __m512i __b) { - // CHECK-LABEL: @test_mm512_cmpeq_epi8_mask + // CHECK-LABEL: test_mm512_cmpeq_epi8_mask // CHECK: icmp eq <64 x i8> %{{.*}}, %{{.*}} return (__mmask64)_mm512_cmpeq_epi8_mask(__a, __b); } __mmask64 test_mm512_mask_cmpeq_epi8_mask(__mmask64 __u, __m512i __a, __m512i __b) { - // CHECK-LABEL: @test_mm512_mask_cmpeq_epi8_mask + // CHECK-LABEL: test_mm512_mask_cmpeq_epi8_mask // CHECK: icmp eq <64 x i8> %{{.*}}, %{{.*}} // CHECK: and <64 x i1> %{{.*}}, %{{.*}} return (__mmask64)_mm512_mask_cmpeq_epi8_mask(__u, __a, __b); } __mmask32 test_mm512_cmpeq_epi16_mask(__m512i __a, __m512i __b) { - // CHECK-LABEL: @test_mm512_cmpeq_epi16_mask + // CHECK-LABEL: test_mm512_cmpeq_epi16_mask // CHECK: icmp eq <32 x i16> %{{.*}}, %{{.*}} return (__mmask32)_mm512_cmpeq_epi16_mask(__a, __b); } __mmask32 test_mm512_mask_cmpeq_epi16_mask(__mmask32 __u, __m512i __a, __m512i __b) { - // CHECK-LABEL: @test_mm512_mask_cmpeq_epi16_mask + // CHECK-LABEL: test_mm512_mask_cmpeq_epi16_mask // CHECK: icmp eq <32 x i16> %{{.*}}, %{{.*}} // CHECK: and <32 x i1> %{{.*}}, %{{.*}} return (__mmask32)_mm512_mask_cmpeq_epi16_mask(__u, __a, __b); } __mmask64 test_mm512_cmpgt_epi8_mask(__m512i __a, __m512i __b) { - // CHECK-LABEL: @test_mm512_cmpgt_epi8_mask + // CHECK-LABEL: test_mm512_cmpgt_epi8_mask // CHECK: icmp sgt <64 x i8> %{{.*}}, %{{.*}} return (__mmask64)_mm512_cmpgt_epi8_mask(__a, __b); } __mmask64 test_mm512_mask_cmpgt_epi8_mask(__mmask64 __u, __m512i __a, __m512i __b) { - // CHECK-LABEL: @test_mm512_mask_cmpgt_epi8_mask + // CHECK-LABEL: test_mm512_mask_cmpgt_epi8_mask // CHECK: icmp sgt <64 x i8> %{{.*}}, %{{.*}} // CHECK: and <64 x i1> %{{.*}}, %{{.*}} return (__mmask64)_mm512_mask_cmpgt_epi8_mask(__u, __a, __b); } __mmask32 test_mm512_cmpgt_epi16_mask(__m512i __a, __m512i __b) { - // CHECK-LABEL: @test_mm512_cmpgt_epi16_mask + // CHECK-LABEL: test_mm512_cmpgt_epi16_mask // CHECK: icmp sgt <32 x i16> %{{.*}}, %{{.*}} return (__mmask32)_mm512_cmpgt_epi16_mask(__a, __b); } __mmask32 test_mm512_mask_cmpgt_epi16_mask(__mmask32 __u, __m512i __a, __m512i __b) { - // CHECK-LABEL: @test_mm512_mask_cmpgt_epi16_mask + // CHECK-LABEL: test_mm512_mask_cmpgt_epi16_mask // CHECK: icmp sgt <32 x i16> %{{.*}}, %{{.*}} // CHECK: and <32 x i1> %{{.*}}, %{{.*}} return (__mmask32)_mm512_mask_cmpgt_epi16_mask(__u, __a, __b); } __mmask64 test_mm512_cmpeq_epu8_mask(__m512i __a, __m512i __b) { - // CHECK-LABEL: @test_mm512_cmpeq_epu8_mask + // CHECK-LABEL: test_mm512_cmpeq_epu8_mask // CHECK: icmp eq <64 x i8> %{{.*}}, %{{.*}} return (__mmask64)_mm512_cmpeq_epu8_mask(__a, __b); } __mmask64 test_mm512_mask_cmpeq_epu8_mask(__mmask64 __u, __m512i __a, __m512i __b) { - // CHECK-LABEL: @test_mm512_mask_cmpeq_epu8_mask + // CHECK-LABEL: test_mm512_mask_cmpeq_epu8_mask // CHECK: icmp eq <64 x i8> %{{.*}}, %{{.*}} // CHECK: and <64 x i1> %{{.*}}, %{{.*}} return (__mmask64)_mm512_mask_cmpeq_epu8_mask(__u, __a, __b); } __mmask32 test_mm512_cmpeq_epu16_mask(__m512i __a, __m512i __b) { - // CHECK-LABEL: @test_mm512_cmpeq_epu16_mask + // CHECK-LABEL: test_mm512_cmpeq_epu16_mask // CHECK: icmp eq <32 x i16> %{{.*}}, %{{.*}} return (__mmask32)_mm512_cmpeq_epu16_mask(__a, __b); } __mmask32 test_mm512_mask_cmpeq_epu16_mask(__mmask32 __u, __m512i __a, __m512i __b) { - // CHECK-LABEL: @test_mm512_mask_cmpeq_epu16_mask + // CHECK-LABEL: test_mm512_mask_cmpeq_epu16_mask // CHECK: icmp eq <32 x i16> %{{.*}}, %{{.*}} // CHECK: and <32 x i1> %{{.*}}, %{{.*}} return (__mmask32)_mm512_mask_cmpeq_epu16_mask(__u, __a, __b); } __mmask64 test_mm512_cmpgt_epu8_mask(__m512i __a, __m512i __b) { - // CHECK-LABEL: @test_mm512_cmpgt_epu8_mask + // CHECK-LABEL: test_mm512_cmpgt_epu8_mask // CHECK: icmp ugt <64 x i8> %{{.*}}, %{{.*}} return (__mmask64)_mm512_cmpgt_epu8_mask(__a, __b); } __mmask64 test_mm512_mask_cmpgt_epu8_mask(__mmask64 __u, __m512i __a, __m512i __b) { - // CHECK-LABEL: @test_mm512_mask_cmpgt_epu8_mask + // CHECK-LABEL: test_mm512_mask_cmpgt_epu8_mask // CHECK: icmp ugt <64 x i8> %{{.*}}, %{{.*}} // CHECK: and <64 x i1> %{{.*}}, %{{.*}} return (__mmask64)_mm512_mask_cmpgt_epu8_mask(__u, __a, __b); } __mmask32 test_mm512_cmpgt_epu16_mask(__m512i __a, __m512i __b) { - // CHECK-LABEL: @test_mm512_cmpgt_epu16_mask + // CHECK-LABEL: test_mm512_cmpgt_epu16_mask // CHECK: icmp ugt <32 x i16> %{{.*}}, %{{.*}} return (__mmask32)_mm512_cmpgt_epu16_mask(__a, __b); } __mmask32 test_mm512_mask_cmpgt_epu16_mask(__mmask32 __u, __m512i __a, __m512i __b) { - // CHECK-LABEL: @test_mm512_mask_cmpgt_epu16_mask + // CHECK-LABEL: test_mm512_mask_cmpgt_epu16_mask // CHECK: icmp ugt <32 x i16> %{{.*}}, %{{.*}} // CHECK: and <32 x i1> %{{.*}}, %{{.*}} return (__mmask32)_mm512_mask_cmpgt_epu16_mask(__u, __a, __b); } __mmask64 test_mm512_cmpge_epi8_mask(__m512i __a, __m512i __b) { - // CHECK-LABEL: @test_mm512_cmpge_epi8_mask + // CHECK-LABEL: test_mm512_cmpge_epi8_mask // CHECK: icmp sge <64 x i8> %{{.*}}, %{{.*}} return (__mmask64)_mm512_cmpge_epi8_mask(__a, __b); } __mmask64 test_mm512_mask_cmpge_epi8_mask(__mmask64 __u, __m512i __a, __m512i __b) { - // CHECK-LABEL: @test_mm512_mask_cmpge_epi8_mask + // CHECK-LABEL: test_mm512_mask_cmpge_epi8_mask // CHECK: icmp sge <64 x i8> %{{.*}}, %{{.*}} // CHECK: and <64 x i1> %{{.*}}, %{{.*}} return (__mmask64)_mm512_mask_cmpge_epi8_mask(__u, __a, __b); } __mmask64 test_mm512_cmpge_epu8_mask(__m512i __a, __m512i __b) { - // CHECK-LABEL: @test_mm512_cmpge_epu8_mask + // CHECK-LABEL: test_mm512_cmpge_epu8_mask // CHECK: icmp uge <64 x i8> %{{.*}}, %{{.*}} return (__mmask64)_mm512_cmpge_epu8_mask(__a, __b); } __mmask64 test_mm512_mask_cmpge_epu8_mask(__mmask64 __u, __m512i __a, __m512i __b) { - // CHECK-LABEL: @test_mm512_mask_cmpge_epu8_mask + // CHECK-LABEL: test_mm512_mask_cmpge_epu8_mask // CHECK: icmp uge <64 x i8> %{{.*}}, %{{.*}} // CHECK: and <64 x i1> %{{.*}}, %{{.*}} return (__mmask64)_mm512_mask_cmpge_epu8_mask(__u, __a, __b); } __mmask32 test_mm512_cmpge_epi16_mask(__m512i __a, __m512i __b) { - // CHECK-LABEL: @test_mm512_cmpge_epi16_mask + // CHECK-LABEL: test_mm512_cmpge_epi16_mask // CHECK: icmp sge <32 x i16> %{{.*}}, %{{.*}} return (__mmask32)_mm512_cmpge_epi16_mask(__a, __b); } __mmask32 test_mm512_mask_cmpge_epi16_mask(__mmask32 __u, __m512i __a, __m512i __b) { - // CHECK-LABEL: @test_mm512_mask_cmpge_epi16_mask + // CHECK-LABEL: test_mm512_mask_cmpge_epi16_mask // CHECK: icmp sge <32 x i16> %{{.*}}, %{{.*}} // CHECK: and <32 x i1> %{{.*}}, %{{.*}} return (__mmask32)_mm512_mask_cmpge_epi16_mask(__u, __a, __b); } __mmask32 test_mm512_cmpge_epu16_mask(__m512i __a, __m512i __b) { - // CHECK-LABEL: @test_mm512_cmpge_epu16_mask + // CHECK-LABEL: test_mm512_cmpge_epu16_mask // CHECK: icmp uge <32 x i16> %{{.*}}, %{{.*}} return (__mmask32)_mm512_cmpge_epu16_mask(__a, __b); } __mmask32 test_mm512_mask_cmpge_epu16_mask(__mmask32 __u, __m512i __a, __m512i __b) { - // CHECK-LABEL: @test_mm512_mask_cmpge_epu16_mask + // CHECK-LABEL: test_mm512_mask_cmpge_epu16_mask // CHECK: icmp uge <32 x i16> %{{.*}}, %{{.*}} // CHECK: and <32 x i1> %{{.*}}, %{{.*}} return (__mmask32)_mm512_mask_cmpge_epu16_mask(__u, __a, __b); } __mmask64 test_mm512_cmple_epi8_mask(__m512i __a, __m512i __b) { - // CHECK-LABEL: @test_mm512_cmple_epi8_mask + // CHECK-LABEL: test_mm512_cmple_epi8_mask // CHECK: icmp sle <64 x i8> %{{.*}}, %{{.*}} return (__mmask64)_mm512_cmple_epi8_mask(__a, __b); } __mmask64 test_mm512_mask_cmple_epi8_mask(__mmask64 __u, __m512i __a, __m512i __b) { - // CHECK-LABEL: @test_mm512_mask_cmple_epi8_mask + // CHECK-LABEL: test_mm512_mask_cmple_epi8_mask // CHECK: icmp sle <64 x i8> %{{.*}}, %{{.*}} // CHECK: and <64 x i1> %{{.*}}, %{{.*}} return (__mmask64)_mm512_mask_cmple_epi8_mask(__u, __a, __b); } __mmask64 test_mm512_cmple_epu8_mask(__m512i __a, __m512i __b) { - // CHECK-LABEL: @test_mm512_cmple_epu8_mask + // CHECK-LABEL: test_mm512_cmple_epu8_mask // CHECK: icmp ule <64 x i8> %{{.*}}, %{{.*}} return (__mmask64)_mm512_cmple_epu8_mask(__a, __b); } __mmask64 test_mm512_mask_cmple_epu8_mask(__mmask64 __u, __m512i __a, __m512i __b) { - // CHECK-LABEL: @test_mm512_mask_cmple_epu8_mask + // CHECK-LABEL: test_mm512_mask_cmple_epu8_mask // CHECK: icmp ule <64 x i8> %{{.*}}, %{{.*}} // CHECK: and <64 x i1> %{{.*}}, %{{.*}} return (__mmask64)_mm512_mask_cmple_epu8_mask(__u, __a, __b); } __mmask32 test_mm512_cmple_epi16_mask(__m512i __a, __m512i __b) { - // CHECK-LABEL: @test_mm512_cmple_epi16_mask + // CHECK-LABEL: test_mm512_cmple_epi16_mask // CHECK: icmp sle <32 x i16> %{{.*}}, %{{.*}} return (__mmask32)_mm512_cmple_epi16_mask(__a, __b); } __mmask32 test_mm512_mask_cmple_epi16_mask(__mmask32 __u, __m512i __a, __m512i __b) { - // CHECK-LABEL: @test_mm512_mask_cmple_epi16_mask + // CHECK-LABEL: test_mm512_mask_cmple_epi16_mask // CHECK: icmp sle <32 x i16> %{{.*}}, %{{.*}} // CHECK: and <32 x i1> %{{.*}}, %{{.*}} return (__mmask32)_mm512_mask_cmple_epi16_mask(__u, __a, __b); } __mmask32 test_mm512_cmple_epu16_mask(__m512i __a, __m512i __b) { - // CHECK-LABEL: @test_mm512_cmple_epu16_mask + // CHECK-LABEL: test_mm512_cmple_epu16_mask // CHECK: icmp ule <32 x i16> %{{.*}}, %{{.*}} return (__mmask32)_mm512_cmple_epu16_mask(__a, __b); } __mmask32 test_mm512_mask_cmple_epu16_mask(__mmask32 __u, __m512i __a, __m512i __b) { - // CHECK-LABEL: @test_mm512_mask_cmple_epu16_mask + // CHECK-LABEL: test_mm512_mask_cmple_epu16_mask // CHECK: icmp ule <32 x i16> %{{.*}}, %{{.*}} // CHECK: and <32 x i1> %{{.*}}, %{{.*}} return (__mmask32)_mm512_mask_cmple_epu16_mask(__u, __a, __b); } __mmask64 test_mm512_cmplt_epi8_mask(__m512i __a, __m512i __b) { - // CHECK-LABEL: @test_mm512_cmplt_epi8_mask + // CHECK-LABEL: test_mm512_cmplt_epi8_mask // CHECK: icmp slt <64 x i8> %{{.*}}, %{{.*}} return (__mmask64)_mm512_cmplt_epi8_mask(__a, __b); } __mmask64 test_mm512_mask_cmplt_epi8_mask(__mmask64 __u, __m512i __a, __m512i __b) { - // CHECK-LABEL: @test_mm512_mask_cmplt_epi8_mask + // CHECK-LABEL: test_mm512_mask_cmplt_epi8_mask // CHECK: icmp slt <64 x i8> %{{.*}}, %{{.*}} // CHECK: and <64 x i1> %{{.*}}, %{{.*}} return (__mmask64)_mm512_mask_cmplt_epi8_mask(__u, __a, __b); } __mmask64 test_mm512_cmplt_epu8_mask(__m512i __a, __m512i __b) { - // CHECK-LABEL: @test_mm512_cmplt_epu8_mask + // CHECK-LABEL: test_mm512_cmplt_epu8_mask // CHECK: icmp ult <64 x i8> %{{.*}}, %{{.*}} return (__mmask64)_mm512_cmplt_epu8_mask(__a, __b); } __mmask64 test_mm512_mask_cmplt_epu8_mask(__mmask64 __u, __m512i __a, __m512i __b) { - // CHECK-LABEL: @test_mm512_mask_cmplt_epu8_mask + // CHECK-LABEL: test_mm512_mask_cmplt_epu8_mask // CHECK: icmp ult <64 x i8> %{{.*}}, %{{.*}} // CHECK: and <64 x i1> %{{.*}}, %{{.*}} return (__mmask64)_mm512_mask_cmplt_epu8_mask(__u, __a, __b); } __mmask32 test_mm512_cmplt_epi16_mask(__m512i __a, __m512i __b) { - // CHECK-LABEL: @test_mm512_cmplt_epi16_mask + // CHECK-LABEL: test_mm512_cmplt_epi16_mask // CHECK: icmp slt <32 x i16> %{{.*}}, %{{.*}} return (__mmask32)_mm512_cmplt_epi16_mask(__a, __b); } __mmask32 test_mm512_mask_cmplt_epi16_mask(__mmask32 __u, __m512i __a, __m512i __b) { - // CHECK-LABEL: @test_mm512_mask_cmplt_epi16_mask + // CHECK-LABEL: test_mm512_mask_cmplt_epi16_mask // CHECK: icmp slt <32 x i16> %{{.*}}, %{{.*}} // CHECK: and <32 x i1> %{{.*}}, %{{.*}} return (__mmask32)_mm512_mask_cmplt_epi16_mask(__u, __a, __b); } __mmask32 test_mm512_cmplt_epu16_mask(__m512i __a, __m512i __b) { - // CHECK-LABEL: @test_mm512_cmplt_epu16_mask + // CHECK-LABEL: test_mm512_cmplt_epu16_mask // CHECK: icmp ult <32 x i16> %{{.*}}, %{{.*}} return (__mmask32)_mm512_cmplt_epu16_mask(__a, __b); } __mmask32 test_mm512_mask_cmplt_epu16_mask(__mmask32 __u, __m512i __a, __m512i __b) { - // CHECK-LABEL: @test_mm512_mask_cmplt_epu16_mask + // CHECK-LABEL: test_mm512_mask_cmplt_epu16_mask // CHECK: icmp ult <32 x i16> %{{.*}}, %{{.*}} // CHECK: and <32 x i1> %{{.*}}, %{{.*}} return (__mmask32)_mm512_mask_cmplt_epu16_mask(__u, __a, __b); } __mmask64 test_mm512_cmpneq_epi8_mask(__m512i __a, __m512i __b) { - // CHECK-LABEL: @test_mm512_cmpneq_epi8_mask + // CHECK-LABEL: test_mm512_cmpneq_epi8_mask // CHECK: icmp ne <64 x i8> %{{.*}}, %{{.*}} return (__mmask64)_mm512_cmpneq_epi8_mask(__a, __b); } __mmask64 test_mm512_mask_cmpneq_epi8_mask(__mmask64 __u, __m512i __a, __m512i __b) { - // CHECK-LABEL: @test_mm512_mask_cmpneq_epi8_mask + // CHECK-LABEL: test_mm512_mask_cmpneq_epi8_mask // CHECK: icmp ne <64 x i8> %{{.*}}, %{{.*}} // CHECK: and <64 x i1> %{{.*}}, %{{.*}} return (__mmask64)_mm512_mask_cmpneq_epi8_mask(__u, __a, __b); } __mmask64 test_mm512_cmpneq_epu8_mask(__m512i __a, __m512i __b) { - // CHECK-LABEL: @test_mm512_cmpneq_epu8_mask + // CHECK-LABEL: test_mm512_cmpneq_epu8_mask // CHECK: icmp ne <64 x i8> %{{.*}}, %{{.*}} return (__mmask64)_mm512_cmpneq_epu8_mask(__a, __b); } __mmask64 test_mm512_mask_cmpneq_epu8_mask(__mmask64 __u, __m512i __a, __m512i __b) { - // CHECK-LABEL: @test_mm512_mask_cmpneq_epu8_mask + // CHECK-LABEL: test_mm512_mask_cmpneq_epu8_mask // CHECK: icmp ne <64 x i8> %{{.*}}, %{{.*}} // CHECK: and <64 x i1> %{{.*}}, %{{.*}} return (__mmask64)_mm512_mask_cmpneq_epu8_mask(__u, __a, __b); } __mmask32 test_mm512_cmpneq_epi16_mask(__m512i __a, __m512i __b) { - // CHECK-LABEL: @test_mm512_cmpneq_epi16_mask + // CHECK-LABEL: test_mm512_cmpneq_epi16_mask // CHECK: icmp ne <32 x i16> %{{.*}}, %{{.*}} return (__mmask32)_mm512_cmpneq_epi16_mask(__a, __b); } __mmask32 test_mm512_mask_cmpneq_epi16_mask(__mmask32 __u, __m512i __a, __m512i __b) { - // CHECK-LABEL: @test_mm512_mask_cmpneq_epi16_mask + // CHECK-LABEL: test_mm512_mask_cmpneq_epi16_mask // CHECK: icmp ne <32 x i16> %{{.*}}, %{{.*}} // CHECK: and <32 x i1> %{{.*}}, %{{.*}} return (__mmask32)_mm512_mask_cmpneq_epi16_mask(__u, __a, __b); } __mmask32 test_mm512_cmpneq_epu16_mask(__m512i __a, __m512i __b) { - // CHECK-LABEL: @test_mm512_cmpneq_epu16_mask + // CHECK-LABEL: test_mm512_cmpneq_epu16_mask // CHECK: icmp ne <32 x i16> %{{.*}}, %{{.*}} return (__mmask32)_mm512_cmpneq_epu16_mask(__a, __b); } __mmask32 test_mm512_mask_cmpneq_epu16_mask(__mmask32 __u, __m512i __a, __m512i __b) { - // CHECK-LABEL: @test_mm512_mask_cmpneq_epu16_mask + // CHECK-LABEL: test_mm512_mask_cmpneq_epu16_mask // CHECK: icmp ne <32 x i16> %{{.*}}, %{{.*}} // CHECK: and <32 x i1> %{{.*}}, %{{.*}} return (__mmask32)_mm512_mask_cmpneq_epu16_mask(__u, __a, __b); } __mmask64 test_mm512_cmp_epi8_mask(__m512i __a, __m512i __b) { - // CHECK-LABEL: @test_mm512_cmp_epi8_mask + // CHECK-LABEL: test_mm512_cmp_epi8_mask // CHECK: icmp eq <64 x i8> %{{.*}}, %{{.*}} return (__mmask64)_mm512_cmp_epi8_mask(__a, __b, 0); } __mmask64 test_mm512_mask_cmp_epi8_mask(__mmask64 __u, __m512i __a, __m512i __b) { - // CHECK-LABEL: @test_mm512_mask_cmp_epi8_mask + // CHECK-LABEL: test_mm512_mask_cmp_epi8_mask // CHECK: icmp eq <64 x i8> %{{.*}}, %{{.*}} // CHECK: and <64 x i1> %{{.*}}, %{{.*}} return (__mmask64)_mm512_mask_cmp_epi8_mask(__u, __a, __b, 0); } __mmask64 test_mm512_cmp_epu8_mask(__m512i __a, __m512i __b) { - // CHECK-LABEL: @test_mm512_cmp_epu8_mask + // CHECK-LABEL: test_mm512_cmp_epu8_mask // CHECK: icmp eq <64 x i8> %{{.*}}, %{{.*}} return (__mmask64)_mm512_cmp_epu8_mask(__a, __b, 0); } __mmask64 test_mm512_mask_cmp_epu8_mask(__mmask64 __u, __m512i __a, __m512i __b) { - // CHECK-LABEL: @test_mm512_mask_cmp_epu8_mask + // CHECK-LABEL: test_mm512_mask_cmp_epu8_mask // CHECK: icmp eq <64 x i8> %{{.*}}, %{{.*}} // CHECK: and <64 x i1> %{{.*}}, %{{.*}} return (__mmask64)_mm512_mask_cmp_epu8_mask(__u, __a, __b, 0); } __mmask32 test_mm512_cmp_epi16_mask(__m512i __a, __m512i __b) { - // CHECK-LABEL: @test_mm512_cmp_epi16_mask + // CHECK-LABEL: test_mm512_cmp_epi16_mask // CHECK: icmp eq <32 x i16> %{{.*}}, %{{.*}} return (__mmask32)_mm512_cmp_epi16_mask(__a, __b, 0); } __mmask32 test_mm512_mask_cmp_epi16_mask(__mmask32 __u, __m512i __a, __m512i __b) { - // CHECK-LABEL: @test_mm512_mask_cmp_epi16_mask + // CHECK-LABEL: test_mm512_mask_cmp_epi16_mask // CHECK: icmp eq <32 x i16> %{{.*}}, %{{.*}} // CHECK: and <32 x i1> %{{.*}}, %{{.*}} return (__mmask32)_mm512_mask_cmp_epi16_mask(__u, __a, __b, 0); } __mmask32 test_mm512_cmp_epu16_mask(__m512i __a, __m512i __b) { - // CHECK-LABEL: @test_mm512_cmp_epu16_mask + // CHECK-LABEL: test_mm512_cmp_epu16_mask // CHECK: icmp eq <32 x i16> %{{.*}}, %{{.*}} return (__mmask32)_mm512_cmp_epu16_mask(__a, __b, 0); } __mmask32 test_mm512_mask_cmp_epu16_mask(__mmask32 __u, __m512i __a, __m512i __b) { - // CHECK-LABEL: @test_mm512_mask_cmp_epu16_mask + // CHECK-LABEL: test_mm512_mask_cmp_epu16_mask // CHECK: icmp eq <32 x i16> %{{.*}}, %{{.*}} // CHECK: and <32 x i1> %{{.*}}, %{{.*}} return (__mmask32)_mm512_mask_cmp_epu16_mask(__u, __a, __b, 0); } __m512i test_mm512_add_epi8 (__m512i __A, __m512i __B) { - //CHECK-LABEL: @test_mm512_add_epi8 + //CHECK-LABEL: test_mm512_add_epi8 //CHECK: add <64 x i8> return _mm512_add_epi8(__A,__B); } __m512i test_mm512_mask_add_epi8 (__m512i __W, __mmask64 __U, __m512i __A, __m512i __B) { - //CHECK-LABEL: @test_mm512_mask_add_epi8 + //CHECK-LABEL: test_mm512_mask_add_epi8 //CHECK: add <64 x i8> %{{.*}}, %{{.*}} //CHECK: select <64 x i1> %{{.*}}, <64 x i8> %{{.*}}, <64 x i8> %{{.*}} return _mm512_mask_add_epi8(__W, __U, __A, __B); } __m512i test_mm512_maskz_add_epi8 (__mmask64 __U, __m512i __A, __m512i __B) { - //CHECK-LABEL: @test_mm512_maskz_add_epi8 + //CHECK-LABEL: test_mm512_maskz_add_epi8 //CHECK: add <64 x i8> %{{.*}}, %{{.*}} //CHECK: select <64 x i1> %{{.*}}, <64 x i8> %{{.*}}, <64 x i8> %{{.*}} return _mm512_maskz_add_epi8(__U, __A, __B); } __m512i test_mm512_sub_epi8 (__m512i __A, __m512i __B) { - //CHECK-LABEL: @test_mm512_sub_epi8 + //CHECK-LABEL: test_mm512_sub_epi8 //CHECK: sub <64 x i8> return _mm512_sub_epi8(__A, __B); } __m512i test_mm512_mask_sub_epi8 (__m512i __W, __mmask64 __U, __m512i __A, __m512i __B) { - //CHECK-LABEL: @test_mm512_mask_sub_epi8 + //CHECK-LABEL: test_mm512_mask_sub_epi8 //CHECK: sub <64 x i8> %{{.*}}, %{{.*}} //CHECK: select <64 x i1> %{{.*}}, <64 x i8> %{{.*}}, <64 x i8> %{{.*}} return _mm512_mask_sub_epi8(__W, __U, __A, __B); } __m512i test_mm512_maskz_sub_epi8 (__mmask64 __U, __m512i __A, __m512i __B) { - //CHECK-LABEL: @test_mm512_maskz_sub_epi8 + //CHECK-LABEL: test_mm512_maskz_sub_epi8 //CHECK: sub <64 x i8> %{{.*}}, %{{.*}} //CHECK: select <64 x i1> %{{.*}}, <64 x i8> %{{.*}}, <64 x i8> %{{.*}} return _mm512_maskz_sub_epi8(__U, __A, __B); } __m512i test_mm512_add_epi16 (__m512i __A, __m512i __B) { - //CHECK-LABEL: @test_mm512_add_epi16 + //CHECK-LABEL: test_mm512_add_epi16 //CHECK: add <32 x i16> return _mm512_add_epi16(__A, __B); } __m512i test_mm512_mask_add_epi16 (__m512i __W, __mmask32 __U, __m512i __A, __m512i __B) { - //CHECK-LABEL: @test_mm512_mask_add_epi16 + //CHECK-LABEL: test_mm512_mask_add_epi16 //CHECK: add <32 x i16> %{{.*}}, %{{.*}} //CHECK: select <32 x i1> %{{.*}}, <32 x i16> %{{.*}}, <32 x i16> %{{.*}} return _mm512_mask_add_epi16(__W, __U, __A, __B); } __m512i test_mm512_maskz_add_epi16 (__mmask32 __U, __m512i __A, __m512i __B) { - //CHECK-LABEL: @test_mm512_maskz_add_epi16 + //CHECK-LABEL: test_mm512_maskz_add_epi16 //CHECK: add <32 x i16> %{{.*}}, %{{.*}} //CHECK: select <32 x i1> %{{.*}}, <32 x i16> %{{.*}}, <32 x i16> %{{.*}} return _mm512_maskz_add_epi16(__U, __A, __B); } __m512i test_mm512_sub_epi16 (__m512i __A, __m512i __B) { - //CHECK-LABEL: @test_mm512_sub_epi16 + //CHECK-LABEL: test_mm512_sub_epi16 //CHECK: sub <32 x i16> return _mm512_sub_epi16(__A, __B); } __m512i test_mm512_mask_sub_epi16 (__m512i __W, __mmask32 __U, __m512i __A, __m512i __B) { - //CHECK-LABEL: @test_mm512_mask_sub_epi16 + //CHECK-LABEL: test_mm512_mask_sub_epi16 //CHECK: sub <32 x i16> %{{.*}}, %{{.*}} //CHECK: select <32 x i1> %{{.*}}, <32 x i16> %{{.*}}, <32 x i16> %{{.*}} return _mm512_mask_sub_epi16(__W, __U, __A, __B); } __m512i test_mm512_maskz_sub_epi16 (__mmask32 __U, __m512i __A, __m512i __B) { - //CHECK-LABEL: @test_mm512_maskz_sub_epi16 + //CHECK-LABEL: test_mm512_maskz_sub_epi16 //CHECK: sub <32 x i16> %{{.*}}, %{{.*}} //CHECK: select <32 x i1> %{{.*}}, <32 x i16> %{{.*}}, <32 x i16> %{{.*}} return _mm512_maskz_sub_epi16(__U, __A, __B); } __m512i test_mm512_mullo_epi16 (__m512i __A, __m512i __B) { - //CHECK-LABEL: @test_mm512_mullo_epi16 + //CHECK-LABEL: test_mm512_mullo_epi16 //CHECK: mul <32 x i16> return _mm512_mullo_epi16(__A, __B); } +TEST_CONSTEXPR(match_v32hi(_mm512_mullo_epi16((__m512i)(__v32hi){+1, -2, +3, -4, +5, -6, +7, -8, +9, -10, +11, -12, +13, -14, +15, -16, +17, -18, +19, -20, +21, -22, +23, -24, +25, -26, +27, -28, +29, -30, +31, -32}, (__m512i)(__v32hi){-64, -62, +60, +58, -56, -54, +52, +50, -48, -46, +44, +42, -40, -38, +36, +34, -32, -30, +28, +26, -24, -22, +20, +18, -16, -14, +12, +10, -8, +6, -4, +2}), -64, 124, 180, -232, -280, 324, 364, -400, -432, 460, 484, -504, -520, 532, 540, -544, -544, 540, 532, -520, -504, 484, 460, -432, -400, 364, 324, -280, -232, -180, -124, -64)); __m512i test_mm512_mask_mullo_epi16 (__m512i __W, __mmask32 __U, __m512i __A, __m512i __B) { - //CHECK-LABEL: @test_mm512_mask_mullo_epi16 + //CHECK-LABEL: test_mm512_mask_mullo_epi16 //CHECK: mul <32 x i16> %{{.*}}, %{{.*}} //CHECK: select <32 x i1> %{{.*}}, <32 x i16> %{{.*}}, <32 x i16> %{{.*}} return _mm512_mask_mullo_epi16(__W, __U, __A, __B); } +TEST_CONSTEXPR(match_v32hi(_mm512_mask_mullo_epi16((__m512i)(__v32hi){-1, +2, -3, +4, -5, +6, -7, +8, -9, +10, -11, +12, -13, +14, -15, +16, -17, +18, -19, +20, -21, +22, -23, +24, -25, +26, -27, +28, -29, +30, -31, +32}, 0x0000FFFF, (__m512i)(__v32hi){+2, -3, +4, -5, +6, -7, +8, -9, +10, -11, +12, -13, +14, -15, +16, -17, +18, -19, +20, -21, +22, -23, +24, -25, +26, -27, +28, -29, +30, -31, +32, -33}, (__m512i)(__v32hi){-3, +4, -5, +6, -7, +8, -9, +10, -11, +12, -13, +14, -15, +16, -17, +18, -19, +20, -21, +22, -23, +24, -25, +26, -27, +28, -29, +30, -31, +32, -33, +34}), -6, -12, -20, -30, -42, -56, -72, -90, -110, -132, -156, -182, -210, -240, -272, -306, -17, +18, -19, +20, -21, +22, -23, +24, -25, +26, -27, +28, -29, +30, -31, +32)); __m512i test_mm512_maskz_mullo_epi16 (__mmask32 __U, __m512i __A, __m512i __B) { - //CHECK-LABEL: @test_mm512_maskz_mullo_epi16 + //CHECK-LABEL: test_mm512_maskz_mullo_epi16 //CHECK: mul <32 x i16> %{{.*}}, %{{.*}} //CHECK: select <32 x i1> %{{.*}}, <32 x i16> %{{.*}}, <32 x i16> %{{.*}} return _mm512_maskz_mullo_epi16(__U, __A, __B); } +TEST_CONSTEXPR(match_v32hi(_mm512_maskz_mullo_epi16(0x0000FFFF, (__m512i)(__v32hi){+2, -3, +4, -5, +6, -7, +8, -9, +10, -11, +12, -13, +14, -15, +16, -17, +18, -19, +20, -21, +22, -23, +24, -25, +26, -27, +28, -29, +30, -31, +32, -33}, (__m512i)(__v32hi){-3, +4, -5, +6, -7, +8, -9, +10, -11, +12, -13, +14, -15, +16, -17, +18, -19, +20, -21, +22, -23, +24, -25, +26, -27, +28, -29, +30, -31, +32, -33, +34}), -6, -12, -20, -30, -42, -56, -72, -90, -110, -132, -156, -182, -210, -240, -272, -306, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)); __m512i test_mm512_mask_blend_epi8(__mmask64 __U, __m512i __A, __m512i __W) { - // CHECK-LABEL: @test_mm512_mask_blend_epi8 + // CHECK-LABEL: test_mm512_mask_blend_epi8 // CHECK: select <64 x i1> %{{.*}}, <64 x i8> %{{.*}}, <64 x i8> %{{.*}} return _mm512_mask_blend_epi8(__U,__A,__W); } __m512i test_mm512_mask_blend_epi16(__mmask32 __U, __m512i __A, __m512i __W) { - // CHECK-LABEL: @test_mm512_mask_blend_epi16 + // CHECK-LABEL: test_mm512_mask_blend_epi16 // CHECK: select <32 x i1> %{{.*}}, <32 x i16> %{{.*}}, <32 x i16> %{{.*}} return _mm512_mask_blend_epi16(__U,__A,__W); } __m512i test_mm512_abs_epi8(__m512i __A) { - // CHECK-LABEL: @test_mm512_abs_epi8 + // CHECK-LABEL: test_mm512_abs_epi8 // CHECK: [[ABS:%.*]] = call <64 x i8> @llvm.abs.v64i8(<64 x i8> %{{.*}}, i1 false) return _mm512_abs_epi8(__A); } +TEST_CONSTEXPR(match_v64qi(_mm512_abs_epi8((__m512i)(__v64qs){0, +1, -2, +3, -4, +5, -6, +7, -8, +9, -10, +11, -12, +13, -14, +15, -16, +17, -18, +19, -20, +21, -22, +23, -24, +25, -26, +27, -28, +29, -30, +31, -32, +33, -34, +35, -36, +37, -38, +39, -40, +41, -42, +43, -44, +45, -46, +47, +100, +50, -100, +20, +80, -50, +120, -20, -100, -50, +100, -20, -80, +50, -120, +20}), 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 100, 50, 100, 20, 80, 50, 120, 20, 100, 50, 100, 20, 80, 50, 120, 20)); + __m512i test_mm512_mask_abs_epi8(__m512i __W, __mmask64 __U, __m512i __A) { - // CHECK-LABEL: @test_mm512_mask_abs_epi8 + // CHECK-LABEL: test_mm512_mask_abs_epi8 // CHECK: [[ABS:%.*]] = call <64 x i8> @llvm.abs.v64i8(<64 x i8> %{{.*}}, i1 false) // CHECK: select <64 x i1> %{{.*}}, <64 x i8> [[ABS]], <64 x i8> %{{.*}} return _mm512_mask_abs_epi8(__W,__U,__A); } +TEST_CONSTEXPR(match_v64qi(_mm512_mask_abs_epi8((__m512i)(__v64qi){99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99}, (__mmask64)0x000000000000001, (__m512i)(__v64qi){(char)-1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2}), 1, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99)); + __m512i test_mm512_maskz_abs_epi8(__mmask64 __U, __m512i __A) { - // CHECK-LABEL: @test_mm512_maskz_abs_epi8 + // CHECK-LABEL: test_mm512_maskz_abs_epi8 // CHECK: [[ABS:%.*]] = call <64 x i8> @llvm.abs.v64i8(<64 x i8> %{{.*}}, i1 false) // CHECK: select <64 x i1> %{{.*}}, <64 x i8> [[ABS]], <64 x i8> %{{.*}} return _mm512_maskz_abs_epi8(__U,__A); } +TEST_CONSTEXPR(match_v64qi(_mm512_maskz_abs_epi8((__mmask64)0x000000000000001, (__m512i)(__v64qi){(char)-1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2}), 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)); + __m512i test_mm512_abs_epi16(__m512i __A) { - // CHECK-LABEL: @test_mm512_abs_epi16 + // CHECK-LABEL: test_mm512_abs_epi16 // CHECK: [[ABS:%.*]] = call <32 x i16> @llvm.abs.v32i16(<32 x i16> %{{.*}}, i1 false) return _mm512_abs_epi16(__A); } +TEST_CONSTEXPR(match_v32hi(_mm512_abs_epi16((__m512i)(__v32hi){0, +1, -2, +3, -4, +5, -6, +7, -8, +9, -10, +11, -12, +13, -14, +15, -16, +17, -18, +19, -20, +21, -22, +23, -24, +25, -26, +27, +32000, -32000, +32000, -32000}), 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 32000, 32000, 32000, 32000)); + __m512i test_mm512_mask_abs_epi16(__m512i __W, __mmask32 __U, __m512i __A) { - // CHECK-LABEL: @test_mm512_mask_abs_epi16 + // CHECK-LABEL: test_mm512_mask_abs_epi16 // CHECK: [[ABS:%.*]] = call <32 x i16> @llvm.abs.v32i16(<32 x i16> %{{.*}}, i1 false) // CHECK: select <32 x i1> %{{.*}}, <32 x i16> [[ABS]], <32 x i16> %{{.*}} return _mm512_mask_abs_epi16(__W,__U,__A); } +TEST_CONSTEXPR(match_v32hi(_mm512_mask_abs_epi16((__m512i)(__v32hi){99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99}, (__mmask32)0x00000001, (__m512i)(__v32hi){-1000, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5}), 1000, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99)); + __m512i test_mm512_maskz_abs_epi16(__mmask32 __U, __m512i __A) { - // CHECK-LABEL: @test_mm512_maskz_abs_epi16 + // CHECK-LABEL: test_mm512_maskz_abs_epi16 // CHECK: [[ABS:%.*]] = call <32 x i16> @llvm.abs.v32i16(<32 x i16> %{{.*}}, i1 false) // CHECK: select <32 x i1> %{{.*}}, <32 x i16> [[ABS]], <32 x i16> %{{.*}} return _mm512_maskz_abs_epi16(__U,__A); } +TEST_CONSTEXPR(match_v32hi(_mm512_maskz_abs_epi16((__mmask32)0x00000001, (__m512i)(__v32hi){-1000, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5}), 1000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)); + __m512i test_mm512_packs_epi32(__m512i __A, __m512i __B) { - // CHECK-LABEL: @test_mm512_packs_epi32 + // CHECK-LABEL: test_mm512_packs_epi32 // CHECK: @llvm.x86.avx512.packssdw.512 return _mm512_packs_epi32(__A,__B); } __m512i test_mm512_maskz_packs_epi32(__mmask32 __M, __m512i __A, __m512i __B) { - // CHECK-LABEL: @test_mm512_maskz_packs_epi32 + // CHECK-LABEL: test_mm512_maskz_packs_epi32 // CHECK: @llvm.x86.avx512.packssdw.512 // CHECK: select <32 x i1> %{{.*}}, <32 x i16> %{{.*}}, <32 x i16> %{{.*}} return _mm512_maskz_packs_epi32(__M,__A,__B); } __m512i test_mm512_mask_packs_epi32(__m512i __W, __mmask32 __M, __m512i __A, __m512i __B) { - // CHECK-LABEL: @test_mm512_mask_packs_epi32 + // CHECK-LABEL: test_mm512_mask_packs_epi32 // CHECK: @llvm.x86.avx512.packssdw.512 // CHECK: select <32 x i1> %{{.*}}, <32 x i16> %{{.*}}, <32 x i16> %{{.*}} return _mm512_mask_packs_epi32(__W,__M,__A,__B); } __m512i test_mm512_packs_epi16(__m512i __A, __m512i __B) { - // CHECK-LABEL: @test_mm512_packs_epi16 + // CHECK-LABEL: test_mm512_packs_epi16 // CHECK: @llvm.x86.avx512.packsswb.512 return _mm512_packs_epi16(__A,__B); } __m512i test_mm512_mask_packs_epi16(__m512i __W, __mmask64 __M, __m512i __A, __m512i __B) { - // CHECK-LABEL: @test_mm512_mask_packs_epi16 + // CHECK-LABEL: test_mm512_mask_packs_epi16 // CHECK: @llvm.x86.avx512.packsswb.512 // CHECK: select <64 x i1> %{{.*}}, <64 x i8> %{{.*}}, <64 x i8> %{{.*}} return _mm512_mask_packs_epi16(__W,__M,__A,__B); } __m512i test_mm512_maskz_packs_epi16(__mmask64 __M, __m512i __A, __m512i __B) { - // CHECK-LABEL: @test_mm512_maskz_packs_epi16 + // CHECK-LABEL: test_mm512_maskz_packs_epi16 // CHECK: @llvm.x86.avx512.packsswb.512 // CHECK: select <64 x i1> %{{.*}}, <64 x i8> %{{.*}}, <64 x i8> %{{.*}} return _mm512_maskz_packs_epi16(__M,__A,__B); } __m512i test_mm512_packus_epi32(__m512i __A, __m512i __B) { - // CHECK-LABEL: @test_mm512_packus_epi32 + // CHECK-LABEL: test_mm512_packus_epi32 // CHECK: @llvm.x86.avx512.packusdw.512 return _mm512_packus_epi32(__A,__B); } __m512i test_mm512_maskz_packus_epi32(__mmask32 __M, __m512i __A, __m512i __B) { - // CHECK-LABEL: @test_mm512_maskz_packus_epi32 + // CHECK-LABEL: test_mm512_maskz_packus_epi32 // CHECK: @llvm.x86.avx512.packusdw.512 // CHECK: select <32 x i1> %{{.*}}, <32 x i16> %{{.*}}, <32 x i16> %{{.*}} return _mm512_maskz_packus_epi32(__M,__A,__B); } __m512i test_mm512_mask_packus_epi32(__m512i __W, __mmask32 __M, __m512i __A, __m512i __B) { - // CHECK-LABEL: @test_mm512_mask_packus_epi32 + // CHECK-LABEL: test_mm512_mask_packus_epi32 // CHECK: @llvm.x86.avx512.packusdw.512 // CHECK: select <32 x i1> %{{.*}}, <32 x i16> %{{.*}}, <32 x i16> %{{.*}} return _mm512_mask_packus_epi32(__W,__M,__A,__B); } __m512i test_mm512_packus_epi16(__m512i __A, __m512i __B) { - // CHECK-LABEL: @test_mm512_packus_epi16 + // CHECK-LABEL: test_mm512_packus_epi16 // CHECK: @llvm.x86.avx512.packuswb.512 return _mm512_packus_epi16(__A,__B); } __m512i test_mm512_mask_packus_epi16(__m512i __W, __mmask64 __M, __m512i __A, __m512i __B) { - // CHECK-LABEL: @test_mm512_mask_packus_epi16 + // CHECK-LABEL: test_mm512_mask_packus_epi16 // CHECK: @llvm.x86.avx512.packuswb.512 // CHECK: select <64 x i1> %{{.*}}, <64 x i8> %{{.*}}, <64 x i8> %{{.*}} return _mm512_mask_packus_epi16(__W,__M,__A,__B); } __m512i test_mm512_maskz_packus_epi16(__mmask64 __M, __m512i __A, __m512i __B) { - // CHECK-LABEL: @test_mm512_maskz_packus_epi16 + // CHECK-LABEL: test_mm512_maskz_packus_epi16 // CHECK: @llvm.x86.avx512.packuswb.512 // CHECK: select <64 x i1> %{{.*}}, <64 x i8> %{{.*}}, <64 x i8> %{{.*}} return _mm512_maskz_packus_epi16(__M,__A,__B); } __m512i test_mm512_adds_epi8(__m512i __A, __m512i __B) { - // CHECK-LABEL: @test_mm512_adds_epi8 + // CHECK-LABEL: test_mm512_adds_epi8 // CHECK: @llvm.sadd.sat.v64i8 return _mm512_adds_epi8(__A,__B); } +TEST_CONSTEXPR(match_v64qi(_mm512_adds_epi8((__m512i)(__v64qs){0, +1, -2, +3, -4, +5, -6, +7, -8, +9, -10, +11, -12, +13, -14, +15, -16, +17, -18, +19, -20, +21, -22, +23, -24, +25, -26, +27, -28, +29, -30, +31, -32, +33, -34, +35, -36, +37, -38, +39, -40, +41, -42, +43, -44, +45, -46, +47, +100, +50, -100, +20, +80, -50, +120, -20, -100, -50, +100, -20, -80, +50, -120, +20}, (__m512i)(__v64qs){0, +1, -2, +3, -4, +5, -6, +7, -8, +9, -10, +11, -12, +13, -14, +15, -16, +17, -18, +19, -20, +21, -22, +23, -24, +25, -26, +27, -28, +29, -30, +31, -32, +33, -34, +35, -36, +37, -38, +39, -40, +41, -42, +43, -44, +45, -46, +47, +50, +80, -50, +110, +60, -30, +20, -10, +50, +80, -50, +110, +60, -30, +20, -10}), 0, +2, -4, +6, -8, +10, -12, +14, -16, +18, -20, +22, -24, +26, -28, +30, -32, +34, -36, +38, -40, +42, -44, +46, -48, +50, -52, +54, -56, +58, -60, +62, -64, +66, -68, +70, -72, +74, -76, +78, -80, +82, -84, +86, -88, +90, -92, +94, +127, +127, -128, +127, +127, -80, +127, -30, -50, +30, +50, +90, -20, +20, -100, +10)); + __m512i test_mm512_mask_adds_epi8(__m512i __W, __mmask64 __U, __m512i __A, __m512i __B) { - // CHECK-LABEL: @test_mm512_mask_adds_epi8 + // CHECK-LABEL: test_mm512_mask_adds_epi8 // CHECK: @llvm.sadd.sat.v64i8 // CHECK: select <64 x i1> %{{.*}}, <64 x i8> %{{.*}}, <64 x i8> %{{.*}} return _mm512_mask_adds_epi8(__W,__U,__A,__B); } __m512i test_mm512_maskz_adds_epi8(__mmask64 __U, __m512i __A, __m512i __B) { - // CHECK-LABEL: @test_mm512_maskz_adds_epi8 + // CHECK-LABEL: test_mm512_maskz_adds_epi8 // CHECK: @llvm.sadd.sat.v64i8 // CHECK: select <64 x i1> %{{.*}}, <64 x i8> %{{.*}}, <64 x i8> %{{.*}} return _mm512_maskz_adds_epi8(__U,__A,__B); } __m512i test_mm512_adds_epi16(__m512i __A, __m512i __B) { - // CHECK-LABEL: @test_mm512_adds_epi16 + // CHECK-LABEL: test_mm512_adds_epi16 // CHECK: @llvm.sadd.sat.v32i16 return _mm512_adds_epi16(__A,__B); } +TEST_CONSTEXPR(match_v32hi(_mm512_adds_epi16((__m512i)(__v32hi){0, +1, -2, +3, -4, +5, -6, +7, -8, +9, -10, +11, -12, +13, -14, +15, -16, +17, -18, +19, -20, +21, -22, +23, -24, +25, -26, +27, +32000, -32000, +32000, -32000}, (__m512i)(__v32hi){0, +1, -2, +3, -4, +5, -6, +7, -8, +9, -10, +11, -12, +13, -14, +15, -16, +17, -18, +19, -20, +21, -22, +23, -24, +25, -26, +27, +800, -800, -800, +800}), 0, +2, -4, +6, -8, +10, -12, +14, -16, +18, -20, +22, -24, +26, -28, +30, -32, +34, -36, +38, -40, +42, -44, +46, -48, +50, -52, +54, +32767, -32768, +31200, -31200)); + __m512i test_mm512_mask_adds_epi16(__m512i __W, __mmask32 __U, __m512i __A, __m512i __B) { - // CHECK-LABEL: @test_mm512_mask_adds_epi16 + // CHECK-LABEL: test_mm512_mask_adds_epi16 // CHECK: @llvm.sadd.sat.v32i16 // CHECK: select <32 x i1> %{{.*}}, <32 x i16> %{{.*}}, <32 x i16> %{{.*}} return _mm512_mask_adds_epi16(__W,__U,__A,__B); } __m512i test_mm512_maskz_adds_epi16(__mmask32 __U, __m512i __A, __m512i __B) { - // CHECK-LABEL: @test_mm512_maskz_adds_epi16 + // CHECK-LABEL: test_mm512_maskz_adds_epi16 // CHECK: @llvm.sadd.sat.v32i16 // CHECK: select <32 x i1> %{{.*}}, <32 x i16> %{{.*}}, <32 x i16> %{{.*}} return _mm512_maskz_adds_epi16(__U,__A,__B); } __m512i test_mm512_adds_epu8(__m512i __A, __m512i __B) { - // CHECK-LABEL: @test_mm512_adds_epu8 + // CHECK-LABEL: test_mm512_adds_epu8 // CHECK-NOT: @llvm.x86.avx512.mask.paddus.b.512 // CHECK: call <64 x i8> @llvm.uadd.sat.v64i8(<64 x i8> %{{.*}}, <64 x i8> %{{.*}}) return _mm512_adds_epu8(__A,__B); } +TEST_CONSTEXPR(match_v64qu(_mm512_adds_epu8((__m512i)(__v64qu){0, 0, 0, 0, 0, 0, 0, 0, +63, +63, +63, +63, +63, +63, +63, +63, +64, +64, +64, +64, +64, +64, +64, +64, +127, +127, +127, +127, +127, +127, +127, +127, +128, +128, +128, +128, +128, +128, +128, +128, +191, +191, +191, +191, +191, +191, +191, +191, +192, +192, +192, +192, +192, +192, +192, +192, +255, +255, +255, +255, +255, +255, +255, +255}, (__m512i)(__v64qu){0, +63, +64, +127, +128, +191, +192, +255, 0, +63, +64, +127, +128, +191, +192, +255, 0, +63, +64, +127, +128, +191, +192, +255, 0, +63, +64, +127, +128, +191, +192, +255, 0, +63, +64, +127, +128, +191, +192, +255, 0, +63, +64, +127, +128, +191, +192, +255, 0, +63, +64, +127, +128, +191, +192, +255, 0, +63, +64, +127, +128, +191, +192, +255}), 0, +63, +64, +127, +128, +191, +192, +255, +63, +126, +127, +190, +191, +254, +255, +255, +64, +127, +128, +191, +192, +255, +255, +255, +127, +190, +191, +254, +255, +255, +255, +255, +128, +191, +192, +255, +255, +255, +255, +255, +191, +254, +255, +255, +255, +255, +255, +255, +192, +255, +255, +255, +255, +255, +255, +255, +255, +255, +255, +255, +255, +255, +255, +255)); + __m512i test_mm512_mask_adds_epu8(__m512i __W, __mmask64 __U, __m512i __A, __m512i __B) { - // CHECK-LABEL: @test_mm512_mask_adds_epu8 + // CHECK-LABEL: test_mm512_mask_adds_epu8 // CHECK-NOT: @llvm.x86.avx512.mask.paddus.b.512 // CHECK: call <64 x i8> @llvm.uadd.sat.v64i8(<64 x i8> %{{.*}}, <64 x i8> %{{.*}}) // CHECK: select <64 x i1> %{{.*}}, <64 x i8> %{{.*}}, <64 x i8> %{{.*}} return _mm512_mask_adds_epu8(__W,__U,__A,__B); } +TEST_CONSTEXPR(match_v32hu(_mm512_adds_epu16((__m512i)(__v32hu){0, 0, 0, 0, +16384, +16384, +16384, +16384, +16384, +16384, +32767, +32767, +32767, +32767, +32767, +32767, +32768, +32768, +32768, +32768, +32768, +32768, +49152, +49152, +49152, +49152, +49152, +49152, +65535, +65535, +65535, +65535}, (__m512i)(__v32hu){0, +32767, +32768, +65535, 0, +16384, +32767, +32768, +49152, +65535, 0, +16384, +32767, +32768, +49152, +65535, 0, +16384, +32767, +32768, +49152, +65535, 0, +16384, +32767, +32768, +49152, +65535, 0, +32767, +32768, +65535}), 0, +32767, +32768, +65535, +16384, +32768, +49151, +49152, +65535, +65535, +32767, +49151, +65534, +65535, +65535, +65535, +32768, +49152, +65535, +65535, +65535, +65535, +49152, +65535, +65535, +65535, +65535, +65535, +65535, +65535, +65535, +65535)); + __m512i test_mm512_maskz_adds_epu8(__mmask64 __U, __m512i __A, __m512i __B) { - // CHECK-LABEL: @test_mm512_maskz_adds_epu8 + // CHECK-LABEL: test_mm512_maskz_adds_epu8 // CHECK-NOT: @llvm.x86.avx512.mask.paddus.b.512 // CHECK: call <64 x i8> @llvm.uadd.sat.v64i8(<64 x i8> %{{.*}}, <64 x i8> %{{.*}}) // CHECK: select <64 x i1> %{{.*}}, <64 x i8> %{{.*}}, <64 x i8> %{{.*}} return _mm512_maskz_adds_epu8(__U,__A,__B); } __m512i test_mm512_adds_epu16(__m512i __A, __m512i __B) { - // CHECK-LABEL: @test_mm512_adds_epu16 + // CHECK-LABEL: test_mm512_adds_epu16 // CHECK-NOT: @llvm.x86.avx512.mask.paddus.w.512 // CHECK: call <32 x i16> @llvm.uadd.sat.v32i16(<32 x i16> %{{.*}}, <32 x i16> %{{.*}}) return _mm512_adds_epu16(__A,__B); } __m512i test_mm512_mask_adds_epu16(__m512i __W, __mmask32 __U, __m512i __A, __m512i __B) { - // CHECK-LABEL: @test_mm512_mask_adds_epu16 + // CHECK-LABEL: test_mm512_mask_adds_epu16 // CHECK-NOT: @llvm.x86.avx512.mask.paddus.w.512 // CHECK: call <32 x i16> @llvm.uadd.sat.v32i16(<32 x i16> %{{.*}}, <32 x i16> %{{.*}}) // CHECK: select <32 x i1> %{{.*}}, <32 x i16> %{{.*}}, <32 x i16> %{{.*}} return _mm512_mask_adds_epu16(__W,__U,__A,__B); } __m512i test_mm512_maskz_adds_epu16(__mmask32 __U, __m512i __A, __m512i __B) { - // CHECK-LABEL: @test_mm512_maskz_adds_epu16 + // CHECK-LABEL: test_mm512_maskz_adds_epu16 // CHECK-NOT: @llvm.x86.avx512.mask.paddus.w.512 // CHECK: call <32 x i16> @llvm.uadd.sat.v32i16(<32 x i16> %{{.*}}, <32 x i16> %{{.*}}) // CHECK: select <32 x i1> %{{.*}}, <32 x i16> %{{.*}}, <32 x i16> %{{.*}} return _mm512_maskz_adds_epu16(__U,__A,__B); } __m512i test_mm512_avg_epu8(__m512i __A, __m512i __B) { - // CHECK-LABEL: @test_mm512_avg_epu8 + // CHECK-LABEL: test_mm512_avg_epu8 // CHECK: @llvm.x86.avx512.pavg.b.512 return _mm512_avg_epu8(__A,__B); } __m512i test_mm512_mask_avg_epu8(__m512i __W, __mmask64 __U, __m512i __A, __m512i __B) { - // CHECK-LABEL: @test_mm512_mask_avg_epu8 + // CHECK-LABEL: test_mm512_mask_avg_epu8 // CHECK: @llvm.x86.avx512.pavg.b.512 // CHECK: select <64 x i1> %{{.*}}, <64 x i8> %{{.*}}, <64 x i8> %{{.*}} return _mm512_mask_avg_epu8(__W,__U,__A,__B); } __m512i test_mm512_maskz_avg_epu8(__mmask64 __U, __m512i __A, __m512i __B) { - // CHECK-LABEL: @test_mm512_maskz_avg_epu8 + // CHECK-LABEL: test_mm512_maskz_avg_epu8 // CHECK: @llvm.x86.avx512.pavg.b.512 // CHECK: select <64 x i1> %{{.*}}, <64 x i8> %{{.*}}, <64 x i8> %{{.*}} return _mm512_maskz_avg_epu8(__U,__A,__B); } __m512i test_mm512_avg_epu16(__m512i __A, __m512i __B) { - // CHECK-LABEL: @test_mm512_avg_epu16 + // CHECK-LABEL: test_mm512_avg_epu16 // CHECK: @llvm.x86.avx512.pavg.w.512 return _mm512_avg_epu16(__A,__B); } __m512i test_mm512_mask_avg_epu16(__m512i __W, __mmask32 __U, __m512i __A, __m512i __B) { - // CHECK-LABEL: @test_mm512_mask_avg_epu16 + // CHECK-LABEL: test_mm512_mask_avg_epu16 // CHECK: @llvm.x86.avx512.pavg.w.512 // CHECK: select <32 x i1> %{{.*}}, <32 x i16> %{{.*}}, <32 x i16> %{{.*}} return _mm512_mask_avg_epu16(__W,__U,__A,__B); } __m512i test_mm512_maskz_avg_epu16(__mmask32 __U, __m512i __A, __m512i __B) { - // CHECK-LABEL: @test_mm512_maskz_avg_epu16 + // CHECK-LABEL: test_mm512_maskz_avg_epu16 // CHECK: @llvm.x86.avx512.pavg.w.512 // CHECK: select <32 x i1> %{{.*}}, <32 x i16> %{{.*}}, <32 x i16> %{{.*}} return _mm512_maskz_avg_epu16(__U,__A,__B); } __m512i test_mm512_max_epi8(__m512i __A, __m512i __B) { - // CHECK-LABEL: @test_mm512_max_epi8 + // CHECK-LABEL: test_mm512_max_epi8 // CHECK: [[RES:%.*]] = call <64 x i8> @llvm.smax.v64i8(<64 x i8> %{{.*}}, <64 x i8> %{{.*}}) return _mm512_max_epi8(__A,__B); } __m512i test_mm512_maskz_max_epi8(__mmask64 __M, __m512i __A, __m512i __B) { - // CHECK-LABEL: @test_mm512_maskz_max_epi8 + // CHECK-LABEL: test_mm512_maskz_max_epi8 // CHECK: [[RES:%.*]] = call <64 x i8> @llvm.smax.v64i8(<64 x i8> %{{.*}}, <64 x i8> %{{.*}}) // CHECK: select <64 x i1> {{.*}}, <64 x i8> [[RES]], <64 x i8> {{.*}} return _mm512_maskz_max_epi8(__M,__A,__B); } __m512i test_mm512_mask_max_epi8(__m512i __W, __mmask64 __M, __m512i __A, __m512i __B) { - // CHECK-LABEL: @test_mm512_mask_max_epi8 + // CHECK-LABEL: test_mm512_mask_max_epi8 // CHECK: [[RES:%.*]] = call <64 x i8> @llvm.smax.v64i8(<64 x i8> %{{.*}}, <64 x i8> %{{.*}}) // CHECK: select <64 x i1> {{.*}}, <64 x i8> [[RES]], <64 x i8> {{.*}} return _mm512_mask_max_epi8(__W,__M,__A,__B); } __m512i test_mm512_max_epi16(__m512i __A, __m512i __B) { - // CHECK-LABEL: @test_mm512_max_epi16 + // CHECK-LABEL: test_mm512_max_epi16 // CHECK: [[RES:%.*]] = call <32 x i16> @llvm.smax.v32i16(<32 x i16> %{{.*}}, <32 x i16> %{{.*}}) return _mm512_max_epi16(__A,__B); } __m512i test_mm512_maskz_max_epi16(__mmask32 __M, __m512i __A, __m512i __B) { - // CHECK-LABEL: @test_mm512_maskz_max_epi16 + // CHECK-LABEL: test_mm512_maskz_max_epi16 // CHECK: [[RES:%.*]] = call <32 x i16> @llvm.smax.v32i16(<32 x i16> %{{.*}}, <32 x i16> %{{.*}}) // CHECK: select <32 x i1> {{.*}}, <32 x i16> [[RES]], <32 x i16> {{.*}} return _mm512_maskz_max_epi16(__M,__A,__B); } __m512i test_mm512_mask_max_epi16(__m512i __W, __mmask32 __M, __m512i __A, __m512i __B) { - // CHECK-LABEL: @test_mm512_mask_max_epi16 + // CHECK-LABEL: test_mm512_mask_max_epi16 // CHECK: [[RES:%.*]] = call <32 x i16> @llvm.smax.v32i16(<32 x i16> %{{.*}}, <32 x i16> %{{.*}}) // CHECK: select <32 x i1> {{.*}}, <32 x i16> [[RES]], <32 x i16> {{.*}} return _mm512_mask_max_epi16(__W,__M,__A,__B); } __m512i test_mm512_max_epu8(__m512i __A, __m512i __B) { - // CHECK-LABEL: @test_mm512_max_epu8 + // CHECK-LABEL: test_mm512_max_epu8 // CHECK: [[RES:%.*]] = call <64 x i8> @llvm.umax.v64i8(<64 x i8> %{{.*}}, <64 x i8> %{{.*}}) return _mm512_max_epu8(__A,__B); } __m512i test_mm512_maskz_max_epu8(__mmask64 __M, __m512i __A, __m512i __B) { - // CHECK-LABEL: @test_mm512_maskz_max_epu8 + // CHECK-LABEL: test_mm512_maskz_max_epu8 // CHECK: [[RES:%.*]] = call <64 x i8> @llvm.umax.v64i8(<64 x i8> %{{.*}}, <64 x i8> %{{.*}}) // CHECK: select <64 x i1> {{.*}}, <64 x i8> [[RES]], <64 x i8> {{.*}} return _mm512_maskz_max_epu8(__M,__A,__B); } __m512i test_mm512_mask_max_epu8(__m512i __W, __mmask64 __M, __m512i __A, __m512i __B) { - // CHECK-LABEL: @test_mm512_mask_max_epu8 + // CHECK-LABEL: test_mm512_mask_max_epu8 // CHECK: [[RES:%.*]] = call <64 x i8> @llvm.umax.v64i8(<64 x i8> %{{.*}}, <64 x i8> %{{.*}}) // CHECK: select <64 x i1> {{.*}}, <64 x i8> [[RES]], <64 x i8> {{.*}} return _mm512_mask_max_epu8(__W,__M,__A,__B); } __m512i test_mm512_max_epu16(__m512i __A, __m512i __B) { - // CHECK-LABEL: @test_mm512_max_epu16 + // CHECK-LABEL: test_mm512_max_epu16 // CHECK: [[RES:%.*]] = call <32 x i16> @llvm.umax.v32i16(<32 x i16> %{{.*}}, <32 x i16> %{{.*}}) return _mm512_max_epu16(__A,__B); } __m512i test_mm512_maskz_max_epu16(__mmask32 __M, __m512i __A, __m512i __B) { - // CHECK-LABEL: @test_mm512_maskz_max_epu16 + // CHECK-LABEL: test_mm512_maskz_max_epu16 // CHECK: [[RES:%.*]] = call <32 x i16> @llvm.umax.v32i16(<32 x i16> %{{.*}}, <32 x i16> %{{.*}}) // CHECK: select <32 x i1> {{.*}}, <32 x i16> [[RES]], <32 x i16> {{.*}} return _mm512_maskz_max_epu16(__M,__A,__B); } __m512i test_mm512_mask_max_epu16(__m512i __W, __mmask32 __M, __m512i __A, __m512i __B) { - // CHECK-LABEL: @test_mm512_mask_max_epu16 + // CHECK-LABEL: test_mm512_mask_max_epu16 // CHECK: [[RES:%.*]] = call <32 x i16> @llvm.umax.v32i16(<32 x i16> %{{.*}}, <32 x i16> %{{.*}}) // CHECK: select <32 x i1> {{.*}}, <32 x i16> [[RES]], <32 x i16> {{.*}} return _mm512_mask_max_epu16(__W,__M,__A,__B); } __m512i test_mm512_min_epi8(__m512i __A, __m512i __B) { - // CHECK-LABEL: @test_mm512_min_epi8 + // CHECK-LABEL: test_mm512_min_epi8 // CHECK: [[RES:%.*]] = call <64 x i8> @llvm.smin.v64i8(<64 x i8> %{{.*}}, <64 x i8> %{{.*}}) return _mm512_min_epi8(__A,__B); } __m512i test_mm512_maskz_min_epi8(__mmask64 __M, __m512i __A, __m512i __B) { - // CHECK-LABEL: @test_mm512_maskz_min_epi8 + // CHECK-LABEL: test_mm512_maskz_min_epi8 // CHECK: [[RES:%.*]] = call <64 x i8> @llvm.smin.v64i8(<64 x i8> %{{.*}}, <64 x i8> %{{.*}}) // CHECK: select <64 x i1> {{.*}}, <64 x i8> [[RES]], <64 x i8> {{.*}} return _mm512_maskz_min_epi8(__M,__A,__B); } __m512i test_mm512_mask_min_epi8(__m512i __W, __mmask64 __M, __m512i __A, __m512i __B) { - // CHECK-LABEL: @test_mm512_mask_min_epi8 + // CHECK-LABEL: test_mm512_mask_min_epi8 // CHECK: [[RES:%.*]] = call <64 x i8> @llvm.smin.v64i8(<64 x i8> %{{.*}}, <64 x i8> %{{.*}}) // CHECK: select <64 x i1> {{.*}}, <64 x i8> [[RES]], <64 x i8> {{.*}} return _mm512_mask_min_epi8(__W,__M,__A,__B); } __m512i test_mm512_min_epi16(__m512i __A, __m512i __B) { - // CHECK-LABEL: @test_mm512_min_epi16 + // CHECK-LABEL: test_mm512_min_epi16 // CHECK: [[RES:%.*]] = call <32 x i16> @llvm.smin.v32i16(<32 x i16> %{{.*}}, <32 x i16> %{{.*}}) return _mm512_min_epi16(__A,__B); } __m512i test_mm512_maskz_min_epi16(__mmask32 __M, __m512i __A, __m512i __B) { - // CHECK-LABEL: @test_mm512_maskz_min_epi16 + // CHECK-LABEL: test_mm512_maskz_min_epi16 // CHECK: [[RES:%.*]] = call <32 x i16> @llvm.smin.v32i16(<32 x i16> %{{.*}}, <32 x i16> %{{.*}}) // CHECK: select <32 x i1> {{.*}}, <32 x i16> [[RES]], <32 x i16> {{.*}} return _mm512_maskz_min_epi16(__M,__A,__B); } __m512i test_mm512_mask_min_epi16(__m512i __W, __mmask32 __M, __m512i __A, __m512i __B) { - // CHECK-LABEL: @test_mm512_mask_min_epi16 + // CHECK-LABEL: test_mm512_mask_min_epi16 // CHECK: [[RES:%.*]] = call <32 x i16> @llvm.smin.v32i16(<32 x i16> %{{.*}}, <32 x i16> %{{.*}}) // CHECK: select <32 x i1> {{.*}}, <32 x i16> [[RES]], <32 x i16> {{.*}} return _mm512_mask_min_epi16(__W,__M,__A,__B); } __m512i test_mm512_min_epu8(__m512i __A, __m512i __B) { - // CHECK-LABEL: @test_mm512_min_epu8 + // CHECK-LABEL: test_mm512_min_epu8 // CHECK: [[RES:%.*]] = call <64 x i8> @llvm.umin.v64i8(<64 x i8> %{{.*}}, <64 x i8> %{{.*}}) return _mm512_min_epu8(__A,__B); } __m512i test_mm512_maskz_min_epu8(__mmask64 __M, __m512i __A, __m512i __B) { - // CHECK-LABEL: @test_mm512_maskz_min_epu8 + // CHECK-LABEL: test_mm512_maskz_min_epu8 // CHECK: [[RES:%.*]] = call <64 x i8> @llvm.umin.v64i8(<64 x i8> %{{.*}}, <64 x i8> %{{.*}}) // CHECK: select <64 x i1> {{.*}}, <64 x i8> [[RES]], <64 x i8> {{.*}} return _mm512_maskz_min_epu8(__M,__A,__B); } __m512i test_mm512_mask_min_epu8(__m512i __W, __mmask64 __M, __m512i __A, __m512i __B) { - // CHECK-LABEL: @test_mm512_mask_min_epu8 + // CHECK-LABEL: test_mm512_mask_min_epu8 // CHECK: [[RES:%.*]] = call <64 x i8> @llvm.umin.v64i8(<64 x i8> %{{.*}}, <64 x i8> %{{.*}}) // CHECK: select <64 x i1> {{.*}}, <64 x i8> [[RES]], <64 x i8> {{.*}} return _mm512_mask_min_epu8(__W,__M,__A,__B); } __m512i test_mm512_min_epu16(__m512i __A, __m512i __B) { - // CHECK-LABEL: @test_mm512_min_epu16 + // CHECK-LABEL: test_mm512_min_epu16 // CHECK: [[RES:%.*]] = call <32 x i16> @llvm.umin.v32i16(<32 x i16> %{{.*}}, <32 x i16> %{{.*}}) return _mm512_min_epu16(__A,__B); } __m512i test_mm512_maskz_min_epu16(__mmask32 __M, __m512i __A, __m512i __B) { - // CHECK-LABEL: @test_mm512_maskz_min_epu16 + // CHECK-LABEL: test_mm512_maskz_min_epu16 // CHECK: [[RES:%.*]] = call <32 x i16> @llvm.umin.v32i16(<32 x i16> %{{.*}}, <32 x i16> %{{.*}}) // CHECK: select <32 x i1> {{.*}}, <32 x i16> [[RES]], <32 x i16> {{.*}} return _mm512_maskz_min_epu16(__M,__A,__B); } __m512i test_mm512_mask_min_epu16(__m512i __W, __mmask32 __M, __m512i __A, __m512i __B) { - // CHECK-LABEL: @test_mm512_mask_min_epu16 + // CHECK-LABEL: test_mm512_mask_min_epu16 // CHECK: [[RES:%.*]] = call <32 x i16> @llvm.umin.v32i16(<32 x i16> %{{.*}}, <32 x i16> %{{.*}}) // CHECK: select <32 x i1> {{.*}}, <32 x i16> [[RES]], <32 x i16> {{.*}} return _mm512_mask_min_epu16(__W,__M,__A,__B); } __m512i test_mm512_shuffle_epi8(__m512i __A, __m512i __B) { - // CHECK-LABEL: @test_mm512_shuffle_epi8 + // CHECK-LABEL: test_mm512_shuffle_epi8 // CHECK: @llvm.x86.avx512.pshuf.b.512 return _mm512_shuffle_epi8(__A,__B); } __m512i test_mm512_mask_shuffle_epi8(__m512i __W, __mmask64 __U, __m512i __A, __m512i __B) { - // CHECK-LABEL: @test_mm512_mask_shuffle_epi8 + // CHECK-LABEL: test_mm512_mask_shuffle_epi8 // CHECK: @llvm.x86.avx512.pshuf.b.512 // CHECK: select <64 x i1> %{{.*}}, <64 x i8> %{{.*}}, <64 x i8> %{{.*}} return _mm512_mask_shuffle_epi8(__W,__U,__A,__B); } __m512i test_mm512_maskz_shuffle_epi8(__mmask64 __U, __m512i __A, __m512i __B) { - // CHECK-LABEL: @test_mm512_maskz_shuffle_epi8 + // CHECK-LABEL: test_mm512_maskz_shuffle_epi8 // CHECK: @llvm.x86.avx512.pshuf.b.512 // CHECK: select <64 x i1> %{{.*}}, <64 x i8> %{{.*}}, <64 x i8> %{{.*}} return _mm512_maskz_shuffle_epi8(__U,__A,__B); } __m512i test_mm512_subs_epi8(__m512i __A, __m512i __B) { - // CHECK-LABEL: @test_mm512_subs_epi8 + // CHECK-LABEL: test_mm512_subs_epi8 // CHECK: @llvm.ssub.sat.v64i8 return _mm512_subs_epi8(__A,__B); } +TEST_CONSTEXPR(match_v64qi(_mm512_subs_epi8((__m512i)(__v64qs){0, +1, -2, +3, -4, +5, -6, +7, -8, +9, -10, +11, -12, +13, -14, +15, -16, +17, -18, +19, -20, +21, -22, +23, -24, +25, -26, +27, -28, +29, -30, +31, -32, +33, -34, +35, -36, +37, -38, +39, -40, +41, -42, +43, -44, +45, -46, +47, +100, +50, -100, +20, +80, -50, +120, -20, -100, -50, +100, -20, -80, +50, -120, +20}, (__m512i)(__v64qs){0, -1, +2, -3, +4, -5, +6, -7, +8, -9, +10, -11, +12, -13, +14, -15, +16, -17, +18, -19, +20, -21, +22, -23, +24, -25, +26, -27, +28, -29, +30, -31, +32, -33, +34, -35, +36, -37, +38, -39, +40, -41, +42, -43, +44, -45, +46, -47, -50, -80, +50, -110, -60, +30, -20, +10, -50, -80, +50, -110, -60, +30, -20, +10}), 0, +2, -4, +6, -8, +10, -12, +14, -16, +18, -20, +22, -24, +26, -28, +30, -32, +34, -36, +38, -40, +42, -44, +46, -48, +50, -52, +54, -56, +58, -60, +62, -64, +66, -68, +70, -72, +74, -76, +78, -80, +82, -84, +86, -88, +90, -92, +94, +127, +127, -128, +127, +127, -80, +127, -30, -50, +30, +50, +90, -20, +20, -100, +10)); + __m512i test_mm512_mask_subs_epi8(__m512i __W, __mmask64 __U, __m512i __A, __m512i __B) { - // CHECK-LABEL: @test_mm512_mask_subs_epi8 + // CHECK-LABEL: test_mm512_mask_subs_epi8 // CHECK: @llvm.ssub.sat.v64i8 // CHECK: select <64 x i1> %{{.*}}, <64 x i8> %{{.*}}, <64 x i8> %{{.*}} return _mm512_mask_subs_epi8(__W,__U,__A,__B); } __m512i test_mm512_maskz_subs_epi8(__mmask64 __U, __m512i __A, __m512i __B) { - // CHECK-LABEL: @test_mm512_maskz_subs_epi8 + // CHECK-LABEL: test_mm512_maskz_subs_epi8 // CHECK: @llvm.ssub.sat.v64i8 // CHECK: select <64 x i1> %{{.*}}, <64 x i8> %{{.*}}, <64 x i8> %{{.*}} return _mm512_maskz_subs_epi8(__U,__A,__B); } __m512i test_mm512_subs_epi16(__m512i __A, __m512i __B) { - // CHECK-LABEL: @test_mm512_subs_epi16 + // CHECK-LABEL: test_mm512_subs_epi16 // CHECK: @llvm.ssub.sat.v32i16 return _mm512_subs_epi16(__A,__B); } +TEST_CONSTEXPR(match_v32hi(_mm512_subs_epi16((__m512i)(__v32hi){0, +1, -2, +3, -4, +5, -6, +7, -8, +9, -10, +11, -12, +13, -14, +15, -16, +17, -18, +19, -20, +21, -22, +23, -24, +25, -26, +27, +32000, -32000, +32000, -32000}, (__m512i)(__v32hi){0, -1, +2, -3, +4, -5, +6, -7, +8, -9, +10, -11, +12, -13, +14, -15, +16, -17, +18, -19, +20, -21, +22, -23, +24, -25, +26, -27, -800, +800, +800, -800}), 0, +2, -4, +6, -8, +10, -12, +14, -16, +18, -20, +22, -24, +26, -28, +30, -32, +34, -36, +38, -40, +42, -44, +46, -48, +50, -52, +54, +32767, -32768, +31200, -31200)); __m512i test_mm512_mask_subs_epi16(__m512i __W, __mmask32 __U, __m512i __A, __m512i __B) { - // CHECK-LABEL: @test_mm512_mask_subs_epi16 + // CHECK-LABEL: test_mm512_mask_subs_epi16 // CHECK: @llvm.ssub.sat.v32i16 // CHECK: select <32 x i1> %{{.*}}, <32 x i16> %{{.*}}, <32 x i16> %{{.*}} return _mm512_mask_subs_epi16(__W,__U,__A,__B); } __m512i test_mm512_maskz_subs_epi16(__mmask32 __U, __m512i __A, __m512i __B) { - // CHECK-LABEL: @test_mm512_maskz_subs_epi16 + // CHECK-LABEL: test_mm512_maskz_subs_epi16 // CHECK: @llvm.ssub.sat.v32i16 // CHECK: select <32 x i1> %{{.*}}, <32 x i16> %{{.*}}, <32 x i16> %{{.*}} return _mm512_maskz_subs_epi16(__U,__A,__B); } __m512i test_mm512_subs_epu8(__m512i __A, __m512i __B) { - // CHECK-LABEL: @test_mm512_subs_epu8 + // CHECK-LABEL: test_mm512_subs_epu8 // CHECK-NOT: @llvm.x86.avx512.mask.psubus.b.512 // CHECK: call <64 x i8> @llvm.usub.sat.v64i8(<64 x i8> %{{.*}}, <64 x i8> %{{.*}}) return _mm512_subs_epu8(__A,__B); } __m512i test_mm512_mask_subs_epu8(__m512i __W, __mmask64 __U, __m512i __A, __m512i __B) { - // CHECK-LABEL: @test_mm512_mask_subs_epu8 + // CHECK-LABEL: test_mm512_mask_subs_epu8 // CHECK-NOT: @llvm.x86.avx512.mask.psubus.b.512 // CHECK: call <64 x i8> @llvm.usub.sat.v64i8(<64 x i8> %{{.*}}, <64 x i8> %{{.*}}) // CHECK: select <64 x i1> %{{.*}}, <64 x i8> %{{.*}}, <64 x i8> %{{.*}} return _mm512_mask_subs_epu8(__W,__U,__A,__B); } +TEST_CONSTEXPR(match_v64qu(_mm512_subs_epu8((__m512i)(__v64qu){0, 0, 0, 0, 0, 0, 0, 0, +63, +63, +63, +63, +63, +63, +63, +63, +64, +64, +64, +64, +64, +64, +64, +64, +127, +127, +127, +127, +127, +127, +127, +127, +128, +128, +128, +128, +128, +128, +128, +128, +191, +191, +191, +191, +191, +191, +191, +191, +192, +192, +192, +192, +192, +192, +192, +192, +255, +255, +255, +255, +255, +255, +255, +255}, (__m512i)(__v64qu){0, +63, +64, +127, +128, +191, +192, +255, 0, +63, +64, +127, +128, +191, +192, +255, 0, +63, +64, +127, +128, +191, +192, +255, 0, +63, +64, +127, +128, +191, +192, +255, 0, +63, +64, +127, +128, +191, +192, +255, 0, +63, +64, +127, +128, +191, +192, +255, 0, +63, +64, +127, +128, +191, +192, +255, 0, +63, +64, +127, +128, +191, +192, +255}), 0, 0, 0, 0, 0, 0, 0, 0, +63, 0, 0, 0, 0, 0, 0, 0, +64, +1, 0, 0, 0, 0, 0, 0, +127, +64, +63, 0, 0, 0, 0, 0, +128, +65, +64, +1, 0, 0, 0, 0, +191, +128, +127, +64, +63, 0, 0, 0, +192, +129, +128, +65, +64, +1, 0, 0, +255, +192, +191, +128, +127, +64, +63, +0)); + __m512i test_mm512_maskz_subs_epu8(__mmask64 __U, __m512i __A, __m512i __B) { - // CHECK-LABEL: @test_mm512_maskz_subs_epu8 + // CHECK-LABEL: test_mm512_maskz_subs_epu8 // CHECK-NOT: @llvm.x86.avx512.mask.psubus.b.512 // CHECK: call <64 x i8> @llvm.usub.sat.v64i8(<64 x i8> %{{.*}}, <64 x i8> %{{.*}}) // CHECK: select <64 x i1> %{{.*}}, <64 x i8> %{{.*}}, <64 x i8> %{{.*}} return _mm512_maskz_subs_epu8(__U,__A,__B); } __m512i test_mm512_subs_epu16(__m512i __A, __m512i __B) { - // CHECK-LABEL: @test_mm512_subs_epu16 + // CHECK-LABEL: test_mm512_subs_epu16 // CHECK-NOT: @llvm.x86.avx512.mask.psubus.w.512 // CHECK: call <32 x i16> @llvm.usub.sat.v32i16(<32 x i16> %{{.*}}, <32 x i16> %{{.*}}) return _mm512_subs_epu16(__A,__B); } __m512i test_mm512_mask_subs_epu16(__m512i __W, __mmask32 __U, __m512i __A, __m512i __B) { - // CHECK-LABEL: @test_mm512_mask_subs_epu16 + // CHECK-LABEL: test_mm512_mask_subs_epu16 // CHECK-NOT: @llvm.x86.avx512.mask.psubus.w.512 // CHECK: call <32 x i16> @llvm.usub.sat.v32i16(<32 x i16> %{{.*}}, <32 x i16> %{{.*}}) // CHECK: select <32 x i1> %{{.*}}, <32 x i16> %{{.*}}, <32 x i16> %{{.*}} return _mm512_mask_subs_epu16(__W,__U,__A,__B); +TEST_CONSTEXPR(match_v32hu(_mm512_subs_epu16((__m512i)(__v32hu){0, 0, 0, 0, +16384, +16384, +16384, +16384, +16384, +16384, +32767, +32767, +32767, +32767, +32767, +32767, +32768, +32768, +32768, +32768, +32768, +32768, +49152, +49152, +49152, +49152, +49152, +49152, +65535, +65535, +65535, +65535}, (__m512i)(__v32hu){0, +32767, +32768, +65535, 0, +16384, +32767, +32768, +49152, +65535, 0, +16384, +32767, +32768, +49152, +65535, 0, +16384, +32767, +32768, +49152, +65535, 0, +16384, +32767, +32768, +49152, +65535, 0, +32767, +32768, +65535}), 0, 0, 0, 0, +16384, 0, 0, 0, 0, 0, +32767, +16383, 0, 0, 0, 0, +32768, +16384, +1, 0, 0, 0, +49152, +32768, +16385, +16384, 0, 0, +65535, +32768, +32767, 0)); } __m512i test_mm512_maskz_subs_epu16(__mmask32 __U, __m512i __A, __m512i __B) { - // CHECK-LABEL: @test_mm512_maskz_subs_epu16 + // CHECK-LABEL: test_mm512_maskz_subs_epu16 // CHECK-NOT: @llvm.x86.avx512.mask.psubus.w.512 // CHECK: call <32 x i16> @llvm.usub.sat.v32i16(<32 x i16> %{{.*}}, <32 x i16> %{{.*}}) // CHECK: select <32 x i1> %{{.*}}, <32 x i16> %{{.*}}, <32 x i16> %{{.*}} return _mm512_maskz_subs_epu16(__U,__A,__B); } __m512i test_mm512_mask2_permutex2var_epi16(__m512i __A, __m512i __I, __mmask32 __U, __m512i __B) { - // CHECK-LABEL: @test_mm512_mask2_permutex2var_epi16 + // CHECK-LABEL: test_mm512_mask2_permutex2var_epi16 // CHECK: @llvm.x86.avx512.vpermi2var.hi.512 // CHECK: select <32 x i1> %{{.*}}, <32 x i16> %{{.*}}, <32 x i16> %{{.*}} return _mm512_mask2_permutex2var_epi16(__A,__I,__U,__B); } __m512i test_mm512_permutex2var_epi16(__m512i __A, __m512i __I, __m512i __B) { - // CHECK-LABEL: @test_mm512_permutex2var_epi16 + // CHECK-LABEL: test_mm512_permutex2var_epi16 // CHECK: @llvm.x86.avx512.vpermi2var.hi.512 return _mm512_permutex2var_epi16(__A,__I,__B); } __m512i test_mm512_mask_permutex2var_epi16(__m512i __A, __mmask32 __U, __m512i __I, __m512i __B) { - // CHECK-LABEL: @test_mm512_mask_permutex2var_epi16 + // CHECK-LABEL: test_mm512_mask_permutex2var_epi16 // CHECK: @llvm.x86.avx512.vpermi2var.hi.512 // CHECK: select <32 x i1> %{{.*}}, <32 x i16> %{{.*}}, <32 x i16> %{{.*}} return _mm512_mask_permutex2var_epi16(__A,__U,__I,__B); } __m512i test_mm512_maskz_permutex2var_epi16(__mmask32 __U, __m512i __A, __m512i __I, __m512i __B) { - // CHECK-LABEL: @test_mm512_maskz_permutex2var_epi16 + // CHECK-LABEL: test_mm512_maskz_permutex2var_epi16 // CHECK: @llvm.x86.avx512.vpermi2var.hi.512 // CHECK: select <32 x i1> %{{.*}}, <32 x i16> %{{.*}}, <32 x i16> %{{.*}} return _mm512_maskz_permutex2var_epi16(__U,__A,__I,__B); } __m512i test_mm512_mulhrs_epi16(__m512i __A, __m512i __B) { - // CHECK-LABEL: @test_mm512_mulhrs_epi16 + // CHECK-LABEL: test_mm512_mulhrs_epi16 // CHECK: @llvm.x86.avx512.pmul.hr.sw.512 return _mm512_mulhrs_epi16(__A,__B); } -__m512i test_mm512_mask_mulhrs_epi16(__m512i __W, __mmask32 __U, __m512i __A, __m512i __B) { - // CHECK-LABEL: @test_mm512_mask_mulhrs_epi16 +__m512i test_mm512_mask_mulhrs_epi16(__m512i __W, __mmask32 __U, __m512i __A, __m512i __B) { + // CHECK-LABEL: test_mm512_mask_mulhrs_epi16 // CHECK: @llvm.x86.avx512.pmul.hr.sw.512 // CHECK: select <32 x i1> %{{.*}}, <32 x i16> %{{.*}}, <32 x i16> %{{.*}} return _mm512_mask_mulhrs_epi16(__W,__U,__A,__B); } __m512i test_mm512_maskz_mulhrs_epi16(__mmask32 __U, __m512i __A, __m512i __B) { - // CHECK-LABEL: @test_mm512_maskz_mulhrs_epi16 + // CHECK-LABEL: test_mm512_maskz_mulhrs_epi16 // CHECK: @llvm.x86.avx512.pmul.hr.sw.512 // CHECK: select <32 x i1> %{{.*}}, <32 x i16> %{{.*}}, <32 x i16> %{{.*}} return _mm512_maskz_mulhrs_epi16(__U,__A,__B); } __m512i test_mm512_mulhi_epi16(__m512i __A, __m512i __B) { - // CHECK-LABEL: @test_mm512_mulhi_epi16 + // CHECK-LABEL: test_mm512_mulhi_epi16 // CHECK: @llvm.x86.avx512.pmulh.w.512 return _mm512_mulhi_epi16(__A,__B); } -__m512i test_mm512_mask_mulhi_epi16(__m512i __W, __mmask32 __U, __m512i __A, __m512i __B) { - // CHECK-LABEL: @test_mm512_mask_mulhi_epi16 +TEST_CONSTEXPR(match_v32hi(_mm512_mulhi_epi16((__m512i)(__v32hi){+1, -2, +3, -4, +5, -6, +7, -8, +9, -10, +11, -12, +13, -14, +15, -16, +17, -18, +19, -20, +21, -22, +23, -24, +25, -26, +27, -28, +29, -30, +31, -32}, (__m512i)(__v32hi){-64, -62, +60, +58, -56, -54, +52, +50, -48, -46, +44, +42, -40, -38, +36, +34, -32, -30, +28, +26, -24, -22, +20, +18, -16, -14, +12, +10, -8, +6, -4, +2}), -1, 0, 0, -1, -1, 0, 0, -1, -1, 0, 0, -1, -1, 0, 0, -1, -1, 0, 0, -1, -1, 0, 0, -1, -1, 0, 0, -1, -1, -1, -1, -1)); + +__m512i test_mm512_mask_mulhi_epi16(__m512i __W, __mmask32 __U, __m512i __A, __m512i __B) { + // CHECK-LABEL: test_mm512_mask_mulhi_epi16 // CHECK: @llvm.x86.avx512.pmulh.w.512 // CHECK: select <32 x i1> %{{.*}}, <32 x i16> %{{.*}}, <32 x i16> %{{.*}} return _mm512_mask_mulhi_epi16(__W,__U,__A,__B); } +TEST_CONSTEXPR(match_v32hi(_mm512_mask_mulhi_epi16(_mm512_set1_epi16(1), 0xF00FF00F, (__m512i)(__v32hi){+1, -2, +3, -4, +5, -6, +7, -8, +9, -10, +11, -12, +13, -14, +15, -16, +17, -18, +19, -20, +21, -22, +23, -24, +25, -26, +27, -28, +29, -30, +31, -32}, (__m512i)(__v32hi){-64, -62, +60, +58, -56, -54, +52, +50, -48, -46, +44, +42, -40, -38, +36, +34, -32, -30, +28, +26, -24, -22, +20, +18, -16, -14, +12, +10, -8, +6, -4, +2}), -1, 0, 0, -1, 1, 1, 1, 1, 1, 1, 1, 1, -1, 0, 0, -1, -1, 0, 0, -1, 1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1)); + __m512i test_mm512_maskz_mulhi_epi16(__mmask32 __U, __m512i __A, __m512i __B) { - // CHECK-LABEL: @test_mm512_maskz_mulhi_epi16 + // CHECK-LABEL: test_mm512_maskz_mulhi_epi16 // CHECK: @llvm.x86.avx512.pmulh.w.512 // CHECK: select <32 x i1> %{{.*}}, <32 x i16> %{{.*}}, <32 x i16> %{{.*}} return _mm512_maskz_mulhi_epi16(__U,__A,__B); } +TEST_CONSTEXPR(match_v32hi(_mm512_maskz_mulhi_epi16(0x0FF00FF0, (__m512i)(__v32hi){+1, -2, +3, -4, +5, -6, +7, -8, +9, -10, +11, -12, +13, -14, +15, -16, +17, -18, +19, -20, +21, -22, +23, -24, +25, -26, +27, -28, +29, -30, +31, -32}, (__m512i)(__v32hi){-64, -62, +60, +58, -56, -54, +52, +50, -48, -46, +44, +42, -40, -38, +36, +34, -32, -30, +28, +26, -24, -22, +20, +18, -16, -14, +12, +10, -8, +6, -4, +2}), 0, 0, 0, 0, -1, 0, 0, -1, -1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, -1, -1, 0, 0, -1, 0, 0, 0, 0)); + __m512i test_mm512_mulhi_epu16(__m512i __A, __m512i __B) { - // CHECK-LABEL: @test_mm512_mulhi_epu16 + // CHECK-LABEL: test_mm512_mulhi_epu16 // CHECK: @llvm.x86.avx512.pmulhu.w.512 return _mm512_mulhi_epu16(__A,__B); } -__m512i test_mm512_mask_mulhi_epu16(__m512i __W, __mmask32 __U, __m512i __A, __m512i __B) { - // CHECK-LABEL: @test_mm512_mask_mulhi_epu16 +TEST_CONSTEXPR(match_v32hi(_mm512_mulhi_epu16((__m512i)(__v32hi){+1, -2, +3, -4, +5, -6, +7, -8, +9, -10, +11, -12, +13, -14, +15, -16, +17, -18, +19, -20, +21, -22, +23, -24, +25, -26, +27, -28, +29, -30, +31, -32}, (__m512i)(__v32hi){-64, -62, +60, +58, -56, -54, +52, +50, -48, -46, +44, +42, -40, -38, +36, +34, -32, -30, +28, +26, -24, -22, +20, +18, -16, -14, +12, +10, -8, +6, -4, +2}), 0, -64, 0, 57, 4, -60, 0, 49, 8, -56, 0, 41, 12, -52, 0, 33, 16, -48, 0, 25, 20, -44, 0, 17, 24, -40, 0, 9, 28, 5, 30, 1)); + +__m512i test_mm512_mask_mulhi_epu16(__m512i __W, __mmask32 __U, __m512i __A, __m512i __B) { + // CHECK-LABEL: test_mm512_mask_mulhi_epu16 // CHECK: @llvm.x86.avx512.pmulhu.w.512 // CHECK: select <32 x i1> %{{.*}}, <32 x i16> %{{.*}}, <32 x i16> %{{.*}} return _mm512_mask_mulhi_epu16(__W,__U,__A,__B); } +TEST_CONSTEXPR(match_v32hi(_mm512_mask_mulhi_epu16(_mm512_set1_epi16(1), 0x0FF00FF0, (__m512i)(__v32hi){+1, -2, +3, -4, +5, -6, +7, -8, +9, -10, +11, -12, +13, -14, +15, -16, +17, -18, +19, -20, +21, -22, +23, -24, +25, -26, +27, -28, +29, -30, +31, -32}, (__m512i)(__v32hi){-64, -62, +60, +58, -56, -54, +52, +50, -48, -46, +44, +42, -40, -38, +36, +34, -32, -30, +28, +26, -24, -22, +20, +18, -16, -14, +12, +10, -8, +6, -4, +2}), 1, 1, 1, 1, 4, -60, 0, 49, 8, -56, 0, 41, 1, 1, 1, 1, 1, 1, 1, 1, 20, -44, 0, 17, 24, -40, 0, 9, 1, 1, 1, 1)); + __m512i test_mm512_maskz_mulhi_epu16(__mmask32 __U, __m512i __A, __m512i __B) { - // CHECK-LABEL: @test_mm512_maskz_mulhi_epu16 + // CHECK-LABEL: test_mm512_maskz_mulhi_epu16 // CHECK: @llvm.x86.avx512.pmulhu.w.512 // CHECK: select <32 x i1> %{{.*}}, <32 x i16> %{{.*}}, <32 x i16> %{{.*}} return _mm512_maskz_mulhi_epu16(__U,__A,__B); } +TEST_CONSTEXPR(match_v32hi(_mm512_maskz_mulhi_epu16(0xF00FF00F, (__m512i)(__v32hi){+1, -2, +3, -4, +5, -6, +7, -8, +9, -10, +11, -12, +13, -14, +15, -16, +17, -18, +19, -20, +21, -22, +23, -24, +25, -26, +27, -28, +29, -30, +31, -32}, (__m512i)(__v32hi){-64, -62, +60, +58, -56, -54, +52, +50, -48, -46, +44, +42, -40, -38, +36, +34, -32, -30, +28, +26, -24, -22, +20, +18, -16, -14, +12, +10, -8, +6, -4, +2}), 0, -64, 0, 57, 0, 0, 0, 0, 0, 0, 0, 0, 12, -52, 0, 33, 16, -48, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 28, 5, 30, 1)); __m512i test_mm512_maddubs_epi16(__m512i __X, __m512i __Y) { - // CHECK-LABEL: @test_mm512_maddubs_epi16 + // CHECK-LABEL: test_mm512_maddubs_epi16 // CHECK: @llvm.x86.avx512.pmaddubs.w.512 return _mm512_maddubs_epi16(__X,__Y); } -__m512i test_mm512_mask_maddubs_epi16(__m512i __W, __mmask32 __U, __m512i __X, __m512i __Y) { - // CHECK-LABEL: @test_mm512_mask_maddubs_epi16 +__m512i test_mm512_mask_maddubs_epi16(__m512i __W, __mmask32 __U, __m512i __X, __m512i __Y) { + // CHECK-LABEL: test_mm512_mask_maddubs_epi16 // CHECK: @llvm.x86.avx512.pmaddubs.w.512 // CHECK: select <32 x i1> %{{.*}}, <32 x i16> %{{.*}}, <32 x i16> %{{.*}} return _mm512_mask_maddubs_epi16(__W,__U,__X,__Y); } __m512i test_mm512_maskz_maddubs_epi16(__mmask32 __U, __m512i __X, __m512i __Y) { - // CHECK-LABEL: @test_mm512_maskz_maddubs_epi16 + // CHECK-LABEL: test_mm512_maskz_maddubs_epi16 // CHECK: @llvm.x86.avx512.pmaddubs.w.512 // CHECK: select <32 x i1> %{{.*}}, <32 x i16> %{{.*}}, <32 x i16> %{{.*}} return _mm512_maskz_maddubs_epi16(__U,__X,__Y); } __m512i test_mm512_madd_epi16(__m512i __A, __m512i __B) { - // CHECK-LABEL: @test_mm512_madd_epi16 + // CHECK-LABEL: test_mm512_madd_epi16 // CHECK: @llvm.x86.avx512.pmaddw.d.512 return _mm512_madd_epi16(__A,__B); } __m512i test_mm512_mask_madd_epi16(__m512i __W, __mmask16 __U, __m512i __A, __m512i __B) { - // CHECK-LABEL: @test_mm512_mask_madd_epi16 + // CHECK-LABEL: test_mm512_mask_madd_epi16 // CHECK: @llvm.x86.avx512.pmaddw.d.512 // CHECK: select <16 x i1> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}} return _mm512_mask_madd_epi16(__W,__U,__A,__B); } __m512i test_mm512_maskz_madd_epi16(__mmask16 __U, __m512i __A, __m512i __B) { - // CHECK-LABEL: @test_mm512_maskz_madd_epi16 + // CHECK-LABEL: test_mm512_maskz_madd_epi16 // CHECK: @llvm.x86.avx512.pmaddw.d.512 // CHECK: select <16 x i1> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}} return _mm512_maskz_madd_epi16(__U,__A,__B); } __m256i test_mm512_cvtsepi16_epi8(__m512i __A) { - // CHECK-LABEL: @test_mm512_cvtsepi16_epi8 + // CHECK-LABEL: test_mm512_cvtsepi16_epi8 // CHECK: @llvm.x86.avx512.mask.pmovs.wb.512 return _mm512_cvtsepi16_epi8(__A); } __m256i test_mm512_mask_cvtsepi16_epi8(__m256i __O, __mmask32 __M, __m512i __A) { - // CHECK-LABEL: @test_mm512_mask_cvtsepi16_epi8 + // CHECK-LABEL: test_mm512_mask_cvtsepi16_epi8 // CHECK: @llvm.x86.avx512.mask.pmovs.wb.512 return _mm512_mask_cvtsepi16_epi8(__O, __M, __A); } __m256i test_mm512_maskz_cvtsepi16_epi8(__mmask32 __M, __m512i __A) { - // CHECK-LABEL: @test_mm512_maskz_cvtsepi16_epi8 + // CHECK-LABEL: test_mm512_maskz_cvtsepi16_epi8 // CHECK: @llvm.x86.avx512.mask.pmovs.wb.512 return _mm512_maskz_cvtsepi16_epi8(__M, __A); } __m256i test_mm512_cvtusepi16_epi8(__m512i __A) { - // CHECK-LABEL: @test_mm512_cvtusepi16_epi8 + // CHECK-LABEL: test_mm512_cvtusepi16_epi8 // CHECK: @llvm.x86.avx512.mask.pmovus.wb.512 return _mm512_cvtusepi16_epi8(__A); } __m256i test_mm512_mask_cvtusepi16_epi8(__m256i __O, __mmask32 __M, __m512i __A) { - // CHECK-LABEL: @test_mm512_mask_cvtusepi16_epi8 + // CHECK-LABEL: test_mm512_mask_cvtusepi16_epi8 // CHECK: @llvm.x86.avx512.mask.pmovus.wb.512 return _mm512_mask_cvtusepi16_epi8(__O, __M, __A); } __m256i test_mm512_maskz_cvtusepi16_epi8(__mmask32 __M, __m512i __A) { - // CHECK-LABEL: @test_mm512_maskz_cvtusepi16_epi8 + // CHECK-LABEL: test_mm512_maskz_cvtusepi16_epi8 // CHECK: @llvm.x86.avx512.mask.pmovus.wb.512 return _mm512_maskz_cvtusepi16_epi8(__M, __A); } __m256i test_mm512_cvtepi16_epi8(__m512i __A) { - // CHECK-LABEL: @test_mm512_cvtepi16_epi8 + // CHECK-LABEL: test_mm512_cvtepi16_epi8 // CHECK: trunc <32 x i16> %{{.*}} to <32 x i8> return _mm512_cvtepi16_epi8(__A); } __m256i test_mm512_mask_cvtepi16_epi8(__m256i __O, __mmask32 __M, __m512i __A) { - // CHECK-LABEL: @test_mm512_mask_cvtepi16_epi8 + // CHECK-LABEL: test_mm512_mask_cvtepi16_epi8 // CHECK: trunc <32 x i16> %{{.*}} to <32 x i8> // CHECK: select <32 x i1> %{{.*}}, <32 x i8> %{{.*}}, <32 x i8> %{{.*}} return _mm512_mask_cvtepi16_epi8(__O, __M, __A); } __m256i test_mm512_maskz_cvtepi16_epi8(__mmask32 __M, __m512i __A) { - // CHECK-LABEL: @test_mm512_maskz_cvtepi16_epi8 + // CHECK-LABEL: test_mm512_maskz_cvtepi16_epi8 // CHECK: trunc <32 x i16> %{{.*}} to <32 x i8> // CHECK: select <32 x i1> %{{.*}}, <32 x i8> %{{.*}}, <32 x i8> %{{.*}} return _mm512_maskz_cvtepi16_epi8(__M, __A); } __m512i test_mm512_unpackhi_epi8(__m512i __A, __m512i __B) { - // CHECK-LABEL: @test_mm512_unpackhi_epi8 + // CHECK-LABEL: test_mm512_unpackhi_epi8 // CHECK: shufflevector <64 x i8> %{{.*}}, <64 x i8> %{{.*}}, <64 x i32> <i32 8, i32 72, i32 9, i32 73, i32 10, i32 74, i32 11, i32 75, i32 12, i32 76, i32 13, i32 77, i32 14, i32 78, i32 15, i32 79, i32 24, i32 88, i32 25, i32 89, i32 26, i32 90, i32 27, i32 91, i32 28, i32 92, i32 29, i32 93, i32 30, i32 94, i32 31, i32 95, i32 40, i32 104, i32 41, i32 105, i32 42, i32 106, i32 43, i32 107, i32 44, i32 108, i32 45, i32 109, i32 46, i32 110, i32 47, i32 111, i32 56, i32 120, i32 57, i32 121, i32 58, i32 122, i32 59, i32 123, i32 60, i32 124, i32 61, i32 125, i32 62, i32 126, i32 63, i32 127> return _mm512_unpackhi_epi8(__A, __B); } +TEST_CONSTEXPR(match_v64qi(_mm512_unpackhi_epi8((__m512i)(__v64qi){0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63}, (__m512i)(__v64qi){64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127}), 8, 72, 9, 73, 10, 74, 11, 75, 12, 76, 13, 77, 14, 78, 15, 79, 24, 88, 25, 89, 26, 90, 27, 91, 28, 92, 29, 93, 30, 94, 31, 95, 40, 104, 41, 105, 42, 106, 43, 107, 44, 108, 45, 109, 46, 110, 47, 111, 56, 120, 57, 121, 58, 122, 59, 123, 60, 124, 61, 125, 62, 126, 63, 127)); __m512i test_mm512_mask_unpackhi_epi8(__m512i __W, __mmask64 __U, __m512i __A, __m512i __B) { - // CHECK-LABEL: @test_mm512_mask_unpackhi_epi8 + // CHECK-LABEL: test_mm512_mask_unpackhi_epi8 // CHECK: shufflevector <64 x i8> %{{.*}}, <64 x i8> %{{.*}}, <64 x i32> <i32 8, i32 72, i32 9, i32 73, i32 10, i32 74, i32 11, i32 75, i32 12, i32 76, i32 13, i32 77, i32 14, i32 78, i32 15, i32 79, i32 24, i32 88, i32 25, i32 89, i32 26, i32 90, i32 27, i32 91, i32 28, i32 92, i32 29, i32 93, i32 30, i32 94, i32 31, i32 95, i32 40, i32 104, i32 41, i32 105, i32 42, i32 106, i32 43, i32 107, i32 44, i32 108, i32 45, i32 109, i32 46, i32 110, i32 47, i32 111, i32 56, i32 120, i32 57, i32 121, i32 58, i32 122, i32 59, i32 123, i32 60, i32 124, i32 61, i32 125, i32 62, i32 126, i32 63, i32 127> // CHECK: select <64 x i1> %{{.*}}, <64 x i8> %{{.*}}, <64 x i8> %{{.*}} return _mm512_mask_unpackhi_epi8(__W, __U, __A, __B); } __m512i test_mm512_maskz_unpackhi_epi8(__mmask64 __U, __m512i __A, __m512i __B) { - // CHECK-LABEL: @test_mm512_maskz_unpackhi_epi8 + // CHECK-LABEL: test_mm512_maskz_unpackhi_epi8 // CHECK: shufflevector <64 x i8> %{{.*}}, <64 x i8> %{{.*}}, <64 x i32> <i32 8, i32 72, i32 9, i32 73, i32 10, i32 74, i32 11, i32 75, i32 12, i32 76, i32 13, i32 77, i32 14, i32 78, i32 15, i32 79, i32 24, i32 88, i32 25, i32 89, i32 26, i32 90, i32 27, i32 91, i32 28, i32 92, i32 29, i32 93, i32 30, i32 94, i32 31, i32 95, i32 40, i32 104, i32 41, i32 105, i32 42, i32 106, i32 43, i32 107, i32 44, i32 108, i32 45, i32 109, i32 46, i32 110, i32 47, i32 111, i32 56, i32 120, i32 57, i32 121, i32 58, i32 122, i32 59, i32 123, i32 60, i32 124, i32 61, i32 125, i32 62, i32 126, i32 63, i32 127> // CHECK: select <64 x i1> %{{.*}}, <64 x i8> %{{.*}}, <64 x i8> %{{.*}} return _mm512_maskz_unpackhi_epi8(__U, __A, __B); } __m512i test_mm512_unpackhi_epi16(__m512i __A, __m512i __B) { - // CHECK-LABEL: @test_mm512_unpackhi_epi16 + // CHECK-LABEL: test_mm512_unpackhi_epi16 // CHECK: shufflevector <32 x i16> %{{.*}}, <32 x i16> %{{.*}}, <32 x i32> <i32 4, i32 36, i32 5, i32 37, i32 6, i32 38, i32 7, i32 39, i32 12, i32 44, i32 13, i32 45, i32 14, i32 46, i32 15, i32 47, i32 20, i32 52, i32 21, i32 53, i32 22, i32 54, i32 23, i32 55, i32 28, i32 60, i32 29, i32 61, i32 30, i32 62, i32 31, i32 63> return _mm512_unpackhi_epi16(__A, __B); } +TEST_CONSTEXPR(match_v32hi(_mm512_unpackhi_epi16((__m512i)(__v32hi){0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31}, (__m512i)(__v32hi){32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63}), 4, 36, 5, 37, 6, 38, 7, 39, 12, 44, 13, 45, 14, 46, 15, 47, 20, 52, 21, 53, 22, 54, 23, 55, 28, 60, 29, 61, 30, 62, 31, 63)); + __m512i test_mm512_mask_unpackhi_epi16(__m512i __W, __mmask32 __U, __m512i __A, __m512i __B) { - // CHECK-LABEL: @test_mm512_mask_unpackhi_epi16 + // CHECK-LABEL: test_mm512_mask_unpackhi_epi16 // CHECK: shufflevector <32 x i16> %{{.*}}, <32 x i16> %{{.*}}, <32 x i32> <i32 4, i32 36, i32 5, i32 37, i32 6, i32 38, i32 7, i32 39, i32 12, i32 44, i32 13, i32 45, i32 14, i32 46, i32 15, i32 47, i32 20, i32 52, i32 21, i32 53, i32 22, i32 54, i32 23, i32 55, i32 28, i32 60, i32 29, i32 61, i32 30, i32 62, i32 31, i32 63> // CHECK: select <32 x i1> %{{.*}}, <32 x i16> %{{.*}}, <32 x i16> %{{.*}} return _mm512_mask_unpackhi_epi16(__W, __U, __A, __B); } __m512i test_mm512_maskz_unpackhi_epi16(__mmask32 __U, __m512i __A, __m512i __B) { - // CHECK-LABEL: @test_mm512_maskz_unpackhi_epi16 + // CHECK-LABEL: test_mm512_maskz_unpackhi_epi16 // CHECK: shufflevector <32 x i16> %{{.*}}, <32 x i16> %{{.*}}, <32 x i32> <i32 4, i32 36, i32 5, i32 37, i32 6, i32 38, i32 7, i32 39, i32 12, i32 44, i32 13, i32 45, i32 14, i32 46, i32 15, i32 47, i32 20, i32 52, i32 21, i32 53, i32 22, i32 54, i32 23, i32 55, i32 28, i32 60, i32 29, i32 61, i32 30, i32 62, i32 31, i32 63> // CHECK: select <32 x i1> %{{.*}}, <32 x i16> %{{.*}}, <32 x i16> %{{.*}} return _mm512_maskz_unpackhi_epi16(__U, __A, __B); } __m512i test_mm512_unpacklo_epi8(__m512i __A, __m512i __B) { - // CHECK-LABEL: @test_mm512_unpacklo_epi8 + // CHECK-LABEL: test_mm512_unpacklo_epi8 // CHECK: shufflevector <64 x i8> %{{.*}}, <64 x i8> %{{.*}}, <64 x i32> <i32 0, i32 64, i32 1, i32 65, i32 2, i32 66, i32 3, i32 67, i32 4, i32 68, i32 5, i32 69, i32 6, i32 70, i32 7, i32 71, i32 16, i32 80, i32 17, i32 81, i32 18, i32 82, i32 19, i32 83, i32 20, i32 84, i32 21, i32 85, i32 22, i32 86, i32 23, i32 87, i32 32, i32 96, i32 33, i32 97, i32 34, i32 98, i32 35, i32 99, i32 36, i32 100, i32 37, i32 101, i32 38, i32 102, i32 39, i32 103, i32 48, i32 112, i32 49, i32 113, i32 50, i32 114, i32 51, i32 115, i32 52, i32 116, i32 53, i32 117, i32 54, i32 118, i32 55, i32 119> return _mm512_unpacklo_epi8(__A, __B); } +TEST_CONSTEXPR(match_v64qi(_mm512_unpacklo_epi8((__m512i)(__v64qi){0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63}, (__m512i)(__v64qi){64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127}), 0, 64, 1, 65, 2, 66, 3, 67, 4, 68, 5, 69, 6, 70, 7, 71, 16, 80, 17, 81, 18, 82, 19, 83, 20, 84, 21, 85, 22, 86, 23, 87, 32, 96, 33, 97, 34, 98, 35, 99, 36, 100, 37, 101, 38, 102, 39, 103, 48, 112, 49, 113, 50, 114, 51, 115, 52, 116, 53, 117, 54, 118, 55, 119)); __m512i test_mm512_mask_unpacklo_epi8(__m512i __W, __mmask64 __U, __m512i __A, __m512i __B) { - // CHECK-LABEL: @test_mm512_mask_unpacklo_epi8 + // CHECK-LABEL: test_mm512_mask_unpacklo_epi8 // CHECK: shufflevector <64 x i8> %{{.*}}, <64 x i8> %{{.*}}, <64 x i32> <i32 0, i32 64, i32 1, i32 65, i32 2, i32 66, i32 3, i32 67, i32 4, i32 68, i32 5, i32 69, i32 6, i32 70, i32 7, i32 71, i32 16, i32 80, i32 17, i32 81, i32 18, i32 82, i32 19, i32 83, i32 20, i32 84, i32 21, i32 85, i32 22, i32 86, i32 23, i32 87, i32 32, i32 96, i32 33, i32 97, i32 34, i32 98, i32 35, i32 99, i32 36, i32 100, i32 37, i32 101, i32 38, i32 102, i32 39, i32 103, i32 48, i32 112, i32 49, i32 113, i32 50, i32 114, i32 51, i32 115, i32 52, i32 116, i32 53, i32 117, i32 54, i32 118, i32 55, i32 119> // CHECK: select <64 x i1> %{{.*}}, <64 x i8> %{{.*}}, <64 x i8> %{{.*}} return _mm512_mask_unpacklo_epi8(__W, __U, __A, __B); } __m512i test_mm512_maskz_unpacklo_epi8(__mmask64 __U, __m512i __A, __m512i __B) { - // CHECK-LABEL: @test_mm512_maskz_unpacklo_epi8 + // CHECK-LABEL: test_mm512_maskz_unpacklo_epi8 // CHECK: shufflevector <64 x i8> %{{.*}}, <64 x i8> %{{.*}}, <64 x i32> <i32 0, i32 64, i32 1, i32 65, i32 2, i32 66, i32 3, i32 67, i32 4, i32 68, i32 5, i32 69, i32 6, i32 70, i32 7, i32 71, i32 16, i32 80, i32 17, i32 81, i32 18, i32 82, i32 19, i32 83, i32 20, i32 84, i32 21, i32 85, i32 22, i32 86, i32 23, i32 87, i32 32, i32 96, i32 33, i32 97, i32 34, i32 98, i32 35, i32 99, i32 36, i32 100, i32 37, i32 101, i32 38, i32 102, i32 39, i32 103, i32 48, i32 112, i32 49, i32 113, i32 50, i32 114, i32 51, i32 115, i32 52, i32 116, i32 53, i32 117, i32 54, i32 118, i32 55, i32 119> // CHECK: select <64 x i1> %{{.*}}, <64 x i8> %{{.*}}, <64 x i8> %{{.*}} return _mm512_maskz_unpacklo_epi8(__U, __A, __B); } __m512i test_mm512_unpacklo_epi16(__m512i __A, __m512i __B) { - // CHECK-LABEL: @test_mm512_unpacklo_epi16 + // CHECK-LABEL: test_mm512_unpacklo_epi16 // CHECK: shufflevector <32 x i16> %{{.*}}, <32 x i16> %{{.*}}, <32 x i32> <i32 0, i32 32, i32 1, i32 33, i32 2, i32 34, i32 3, i32 35, i32 8, i32 40, i32 9, i32 41, i32 10, i32 42, i32 11, i32 43, i32 16, i32 48, i32 17, i32 49, i32 18, i32 50, i32 19, i32 51, i32 24, i32 56, i32 25, i32 57, i32 26, i32 58, i32 27, i32 59> return _mm512_unpacklo_epi16(__A, __B); } +TEST_CONSTEXPR(match_v32hi(_mm512_unpacklo_epi16((__m512i)(__v32hi){0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31}, (__m512i)(__v32hi){32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63}), 0, 32, 1, 33, 2, 34, 3, 35, 8, 40, 9, 41, 10, 42, 11, 43, 16, 48, 17, 49, 18, 50, 19, 51, 24, 56, 25, 57, 26, 58, 27, 59)); __m512i test_mm512_mask_unpacklo_epi16(__m512i __W, __mmask32 __U, __m512i __A, __m512i __B) { - // CHECK-LABEL: @test_mm512_mask_unpacklo_epi16 + // CHECK-LABEL: test_mm512_mask_unpacklo_epi16 // CHECK: shufflevector <32 x i16> %{{.*}}, <32 x i16> %{{.*}}, <32 x i32> <i32 0, i32 32, i32 1, i32 33, i32 2, i32 34, i32 3, i32 35, i32 8, i32 40, i32 9, i32 41, i32 10, i32 42, i32 11, i32 43, i32 16, i32 48, i32 17, i32 49, i32 18, i32 50, i32 19, i32 51, i32 24, i32 56, i32 25, i32 57, i32 26, i32 58, i32 27, i32 59> // CHECK: select <32 x i1> %{{.*}}, <32 x i16> %{{.*}}, <32 x i16> %{{.*}} return _mm512_mask_unpacklo_epi16(__W, __U, __A, __B); } __m512i test_mm512_maskz_unpacklo_epi16(__mmask32 __U, __m512i __A, __m512i __B) { - // CHECK-LABEL: @test_mm512_maskz_unpacklo_epi16 + // CHECK-LABEL: test_mm512_maskz_unpacklo_epi16 // CHECK: shufflevector <32 x i16> %{{.*}}, <32 x i16> %{{.*}}, <32 x i32> <i32 0, i32 32, i32 1, i32 33, i32 2, i32 34, i32 3, i32 35, i32 8, i32 40, i32 9, i32 41, i32 10, i32 42, i32 11, i32 43, i32 16, i32 48, i32 17, i32 49, i32 18, i32 50, i32 19, i32 51, i32 24, i32 56, i32 25, i32 57, i32 26, i32 58, i32 27, i32 59> // CHECK: select <32 x i1> %{{.*}}, <32 x i16> %{{.*}}, <32 x i16> %{{.*}} return _mm512_maskz_unpacklo_epi16(__U, __A, __B); } __m512i test_mm512_cvtepi8_epi16(__m256i __A) { - // CHECK-LABEL: @test_mm512_cvtepi8_epi16 + // CHECK-LABEL: test_mm512_cvtepi8_epi16 // CHECK: sext <32 x i8> %{{.*}} to <32 x i16> return _mm512_cvtepi8_epi16(__A); } +TEST_CONSTEXPR(match_v32hi(_mm512_cvtepi8_epi16((__m256i)(__v32qs){-3, 2, -1, 0, 1, -2, 3, -4, 5, -6, 7, -8, 9, -10, 11, -12, 13, -14, 15, -16, 17, -18, 19, -20, 21, -22, 23, -24, 25, -26, 27, -28}), -3, 2, -1, 0, 1, -2, 3, -4, 5, -6, 7, -8, 9, -10, 11, -12, 13, -14, 15, -16, 17, -18, 19, -20, 21, -22, 23, -24, 25, -26, 27, -28)); __m512i test_mm512_mask_cvtepi8_epi16(__m512i __W, __mmask32 __U, __m256i __A) { - // CHECK-LABEL: @test_mm512_mask_cvtepi8_epi16 + // CHECK-LABEL: test_mm512_mask_cvtepi8_epi16 // CHECK: sext <32 x i8> %{{.*}} to <32 x i16> // CHECK: select <32 x i1> %{{.*}}, <32 x i16> %{{.*}}, <32 x i16> %{{.*}} return _mm512_mask_cvtepi8_epi16(__W, __U, __A); } __m512i test_mm512_maskz_cvtepi8_epi16(__mmask32 __U, __m256i __A) { - // CHECK-LABEL: @test_mm512_maskz_cvtepi8_epi16 + // CHECK-LABEL: test_mm512_maskz_cvtepi8_epi16 // CHECK: sext <32 x i8> %{{.*}} to <32 x i16> // CHECK: select <32 x i1> %{{.*}}, <32 x i16> %{{.*}}, <32 x i16> %{{.*}} return _mm512_maskz_cvtepi8_epi16(__U, __A); } __m512i test_mm512_cvtepu8_epi16(__m256i __A) { - // CHECK-LABEL: @test_mm512_cvtepu8_epi16 + // CHECK-LABEL: test_mm512_cvtepu8_epi16 // CHECK: zext <32 x i8> %{{.*}} to <32 x i16> return _mm512_cvtepu8_epi16(__A); } +TEST_CONSTEXPR(match_v32hi(_mm512_cvtepu8_epi16((__m256i)(__v32qs){-3, 2, -1, 0, 1, -2, 3, -4, 5, -6, 7, -8, 9, -10, 11, -12, 13, -14, 15, -16, 17, -18, 19, -20, 21, -22, 23, -24, 25, -26, 27, -28}), 253, 2, 255, 0, 1, 254, 3, 252, 5, 250, 7, 248, 9, 246, 11, 244, 13, 242, 15, 240, 17, 238, 19, 236, 21, 234, 23, 232, 25, 230, 27, 228)); __m512i test_mm512_mask_cvtepu8_epi16(__m512i __W, __mmask32 __U, __m256i __A) { - // CHECK-LABEL: @test_mm512_mask_cvtepu8_epi16 + // CHECK-LABEL: test_mm512_mask_cvtepu8_epi16 // CHECK: zext <32 x i8> %{{.*}} to <32 x i16> // CHECK: select <32 x i1> %{{.*}}, <32 x i16> %{{.*}}, <32 x i16> %{{.*}} return _mm512_mask_cvtepu8_epi16(__W, __U, __A); } __m512i test_mm512_maskz_cvtepu8_epi16(__mmask32 __U, __m256i __A) { - // CHECK-LABEL: @test_mm512_maskz_cvtepu8_epi16 + // CHECK-LABEL: test_mm512_maskz_cvtepu8_epi16 // CHECK: zext <32 x i8> %{{.*}} to <32 x i16> // CHECK: select <32 x i1> %{{.*}}, <32 x i16> %{{.*}}, <32 x i16> %{{.*}} return _mm512_maskz_cvtepu8_epi16(__U, __A); } __m512i test_mm512_shufflehi_epi16(__m512i __A) { - // CHECK-LABEL: @test_mm512_shufflehi_epi16 + // CHECK-LABEL: test_mm512_shufflehi_epi16 // CHECK: shufflevector <32 x i16> %{{.*}}, <32 x i16> poison, <32 x i32> <i32 0, i32 1, i32 2, i32 3, i32 5, i32 5, i32 4, i32 4, i32 8, i32 9, i32 10, i32 11, i32 13, i32 13, i32 12, i32 12, i32 16, i32 17, i32 18, i32 19, i32 21, i32 21, i32 20, i32 20, i32 24, i32 25, i32 26, i32 27, i32 29, i32 29, i32 28, i32 28> return _mm512_shufflehi_epi16(__A, 5); } __m512i test_mm512_mask_shufflehi_epi16(__m512i __W, __mmask32 __U, __m512i __A) { - // CHECK-LABEL: @test_mm512_mask_shufflehi_epi16 + // CHECK-LABEL: test_mm512_mask_shufflehi_epi16 // CHECK: shufflevector <32 x i16> %{{.*}}, <32 x i16> poison, <32 x i32> <i32 0, i32 1, i32 2, i32 3, i32 5, i32 5, i32 4, i32 4, i32 8, i32 9, i32 10, i32 11, i32 13, i32 13, i32 12, i32 12, i32 16, i32 17, i32 18, i32 19, i32 21, i32 21, i32 20, i32 20, i32 24, i32 25, i32 26, i32 27, i32 29, i32 29, i32 28, i32 28> // CHECK: select <32 x i1> %{{.*}}, <32 x i16> %{{.*}}, <32 x i16> %{{.*}} return _mm512_mask_shufflehi_epi16(__W, __U, __A, 5); } __m512i test_mm512_maskz_shufflehi_epi16(__mmask32 __U, __m512i __A) { - // CHECK-LABEL: @test_mm512_maskz_shufflehi_epi16 + // CHECK-LABEL: test_mm512_maskz_shufflehi_epi16 // CHECK: shufflevector <32 x i16> %{{.*}}, <32 x i16> poison, <32 x i32> <i32 0, i32 1, i32 2, i32 3, i32 5, i32 5, i32 4, i32 4, i32 8, i32 9, i32 10, i32 11, i32 13, i32 13, i32 12, i32 12, i32 16, i32 17, i32 18, i32 19, i32 21, i32 21, i32 20, i32 20, i32 24, i32 25, i32 26, i32 27, i32 29, i32 29, i32 28, i32 28> // CHECK: select <32 x i1> %{{.*}}, <32 x i16> %{{.*}}, <32 x i16> %{{.*}} return _mm512_maskz_shufflehi_epi16(__U, __A, 5); } __m512i test_mm512_shufflelo_epi16(__m512i __A) { - // CHECK-LABEL: @test_mm512_shufflelo_epi16 + // CHECK-LABEL: test_mm512_shufflelo_epi16 // CHECK: shufflevector <32 x i16> %{{.*}}, <32 x i16> poison, <32 x i32> <i32 1, i32 1, i32 0, i32 0, i32 4, i32 5, i32 6, i32 7, i32 9, i32 9, i32 8, i32 8, i32 12, i32 13, i32 14, i32 15, i32 17, i32 17, i32 16, i32 16, i32 20, i32 21, i32 22, i32 23, i32 25, i32 25, i32 24, i32 24, i32 28, i32 29, i32 30, i32 31> return _mm512_shufflelo_epi16(__A, 5); } __m512i test_mm512_mask_shufflelo_epi16(__m512i __W, __mmask32 __U, __m512i __A) { - // CHECK-LABEL: @test_mm512_mask_shufflelo_epi16 + // CHECK-LABEL: test_mm512_mask_shufflelo_epi16 // CHECK: shufflevector <32 x i16> %{{.*}}, <32 x i16> poison, <32 x i32> <i32 1, i32 1, i32 0, i32 0, i32 4, i32 5, i32 6, i32 7, i32 9, i32 9, i32 8, i32 8, i32 12, i32 13, i32 14, i32 15, i32 17, i32 17, i32 16, i32 16, i32 20, i32 21, i32 22, i32 23, i32 25, i32 25, i32 24, i32 24, i32 28, i32 29, i32 30, i32 31> // CHECK: select <32 x i1> %{{.*}}, <32 x i16> %{{.*}}, <32 x i16> %{{.*}} return _mm512_mask_shufflelo_epi16(__W, __U, __A, 5); } __m512i test_mm512_maskz_shufflelo_epi16(__mmask32 __U, __m512i __A) { - // CHECK-LABEL: @test_mm512_maskz_shufflelo_epi16 + // CHECK-LABEL: test_mm512_maskz_shufflelo_epi16 // CHECK: shufflevector <32 x i16> %{{.*}}, <32 x i16> poison, <32 x i32> <i32 1, i32 1, i32 0, i32 0, i32 4, i32 5, i32 6, i32 7, i32 9, i32 9, i32 8, i32 8, i32 12, i32 13, i32 14, i32 15, i32 17, i32 17, i32 16, i32 16, i32 20, i32 21, i32 22, i32 23, i32 25, i32 25, i32 24, i32 24, i32 28, i32 29, i32 30, i32 31> // CHECK: select <32 x i1> %{{.*}}, <32 x i16> %{{.*}}, <32 x i16> %{{.*}} return _mm512_maskz_shufflelo_epi16(__U, __A, 5); } __m512i test_mm512_sllv_epi16(__m512i __A, __m512i __B) { - // CHECK-LABEL: @test_mm512_sllv_epi16 + // CHECK-LABEL: test_mm512_sllv_epi16 // CHECK: @llvm.x86.avx512.psllv.w.512( return _mm512_sllv_epi16(__A, __B); } __m512i test_mm512_mask_sllv_epi16(__m512i __W, __mmask32 __U, __m512i __A, __m512i __B) { - // CHECK-LABEL: @test_mm512_mask_sllv_epi16 + // CHECK-LABEL: test_mm512_mask_sllv_epi16 // CHECK: @llvm.x86.avx512.psllv.w.512( // CHECK: select <32 x i1> %{{.*}}, <32 x i16> %{{.*}}, <32 x i16> %{{.*}} return _mm512_mask_sllv_epi16(__W, __U, __A, __B); } __m512i test_mm512_maskz_sllv_epi16(__mmask32 __U, __m512i __A, __m512i __B) { - // CHECK-LABEL: @test_mm512_maskz_sllv_epi16 + // CHECK-LABEL: test_mm512_maskz_sllv_epi16 // CHECK: @llvm.x86.avx512.psllv.w.512( // CHECK: select <32 x i1> %{{.*}}, <32 x i16> %{{.*}}, <32 x i16> %{{.*}} return _mm512_maskz_sllv_epi16(__U, __A, __B); } __m512i test_mm512_sll_epi16(__m512i __A, __m128i __B) { - // CHECK-LABEL: @test_mm512_sll_epi16 + // CHECK-LABEL: test_mm512_sll_epi16 // CHECK: @llvm.x86.avx512.psll.w.512 return _mm512_sll_epi16(__A, __B); } __m512i test_mm512_mask_sll_epi16(__m512i __W, __mmask32 __U, __m512i __A, __m128i __B) { - // CHECK-LABEL: @test_mm512_mask_sll_epi16 + // CHECK-LABEL: test_mm512_mask_sll_epi16 // CHECK: @llvm.x86.avx512.psll.w.512 // CHECK: select <32 x i1> %{{.*}}, <32 x i16> %{{.*}}, <32 x i16> %{{.*}} return _mm512_mask_sll_epi16(__W, __U, __A, __B); } __m512i test_mm512_maskz_sll_epi16(__mmask32 __U, __m512i __A, __m128i __B) { - // CHECK-LABEL: @test_mm512_maskz_sll_epi16 + // CHECK-LABEL: test_mm512_maskz_sll_epi16 // CHECK: @llvm.x86.avx512.psll.w.512 // CHECK: select <32 x i1> %{{.*}}, <32 x i16> %{{.*}}, <32 x i16> %{{.*}} return _mm512_maskz_sll_epi16(__U, __A, __B); } __m512i test_mm512_slli_epi16(__m512i __A) { - // CHECK-LABEL: @test_mm512_slli_epi16 + // CHECK-LABEL: test_mm512_slli_epi16 // CHECK: @llvm.x86.avx512.pslli.w.512 return _mm512_slli_epi16(__A, 5); } +TEST_CONSTEXPR(match_v32hi(_mm512_slli_epi16((__m512i)(__v32hi){0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31}, 0), 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31)); +TEST_CONSTEXPR(match_v32hi(_mm512_slli_epi16((__m512i)(__v32hi){0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31}, 1), 0, 0x2, 0x4, 0x6, 0x8, 0xa, 0xc, 0xe, 0x10, 0x12, 0x14, 0x16, 0x18, 0x1a, 0x1c, 0x1e, 0x20, 0x22, 0x24, 0x26, 0x28, 0x2a, 0x2c, 0x2e, 0x30, 0x32, 0x34, 0x36, 0x38, 0x3a, 0x3c, 0x3e)); +TEST_CONSTEXPR(match_v32hi(_mm512_slli_epi16((__m512i)(__v32hi){0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31}, 15), 0, 0x8000, 0x0, 0x8000, 0x0, 0x8000, 0x0, 0x8000, 0x0, 0x8000, 0x0, 0x8000, 0x0, 0x8000, 0x0, 0x8000, 0x0, 0x8000, 0x0, 0x8000, 0x0, 0x8000, 0x0, 0x8000, 0x0, 0x8000, 0x0, 0x8000, 0x0, 0x8000, 0x0, 0x8000)); +TEST_CONSTEXPR(match_v32hi(_mm512_slli_epi16((__m512i)(__v32hi){0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31}, 16), 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)); +TEST_CONSTEXPR(match_v32hi(_mm512_slli_epi16((__m512i)(__v32hi){0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31}, 17), 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)); __m512i test_mm512_slli_epi16_2(__m512i __A, unsigned int __B) { - // CHECK-LABEL: @test_mm512_slli_epi16_2 + // CHECK-LABEL: test_mm512_slli_epi16_2 // CHECK: @llvm.x86.avx512.pslli.w.512 return _mm512_slli_epi16(__A, __B); } __m512i test_mm512_mask_slli_epi16(__m512i __W, __mmask32 __U, __m512i __A) { - // CHECK-LABEL: @test_mm512_mask_slli_epi16 + // CHECK-LABEL: test_mm512_mask_slli_epi16 // CHECK: @llvm.x86.avx512.pslli.w.512 // CHECK: select <32 x i1> %{{.*}}, <32 x i16> %{{.*}}, <32 x i16> %{{.*}} return _mm512_mask_slli_epi16(__W, __U, __A, 5); } +TEST_CONSTEXPR(match_v32hi(_mm512_mask_slli_epi16((__m512i)(__v32hi){100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131}, (__mmask32)~(__mmask32)0, (__m512i)(__v32hi){0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31}, 1), 0x0, 0x2, 0x4, 0x6, 0x8, 0xa, 0xc, 0xe, 0x10, 0x12, 0x14, 0x16, 0x18, 0x1a, 0x1c, 0x1e, 0x20, 0x22, 0x24, 0x26, 0x28, 0x2a, 0x2c, 0x2e, 0x30, 0x32, 0x34, 0x36, 0x38, 0x3a, 0x3c, 0x3e)); __m512i test_mm512_mask_slli_epi16_2(__m512i __W, __mmask32 __U, __m512i __A, unsigned int __B) { - // CHECK-LABEL: @test_mm512_mask_slli_epi16_2 + // CHECK-LABEL: test_mm512_mask_slli_epi16_2 // CHECK: @llvm.x86.avx512.pslli.w.512 // CHECK: select <32 x i1> %{{.*}}, <32 x i16> %{{.*}}, <32 x i16> %{{.*}} return _mm512_mask_slli_epi16(__W, __U, __A, __B); } __m512i test_mm512_maskz_slli_epi16(__mmask32 __U, __m512i __A) { - // CHECK-LABEL: @test_mm512_maskz_slli_epi16 + // CHECK-LABEL: test_mm512_maskz_slli_epi16 // CHECK: @llvm.x86.avx512.pslli.w.512 // CHECK: select <32 x i1> %{{.*}}, <32 x i16> %{{.*}}, <32 x i16> %{{.*}} return _mm512_maskz_slli_epi16(__U, __A, 5); } +TEST_CONSTEXPR(match_v32hi(_mm512_maskz_slli_epi16((__mmask32)0x00ffcc71, (__m512i)(__v32hi){0xff, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 0xff, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, 16), 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)); +TEST_CONSTEXPR(match_v32hi(_mm512_maskz_slli_epi16((__mmask32)0, (__m512i)(__v32hi){0xff, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 0xff, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, 16), 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)); +TEST_CONSTEXPR(match_v32hi(_mm512_maskz_slli_epi16((__mmask32)0xffffffff, (__m512i)(__v32hi){0xff, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 0xff, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, 1), 0x1fe, 0x2, 0x4, 0x6, 0x8, 0xa, 0xc, 0xe, 0x10, 0x12, 0x14, 0x16, 0x18, 0x1a, 0x1c, 0x1e, 0x1fe, 0x2, 0x4, 0x6, 0x8, 0xa, 0xc, 0xe, 0x10, 0x12, 0x14, 0x16, 0x18, 0x1a, 0x1c, 0x1e)); +TEST_CONSTEXPR(match_v32hi(_mm512_maskz_slli_epi16((__mmask32)0x7fffffff, (__m512i)(__v32hi){0xff, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 0xff, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, 1), 0x1fe, 0x2, 0x4, 0x6, 0x8, 0xa, 0xc, 0xe, 0x10, 0x12, 0x14, 0x16, 0x18, 0x1a, 0x1c, 0x1e, 0x1fe, 0x2, 0x4, 0x6, 0x8, 0xa, 0xc, 0xe, 0x10, 0x12, 0x14, 0x16, 0x18, 0x1a, 0x1c, 0)); +TEST_CONSTEXPR(match_v32hi(_mm512_maskz_slli_epi16((__mmask32)0x71ccff00, (__m512i)(__v32hi){0xff, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 0xff, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, 1), 0, 0, 0, 0, 0, 0, 0, 0, 0x10, 0x12, 0x14, 0x16, 0x18, 0x1a, 0x1c, 0x1e, 0, 0, 0x4, 0x6, 0, 0, 0xc, 0xe, 0x10, 0, 0, 0, 0x18, 0x1a, 0x1c, 0)); __m512i test_mm512_maskz_slli_epi16_2(__mmask32 __U, __m512i __A, unsigned int __B) { - // CHECK-LABEL: @test_mm512_maskz_slli_epi16_2 + // CHECK-LABEL: test_mm512_maskz_slli_epi16_2 // CHECK: @llvm.x86.avx512.pslli.w.512 // CHECK: select <32 x i1> %{{.*}}, <32 x i16> %{{.*}}, <32 x i16> %{{.*}} return _mm512_maskz_slli_epi16(__U, __A, __B); } __m512i test_mm512_bslli_epi128(__m512i __A) { - // CHECK-LABEL: @test_mm512_bslli_epi128 + // CHECK-LABEL: test_mm512_bslli_epi128 // CHECK: shufflevector <64 x i8> zeroinitializer, <64 x i8> %{{.*}}, <64 x i32> <i32 11, i32 12, i32 13, i32 14, i32 15, i32 64, i32 65, i32 66, i32 67, i32 68, i32 69, i32 70, i32 71, i32 72, i32 73, i32 74, i32 27, i32 28, i32 29, i32 30, i32 31, i32 80, i32 81, i32 82, i32 83, i32 84, i32 85, i32 86, i32 87, i32 88, i32 89, i32 90, i32 43, i32 44, i32 45, i32 46, i32 47, i32 96, i32 97, i32 98, i32 99, i32 100, i32 101, i32 102, i32 103, i32 104, i32 105, i32 106, i32 59, i32 60, i32 61, i32 62, i32 63, i32 112, i32 113, i32 114, i32 115, i32 116, i32 117, i32 118, i32 119, i32 120, i32 121, i32 122> return _mm512_bslli_epi128(__A, 5); } __m512i test_mm512_srlv_epi16(__m512i __A, __m512i __B) { - // CHECK-LABEL: @test_mm512_srlv_epi16 + // CHECK-LABEL: test_mm512_srlv_epi16 // CHECK: @llvm.x86.avx512.psrlv.w.512( return _mm512_srlv_epi16(__A, __B); } __m512i test_mm512_mask_srlv_epi16(__m512i __W, __mmask32 __U, __m512i __A, __m512i __B) { - // CHECK-LABEL: @test_mm512_mask_srlv_epi16 + // CHECK-LABEL: test_mm512_mask_srlv_epi16 // CHECK: @llvm.x86.avx512.psrlv.w.512( // CHECK: select <32 x i1> %{{.*}}, <32 x i16> %{{.*}}, <32 x i16> %{{.*}} return _mm512_mask_srlv_epi16(__W, __U, __A, __B); } __m512i test_mm512_maskz_srlv_epi16(__mmask32 __U, __m512i __A, __m512i __B) { - // CHECK-LABEL: @test_mm512_maskz_srlv_epi16 + // CHECK-LABEL: test_mm512_maskz_srlv_epi16 // CHECK: @llvm.x86.avx512.psrlv.w.512( // CHECK: select <32 x i1> %{{.*}}, <32 x i16> %{{.*}}, <32 x i16> %{{.*}} return _mm512_maskz_srlv_epi16(__U, __A, __B); } __m512i test_mm512_srav_epi16(__m512i __A, __m512i __B) { - // CHECK-LABEL: @test_mm512_srav_epi16 + // CHECK-LABEL: test_mm512_srav_epi16 // CHECK: @llvm.x86.avx512.psrav.w.512( return _mm512_srav_epi16(__A, __B); } __m512i test_mm512_mask_srav_epi16(__m512i __W, __mmask32 __U, __m512i __A, __m512i __B) { - // CHECK-LABEL: @test_mm512_mask_srav_epi16 + // CHECK-LABEL: test_mm512_mask_srav_epi16 // CHECK: @llvm.x86.avx512.psrav.w.512( // CHECK: select <32 x i1> %{{.*}}, <32 x i16> %{{.*}}, <32 x i16> %{{.*}} return _mm512_mask_srav_epi16(__W, __U, __A, __B); } __m512i test_mm512_maskz_srav_epi16(__mmask32 __U, __m512i __A, __m512i __B) { - // CHECK-LABEL: @test_mm512_maskz_srav_epi16 + // CHECK-LABEL: test_mm512_maskz_srav_epi16 // CHECK: @llvm.x86.avx512.psrav.w.512( // CHECK: select <32 x i1> %{{.*}}, <32 x i16> %{{.*}}, <32 x i16> %{{.*}} return _mm512_maskz_srav_epi16(__U, __A, __B); } __m512i test_mm512_sra_epi16(__m512i __A, __m128i __B) { - // CHECK-LABEL: @test_mm512_sra_epi16 + // CHECK-LABEL: test_mm512_sra_epi16 // CHECK: @llvm.x86.avx512.psra.w.512 return _mm512_sra_epi16(__A, __B); } __m512i test_mm512_mask_sra_epi16(__m512i __W, __mmask32 __U, __m512i __A, __m128i __B) { - // CHECK-LABEL: @test_mm512_mask_sra_epi16 + // CHECK-LABEL: test_mm512_mask_sra_epi16 // CHECK: @llvm.x86.avx512.psra.w.512 // CHECK: select <32 x i1> %{{.*}}, <32 x i16> %{{.*}}, <32 x i16> %{{.*}} return _mm512_mask_sra_epi16(__W, __U, __A, __B); } __m512i test_mm512_maskz_sra_epi16(__mmask32 __U, __m512i __A, __m128i __B) { - // CHECK-LABEL: @test_mm512_maskz_sra_epi16 + // CHECK-LABEL: test_mm512_maskz_sra_epi16 // CHECK: @llvm.x86.avx512.psra.w.512 // CHECK: select <32 x i1> %{{.*}}, <32 x i16> %{{.*}}, <32 x i16> %{{.*}} return _mm512_maskz_sra_epi16(__U, __A, __B); } __m512i test_mm512_srai_epi16(__m512i __A) { - // CHECK-LABEL: @test_mm512_srai_epi16 + // CHECK-LABEL: test_mm512_srai_epi16 // CHECK: @llvm.x86.avx512.psrai.w.512 return _mm512_srai_epi16(__A, 5); } +TEST_CONSTEXPR(match_v32hi(_mm512_srai_epi16((__m512i)(__v32hi){0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31}, 10), 0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0)); __m512i test_mm512_srai_epi16_2(__m512i __A, unsigned int __B) { - // CHECK-LABEL: @test_mm512_srai_epi16_2 + // CHECK-LABEL: test_mm512_srai_epi16_2 // CHECK: @llvm.x86.avx512.psrai.w.512 return _mm512_srai_epi16(__A, __B); } __m512i test_mm512_mask_srai_epi16(__m512i __W, __mmask32 __U, __m512i __A) { - // CHECK-LABEL: @test_mm512_mask_srai_epi16 + // CHECK-LABEL: test_mm512_mask_srai_epi16 // CHECK: @llvm.x86.avx512.psrai.w.512 // CHECK: select <32 x i1> %{{.*}}, <32 x i16> %{{.*}}, <32 x i16> %{{.*}} return _mm512_mask_srai_epi16(__W, __U, __A, 5); } +TEST_CONSTEXPR(match_v32hi(_mm512_mask_srai_epi16((__m512i)(__v32hi){100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131}, (__mmask32)~(__mmask32)0, (__m512i)(__v32hi){0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31}, 1), 0x0, 0x0, 0x1, 0x1, 0x2, 0x2, 0x3, 0x3, 0x4, 0x4, 0x5, 0x5, 0x6, 0x6, 0x7, 0x7, 0x8, 0x8, 0x9, 0x9, 0xa, 0xa, 0xb, 0xb, 0xc, 0xc, 0xd, 0xd, 0xe, 0xe, 0xf, 0xf)); __m512i test_mm512_mask_srai_epi16_2(__m512i __W, __mmask32 __U, __m512i __A, unsigned int __B) { - // CHECK-LABEL: @test_mm512_mask_srai_epi16_2 + // CHECK-LABEL: test_mm512_mask_srai_epi16_2 // CHECK: @llvm.x86.avx512.psrai.w.512 // CHECK: select <32 x i1> %{{.*}}, <32 x i16> %{{.*}}, <32 x i16> %{{.*}} return _mm512_mask_srai_epi16(__W, __U, __A, __B); } __m512i test_mm512_maskz_srai_epi16(__mmask32 __U, __m512i __A) { - // CHECK-LABEL: @test_mm512_maskz_srai_epi16 + // CHECK-LABEL: test_mm512_maskz_srai_epi16 // CHECK: @llvm.x86.avx512.psrai.w.512 // CHECK: select <32 x i1> %{{.*}}, <32 x i16> %{{.*}}, <32 x i16> %{{.*}} return _mm512_maskz_srai_epi16(__U, __A, 5); } +TEST_CONSTEXPR(match_v32hi(_mm512_maskz_srai_epi16((__mmask32)0xAAAAAAAA, (__m512i)(__v32hi){-32768, 32767, -3, -2, -1, 0, 1, 2, -1234, 1234, -32767, 32766, -5, 5, -256, 256, -42, 42, -7, 7, -30000, 30000, -1, -1, 0, -2, 2, -32768, 32767, -32768, -123, 123 }, 5), 0, 1023, 0, -1, 0, 0, 0, 0, 0, 38, 0, 1023, 0, 0, 0, 8, 0, 1, 0, 0, 0, 937, 0, -1, 0, -1, 0, -1024, 0, -1024, 0, 3 )); __m512i test_mm512_maskz_srai_epi16_2(__mmask32 __U, __m512i __A, unsigned int __B) { - // CHECK-LABEL: @test_mm512_maskz_srai_epi16_2 + // CHECK-LABEL: test_mm512_maskz_srai_epi16_2 // CHECK: @llvm.x86.avx512.psrai.w.512 // CHECK: select <32 x i1> %{{.*}}, <32 x i16> %{{.*}}, <32 x i16> %{{.*}} return _mm512_maskz_srai_epi16(__U, __A, __B); } __m512i test_mm512_srl_epi16(__m512i __A, __m128i __B) { - // CHECK-LABEL: @test_mm512_srl_epi16 + // CHECK-LABEL: test_mm512_srl_epi16 // CHECK: @llvm.x86.avx512.psrl.w.512 return _mm512_srl_epi16(__A, __B); } __m512i test_mm512_mask_srl_epi16(__m512i __W, __mmask32 __U, __m512i __A, __m128i __B) { - // CHECK-LABEL: @test_mm512_mask_srl_epi16 + // CHECK-LABEL: test_mm512_mask_srl_epi16 // CHECK: @llvm.x86.avx512.psrl.w.512 // CHECK: select <32 x i1> %{{.*}}, <32 x i16> %{{.*}}, <32 x i16> %{{.*}} return _mm512_mask_srl_epi16(__W, __U, __A, __B); } __m512i test_mm512_maskz_srl_epi16(__mmask32 __U, __m512i __A, __m128i __B) { - // CHECK-LABEL: @test_mm512_maskz_srl_epi16 + // CHECK-LABEL: test_mm512_maskz_srl_epi16 // CHECK: @llvm.x86.avx512.psrl.w.512 // CHECK: select <32 x i1> %{{.*}}, <32 x i16> %{{.*}}, <32 x i16> %{{.*}} return _mm512_maskz_srl_epi16(__U, __A, __B); } __m512i test_mm512_srli_epi16(__m512i __A) { - // CHECK-LABEL: @test_mm512_srli_epi16 + // CHECK-LABEL: test_mm512_srli_epi16 // CHECK: @llvm.x86.avx512.psrli.w.512 return _mm512_srli_epi16(__A, 5); } +TEST_CONSTEXPR(match_v32hi(_mm512_srli_epi16((__m512i)(__v32hi){0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31}, 15), 0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0)); __m512i test_mm512_srli_epi16_2(__m512i __A, unsigned int __B) { - // CHECK-LABEL: @test_mm512_srli_epi16_2 + // CHECK-LABEL: test_mm512_srli_epi16_2 // CHECK: @llvm.x86.avx512.psrli.w.512 return _mm512_srli_epi16(__A, __B); } __m512i test_mm512_mask_srli_epi16(__m512i __W, __mmask32 __U, __m512i __A) { - // CHECK-LABEL: @test_mm512_mask_srli_epi16 + // CHECK-LABEL: test_mm512_mask_srli_epi16 // CHECK: @llvm.x86.avx512.psrli.w.512 // CHECK: select <32 x i1> %{{.*}}, <32 x i16> %{{.*}}, <32 x i16> %{{.*}} return _mm512_mask_srli_epi16(__W, __U, __A, 5); } +TEST_CONSTEXPR(match_v32hi(_mm512_mask_srli_epi16((__m512i)(__v32hi){100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131}, (__mmask32)~(__mmask32)0, (__m512i)(__v32hi){0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31}, 1), 0x0, 0x0, 0x1, 0x1, 0x2, 0x2, 0x3, 0x3, 0x4, 0x4, 0x5, 0x5, 0x6, 0x6, 0x7, 0x7, 0x8, 0x8, 0x9, 0x9, 0xa, 0xa, 0xb, 0xb, 0xc, 0xc, 0xd, 0xd, 0xe, 0xe, 0xf, 0xf)); __m512i test_mm512_mask_srli_epi16_2(__m512i __W, __mmask32 __U, __m512i __A, unsigned int __B) { - // CHECK-LABEL: @test_mm512_mask_srli_epi16_2 + // CHECK-LABEL: test_mm512_mask_srli_epi16_2 // CHECK: @llvm.x86.avx512.psrli.w.512 // CHECK: select <32 x i1> %{{.*}}, <32 x i16> %{{.*}}, <32 x i16> %{{.*}} return _mm512_mask_srli_epi16(__W, __U, __A, __B); } __m512i test_mm512_maskz_srli_epi16(__mmask32 __U, __m512i __A) { - // CHECK-LABEL: @test_mm512_maskz_srli_epi16 + // CHECK-LABEL: test_mm512_maskz_srli_epi16 // CHECK: @llvm.x86.avx512.psrli.w.512 // CHECK: select <32 x i1> %{{.*}}, <32 x i16> %{{.*}}, <32 x i16> %{{.*}} return _mm512_maskz_srli_epi16(__U, __A, 5); } +TEST_CONSTEXPR(match_v32hi(_mm512_maskz_srli_epi16((__mmask32)0x71ccff00, (__m512i)(__v32hi){0xff, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 0xff, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, 1), 0, 0, 0, 0, 0, 0, 0, 0, 0x4, 0x4, 0x5, 0x5, 0x6, 0x6, 0x7, 0x7, 0, 0, 0x1, 0x1, 0, 0, 0x3, 0x3, 0x4, 0, 0, 0, 0x6, 0x6, 0x7, 0 )); __m512i test_mm512_maskz_srli_epi16_2(__mmask32 __U, __m512i __A, int __B) { - // CHECK-LABEL: @test_mm512_maskz_srli_epi16_2 + // CHECK-LABEL: test_mm512_maskz_srli_epi16_2 // CHECK: @llvm.x86.avx512.psrli.w.512 // CHECK: select <32 x i1> %{{.*}}, <32 x i16> %{{.*}}, <32 x i16> %{{.*}} return _mm512_maskz_srli_epi16(__U, __A, __B); } __m512i test_mm512_bsrli_epi128(__m512i __A) { - // CHECK-LABEL: @test_mm512_bsrli_epi128 + // CHECK-LABEL: test_mm512_bsrli_epi128 // CHECK: shufflevector <64 x i8> %{{.*}}, <64 x i8> zeroinitializer, <64 x i32> <i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15, i32 64, i32 65, i32 66, i32 67, i32 68, i32 21, i32 22, i32 23, i32 24, i32 25, i32 26, i32 27, i32 28, i32 29, i32 30, i32 31, i32 80, i32 81, i32 82, i32 83, i32 84, i32 37, i32 38, i32 39, i32 40, i32 41, i32 42, i32 43, i32 44, i32 45, i32 46, i32 47, i32 96, i32 97, i32 98, i32 99, i32 100, i32 53, i32 54, i32 55, i32 56, i32 57, i32 58, i32 59, i32 60, i32 61, i32 62, i32 63, i32 112, i32 113, i32 114, i32 115, i32 116> return _mm512_bsrli_epi128(__A, 5); } __m512i test_mm512_mask_mov_epi16(__m512i __W, __mmask32 __U, __m512i __A) { - // CHECK-LABEL: @test_mm512_mask_mov_epi16 + // CHECK-LABEL: test_mm512_mask_mov_epi16 // CHECK: select <32 x i1> %{{.*}}, <32 x i16> %{{.*}}, <32 x i16> %{{.*}} return _mm512_mask_mov_epi16(__W, __U, __A); } __m512i test_mm512_maskz_mov_epi16(__mmask32 __U, __m512i __A) { - // CHECK-LABEL: @test_mm512_maskz_mov_epi16 + // CHECK-LABEL: test_mm512_maskz_mov_epi16 // CHECK: select <32 x i1> %{{.*}}, <32 x i16> %{{.*}}, <32 x i16> %{{.*}} return _mm512_maskz_mov_epi16(__U, __A); } __m512i test_mm512_mask_mov_epi8(__m512i __W, __mmask64 __U, __m512i __A) { - // CHECK-LABEL: @test_mm512_mask_mov_epi8 + // CHECK-LABEL: test_mm512_mask_mov_epi8 // CHECK: select <64 x i1> %{{.*}}, <64 x i8> %{{.*}}, <64 x i8> %{{.*}} return _mm512_mask_mov_epi8(__W, __U, __A); } __m512i test_mm512_maskz_mov_epi8(__mmask64 __U, __m512i __A) { - // CHECK-LABEL: @test_mm512_maskz_mov_epi8 + // CHECK-LABEL: test_mm512_maskz_mov_epi8 // CHECK: select <64 x i1> %{{.*}}, <64 x i8> %{{.*}}, <64 x i8> %{{.*}} return _mm512_maskz_mov_epi8(__U, __A); } __m512i test_mm512_mask_set1_epi8(__m512i __O, __mmask64 __M, char __A) { - // CHECK-LABEL: @test_mm512_mask_set1_epi8 + // CHECK-LABEL: test_mm512_mask_set1_epi8 // CHECK: insertelement <64 x i8> poison, i8 %{{.*}}, i32 0 // CHECK: insertelement <64 x i8> %{{.*}}, i8 %{{.*}}, i32 1 // CHECK: insertelement <64 x i8> %{{.*}}, i8 %{{.*}}, i32 2 @@ -1956,7 +2028,7 @@ __m512i test_mm512_mask_set1_epi8(__m512i __O, __mmask64 __M, char __A) { } __m512i test_mm512_maskz_set1_epi8(__mmask64 __M, char __A) { - // CHECK-LABEL: @test_mm512_maskz_set1_epi8 + // CHECK-LABEL: test_mm512_maskz_set1_epi8 // CHECK: insertelement <64 x i8> poison, i8 %{{.*}}, i32 0 // CHECK: insertelement <64 x i8> %{{.*}}, i8 %{{.*}}, i32 1 // CHECK: insertelement <64 x i8> %{{.*}}, i8 %{{.*}}, i32 2 @@ -2026,7 +2098,7 @@ __m512i test_mm512_maskz_set1_epi8(__mmask64 __M, char __A) { } __mmask64 test_mm512_kunpackd(__m512i __A, __m512i __B, __m512i __C, __m512i __D, __m512i __E, __m512i __F) { - // CHECK-LABEL: @test_mm512_kunpackd + // CHECK-LABEL: test_mm512_kunpackd // CHECK: [[LHS:%.*]] = bitcast i64 %{{.*}} to <64 x i1> // CHECK: [[RHS:%.*]] = bitcast i64 %{{.*}} to <64 x i1> // CHECK: [[LHS2:%.*]] = shufflevector <64 x i1> [[LHS]], <64 x i1> [[LHS]], <32 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15, i32 16, i32 17, i32 18, i32 19, i32 20, i32 21, i32 22, i32 23, i32 24, i32 25, i32 26, i32 27, i32 28, i32 29, i32 30, i32 31> @@ -2036,7 +2108,7 @@ __mmask64 test_mm512_kunpackd(__m512i __A, __m512i __B, __m512i __C, __m512i __D } __mmask32 test_mm512_kunpackw(__m512i __A, __m512i __B, __m512i __C, __m512i __D, __m512i __E, __m512i __F) { - // CHECK-LABEL: @test_mm512_kunpackw + // CHECK-LABEL: test_mm512_kunpackw // CHECK: [[LHS:%.*]] = bitcast i32 %{{.*}} to <32 x i1> // CHECK: [[RHS:%.*]] = bitcast i32 %{{.*}} to <32 x i1> // CHECK: [[LHS2:%.*]] = shufflevector <32 x i1> [[LHS]], <32 x i1> [[LHS]], <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15> @@ -2047,74 +2119,74 @@ __mmask32 test_mm512_kunpackw(__m512i __A, __m512i __B, __m512i __C, __m512i __D __m512i test_mm512_loadu_epi16 (void *__P) { - // CHECK-LABEL: @test_mm512_loadu_epi16 + // CHECK-LABEL: test_mm512_loadu_epi16 // CHECK: load <8 x i64>, ptr %{{.*}}, align 1{{$}} return _mm512_loadu_epi16 (__P); } __m512i test_mm512_mask_loadu_epi16(__m512i __W, __mmask32 __U, void const *__P) { - // CHECK-LABEL: @test_mm512_mask_loadu_epi16 + // CHECK-LABEL: test_mm512_mask_loadu_epi16 // CHECK: @llvm.masked.load.v32i16.p0(ptr %{{.*}}, i32 1, <32 x i1> %{{.*}}, <32 x i16> %{{.*}}) return _mm512_mask_loadu_epi16(__W, __U, __P); } __m512i test_mm512_maskz_loadu_epi16(__mmask32 __U, void const *__P) { - // CHECK-LABEL: @test_mm512_maskz_loadu_epi16 + // CHECK-LABEL: test_mm512_maskz_loadu_epi16 // CHECK: @llvm.masked.load.v32i16.p0(ptr %{{.*}}, i32 1, <32 x i1> %{{.*}}, <32 x i16> %{{.*}}) return _mm512_maskz_loadu_epi16(__U, __P); } __m512i test_mm512_loadu_epi8 (void *__P) { - // CHECK-LABEL: @test_mm512_loadu_epi8 + // CHECK-LABEL: test_mm512_loadu_epi8 // CHECK: load <8 x i64>, ptr %{{.*}}, align 1{{$}} return _mm512_loadu_epi8 (__P); } __m512i test_mm512_mask_loadu_epi8(__m512i __W, __mmask64 __U, void const *__P) { - // CHECK-LABEL: @test_mm512_mask_loadu_epi8 + // CHECK-LABEL: test_mm512_mask_loadu_epi8 // CHECK: @llvm.masked.load.v64i8.p0(ptr %{{.*}}, i32 1, <64 x i1> %{{.*}}, <64 x i8> %{{.*}}) return _mm512_mask_loadu_epi8(__W, __U, __P); } __m512i test_mm512_maskz_loadu_epi8(__mmask64 __U, void const *__P) { - // CHECK-LABEL: @test_mm512_maskz_loadu_epi8 + // CHECK-LABEL: test_mm512_maskz_loadu_epi8 // CHECK: @llvm.masked.load.v64i8.p0(ptr %{{.*}}, i32 1, <64 x i1> %{{.*}}, <64 x i8> %{{.*}}) return _mm512_maskz_loadu_epi8(__U, __P); } void test_mm512_storeu_epi16(void *__P, __m512i __A) { - // CHECK-LABEL: @test_mm512_storeu_epi16 + // CHECK-LABEL: test_mm512_storeu_epi16 // CHECK: store <8 x i64> %{{.*}}, ptr %{{.*}}, align 1{{$}} return _mm512_storeu_epi16(__P, __A); } void test_mm512_mask_storeu_epi16(void *__P, __mmask32 __U, __m512i __A) { - // CHECK-LABEL: @test_mm512_mask_storeu_epi16 + // CHECK-LABEL: test_mm512_mask_storeu_epi16 // CHECK: @llvm.masked.store.v32i16.p0(<32 x i16> %{{.*}}, ptr %{{.*}}, i32 1, <32 x i1> %{{.*}}) return _mm512_mask_storeu_epi16(__P, __U, __A); } __mmask64 test_mm512_test_epi8_mask(__m512i __A, __m512i __B) { - // CHECK-LABEL: @test_mm512_test_epi8_mask + // CHECK-LABEL: test_mm512_test_epi8_mask // CHECK: and <16 x i32> %{{.*}}, %{{.*}} // CHECK: icmp ne <64 x i8> %{{.*}}, %{{.*}} return _mm512_test_epi8_mask(__A, __B); } void test_mm512_storeu_epi8(void *__P, __m512i __A) { - // CHECK-LABEL: @test_mm512_storeu_epi8 + // CHECK-LABEL: test_mm512_storeu_epi8 // CHECK: store <8 x i64> %{{.*}}, ptr %{{.*}}, align 1{{$}} return _mm512_storeu_epi8(__P, __A); } void test_mm512_mask_storeu_epi8(void *__P, __mmask64 __U, __m512i __A) { - // CHECK-LABEL: @test_mm512_mask_storeu_epi8 + // CHECK-LABEL: test_mm512_mask_storeu_epi8 // CHECK: @llvm.masked.store.v64i8.p0(<64 x i8> %{{.*}}, ptr %{{.*}}, i32 1, <64 x i1> %{{.*}}) return _mm512_mask_storeu_epi8(__P, __U, __A); } __mmask64 test_mm512_mask_test_epi8_mask(__mmask64 __U, __m512i __A, __m512i __B) { - // CHECK-LABEL: @test_mm512_mask_test_epi8_mask + // CHECK-LABEL: test_mm512_mask_test_epi8_mask // CHECK: and <16 x i32> %{{.*}}, %{{.*}} // CHECK: icmp ne <64 x i8> %{{.*}}, %{{.*}} // CHECK: and <64 x i1> %{{.*}}, %{{.*}} @@ -2122,14 +2194,14 @@ __mmask64 test_mm512_mask_test_epi8_mask(__mmask64 __U, __m512i __A, __m512i __B } __mmask32 test_mm512_test_epi16_mask(__m512i __A, __m512i __B) { - // CHECK-LABEL: @test_mm512_test_epi16_mask + // CHECK-LABEL: test_mm512_test_epi16_mask // CHECK: and <16 x i32> %{{.*}}, %{{.*}} // CHECK: icmp ne <32 x i16> %{{.*}}, %{{.*}} return _mm512_test_epi16_mask(__A, __B); } __mmask32 test_mm512_mask_test_epi16_mask(__mmask32 __U, __m512i __A, __m512i __B) { - // CHECK-LABEL: @test_mm512_mask_test_epi16_mask + // CHECK-LABEL: test_mm512_mask_test_epi16_mask // CHECK: and <16 x i32> %{{.*}}, %{{.*}} // CHECK: icmp ne <32 x i16> %{{.*}}, %{{.*}} // CHECK: and <32 x i1> %{{.*}}, %{{.*}} @@ -2137,14 +2209,14 @@ __mmask32 test_mm512_mask_test_epi16_mask(__mmask32 __U, __m512i __A, __m512i __ } __mmask64 test_mm512_testn_epi8_mask(__m512i __A, __m512i __B) { - // CHECK-LABEL: @test_mm512_testn_epi8_mask + // CHECK-LABEL: test_mm512_testn_epi8_mask // CHECK: and <16 x i32> %{{.*}}, %{{.*}} // CHECK: icmp eq <64 x i8> %{{.*}}, %{{.*}} return _mm512_testn_epi8_mask(__A, __B); } __mmask64 test_mm512_mask_testn_epi8_mask(__mmask64 __U, __m512i __A, __m512i __B) { - // CHECK-LABEL: @test_mm512_mask_testn_epi8_mask + // CHECK-LABEL: test_mm512_mask_testn_epi8_mask // CHECK: and <16 x i32> %{{.*}}, %{{.*}} // CHECK: icmp eq <64 x i8> %{{.*}}, %{{.*}} // CHECK: and <64 x i1> %{{.*}}, %{{.*}} @@ -2152,14 +2224,14 @@ __mmask64 test_mm512_mask_testn_epi8_mask(__mmask64 __U, __m512i __A, __m512i __ } __mmask32 test_mm512_testn_epi16_mask(__m512i __A, __m512i __B) { - // CHECK-LABEL: @test_mm512_testn_epi16_mask + // CHECK-LABEL: test_mm512_testn_epi16_mask // CHECK: and <16 x i32> %{{.*}}, %{{.*}} // CHECK: icmp eq <32 x i16> %{{.*}}, %{{.*}} return _mm512_testn_epi16_mask(__A, __B); } __mmask32 test_mm512_mask_testn_epi16_mask(__mmask32 __U, __m512i __A, __m512i __B) { - // CHECK-LABEL: @test_mm512_mask_testn_epi16_mask + // CHECK-LABEL: test_mm512_mask_testn_epi16_mask // CHECK: and <16 x i32> %{{.*}}, %{{.*}} // CHECK: icmp eq <32 x i16> %{{.*}}, %{{.*}} // CHECK: and <32 x i1> %{{.*}}, %{{.*}} @@ -2167,67 +2239,69 @@ __mmask32 test_mm512_mask_testn_epi16_mask(__mmask32 __U, __m512i __A, __m512i _ } __mmask64 test_mm512_movepi8_mask(__m512i __A) { - // CHECK-LABEL: @test_mm512_movepi8_mask + // CHECK-LABEL: test_mm512_movepi8_mask // CHECK: [[CMP:%.*]] = icmp slt <64 x i8> %{{.*}}, zeroinitializer return _mm512_movepi8_mask(__A); } __m512i test_mm512_movm_epi8(__mmask64 __A) { - // CHECK-LABEL: @test_mm512_movm_epi8 + // CHECK-LABEL: test_mm512_movm_epi8 // CHECK: %{{.*}} = bitcast i64 %{{.*}} to <64 x i1> // CHECK: %vpmovm2.i = sext <64 x i1> %{{.*}} to <64 x i8> return _mm512_movm_epi8(__A); } __m512i test_mm512_movm_epi16(__mmask32 __A) { - // CHECK-LABEL: @test_mm512_movm_epi16 + // CHECK-LABEL: test_mm512_movm_epi16 // CHECK: %{{.*}} = bitcast i32 %{{.*}} to <32 x i1> // CHECK: %vpmovm2.i = sext <32 x i1> %{{.*}} to <32 x i16> return _mm512_movm_epi16(__A); } __m512i test_mm512_broadcastb_epi8(__m128i __A) { - // CHECK-LABEL: @test_mm512_broadcastb_epi8 + // CHECK-LABEL: test_mm512_broadcastb_epi8 // CHECK: shufflevector <16 x i8> %{{.*}}, <16 x i8> %{{.*}}, <64 x i32> zeroinitializer return _mm512_broadcastb_epi8(__A); } +TEST_CONSTEXPR(match_v64qi(_mm512_broadcastb_epi8((__m128i)(__v16qi){42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}), 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42)); __m512i test_mm512_mask_broadcastb_epi8(__m512i __O, __mmask64 __M, __m128i __A) { - // CHECK-LABEL: @test_mm512_mask_broadcastb_epi8 + // CHECK-LABEL: test_mm512_mask_broadcastb_epi8 // CHECK: shufflevector <16 x i8> %{{.*}}, <16 x i8> %{{.*}}, <64 x i32> zeroinitializer // CHECK: select <64 x i1> %{{.*}}, <64 x i8> %{{.*}}, <64 x i8> %{{.*}} return _mm512_mask_broadcastb_epi8(__O, __M, __A); } __m512i test_mm512_maskz_broadcastb_epi8(__mmask64 __M, __m128i __A) { - // CHECK-LABEL: @test_mm512_maskz_broadcastb_epi8 + // CHECK-LABEL: test_mm512_maskz_broadcastb_epi8 // CHECK: shufflevector <16 x i8> %{{.*}}, <16 x i8> %{{.*}}, <64 x i32> zeroinitializer // CHECK: select <64 x i1> %{{.*}}, <64 x i8> %{{.*}}, <64 x i8> %{{.*}} return _mm512_maskz_broadcastb_epi8(__M, __A); } __m512i test_mm512_broadcastw_epi16(__m128i __A) { - // CHECK-LABEL: @test_mm512_broadcastw_epi16 + // CHECK-LABEL: test_mm512_broadcastw_epi16 // CHECK: shufflevector <8 x i16> %{{.*}}, <8 x i16> %{{.*}}, <32 x i32> zeroinitializer return _mm512_broadcastw_epi16(__A); } +TEST_CONSTEXPR(match_v32hi(_mm512_broadcastw_epi16((__m128i)(__v8hi){42, 3, 10, 8, 0, 256, 256, 128}), 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42)); __m512i test_mm512_mask_broadcastw_epi16(__m512i __O, __mmask32 __M, __m128i __A) { - // CHECK-LABEL: @test_mm512_mask_broadcastw_epi16 + // CHECK-LABEL: test_mm512_mask_broadcastw_epi16 // CHECK: shufflevector <8 x i16> %{{.*}}, <8 x i16> %{{.*}}, <32 x i32> zeroinitializer // CHECK: select <32 x i1> %{{.*}}, <32 x i16> %{{.*}}, <32 x i16> %{{.*}} return _mm512_mask_broadcastw_epi16(__O, __M, __A); } __m512i test_mm512_maskz_broadcastw_epi16(__mmask32 __M, __m128i __A) { - // CHECK-LABEL: @test_mm512_maskz_broadcastw_epi16 + // CHECK-LABEL: test_mm512_maskz_broadcastw_epi16 // CHECK: shufflevector <8 x i16> %{{.*}}, <8 x i16> %{{.*}}, <32 x i32> zeroinitializer // CHECK: select <32 x i1> %{{.*}}, <32 x i16> %{{.*}}, <32 x i16> %{{.*}} return _mm512_maskz_broadcastw_epi16(__M, __A); } __m512i test_mm512_mask_set1_epi16(__m512i __O, __mmask32 __M, short __A) { - // CHECK-LABEL: @test_mm512_mask_set1_epi16 + // CHECK-LABEL: test_mm512_mask_set1_epi16 // CHECK: insertelement <32 x i16> poison, i16 %{{.*}}, i32 0 // CHECK: insertelement <32 x i16> %{{.*}}, i16 %{{.*}}, i32 1 // CHECK: insertelement <32 x i16> %{{.*}}, i16 %{{.*}}, i32 2 @@ -2265,7 +2339,7 @@ __m512i test_mm512_mask_set1_epi16(__m512i __O, __mmask32 __M, short __A) { } __m512i test_mm512_maskz_set1_epi16(__mmask32 __M, short __A) { - // CHECK-LABEL: @test_mm512_maskz_set1_epi16 + // CHECK-LABEL: test_mm512_maskz_set1_epi16 // CHECK: insertelement <32 x i16> poison, i16 %{{.*}}, i32 0 // CHECK: insertelement <32 x i16> %{{.*}}, i16 %{{.*}}, i32 1 // CHECK: insertelement <32 x i16> %{{.*}}, i16 %{{.*}}, i32 2 @@ -2302,39 +2376,39 @@ __m512i test_mm512_maskz_set1_epi16(__mmask32 __M, short __A) { return _mm512_maskz_set1_epi16(__M, __A); } __m512i test_mm512_permutexvar_epi16(__m512i __A, __m512i __B) { - // CHECK-LABEL: @test_mm512_permutexvar_epi16 + // CHECK-LABEL: test_mm512_permutexvar_epi16 // CHECK: @llvm.x86.avx512.permvar.hi.512 return _mm512_permutexvar_epi16(__A, __B); } __m512i test_mm512_maskz_permutexvar_epi16(__mmask32 __M, __m512i __A, __m512i __B) { - // CHECK-LABEL: @test_mm512_maskz_permutexvar_epi16 + // CHECK-LABEL: test_mm512_maskz_permutexvar_epi16 // CHECK: @llvm.x86.avx512.permvar.hi.512 // CHECK: select <32 x i1> %{{.*}}, <32 x i16> %{{.*}}, <32 x i16> %{{.*}} return _mm512_maskz_permutexvar_epi16(__M, __A, __B); } __m512i test_mm512_mask_permutexvar_epi16(__m512i __W, __mmask32 __M, __m512i __A, __m512i __B) { - // CHECK-LABEL: @test_mm512_mask_permutexvar_epi16 + // CHECK-LABEL: test_mm512_mask_permutexvar_epi16 // CHECK: @llvm.x86.avx512.permvar.hi.512 // CHECK: select <32 x i1> %{{.*}}, <32 x i16> %{{.*}}, <32 x i16> %{{.*}} return _mm512_mask_permutexvar_epi16(__W, __M, __A, __B); } __m512i test_mm512_alignr_epi8(__m512i __A,__m512i __B){ - // CHECK-LABEL: @test_mm512_alignr_epi8 + // CHECK-LABEL: test_mm512_alignr_epi8 // CHECK: shufflevector <64 x i8> %{{.*}}, <64 x i8> %{{.*}}, <64 x i32> <i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15, i32 64, i32 65, i32 18, i32 19, i32 20, i32 21, i32 22, i32 23, i32 24, i32 25, i32 26, i32 27, i32 28, i32 29, i32 30, i32 31, i32 80, i32 81, i32 34, i32 35, i32 36, i32 37, i32 38, i32 39, i32 40, i32 41, i32 42, i32 43, i32 44, i32 45, i32 46, i32 47, i32 96, i32 97, i32 50, i32 51, i32 52, i32 53, i32 54, i32 55, i32 56, i32 57, i32 58, i32 59, i32 60, i32 61, i32 62, i32 63, i32 112, i32 113> return _mm512_alignr_epi8(__A, __B, 2); } __m512i test_mm512_mask_alignr_epi8(__m512i __W, __mmask64 __U, __m512i __A,__m512i __B){ - // CHECK-LABEL: @test_mm512_mask_alignr_epi8 + // CHECK-LABEL: test_mm512_mask_alignr_epi8 // CHECK: shufflevector <64 x i8> %{{.*}}, <64 x i8> %{{.*}}, <64 x i32> <i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15, i32 64, i32 65, i32 18, i32 19, i32 20, i32 21, i32 22, i32 23, i32 24, i32 25, i32 26, i32 27, i32 28, i32 29, i32 30, i32 31, i32 80, i32 81, i32 34, i32 35, i32 36, i32 37, i32 38, i32 39, i32 40, i32 41, i32 42, i32 43, i32 44, i32 45, i32 46, i32 47, i32 96, i32 97, i32 50, i32 51, i32 52, i32 53, i32 54, i32 55, i32 56, i32 57, i32 58, i32 59, i32 60, i32 61, i32 62, i32 63, i32 112, i32 113> // CHECK: select <64 x i1> %{{.*}}, <64 x i8> %{{.*}}, <64 x i8> %{{.*}} return _mm512_mask_alignr_epi8(__W, __U, __A, __B, 2); } __m512i test_mm512_maskz_alignr_epi8(__mmask64 __U, __m512i __A,__m512i __B){ - // CHECK-LABEL: @test_mm512_maskz_alignr_epi8 + // CHECK-LABEL: test_mm512_maskz_alignr_epi8 // CHECK: shufflevector <64 x i8> %{{.*}}, <64 x i8> %{{.*}}, <64 x i32> <i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15, i32 64, i32 65, i32 18, i32 19, i32 20, i32 21, i32 22, i32 23, i32 24, i32 25, i32 26, i32 27, i32 28, i32 29, i32 30, i32 31, i32 80, i32 81, i32 34, i32 35, i32 36, i32 37, i32 38, i32 39, i32 40, i32 41, i32 42, i32 43, i32 44, i32 45, i32 46, i32 47, i32 96, i32 97, i32 50, i32 51, i32 52, i32 53, i32 54, i32 55, i32 56, i32 57, i32 58, i32 59, i32 60, i32 61, i32 62, i32 63, i32 112, i32 113> // CHECK: select <64 x i1> %{{.*}}, <64 x i8> %{{.*}}, <64 x i8> %{{.*}} return _mm512_maskz_alignr_epi8(__U, __A, __B, 2); @@ -2343,54 +2417,54 @@ __m512i test_mm512_maskz_alignr_epi8(__mmask64 __U, __m512i __A,__m512i __B){ __m512i test_mm512_mm_dbsad_epu8(__m512i __A, __m512i __B) { - // CHECK-LABEL: @test_mm512_mm_dbsad_epu8 + // CHECK-LABEL: test_mm512_mm_dbsad_epu8 // CHECK: @llvm.x86.avx512.dbpsadbw.512 return _mm512_dbsad_epu8(__A, __B, 170); } __m512i test_mm512_mm_mask_dbsad_epu8(__m512i __W, __mmask32 __U, __m512i __A, __m512i __B) { - // CHECK-LABEL: @test_mm512_mm_mask_dbsad_epu8 + // CHECK-LABEL: test_mm512_mm_mask_dbsad_epu8 // CHECK: @llvm.x86.avx512.dbpsadbw.512 //CHECK: select <32 x i1> %{{.*}}, <32 x i16> %{{.*}}, <32 x i16> %{{.*}} return _mm512_mask_dbsad_epu8(__W, __U, __A, __B, 170); } __m512i test_mm512_mm_maskz_dbsad_epu8(__mmask32 __U, __m512i __A, __m512i __B) { - // CHECK-LABEL: @test_mm512_mm_maskz_dbsad_epu8 + // CHECK-LABEL: test_mm512_mm_maskz_dbsad_epu8 // CHECK: @llvm.x86.avx512.dbpsadbw.512 //CHECK: select <32 x i1> %{{.*}}, <32 x i16> %{{.*}}, <32 x i16> %{{.*}} return _mm512_maskz_dbsad_epu8(__U, __A, __B, 170); } __m512i test_mm512_sad_epu8(__m512i __A, __m512i __B) { - // CHECK-LABEL: @test_mm512_sad_epu8 + // CHECK-LABEL: test_mm512_sad_epu8 // CHECK: @llvm.x86.avx512.psad.bw.512 return _mm512_sad_epu8(__A, __B); } __mmask32 test_mm512_movepi16_mask(__m512i __A) { - // CHECK-LABEL: @test_mm512_movepi16_mask + // CHECK-LABEL: test_mm512_movepi16_mask // CHECK: [[CMP:%.*]] = icmp slt <32 x i16> %{{.*}}, zeroinitializer return _mm512_movepi16_mask(__A); } void test_mm512_mask_cvtepi16_storeu_epi8 (void * __P, __mmask32 __M, __m512i __A) { - // CHECK-LABEL: @test_mm512_mask_cvtepi16_storeu_epi8 + // CHECK-LABEL: test_mm512_mask_cvtepi16_storeu_epi8 // CHECK: @llvm.x86.avx512.mask.pmov.wb.mem.512 _mm512_mask_cvtepi16_storeu_epi8 ( __P, __M, __A); } void test_mm512_mask_cvtsepi16_storeu_epi8 (void * __P, __mmask32 __M, __m512i __A) { - // CHECK-LABEL: @test_mm512_mask_cvtsepi16_storeu_epi8 + // CHECK-LABEL: test_mm512_mask_cvtsepi16_storeu_epi8 // CHECK: @llvm.x86.avx512.mask.pmovs.wb.mem.512 _mm512_mask_cvtsepi16_storeu_epi8 ( __P, __M, __A); } void test_mm512_mask_cvtusepi16_storeu_epi8 (void * __P, __mmask32 __M, __m512i __A) { - // CHECK-LABEL: @test_mm512_mask_cvtusepi16_storeu_epi8 + // CHECK-LABEL: test_mm512_mask_cvtusepi16_storeu_epi8 // CHECK: @llvm.x86.avx512.mask.pmovus.wb.mem.512 _mm512_mask_cvtusepi16_storeu_epi8 ( __P, __M, __A); } diff --git a/clang/test/CodeGen/X86/avx512cd-builtins.c b/clang/test/CodeGen/X86/avx512cd-builtins.c index 3c1415c..b9d42b7 100644 --- a/clang/test/CodeGen/X86/avx512cd-builtins.c +++ b/clang/test/CodeGen/X86/avx512cd-builtins.c @@ -1,79 +1,118 @@ -// RUN: %clang_cc1 -flax-vector-conversions=none -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +avx512cd -emit-llvm -o - -Wall -Werror | FileCheck %s +// RUN: %clang_cc1 -x c -flax-vector-conversions=none -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +avx512cd -emit-llvm -o - -Wall -Werror | FileCheck %s +// RUN: %clang_cc1 -x c -flax-vector-conversions=none -ffreestanding %s -triple=i386-apple-darwin -target-feature +avx512cd -emit-llvm -o - -Wall -Werror | FileCheck %s +// RUN: %clang_cc1 -x c++ -flax-vector-conversions=none -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +avx512cd -emit-llvm -o - -Wall -Werror | FileCheck %s +// RUN: %clang_cc1 -x c++ -flax-vector-conversions=none -ffreestanding %s -triple=i386-apple-darwin -target-feature +avx512cd -emit-llvm -o - -Wall -Werror | FileCheck %s +// RUN: %clang_cc1 -x c -flax-vector-conversions=none -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +avx512cd -emit-llvm -o - -Wall -Werror -fexperimental-new-constant-interpreter | FileCheck %s +// RUN: %clang_cc1 -x c -flax-vector-conversions=none -ffreestanding %s -triple=i386-apple-darwin -target-feature +avx512cd -emit-llvm -o - -Wall -Werror -fexperimental-new-constant-interpreter | FileCheck %s +// RUN: %clang_cc1 -x c++ -flax-vector-conversions=none -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +avx512cd -emit-llvm -o - -Wall -Werror -fexperimental-new-constant-interpreter | FileCheck %s +// RUN: %clang_cc1 -x c++ -flax-vector-conversions=none -ffreestanding %s -triple=i386-apple-darwin -target-feature +avx512cd -emit-llvm -o - -Wall -Werror -fexperimental-new-constant-interpreter | FileCheck %s #include <immintrin.h> +#include "builtin_test_helpers.h" __m512i test_mm512_conflict_epi64(__m512i __A) { - // CHECK-LABEL: @test_mm512_conflict_epi64 - // CHECK: @llvm.x86.avx512.conflict.q.512 + // CHECK-LABEL: test_mm512_conflict_epi64 + // CHECK: call {{.*}}<8 x i64> @llvm.x86.avx512.conflict.q.512(<8 x i64> %{{.*}}) return _mm512_conflict_epi64(__A); } __m512i test_mm512_mask_conflict_epi64(__m512i __W, __mmask8 __U, __m512i __A) { - // CHECK-LABEL: @test_mm512_mask_conflict_epi64 - // CHECK: @llvm.x86.avx512.conflict.q.512 + // CHECK-LABEL: test_mm512_mask_conflict_epi64 + // CHECK: call {{.*}}<8 x i64> @llvm.x86.avx512.conflict.q.512(<8 x i64> %{{.*}}) // CHECK: select <8 x i1> %{{.*}}, <8 x i64> %{{.*}}, <8 x i64> %{{.*}} return _mm512_mask_conflict_epi64(__W,__U,__A); } __m512i test_mm512_maskz_conflict_epi64(__mmask8 __U, __m512i __A) { - // CHECK-LABEL: @test_mm512_maskz_conflict_epi64 - // CHECK: @llvm.x86.avx512.conflict.q.512 + // CHECK-LABEL: test_mm512_maskz_conflict_epi64 + // CHECK: call {{.*}}<8 x i64> @llvm.x86.avx512.conflict.q.512(<8 x i64> %{{.*}}) // CHECK: select <8 x i1> %{{.*}}, <8 x i64> %{{.*}}, <8 x i64> %{{.*}} return _mm512_maskz_conflict_epi64(__U,__A); } __m512i test_mm512_conflict_epi32(__m512i __A) { - // CHECK-LABEL: @test_mm512_conflict_epi32 - // CHECK: @llvm.x86.avx512.conflict.d.512 + // CHECK-LABEL: test_mm512_conflict_epi32 + // CHECK: call <16 x i32> @llvm.x86.avx512.conflict.d.512(<16 x i32> %{{.*}}) return _mm512_conflict_epi32(__A); } __m512i test_mm512_mask_conflict_epi32(__m512i __W, __mmask16 __U, __m512i __A) { - // CHECK-LABEL: @test_mm512_mask_conflict_epi32 - // CHECK: @llvm.x86.avx512.conflict.d.512 + // CHECK-LABEL: test_mm512_mask_conflict_epi32 + // CHECK: call <16 x i32> @llvm.x86.avx512.conflict.d.512(<16 x i32> %{{.*}}) // CHECK: select <16 x i1> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}} return _mm512_mask_conflict_epi32(__W,__U,__A); } __m512i test_mm512_maskz_conflict_epi32(__mmask16 __U, __m512i __A) { - // CHECK-LABEL: @test_mm512_maskz_conflict_epi32 - // CHECK: @llvm.x86.avx512.conflict.d.512 + // CHECK-LABEL: test_mm512_maskz_conflict_epi32 + // CHECK: call <16 x i32> @llvm.x86.avx512.conflict.d.512(<16 x i32> %{{.*}}) // CHECK: select <16 x i1> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}} return _mm512_maskz_conflict_epi32(__U,__A); } __m512i test_mm512_lzcnt_epi32(__m512i __A) { - // CHECK-LABEL: @test_mm512_lzcnt_epi32 - // CHECK: call <16 x i32> @llvm.ctlz.v16i32(<16 x i32> %{{.*}}, i1 false) + // CHECK-LABEL: test_mm512_lzcnt_epi32 + // CHECK: call <16 x i32> @llvm.ctlz.v16i32(<16 x i32> %{{.*}}, i1 true) + // CHECK: [[ISZERO:%.+]] = icmp eq <16 x i32> %{{.*}}, zeroinitializer + // CHECK: select <16 x i1> [[ISZERO]], <16 x i32> %{{.*}}, <16 x i32> %{{.*}} return _mm512_lzcnt_epi32(__A); } + +TEST_CONSTEXPR(match_v16si(_mm512_lzcnt_epi32((__m512i)(__v16si){1, 2, 4, 8, 16, 32, 64, 128, 3, 5, 6, 7, 9, 10, 11, 12}), 31, 30, 29, 28, 27, 26, 25, 24, 30, 29, 29, 29, 28, 28, 28, 28)); +TEST_CONSTEXPR(match_v16si(_mm512_lzcnt_epi32((__m512i)(__v16si){0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}), 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32)); + __m512i test_mm512_mask_lzcnt_epi32(__m512i __W, __mmask16 __U, __m512i __A) { - // CHECK-LABEL: @test_mm512_mask_lzcnt_epi32 - // CHECK: call <16 x i32> @llvm.ctlz.v16i32(<16 x i32> %{{.*}}, i1 false) + // CHECK-LABEL: test_mm512_mask_lzcnt_epi32 + // CHECK: call <16 x i32> @llvm.ctlz.v16i32(<16 x i32> %{{.*}}, i1 true) + // CHECK: [[ISZERO:%.+]] = icmp eq <16 x i32> %{{.*}}, zeroinitializer + // CHECK: select <16 x i1> [[ISZERO]], <16 x i32> %{{.*}}, <16 x i32> %{{.*}} // CHECK: select <16 x i1> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}} return _mm512_mask_lzcnt_epi32(__W,__U,__A); } + +TEST_CONSTEXPR(match_v16si(_mm512_mask_lzcnt_epi32(_mm512_set1_epi32(32), /*1010 1100 1010 1101=*/0xacad, (__m512i)(__v16si){1, 2, 4, 8, 16, 32, 64, 128, 3, 5, 6, 7, 9, 10, 11, 12}), 31, 32, 29, 28, 32, 26, 32, 24, 32, 32, 29, 29, 32, 28, 32, 28)); + __m512i test_mm512_maskz_lzcnt_epi32(__mmask16 __U, __m512i __A) { - // CHECK-LABEL: @test_mm512_maskz_lzcnt_epi32 - // CHECK: call <16 x i32> @llvm.ctlz.v16i32(<16 x i32> %{{.*}}, i1 false) + // CHECK-LABEL: test_mm512_maskz_lzcnt_epi32 + // CHECK: call <16 x i32> @llvm.ctlz.v16i32(<16 x i32> %{{.*}}, i1 true) + // CHECK: [[ISZERO:%.+]] = icmp eq <16 x i32> %{{.*}}, zeroinitializer + // CHECK: select <16 x i1> [[ISZERO]], <16 x i32> %{{.*}}, <16 x i32> %{{.*}} // CHECK: select <16 x i1> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}} return _mm512_maskz_lzcnt_epi32(__U,__A); } + +TEST_CONSTEXPR(match_v16si(_mm512_maskz_lzcnt_epi32(/*1010 1100 1010 1101=*/0xacad, (__m512i)(__v16si){1, 2, 4, 8, 16, 32, 64, 128, 3, 5, 6, 7, 9, 10, 11, 12}), 31, 0, 29, 28, 0, 26, 0, 24, 0, 0, 29, 29, 0, 28, 0, 28)); + __m512i test_mm512_lzcnt_epi64(__m512i __A) { - // CHECK-LABEL: @test_mm512_lzcnt_epi64 - // CHECK: call <8 x i64> @llvm.ctlz.v8i64(<8 x i64> %{{.*}}, i1 false) + // CHECK-LABEL: test_mm512_lzcnt_epi64 + // CHECK: call {{.*}}<8 x i64> @llvm.ctlz.v8i64(<8 x i64> %{{.*}}, i1 true) + // CHECK: [[ISZERO:%.+]] = icmp eq <8 x i64> %{{.*}}, zeroinitializer + // CHECK: select <8 x i1> [[ISZERO]], <8 x i64> %{{.*}}, <8 x i64> %{{.*}} return _mm512_lzcnt_epi64(__A); } + +TEST_CONSTEXPR(match_v8di(_mm512_lzcnt_epi64((__m512i)(__v8di){1, 2, 4, 8, 16, 32, 64, 128}), 63, 62, 61, 60, 59, 58, 57, 56)); +TEST_CONSTEXPR(match_v8di(_mm512_lzcnt_epi64((__m512i)(__v8di){0, 0, 0, 0, 0, 0, 0, 0}), 64, 64, 64, 64, 64, 64, 64, 64)); + __m512i test_mm512_mask_lzcnt_epi64(__m512i __W, __mmask8 __U, __m512i __A) { - // CHECK-LABEL: @test_mm512_mask_lzcnt_epi64 - // CHECK: call <8 x i64> @llvm.ctlz.v8i64(<8 x i64> %{{.*}}, i1 false) + // CHECK-LABEL: test_mm512_mask_lzcnt_epi64 + // CHECK: call {{.*}}<8 x i64> @llvm.ctlz.v8i64(<8 x i64> %{{.*}}, i1 true) + // CHECK: [[ISZERO:%.+]] = icmp eq <8 x i64> %{{.*}}, zeroinitializer + // CHECK: select <8 x i1> [[ISZERO]], <8 x i64> %{{.*}}, <8 x i64> %{{.*}} // CHECK: select <8 x i1> %{{.*}}, <8 x i64> %{{.*}}, <8 x i64> %{{.*}} return _mm512_mask_lzcnt_epi64(__W,__U,__A); } + +TEST_CONSTEXPR(match_v8di(_mm512_mask_lzcnt_epi64(_mm512_set1_epi64((long long) 64), /*0101 0111=*/0x57, (__m512i)(__v8di){1, 2, 4, 8, 16, 32, 64, 128}), 63, 62, 61, 64, 59, 64, 57, 64)); + __m512i test_mm512_maskz_lzcnt_epi64(__mmask8 __U, __m512i __A) { - // CHECK-LABEL: @test_mm512_maskz_lzcnt_epi64 - // CHECK: call <8 x i64> @llvm.ctlz.v8i64(<8 x i64> %{{.*}}, i1 false) + // CHECK-LABEL: test_mm512_maskz_lzcnt_epi64 + // CHECK: call {{.*}}<8 x i64> @llvm.ctlz.v8i64(<8 x i64> %{{.*}}, i1 true) + // CHECK: [[ISZERO:%.+]] = icmp eq <8 x i64> %{{.*}}, zeroinitializer + // CHECK: select <8 x i1> [[ISZERO]], <8 x i64> %{{.*}}, <8 x i64> %{{.*}} // CHECK: select <8 x i1> %{{.*}}, <8 x i64> %{{.*}}, <8 x i64> %{{.*}} return _mm512_maskz_lzcnt_epi64(__U,__A); } +TEST_CONSTEXPR(match_v8di(_mm512_maskz_lzcnt_epi64(/*0101 0111=*/0x57, (__m512i)(__v8di){1, 2, 4, 8, 16, 32, 64, 128}), 63, 62, 61, 0, 59, 0, 57, 0)); + __m512i test_mm512_broadcastmb_epi64(__m512i a, __m512i b) { - // CHECK-LABEL: @test_mm512_broadcastmb_epi64 + // CHECK-LABEL: test_mm512_broadcastmb_epi64 // CHECK: icmp eq <8 x i64> %{{.*}}, %{{.*}} // CHECK: zext i8 %{{.*}} to i64 // CHECK: insertelement <8 x i64> poison, i64 %{{.*}}, i32 0 @@ -88,7 +127,7 @@ __m512i test_mm512_broadcastmb_epi64(__m512i a, __m512i b) { } __m512i test_mm512_broadcastmw_epi32(__m512i a, __m512i b) { - // CHECK-LABEL: @test_mm512_broadcastmw_epi32 + // CHECK-LABEL: test_mm512_broadcastmw_epi32 // CHECK: icmp eq <16 x i32> %{{.*}}, %{{.*}} // CHECK: zext i16 %{{.*}} to i32 // CHECK: insertelement <16 x i32> poison, i32 %{{.*}} diff --git a/clang/test/CodeGen/X86/avx512dq-builtins.c b/clang/test/CodeGen/X86/avx512dq-builtins.c index 1ebd369..88f160a 100644 --- a/clang/test/CodeGen/X86/avx512dq-builtins.c +++ b/clang/test/CodeGen/X86/avx512dq-builtins.c @@ -1,17 +1,26 @@ -// RUN: %clang_cc1 -flax-vector-conversions=none -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +avx512dq -emit-llvm -o - -Wall -Werror | FileCheck %s +// RUN: %clang_cc1 -x c -flax-vector-conversions=none -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +avx512dq -emit-llvm -o - -Wall -Werror | FileCheck %s +// RUN: %clang_cc1 -x c -flax-vector-conversions=none -ffreestanding %s -triple=i386-apple-darwin -target-feature +avx512dq -emit-llvm -o - -Wall -Werror | FileCheck %s +// RUN: %clang_cc1 -x c++ -flax-vector-conversions=none -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +avx512dq -emit-llvm -o - -Wall -Werror | FileCheck %s +// RUN: %clang_cc1 -x c++ -flax-vector-conversions=none -ffreestanding %s -triple=i386-apple-darwin -target-feature +avx512dq -emit-llvm -o - -Wall -Werror | FileCheck %s + +// RUN: %clang_cc1 -x c -flax-vector-conversions=none -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +avx512dq -emit-llvm -o - -Wall -Werror -fexperimental-new-constant-interpreter | FileCheck %s +// RUN: %clang_cc1 -x c -flax-vector-conversions=none -ffreestanding %s -triple=i386-apple-darwin -target-feature +avx512dq -emit-llvm -o - -Wall -Werror -fexperimental-new-constant-interpreter | FileCheck %s +// RUN: %clang_cc1 -x c++ -flax-vector-conversions=none -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +avx512dq -emit-llvm -o - -Wall -Werror -fexperimental-new-constant-interpreter | FileCheck %s +// RUN: %clang_cc1 -x c++ -flax-vector-conversions=none -ffreestanding %s -triple=i386-apple-darwin -target-feature +avx512dq -emit-llvm -o - -Wall -Werror -fexperimental-new-constant-interpreter | FileCheck %s #include <immintrin.h> +#include "builtin_test_helpers.h" __mmask8 test_knot_mask8(__mmask8 a) { - // CHECK-LABEL: @test_knot_mask8 + // CHECK-LABEL: test_knot_mask8 // CHECK: [[IN:%.*]] = bitcast i8 %{{.*}} to <8 x i1> // CHECK: [[NOT:%.*]] = xor <8 x i1> [[IN]], splat (i1 true) return _knot_mask8(a); } __mmask8 test_kand_mask8(__m512i __A, __m512i __B, __m512i __C, __m512i __D, __m512i __E, __m512i __F) { - // CHECK-LABEL: @test_kand_mask8 + // CHECK-LABEL: test_kand_mask8 // CHECK: [[LHS:%.*]] = bitcast i8 %{{.*}} to <8 x i1> // CHECK: [[RHS:%.*]] = bitcast i8 %{{.*}} to <8 x i1> // CHECK: [[RES:%.*]] = and <8 x i1> [[LHS]], [[RHS]] @@ -21,7 +30,7 @@ __mmask8 test_kand_mask8(__m512i __A, __m512i __B, __m512i __C, __m512i __D, __m } __mmask8 test_kandn_mask8(__m512i __A, __m512i __B, __m512i __C, __m512i __D, __m512i __E, __m512i __F) { - // CHECK-LABEL: @test_kandn_mask8 + // CHECK-LABEL: test_kandn_mask8 // CHECK: [[LHS:%.*]] = bitcast i8 %{{.*}} to <8 x i1> // CHECK: [[RHS:%.*]] = bitcast i8 %{{.*}} to <8 x i1> // CHECK: [[NOT:%.*]] = xor <8 x i1> [[LHS]], splat (i1 true) @@ -32,7 +41,7 @@ __mmask8 test_kandn_mask8(__m512i __A, __m512i __B, __m512i __C, __m512i __D, __ } __mmask8 test_kor_mask8(__m512i __A, __m512i __B, __m512i __C, __m512i __D, __m512i __E, __m512i __F) { - // CHECK-LABEL: @test_kor_mask8 + // CHECK-LABEL: test_kor_mask8 // CHECK: [[LHS:%.*]] = bitcast i8 %{{.*}} to <8 x i1> // CHECK: [[RHS:%.*]] = bitcast i8 %{{.*}} to <8 x i1> // CHECK: [[RES:%.*]] = or <8 x i1> [[LHS]], [[RHS]] @@ -42,7 +51,7 @@ __mmask8 test_kor_mask8(__m512i __A, __m512i __B, __m512i __C, __m512i __D, __m5 } __mmask8 test_kxnor_mask8(__m512i __A, __m512i __B, __m512i __C, __m512i __D, __m512i __E, __m512i __F) { - // CHECK-LABEL: @test_kxnor_mask8 + // CHECK-LABEL: test_kxnor_mask8 // CHECK: [[LHS:%.*]] = bitcast i8 %{{.*}} to <8 x i1> // CHECK: [[RHS:%.*]] = bitcast i8 %{{.*}} to <8 x i1> // CHECK: [[NOT:%.*]] = xor <8 x i1> [[LHS]], splat (i1 true) @@ -53,7 +62,7 @@ __mmask8 test_kxnor_mask8(__m512i __A, __m512i __B, __m512i __C, __m512i __D, __ } __mmask8 test_kxor_mask8(__m512i __A, __m512i __B, __m512i __C, __m512i __D, __m512i __E, __m512i __F) { - // CHECK-LABEL: @test_kxor_mask8 + // CHECK-LABEL: test_kxor_mask8 // CHECK: [[LHS:%.*]] = bitcast i8 %{{.*}} to <8 x i1> // CHECK: [[RHS:%.*]] = bitcast i8 %{{.*}} to <8 x i1> // CHECK: [[RES:%.*]] = xor <8 x i1> [[LHS]], [[RHS]] @@ -63,7 +72,7 @@ __mmask8 test_kxor_mask8(__m512i __A, __m512i __B, __m512i __C, __m512i __D, __m } unsigned char test_kortestz_mask8_u8(__m512i __A, __m512i __B, __m512i __C, __m512i __D) { - // CHECK-LABEL: @test_kortestz_mask8_u8 + // CHECK-LABEL: test_kortestz_mask8_u8 // CHECK: [[LHS:%.*]] = bitcast i8 %{{.*}} to <8 x i1> // CHECK: [[RHS:%.*]] = bitcast i8 %{{.*}} to <8 x i1> // CHECK: [[OR:%.*]] = or <8 x i1> [[LHS]], [[RHS]] @@ -76,7 +85,7 @@ unsigned char test_kortestz_mask8_u8(__m512i __A, __m512i __B, __m512i __C, __m5 } unsigned char test_kortestc_mask8_u8(__m512i __A, __m512i __B, __m512i __C, __m512i __D) { - // CHECK-LABEL: @test_kortestc_mask8_u8 + // CHECK-LABEL: test_kortestc_mask8_u8 // CHECK: [[LHS:%.*]] = bitcast i8 %{{.*}} to <8 x i1> // CHECK: [[RHS:%.*]] = bitcast i8 %{{.*}} to <8 x i1> // CHECK: [[OR:%.*]] = or <8 x i1> [[LHS]], [[RHS]] @@ -89,7 +98,7 @@ unsigned char test_kortestc_mask8_u8(__m512i __A, __m512i __B, __m512i __C, __m5 } unsigned char test_kortest_mask8_u8(__m512i __A, __m512i __B, __m512i __C, __m512i __D, unsigned char *CF) { - // CHECK-LABEL: @test_kortest_mask8_u8 + // CHECK-LABEL: test_kortest_mask8_u8 // CHECK: [[LHS:%.*]] = bitcast i8 %{{.*}} to <8 x i1> // CHECK: [[RHS:%.*]] = bitcast i8 %{{.*}} to <8 x i1> // CHECK: [[OR:%.*]] = or <8 x i1> [[LHS]], [[RHS]] @@ -109,7 +118,7 @@ unsigned char test_kortest_mask8_u8(__m512i __A, __m512i __B, __m512i __C, __m51 } unsigned char test_ktestz_mask8_u8(__m512i __A, __m512i __B, __m512i __C, __m512i __D) { - // CHECK-LABEL: @test_ktestz_mask8_u8 + // CHECK-LABEL: test_ktestz_mask8_u8 // CHECK: [[LHS:%.*]] = bitcast i8 %{{.*}} to <8 x i1> // CHECK: [[RHS:%.*]] = bitcast i8 %{{.*}} to <8 x i1> // CHECK: [[RES:%.*]] = call i32 @llvm.x86.avx512.ktestz.b(<8 x i1> [[LHS]], <8 x i1> [[RHS]]) @@ -119,7 +128,7 @@ unsigned char test_ktestz_mask8_u8(__m512i __A, __m512i __B, __m512i __C, __m512 } unsigned char test_ktestc_mask8_u8(__m512i __A, __m512i __B, __m512i __C, __m512i __D) { - // CHECK-LABEL: @test_ktestc_mask8_u8 + // CHECK-LABEL: test_ktestc_mask8_u8 // CHECK: [[LHS:%.*]] = bitcast i8 %{{.*}} to <8 x i1> // CHECK: [[RHS:%.*]] = bitcast i8 %{{.*}} to <8 x i1> // CHECK: [[RES:%.*]] = call i32 @llvm.x86.avx512.ktestc.b(<8 x i1> [[LHS]], <8 x i1> [[RHS]]) @@ -129,7 +138,7 @@ unsigned char test_ktestc_mask8_u8(__m512i __A, __m512i __B, __m512i __C, __m512 } unsigned char test_ktest_mask8_u8(__m512i __A, __m512i __B, __m512i __C, __m512i __D, unsigned char *CF) { - // CHECK-LABEL: @test_ktest_mask8_u8 + // CHECK-LABEL: test_ktest_mask8_u8 // CHECK: [[LHS:%.*]] = bitcast i8 %{{.*}} to <8 x i1> // CHECK: [[RHS:%.*]] = bitcast i8 %{{.*}} to <8 x i1> // CHECK: [[RES:%.*]] = call i32 @llvm.x86.avx512.ktestc.b(<8 x i1> [[LHS]], <8 x i1> [[RHS]]) @@ -143,7 +152,7 @@ unsigned char test_ktest_mask8_u8(__m512i __A, __m512i __B, __m512i __C, __m512i } unsigned char test_ktestz_mask16_u8(__m512i __A, __m512i __B, __m512i __C, __m512i __D) { - // CHECK-LABEL: @test_ktestz_mask16_u8 + // CHECK-LABEL: test_ktestz_mask16_u8 // CHECK: [[LHS:%.*]] = bitcast i16 %{{.*}} to <16 x i1> // CHECK: [[RHS:%.*]] = bitcast i16 %{{.*}} to <16 x i1> // CHECK: [[RES:%.*]] = call i32 @llvm.x86.avx512.ktestz.w(<16 x i1> [[LHS]], <16 x i1> [[RHS]]) @@ -153,7 +162,7 @@ unsigned char test_ktestz_mask16_u8(__m512i __A, __m512i __B, __m512i __C, __m51 } unsigned char test_ktestc_mask16_u8(__m512i __A, __m512i __B, __m512i __C, __m512i __D) { - // CHECK-LABEL: @test_ktestc_mask16_u8 + // CHECK-LABEL: test_ktestc_mask16_u8 // CHECK: [[LHS:%.*]] = bitcast i16 %{{.*}} to <16 x i1> // CHECK: [[RHS:%.*]] = bitcast i16 %{{.*}} to <16 x i1> // CHECK: [[RES:%.*]] = call i32 @llvm.x86.avx512.ktestc.w(<16 x i1> [[LHS]], <16 x i1> [[RHS]]) @@ -163,7 +172,7 @@ unsigned char test_ktestc_mask16_u8(__m512i __A, __m512i __B, __m512i __C, __m51 } unsigned char test_ktest_mask16_u8(__m512i __A, __m512i __B, __m512i __C, __m512i __D, unsigned char *CF) { - // CHECK-LABEL: @test_ktest_mask16_u8 + // CHECK-LABEL: test_ktest_mask16_u8 // CHECK: [[LHS:%.*]] = bitcast i16 %{{.*}} to <16 x i1> // CHECK: [[RHS:%.*]] = bitcast i16 %{{.*}} to <16 x i1> // CHECK: [[RES:%.*]] = call i32 @llvm.x86.avx512.ktestc.w(<16 x i1> [[LHS]], <16 x i1> [[RHS]]) @@ -177,7 +186,7 @@ unsigned char test_ktest_mask16_u8(__m512i __A, __m512i __B, __m512i __C, __m512 } __mmask8 test_kadd_mask8(__m512i __A, __m512i __B, __m512i __C, __m512i __D, __m512i __E, __m512i __F) { - // CHECK-LABEL: @test_kadd_mask8 + // CHECK-LABEL: test_kadd_mask8 // CHECK: [[LHS:%.*]] = bitcast i8 %{{.*}} to <8 x i1> // CHECK: [[RHS:%.*]] = bitcast i8 %{{.*}} to <8 x i1> // CHECK: [[RES:%.*]] = call <8 x i1> @llvm.x86.avx512.kadd.b(<8 x i1> [[LHS]], <8 x i1> [[RHS]]) @@ -187,7 +196,7 @@ __mmask8 test_kadd_mask8(__m512i __A, __m512i __B, __m512i __C, __m512i __D, __m } __mmask16 test_kadd_mask16(__m512i __A, __m512i __B, __m512i __C, __m512i __D, __m512i __E, __m512i __F) { - // CHECK-LABEL: @test_kadd_mask16 + // CHECK-LABEL: test_kadd_mask16 // CHECK: [[LHS:%.*]] = bitcast i16 %{{.*}} to <16 x i1> // CHECK: [[RHS:%.*]] = bitcast i16 %{{.*}} to <16 x i1> // CHECK: [[RES:%.*]] = call <16 x i1> @llvm.x86.avx512.kadd.w(<16 x i1> [[LHS]], <16 x i1> [[RHS]]) @@ -197,79 +206,83 @@ __mmask16 test_kadd_mask16(__m512i __A, __m512i __B, __m512i __C, __m512i __D, _ } __mmask8 test_kshiftli_mask8(__m512i A, __m512i B, __m512i C, __m512i D) { - // CHECK-LABEL: @test_kshiftli_mask8 + // CHECK-LABEL: test_kshiftli_mask8 // CHECK: [[VAL:%.*]] = bitcast i8 %{{.*}} to <8 x i1> // CHECK: [[RES:%.*]] = shufflevector <8 x i1> zeroinitializer, <8 x i1> [[VAL]], <8 x i32> <i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13> return _mm512_mask_cmpneq_epu64_mask(_kshiftli_mask8(_mm512_cmpneq_epu64_mask(A, B), 2), C, D); } __mmask8 test_kshiftri_mask8(__m512i A, __m512i B, __m512i C, __m512i D) { - // CHECK-LABEL: @test_kshiftri_mask8 + // CHECK-LABEL: test_kshiftri_mask8 // CHECK: [[VAL:%.*]] = bitcast i8 %{{.*}} to <8 x i1> // CHECK: [[RES:%.*]] = shufflevector <8 x i1> [[VAL]], <8 x i1> zeroinitializer, <8 x i32> <i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9> return _mm512_mask_cmpneq_epu64_mask(_kshiftri_mask8(_mm512_cmpneq_epu64_mask(A, B), 2), C, D); } unsigned int test_cvtmask8_u32(__m512i A, __m512i B) { - // CHECK-LABEL: @test_cvtmask8_u32 + // CHECK-LABEL: test_cvtmask8_u32 // CHECK: zext i8 %{{.*}} to i32 return _cvtmask8_u32(_mm512_cmpneq_epu64_mask(A, B)); } __mmask8 test_cvtu32_mask8(__m512i A, __m512i B, unsigned int C) { - // CHECK-LABEL: @test_cvtu32_mask8 + // CHECK-LABEL: test_cvtu32_mask8 // CHECK: trunc i32 %{{.*}} to i8 return _mm512_mask_cmpneq_epu64_mask(_cvtu32_mask8(C), A, B); } __mmask8 test_load_mask8(__mmask8 *A, __m512i B, __m512i C) { - // CHECK-LABEL: @test_load_mask8 + // CHECK-LABEL: test_load_mask8 // CHECK: [[LOAD:%.*]] = load i8, ptr %{{.*}} return _mm512_mask_cmpneq_epu64_mask(_load_mask8(A), B, C); } void test_store_mask8(__mmask8 *A, __m512i B, __m512i C) { - // CHECK-LABEL: @test_store_mask8 + // CHECK-LABEL: test_store_mask8 // CHECK: store i8 %{{.*}}, ptr %{{.*}} _store_mask8(A, _mm512_cmpneq_epu64_mask(B, C)); } __m512i test_mm512_mullo_epi64 (__m512i __A, __m512i __B) { - // CHECK-LABEL: @test_mm512_mullo_epi64 + // CHECK-LABEL: test_mm512_mullo_epi64 // CHECK: mul <8 x i64> return (__m512i) _mm512_mullo_epi64(__A, __B); } +TEST_CONSTEXPR(match_v8di(_mm512_mullo_epi64((__m512i)(__v8di){+1, -2, +3, -4, +5, -6, +7, -8}, (__m512i)(__v8di){-2, +3, +4, +5, -6, +7, +8, +9}), -2, -6, +12, -20, -30, -42, +56, -72)); __m512i test_mm512_mask_mullo_epi64 (__m512i __W, __mmask8 __U, __m512i __A, __m512i __B) { - // CHECK-LABEL: @test_mm512_mask_mullo_epi64 + // CHECK-LABEL: test_mm512_mask_mullo_epi64 // CHECK: mul <8 x i64> %{{.*}}, %{{.*}} // CHECK: select <8 x i1> %{{.*}}, <8 x i64> %{{.*}}, <8 x i64> %{{.*}} return (__m512i) _mm512_mask_mullo_epi64(__W, __U, __A, __B); } +TEST_CONSTEXPR(match_v8di(_mm512_mask_mullo_epi64((__m512i)(__v8di){-100, +200, -300, +400, -500, +600, -700, +800}, 0x0F, (__m512i)(__v8di){+1, -2, +3, -4, +5, -6, +7, -8}, (__m512i)(__v8di){-2, +3, -4, +5, -6, +7, -8, +9}), -2, -6, -12, -20, -500, +600, -700, +800)); __m512i test_mm512_maskz_mullo_epi64 (__mmask8 __U, __m512i __A, __m512i __B) { - // CHECK-LABEL: @test_mm512_maskz_mullo_epi64 + // CHECK-LABEL: test_mm512_maskz_mullo_epi64 // CHECK: mul <8 x i64> %{{.*}}, %{{.*}} // CHECK: select <8 x i1> %{{.*}}, <8 x i64> %{{.*}}, <8 x i64> %{{.*}} return (__m512i) _mm512_maskz_mullo_epi64(__U, __A, __B); } +TEST_CONSTEXPR(match_v8di(_mm512_maskz_mullo_epi64(0x0F, (__m512i)(__v8di){+1, -2, +3, -4, +5, -6, +7, -8}, (__m512i)(__v8di){-2, +3, +4, +5, -6, +7, +8, +9}), -2, -6, +12, -20, 0, 0, 0, 0)); __m512d test_mm512_xor_pd (__m512d __A, __m512d __B) { - // CHECK-LABEL: @test_mm512_xor_pd + // CHECK-LABEL: test_mm512_xor_pd // CHECK: xor <8 x i64> return (__m512d) _mm512_xor_pd(__A, __B); } __m512d test_mm512_mask_xor_pd (__m512d __W, __mmask8 __U, __m512d __A, __m512d __B) { - // CHECK-LABEL: @test_mm512_mask_xor_pd + // CHECK-LABEL: test_mm512_mask_xor_pd // CHECK: xor <8 x i64> // CHECK: %[[MASK:.*]] = bitcast i8 %{{.*}} to <8 x i1> // CHECK: select <8 x i1> %[[MASK]], <8 x double> %{{.*}}, <8 x double> %{{.*}} return (__m512d) _mm512_mask_xor_pd(__W, __U, __A, __B); } +TEST_CONSTEXPR(match_m512d(_mm512_xor_pd((__m512d){-4.0, -5.0, +6.0, +7.0, +7.0, +6.0, -5.0, -4.0}, (__m512d){+0.0, -0.0, -0.0, +7.0, +7.0, -0.0, -0.0, +0.0}), -4.0, +5.0, -6.0, +0.0, +0.0, -6.0, +5.0, -4.0)); __m512d test_mm512_maskz_xor_pd (__mmask8 __U, __m512d __A, __m512d __B) { - // CHECK-LABEL: @test_mm512_maskz_xor_pd + // CHECK-LABEL: test_mm512_maskz_xor_pd // CHECK: xor <8 x i64> // CHECK: %[[MASK:.*]] = bitcast i8 %{{.*}} to <8 x i1> // CHECK: select <8 x i1> %[[MASK]], <8 x double> %{{.*}}, <8 x double> %{{.*}} @@ -277,13 +290,14 @@ __m512d test_mm512_maskz_xor_pd (__mmask8 __U, __m512d __A, __m512d __B) { } __m512 test_mm512_xor_ps (__m512 __A, __m512 __B) { - // CHECK-LABEL: @test_mm512_xor_ps + // CHECK-LABEL: test_mm512_xor_ps // CHECK: xor <16 x i32> return (__m512) _mm512_xor_ps(__A, __B); } +TEST_CONSTEXPR(match_m512(_mm512_xor_ps((__m512){-4.0f, -5.0f, +6.0f, +7.0f, +7.0f, +6.0f, -5.0f, -4.0f, -4.0f, -5.0f, +6.0f, +7.0f, +7.0f, +6.0f, -5.0f, -4.0f}, (__m512){+0.0f, -0.0f, -0.0f, +7.0f, +7.0f, -0.0f, -0.0f, +0.0f, +0.0f, -0.0f, -0.0f, +7.0f, +7.0f, -0.0f, -0.0f, +0.0f}), -4.0f, +5.0f, -6.0f, +0.0f, +0.0f, -6.0f, +5.0f, -4.0f, -4.0f, +5.0f, -6.0f, +0.0f, +0.0f, -6.0f, +5.0f, -4.0f)); __m512 test_mm512_mask_xor_ps (__m512 __W, __mmask16 __U, __m512 __A, __m512 __B) { - // CHECK-LABEL: @test_mm512_mask_xor_ps + // CHECK-LABEL: test_mm512_mask_xor_ps // CHECK: xor <16 x i32> // CHECK: %[[MASK:.*]] = bitcast i16 %{{.*}} to <16 x i1> // CHECK: select <16 x i1> %[[MASK]], <16 x float> %{{.*}}, <16 x float> %{{.*}} @@ -291,7 +305,7 @@ __m512 test_mm512_mask_xor_ps (__m512 __W, __mmask16 __U, __m512 __A, __m512 __B } __m512 test_mm512_maskz_xor_ps (__mmask16 __U, __m512 __A, __m512 __B) { - // CHECK-LABEL: @test_mm512_maskz_xor_ps + // CHECK-LABEL: test_mm512_maskz_xor_ps // CHECK: xor <16 x i32> // CHECK: %[[MASK:.*]] = bitcast i16 %{{.*}} to <16 x i1> // CHECK: select <16 x i1> %[[MASK]], <16 x float> %{{.*}}, <16 x float> %{{.*}} @@ -299,13 +313,14 @@ __m512 test_mm512_maskz_xor_ps (__mmask16 __U, __m512 __A, __m512 __B) { } __m512d test_mm512_or_pd (__m512d __A, __m512d __B) { - // CHECK-LABEL: @test_mm512_or_pd + // CHECK-LABEL: test_mm512_or_pd // CHECK: or <8 x i64> return (__m512d) _mm512_or_pd(__A, __B); } +TEST_CONSTEXPR(match_m512d(_mm512_or_pd((__m512d){-4.0, -5.0, +6.0, +7.0, +7.0, +6.0, -5.0, -4.0}, (__m512d){+0.0, -0.0, -0.0, +7.0, +7.0, -0.0, -0.0, +0.0}), -4.0, -5.0, -6.0, +7.0, +7.0, -6.0, -5.0, -4.0)); __m512d test_mm512_mask_or_pd (__m512d __W, __mmask8 __U, __m512d __A, __m512d __B) { - // CHECK-LABEL: @test_mm512_mask_or_pd + // CHECK-LABEL: test_mm512_mask_or_pd // CHECK: or <8 x i64> // CHECK: %[[MASK:.*]] = bitcast i8 %{{.*}} to <8 x i1> // CHECK: select <8 x i1> %[[MASK]], <8 x double> %{{.*}}, <8 x double> %{{.*}} @@ -313,7 +328,7 @@ __m512d test_mm512_mask_or_pd (__m512d __W, __mmask8 __U, __m512d __A, __m512d _ } __m512d test_mm512_maskz_or_pd (__mmask8 __U, __m512d __A, __m512d __B) { - // CHECK-LABEL: @test_mm512_maskz_or_pd + // CHECK-LABEL: test_mm512_maskz_or_pd // CHECK: or <8 x i64> // CHECK: %[[MASK:.*]] = bitcast i8 %{{.*}} to <8 x i1> // CHECK: select <8 x i1> %[[MASK]], <8 x double> %{{.*}}, <8 x double> %{{.*}} @@ -321,13 +336,14 @@ __m512d test_mm512_maskz_or_pd (__mmask8 __U, __m512d __A, __m512d __B) { } __m512 test_mm512_or_ps (__m512 __A, __m512 __B) { - // CHECK-LABEL: @test_mm512_or_ps + // CHECK-LABEL: test_mm512_or_ps // CHECK: or <16 x i32> return (__m512) _mm512_or_ps(__A, __B); } +TEST_CONSTEXPR(match_m512(_mm512_or_ps((__m512){-4.0f, -5.0f, +6.0f, +7.0f, +7.0f, +6.0f, -5.0f, -4.0f, -4.0f, -5.0f, +6.0f, +7.0f, +7.0f, +6.0f, -5.0f, -4.0f}, (__m512){+0.0f, -0.0f, -0.0f, +7.0f, +7.0f, -0.0f, -0.0f, +0.0f, +0.0f, -0.0f, -0.0f, +7.0f, +7.0f, -0.0f, -0.0f, +0.0f}), -4.0f, -5.0f, -6.0f, +7.0f, +7.0f, -6.0f, -5.0f, -4.0f, -4.0f, -5.0f, -6.0f, +7.0f, +7.0f, -6.0f, -5.0f, -4.0f)); __m512 test_mm512_mask_or_ps (__m512 __W, __mmask16 __U, __m512 __A, __m512 __B) { - // CHECK-LABEL: @test_mm512_mask_or_ps + // CHECK-LABEL: test_mm512_mask_or_ps // CHECK: or <16 x i32> // CHECK: %[[MASK:.*]] = bitcast i16 %{{.*}} to <16 x i1> // CHECK: select <16 x i1> %[[MASK]], <16 x float> %{{.*}}, <16 x float> %{{.*}} @@ -335,7 +351,7 @@ __m512 test_mm512_mask_or_ps (__m512 __W, __mmask16 __U, __m512 __A, __m512 __B) } __m512 test_mm512_maskz_or_ps (__mmask16 __U, __m512 __A, __m512 __B) { - // CHECK-LABEL: @test_mm512_maskz_or_ps + // CHECK-LABEL: test_mm512_maskz_or_ps // CHECK: or <16 x i32> // CHECK: %[[MASK:.*]] = bitcast i16 %{{.*}} to <16 x i1> // CHECK: select <16 x i1> %[[MASK]], <16 x float> %{{.*}}, <16 x float> %{{.*}} @@ -343,13 +359,14 @@ __m512 test_mm512_maskz_or_ps (__mmask16 __U, __m512 __A, __m512 __B) { } __m512d test_mm512_and_pd (__m512d __A, __m512d __B) { - // CHECK-LABEL: @test_mm512_and_pd + // CHECK-LABEL: test_mm512_and_pd // CHECK: and <8 x i64> return (__m512d) _mm512_and_pd(__A, __B); } +TEST_CONSTEXPR(match_m512d(_mm512_and_pd((__m512d){-4.0, -5.0, +6.0, +7.0, +7.0, +6.0, -5.0, -4.0}, (__m512d){+0.0, -0.0, -0.0, +7.0, +7.0, -0.0, -0.0, +0.0}), +0.0, -0.0, +0.0, +7.0, +7.0, +0.0, -0.0, +0.0)); __m512d test_mm512_mask_and_pd (__m512d __W, __mmask8 __U, __m512d __A, __m512d __B) { - // CHECK-LABEL: @test_mm512_mask_and_pd + // CHECK-LABEL: test_mm512_mask_and_pd // CHECK: and <8 x i64> // CHECK: %[[MASK:.*]] = bitcast i8 %{{.*}} to <8 x i1> // CHECK: select <8 x i1> %[[MASK]], <8 x double> %{{.*}}, <8 x double> %{{.*}} @@ -357,7 +374,7 @@ __m512d test_mm512_mask_and_pd (__m512d __W, __mmask8 __U, __m512d __A, __m512d } __m512d test_mm512_maskz_and_pd (__mmask8 __U, __m512d __A, __m512d __B) { - // CHECK-LABEL: @test_mm512_maskz_and_pd + // CHECK-LABEL: test_mm512_maskz_and_pd // CHECK: and <8 x i64> // CHECK: %[[MASK:.*]] = bitcast i8 %{{.*}} to <8 x i1> // CHECK: select <8 x i1> %[[MASK]], <8 x double> %{{.*}}, <8 x double> %{{.*}} @@ -365,13 +382,14 @@ __m512d test_mm512_maskz_and_pd (__mmask8 __U, __m512d __A, __m512d __B) { } __m512 test_mm512_and_ps (__m512 __A, __m512 __B) { - // CHECK-LABEL: @test_mm512_and_ps + // CHECK-LABEL: test_mm512_and_ps // CHECK: and <16 x i32> return (__m512) _mm512_and_ps(__A, __B); } +TEST_CONSTEXPR(match_m512(_mm512_and_ps((__m512){-4.0f, -5.0f, +6.0f, +7.0f, +7.0f, +6.0f, -5.0f, -4.0f, -4.0f, -5.0f, +6.0f, +7.0f, +7.0f, +6.0f, -5.0f, -4.0f}, (__m512){+0.0f, -0.0f, -0.0f, +7.0f, +7.0f, -0.0f, -0.0f, +0.0f, +0.0f, -0.0f, -0.0f, +7.0f, +7.0f, -0.0f, -0.0f, +0.0f}), +0.0f, -0.0f, +0.0f, +7.0f, +7.0f, +0.0f, -0.0f, +0.0f, +0.0f, -0.0f, +0.0f, +7.0f, +7.0f, +0.0f, -0.0f, +0.0f)); __m512 test_mm512_mask_and_ps (__m512 __W, __mmask16 __U, __m512 __A, __m512 __B) { - // CHECK-LABEL: @test_mm512_mask_and_ps + // CHECK-LABEL: test_mm512_mask_and_ps // CHECK: and <16 x i32> // CHECK: %[[MASK:.*]] = bitcast i16 %{{.*}} to <16 x i1> // CHECK: select <16 x i1> %[[MASK]], <16 x float> %{{.*}}, <16 x float> %{{.*}} @@ -379,7 +397,7 @@ __m512 test_mm512_mask_and_ps (__m512 __W, __mmask16 __U, __m512 __A, __m512 __B } __m512 test_mm512_maskz_and_ps (__mmask16 __U, __m512 __A, __m512 __B) { - // CHECK-LABEL: @test_mm512_maskz_and_ps + // CHECK-LABEL: test_mm512_maskz_and_ps // CHECK: and <16 x i32> // CHECK: %[[MASK:.*]] = bitcast i16 %{{.*}} to <16 x i1> // CHECK: select <16 x i1> %[[MASK]], <16 x float> %{{.*}}, <16 x float> %{{.*}} @@ -387,14 +405,15 @@ __m512 test_mm512_maskz_and_ps (__mmask16 __U, __m512 __A, __m512 __B) { } __m512d test_mm512_andnot_pd (__m512d __A, __m512d __B) { - // CHECK-LABEL: @test_mm512_andnot_pd + // CHECK-LABEL: test_mm512_andnot_pd // CHECK: xor <8 x i64> %{{.*}}, splat (i64 -1) // CHECK: and <8 x i64> return (__m512d) _mm512_andnot_pd(__A, __B); } +TEST_CONSTEXPR(match_m512d(_mm512_andnot_pd((__m512d){-4.0, -5.0, +6.0, +7.0, +7.0, +6.0, -5.0, -4.0}, (__m512d){+0.0, -0.0, -0.0, +7.0, +7.0, -0.0, -0.0, +0.0}), +0.0, +0.0, -0.0, +0.0, +0.0, -0.0, +0.0, +0.0)); __m512d test_mm512_mask_andnot_pd (__m512d __W, __mmask8 __U, __m512d __A, __m512d __B) { - // CHECK-LABEL: @test_mm512_mask_andnot_pd + // CHECK-LABEL: test_mm512_mask_andnot_pd // CHECK: xor <8 x i64> %{{.*}}, splat (i64 -1) // CHECK: and <8 x i64> %{{.*}}, %{{.*}} // CHECK: select <8 x i1> %{{.*}}, <8 x double> %{{.*}}, <8 x double> %{{.*}} @@ -402,7 +421,7 @@ __m512d test_mm512_mask_andnot_pd (__m512d __W, __mmask8 __U, __m512d __A, __m51 } __m512d test_mm512_maskz_andnot_pd (__mmask8 __U, __m512d __A, __m512d __B) { - // CHECK-LABEL: @test_mm512_maskz_andnot_pd + // CHECK-LABEL: test_mm512_maskz_andnot_pd // CHECK: xor <8 x i64> %{{.*}}, splat (i64 -1) // CHECK: and <8 x i64> %{{.*}}, %{{.*}} // CHECK: select <8 x i1> %{{.*}}, <8 x double> %{{.*}}, <8 x double> %{{.*}} @@ -410,14 +429,15 @@ __m512d test_mm512_maskz_andnot_pd (__mmask8 __U, __m512d __A, __m512d __B) { } __m512 test_mm512_andnot_ps (__m512 __A, __m512 __B) { - // CHECK-LABEL: @test_mm512_andnot_ps + // CHECK-LABEL: test_mm512_andnot_ps // CHECK: xor <16 x i32> %{{.*}}, splat (i32 -1) // CHECK: and <16 x i32> return (__m512) _mm512_andnot_ps(__A, __B); } +TEST_CONSTEXPR(match_m512(_mm512_andnot_ps((__m512){-4.0f, -5.0f, +6.0f, +7.0f, +7.0f, +6.0f, -5.0f, -4.0f, -4.0f, -5.0f, +6.0f, +7.0f, +7.0f, +6.0f, -5.0f, -4.0f}, (__m512){+0.0f, -0.0f, -0.0f, +7.0f, +7.0f, -0.0f, -0.0f, +0.0f, +0.0f, -0.0f, -0.0f, +7.0f, +7.0f, -0.0f, -0.0f, +0.0f}), +0.0f, +0.0f, -0.0f, +0.0f, +0.0f, -0.0f, +0.0f, +0.0f, +0.0f, +0.0f, -0.0f, +0.0f, +0.0f, -0.0f, +0.0f, +0.0f)); __m512 test_mm512_mask_andnot_ps (__m512 __W, __mmask16 __U, __m512 __A, __m512 __B) { - // CHECK-LABEL: @test_mm512_mask_andnot_ps + // CHECK-LABEL: test_mm512_mask_andnot_ps // CHECK: xor <16 x i32> %{{.*}}, splat (i32 -1) // CHECK: and <16 x i32> %{{.*}}, %{{.*}} // CHECK: select <16 x i1> %{{.*}}, <16 x float> %{{.*}}, <16 x float> %{{.*}} @@ -425,7 +445,7 @@ __m512 test_mm512_mask_andnot_ps (__m512 __W, __mmask16 __U, __m512 __A, __m512 } __m512 test_mm512_maskz_andnot_ps (__mmask16 __U, __m512 __A, __m512 __B) { - // CHECK-LABEL: @test_mm512_maskz_andnot_ps + // CHECK-LABEL: test_mm512_maskz_andnot_ps // CHECK: xor <16 x i32> %{{.*}}, splat (i32 -1) // CHECK: and <16 x i32> %{{.*}}, %{{.*}} // CHECK: select <16 x i1> %{{.*}}, <16 x float> %{{.*}}, <16 x float> %{{.*}} @@ -433,491 +453,491 @@ __m512 test_mm512_maskz_andnot_ps (__mmask16 __U, __m512 __A, __m512 __B) { } __m512i test_mm512_cvtpd_epi64(__m512d __A) { - // CHECK-LABEL: @test_mm512_cvtpd_epi64 + // CHECK-LABEL: test_mm512_cvtpd_epi64 // CHECK: @llvm.x86.avx512.mask.cvtpd2qq.512 return _mm512_cvtpd_epi64(__A); } __m512i test_mm512_mask_cvtpd_epi64(__m512i __W, __mmask8 __U, __m512d __A) { - // CHECK-LABEL: @test_mm512_mask_cvtpd_epi64 + // CHECK-LABEL: test_mm512_mask_cvtpd_epi64 // CHECK: @llvm.x86.avx512.mask.cvtpd2qq.512 return _mm512_mask_cvtpd_epi64(__W, __U, __A); } __m512i test_mm512_maskz_cvtpd_epi64(__mmask8 __U, __m512d __A) { - // CHECK-LABEL: @test_mm512_maskz_cvtpd_epi64 + // CHECK-LABEL: test_mm512_maskz_cvtpd_epi64 // CHECK: @llvm.x86.avx512.mask.cvtpd2qq.512 return _mm512_maskz_cvtpd_epi64(__U, __A); } __m512i test_mm512_cvt_roundpd_epi64(__m512d __A) { - // CHECK-LABEL: @test_mm512_cvt_roundpd_epi64 + // CHECK-LABEL: test_mm512_cvt_roundpd_epi64 // CHECK: @llvm.x86.avx512.mask.cvtpd2qq.512 return _mm512_cvt_roundpd_epi64(__A, _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC); } __m512i test_mm512_mask_cvt_roundpd_epi64(__m512i __W, __mmask8 __U, __m512d __A) { - // CHECK-LABEL: @test_mm512_mask_cvt_roundpd_epi64 + // CHECK-LABEL: test_mm512_mask_cvt_roundpd_epi64 // CHECK: @llvm.x86.avx512.mask.cvtpd2qq.512 return _mm512_mask_cvt_roundpd_epi64(__W, __U, __A, _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC); } __m512i test_mm512_maskz_cvt_roundpd_epi64(__mmask8 __U, __m512d __A) { - // CHECK-LABEL: @test_mm512_maskz_cvt_roundpd_epi64 + // CHECK-LABEL: test_mm512_maskz_cvt_roundpd_epi64 // CHECK: @llvm.x86.avx512.mask.cvtpd2qq.512 return _mm512_maskz_cvt_roundpd_epi64(__U, __A, _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC); } __m512i test_mm512_cvtpd_epu64(__m512d __A) { - // CHECK-LABEL: @test_mm512_cvtpd_epu64 + // CHECK-LABEL: test_mm512_cvtpd_epu64 // CHECK: @llvm.x86.avx512.mask.cvtpd2uqq.512 return _mm512_cvtpd_epu64(__A); } __m512i test_mm512_mask_cvtpd_epu64(__m512i __W, __mmask8 __U, __m512d __A) { - // CHECK-LABEL: @test_mm512_mask_cvtpd_epu64 + // CHECK-LABEL: test_mm512_mask_cvtpd_epu64 // CHECK: @llvm.x86.avx512.mask.cvtpd2uqq.512 return _mm512_mask_cvtpd_epu64(__W, __U, __A); } __m512i test_mm512_maskz_cvtpd_epu64(__mmask8 __U, __m512d __A) { - // CHECK-LABEL: @test_mm512_maskz_cvtpd_epu64 + // CHECK-LABEL: test_mm512_maskz_cvtpd_epu64 // CHECK: @llvm.x86.avx512.mask.cvtpd2uqq.512 return _mm512_maskz_cvtpd_epu64(__U, __A); } __m512i test_mm512_cvt_roundpd_epu64(__m512d __A) { - // CHECK-LABEL: @test_mm512_cvt_roundpd_epu64 + // CHECK-LABEL: test_mm512_cvt_roundpd_epu64 // CHECK: @llvm.x86.avx512.mask.cvtpd2uqq.512 return _mm512_cvt_roundpd_epu64(__A, _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC); } __m512i test_mm512_mask_cvt_roundpd_epu64(__m512i __W, __mmask8 __U, __m512d __A) { - // CHECK-LABEL: @test_mm512_mask_cvt_roundpd_epu64 + // CHECK-LABEL: test_mm512_mask_cvt_roundpd_epu64 // CHECK: @llvm.x86.avx512.mask.cvtpd2uqq.512 return _mm512_mask_cvt_roundpd_epu64(__W, __U, __A, _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC); } __m512i test_mm512_maskz_cvt_roundpd_epu64(__mmask8 __U, __m512d __A) { - // CHECK-LABEL: @test_mm512_maskz_cvt_roundpd_epu64 + // CHECK-LABEL: test_mm512_maskz_cvt_roundpd_epu64 // CHECK: @llvm.x86.avx512.mask.cvtpd2uqq.512 return _mm512_maskz_cvt_roundpd_epu64(__U, __A, _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC); } __m512i test_mm512_cvtps_epi64(__m256 __A) { - // CHECK-LABEL: @test_mm512_cvtps_epi64 + // CHECK-LABEL: test_mm512_cvtps_epi64 // CHECK: @llvm.x86.avx512.mask.cvtps2qq.512 return _mm512_cvtps_epi64(__A); } __m512i test_mm512_mask_cvtps_epi64(__m512i __W, __mmask8 __U, __m256 __A) { - // CHECK-LABEL: @test_mm512_mask_cvtps_epi64 + // CHECK-LABEL: test_mm512_mask_cvtps_epi64 // CHECK: @llvm.x86.avx512.mask.cvtps2qq.512 return _mm512_mask_cvtps_epi64(__W, __U, __A); } __m512i test_mm512_maskz_cvtps_epi64(__mmask8 __U, __m256 __A) { - // CHECK-LABEL: @test_mm512_maskz_cvtps_epi64 + // CHECK-LABEL: test_mm512_maskz_cvtps_epi64 // CHECK: @llvm.x86.avx512.mask.cvtps2qq.512 return _mm512_maskz_cvtps_epi64(__U, __A); } __m512i test_mm512_cvt_roundps_epi64(__m256 __A) { - // CHECK-LABEL: @test_mm512_cvt_roundps_epi64 + // CHECK-LABEL: test_mm512_cvt_roundps_epi64 // CHECK: @llvm.x86.avx512.mask.cvtps2qq.512 return _mm512_cvt_roundps_epi64(__A, _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC); } __m512i test_mm512_mask_cvt_roundps_epi64(__m512i __W, __mmask8 __U, __m256 __A) { - // CHECK-LABEL: @test_mm512_mask_cvt_roundps_epi64 + // CHECK-LABEL: test_mm512_mask_cvt_roundps_epi64 // CHECK: @llvm.x86.avx512.mask.cvtps2qq.512 return _mm512_mask_cvt_roundps_epi64(__W, __U, __A, _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC); } __m512i test_mm512_maskz_cvt_roundps_epi64(__mmask8 __U, __m256 __A) { - // CHECK-LABEL: @test_mm512_maskz_cvt_roundps_epi64 + // CHECK-LABEL: test_mm512_maskz_cvt_roundps_epi64 // CHECK: @llvm.x86.avx512.mask.cvtps2qq.512 return _mm512_maskz_cvt_roundps_epi64(__U, __A, _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC); } __m512i test_mm512_cvtps_epu64(__m256 __A) { - // CHECK-LABEL: @test_mm512_cvtps_epu64 + // CHECK-LABEL: test_mm512_cvtps_epu64 // CHECK: @llvm.x86.avx512.mask.cvtps2uqq.512 return _mm512_cvtps_epu64(__A); } __m512i test_mm512_mask_cvtps_epu64(__m512i __W, __mmask8 __U, __m256 __A) { - // CHECK-LABEL: @test_mm512_mask_cvtps_epu64 + // CHECK-LABEL: test_mm512_mask_cvtps_epu64 // CHECK: @llvm.x86.avx512.mask.cvtps2uqq.512 return _mm512_mask_cvtps_epu64(__W, __U, __A); } __m512i test_mm512_maskz_cvtps_epu64(__mmask8 __U, __m256 __A) { - // CHECK-LABEL: @test_mm512_maskz_cvtps_epu64 + // CHECK-LABEL: test_mm512_maskz_cvtps_epu64 // CHECK: @llvm.x86.avx512.mask.cvtps2uqq.512 return _mm512_maskz_cvtps_epu64(__U, __A); } __m512i test_mm512_cvt_roundps_epu64(__m256 __A) { - // CHECK-LABEL: @test_mm512_cvt_roundps_epu64 + // CHECK-LABEL: test_mm512_cvt_roundps_epu64 // CHECK: @llvm.x86.avx512.mask.cvtps2uqq.512 return _mm512_cvt_roundps_epu64(__A, _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC); } __m512i test_mm512_mask_cvt_roundps_epu64(__m512i __W, __mmask8 __U, __m256 __A) { - // CHECK-LABEL: @test_mm512_mask_cvt_roundps_epu64 + // CHECK-LABEL: test_mm512_mask_cvt_roundps_epu64 // CHECK: @llvm.x86.avx512.mask.cvtps2uqq.512 return _mm512_mask_cvt_roundps_epu64(__W, __U, __A, _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC); } __m512i test_mm512_maskz_cvt_roundps_epu64(__mmask8 __U, __m256 __A) { - // CHECK-LABEL: @test_mm512_maskz_cvt_roundps_epu64 + // CHECK-LABEL: test_mm512_maskz_cvt_roundps_epu64 // CHECK: @llvm.x86.avx512.mask.cvtps2uqq.512 return _mm512_maskz_cvt_roundps_epu64(__U, __A, _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC); } __m512d test_mm512_cvtepi64_pd(__m512i __A) { - // CHECK-LABEL: @test_mm512_cvtepi64_pd + // CHECK-LABEL: test_mm512_cvtepi64_pd // CHECK: sitofp <8 x i64> %{{.*}} to <8 x double> return _mm512_cvtepi64_pd(__A); } __m512d test_mm512_mask_cvtepi64_pd(__m512d __W, __mmask8 __U, __m512i __A) { - // CHECK-LABEL: @test_mm512_mask_cvtepi64_pd + // CHECK-LABEL: test_mm512_mask_cvtepi64_pd // CHECK: sitofp <8 x i64> %{{.*}} to <8 x double> // CHECK: select <8 x i1> %{{.*}}, <8 x double> %{{.*}}, <8 x double> %{{.*}} return _mm512_mask_cvtepi64_pd(__W, __U, __A); } __m512d test_mm512_maskz_cvtepi64_pd(__mmask8 __U, __m512i __A) { - // CHECK-LABEL: @test_mm512_maskz_cvtepi64_pd + // CHECK-LABEL: test_mm512_maskz_cvtepi64_pd // CHECK: sitofp <8 x i64> %{{.*}} to <8 x double> // CHECK: select <8 x i1> %{{.*}}, <8 x double> %{{.*}}, <8 x double> %{{.*}} return _mm512_maskz_cvtepi64_pd(__U, __A); } __m512d test_mm512_cvt_roundepi64_pd(__m512i __A) { - // CHECK-LABEL: @test_mm512_cvt_roundepi64_pd + // CHECK-LABEL: test_mm512_cvt_roundepi64_pd // CHECK: @llvm.x86.avx512.sitofp.round.v8f64.v8i64 return _mm512_cvt_roundepi64_pd(__A, _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC); } __m512d test_mm512_mask_cvt_roundepi64_pd(__m512d __W, __mmask8 __U, __m512i __A) { - // CHECK-LABEL: @test_mm512_mask_cvt_roundepi64_pd + // CHECK-LABEL: test_mm512_mask_cvt_roundepi64_pd // CHECK: @llvm.x86.avx512.sitofp.round.v8f64.v8i64 // CHECK: select <8 x i1> %{{.*}}, <8 x double> %{{.*}}, <8 x double> %{{.*}} return _mm512_mask_cvt_roundepi64_pd(__W, __U, __A, _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC); } __m512d test_mm512_maskz_cvt_roundepi64_pd(__mmask8 __U, __m512i __A) { - // CHECK-LABEL: @test_mm512_maskz_cvt_roundepi64_pd + // CHECK-LABEL: test_mm512_maskz_cvt_roundepi64_pd // CHECK: @llvm.x86.avx512.sitofp.round.v8f64.v8i64 // CHECK: select <8 x i1> %{{.*}}, <8 x double> %{{.*}}, <8 x double> %{{.*}} return _mm512_maskz_cvt_roundepi64_pd(__U, __A, _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC); } __m256 test_mm512_cvtepi64_ps(__m512i __A) { - // CHECK-LABEL: @test_mm512_cvtepi64_ps + // CHECK-LABEL: test_mm512_cvtepi64_ps // CHECK: sitofp <8 x i64> %{{.*}} to <8 x float> return _mm512_cvtepi64_ps(__A); } __m256 test_mm512_mask_cvtepi64_ps(__m256 __W, __mmask8 __U, __m512i __A) { - // CHECK-LABEL: @test_mm512_mask_cvtepi64_ps + // CHECK-LABEL: test_mm512_mask_cvtepi64_ps // CHECK: sitofp <8 x i64> %{{.*}} to <8 x float> // CHECK: select <8 x i1> %{{.*}}, <8 x float> %{{.*}}, <8 x float> %{{.*}} return _mm512_mask_cvtepi64_ps(__W, __U, __A); } __m256 test_mm512_maskz_cvtepi64_ps(__mmask8 __U, __m512i __A) { - // CHECK-LABEL: @test_mm512_maskz_cvtepi64_ps + // CHECK-LABEL: test_mm512_maskz_cvtepi64_ps // CHECK: sitofp <8 x i64> %{{.*}} to <8 x float> // CHECK: select <8 x i1> %{{.*}}, <8 x float> %{{.*}}, <8 x float> %{{.*}} return _mm512_maskz_cvtepi64_ps(__U, __A); } __m256 test_mm512_cvt_roundepi64_ps(__m512i __A) { - // CHECK-LABEL: @test_mm512_cvt_roundepi64_ps + // CHECK-LABEL: test_mm512_cvt_roundepi64_ps // CHECK: @llvm.x86.avx512.sitofp.round.v8f32.v8i64 return _mm512_cvt_roundepi64_ps(__A, _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC); } __m256 test_mm512_mask_cvt_roundepi64_ps(__m256 __W, __mmask8 __U, __m512i __A) { - // CHECK-LABEL: @test_mm512_mask_cvt_roundepi64_ps + // CHECK-LABEL: test_mm512_mask_cvt_roundepi64_ps // CHECK: @llvm.x86.avx512.sitofp.round.v8f32.v8i64 // CHECK: select <8 x i1> %{{.*}}, <8 x float> %{{.*}}, <8 x float> %{{.*}} return _mm512_mask_cvt_roundepi64_ps(__W, __U, __A, _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC); } __m256 test_mm512_maskz_cvt_roundepi64_ps(__mmask8 __U, __m512i __A) { - // CHECK-LABEL: @test_mm512_maskz_cvt_roundepi64_ps + // CHECK-LABEL: test_mm512_maskz_cvt_roundepi64_ps // CHECK: @llvm.x86.avx512.sitofp.round.v8f32.v8i64 // CHECK: select <8 x i1> %{{.*}}, <8 x float> %{{.*}}, <8 x float> %{{.*}} return _mm512_maskz_cvt_roundepi64_ps(__U, __A, _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC); } __m512i test_mm512_cvttpd_epi64(__m512d __A) { - // CHECK-LABEL: @test_mm512_cvttpd_epi64 + // CHECK-LABEL: test_mm512_cvttpd_epi64 // CHECK: @llvm.x86.avx512.mask.cvttpd2qq.512 return _mm512_cvttpd_epi64(__A); } __m512i test_mm512_mask_cvttpd_epi64(__m512i __W, __mmask8 __U, __m512d __A) { - // CHECK-LABEL: @test_mm512_mask_cvttpd_epi64 + // CHECK-LABEL: test_mm512_mask_cvttpd_epi64 // CHECK: @llvm.x86.avx512.mask.cvttpd2qq.512 return _mm512_mask_cvttpd_epi64(__W, __U, __A); } __m512i test_mm512_maskz_cvttpd_epi64(__mmask8 __U, __m512d __A) { - // CHECK-LABEL: @test_mm512_maskz_cvttpd_epi64 + // CHECK-LABEL: test_mm512_maskz_cvttpd_epi64 // CHECK: @llvm.x86.avx512.mask.cvttpd2qq.512 return _mm512_maskz_cvttpd_epi64(__U, __A); } __m512i test_mm512_cvtt_roundpd_epi64(__m512d __A) { - // CHECK-LABEL: @test_mm512_cvtt_roundpd_epi64 + // CHECK-LABEL: test_mm512_cvtt_roundpd_epi64 // CHECK: @llvm.x86.avx512.mask.cvttpd2qq.512 return _mm512_cvtt_roundpd_epi64(__A, _MM_FROUND_NO_EXC); } __m512i test_mm512_mask_cvtt_roundpd_epi64(__m512i __W, __mmask8 __U, __m512d __A) { - // CHECK-LABEL: @test_mm512_mask_cvtt_roundpd_epi64 + // CHECK-LABEL: test_mm512_mask_cvtt_roundpd_epi64 // CHECK: @llvm.x86.avx512.mask.cvttpd2qq.512 return _mm512_mask_cvtt_roundpd_epi64(__W, __U, __A, _MM_FROUND_NO_EXC); } __m512i test_mm512_maskz_cvtt_roundpd_epi64(__mmask8 __U, __m512d __A) { - // CHECK-LABEL: @test_mm512_maskz_cvtt_roundpd_epi64 + // CHECK-LABEL: test_mm512_maskz_cvtt_roundpd_epi64 // CHECK: @llvm.x86.avx512.mask.cvttpd2qq.512 return _mm512_maskz_cvtt_roundpd_epi64(__U, __A, _MM_FROUND_NO_EXC); } __m512i test_mm512_cvttpd_epu64(__m512d __A) { - // CHECK-LABEL: @test_mm512_cvttpd_epu64 + // CHECK-LABEL: test_mm512_cvttpd_epu64 // CHECK: @llvm.x86.avx512.mask.cvttpd2uqq.512 return _mm512_cvttpd_epu64(__A); } __m512i test_mm512_mask_cvttpd_epu64(__m512i __W, __mmask8 __U, __m512d __A) { - // CHECK-LABEL: @test_mm512_mask_cvttpd_epu64 + // CHECK-LABEL: test_mm512_mask_cvttpd_epu64 // CHECK: @llvm.x86.avx512.mask.cvttpd2uqq.512 return _mm512_mask_cvttpd_epu64(__W, __U, __A); } __m512i test_mm512_maskz_cvttpd_epu64(__mmask8 __U, __m512d __A) { - // CHECK-LABEL: @test_mm512_maskz_cvttpd_epu64 + // CHECK-LABEL: test_mm512_maskz_cvttpd_epu64 // CHECK: @llvm.x86.avx512.mask.cvttpd2uqq.512 return _mm512_maskz_cvttpd_epu64(__U, __A); } __m512i test_mm512_cvtt_roundpd_epu64(__m512d __A) { - // CHECK-LABEL: @test_mm512_cvtt_roundpd_epu64 + // CHECK-LABEL: test_mm512_cvtt_roundpd_epu64 // CHECK: @llvm.x86.avx512.mask.cvttpd2uqq.512 return _mm512_cvtt_roundpd_epu64(__A, _MM_FROUND_NO_EXC); } __m512i test_mm512_mask_cvtt_roundpd_epu64(__m512i __W, __mmask8 __U, __m512d __A) { - // CHECK-LABEL: @test_mm512_mask_cvtt_roundpd_epu64 + // CHECK-LABEL: test_mm512_mask_cvtt_roundpd_epu64 // CHECK: @llvm.x86.avx512.mask.cvttpd2uqq.512 return _mm512_mask_cvtt_roundpd_epu64(__W, __U, __A, _MM_FROUND_NO_EXC); } __m512i test_mm512_maskz_cvtt_roundpd_epu64(__mmask8 __U, __m512d __A) { - // CHECK-LABEL: @test_mm512_maskz_cvtt_roundpd_epu64 + // CHECK-LABEL: test_mm512_maskz_cvtt_roundpd_epu64 // CHECK: @llvm.x86.avx512.mask.cvttpd2uqq.512 return _mm512_maskz_cvtt_roundpd_epu64(__U, __A, _MM_FROUND_NO_EXC); } __m512i test_mm512_cvttps_epi64(__m256 __A) { - // CHECK-LABEL: @test_mm512_cvttps_epi64 + // CHECK-LABEL: test_mm512_cvttps_epi64 // CHECK: @llvm.x86.avx512.mask.cvttps2qq.512 return _mm512_cvttps_epi64(__A); } __m512i test_mm512_mask_cvttps_epi64(__m512i __W, __mmask8 __U, __m256 __A) { - // CHECK-LABEL: @test_mm512_mask_cvttps_epi64 + // CHECK-LABEL: test_mm512_mask_cvttps_epi64 // CHECK: @llvm.x86.avx512.mask.cvttps2qq.512 return _mm512_mask_cvttps_epi64(__W, __U, __A); } __m512i test_mm512_maskz_cvttps_epi64(__mmask8 __U, __m256 __A) { - // CHECK-LABEL: @test_mm512_maskz_cvttps_epi64 + // CHECK-LABEL: test_mm512_maskz_cvttps_epi64 // CHECK: @llvm.x86.avx512.mask.cvttps2qq.512 return _mm512_maskz_cvttps_epi64(__U, __A); } __m512i test_mm512_cvtt_roundps_epi64(__m256 __A) { - // CHECK-LABEL: @test_mm512_cvtt_roundps_epi64 + // CHECK-LABEL: test_mm512_cvtt_roundps_epi64 // CHECK: @llvm.x86.avx512.mask.cvttps2qq.512 return _mm512_cvtt_roundps_epi64(__A, _MM_FROUND_NO_EXC); } __m512i test_mm512_mask_cvtt_roundps_epi64(__m512i __W, __mmask8 __U, __m256 __A) { - // CHECK-LABEL: @test_mm512_mask_cvtt_roundps_epi64 + // CHECK-LABEL: test_mm512_mask_cvtt_roundps_epi64 // CHECK: @llvm.x86.avx512.mask.cvttps2qq.512 return _mm512_mask_cvtt_roundps_epi64(__W, __U, __A, _MM_FROUND_NO_EXC); } __m512i test_mm512_maskz_cvtt_roundps_epi64(__mmask8 __U, __m256 __A) { - // CHECK-LABEL: @test_mm512_maskz_cvtt_roundps_epi64 + // CHECK-LABEL: test_mm512_maskz_cvtt_roundps_epi64 // CHECK: @llvm.x86.avx512.mask.cvttps2qq.512 return _mm512_maskz_cvtt_roundps_epi64(__U, __A, _MM_FROUND_NO_EXC); } __m512i test_mm512_cvttps_epu64(__m256 __A) { - // CHECK-LABEL: @test_mm512_cvttps_epu64 + // CHECK-LABEL: test_mm512_cvttps_epu64 // CHECK: @llvm.x86.avx512.mask.cvttps2uqq.512 return _mm512_cvttps_epu64(__A); } __m512i test_mm512_mask_cvttps_epu64(__m512i __W, __mmask8 __U, __m256 __A) { - // CHECK-LABEL: @test_mm512_mask_cvttps_epu64 + // CHECK-LABEL: test_mm512_mask_cvttps_epu64 // CHECK: @llvm.x86.avx512.mask.cvttps2uqq.512 return _mm512_mask_cvttps_epu64(__W, __U, __A); } __m512i test_mm512_maskz_cvttps_epu64(__mmask8 __U, __m256 __A) { - // CHECK-LABEL: @test_mm512_maskz_cvttps_epu64 + // CHECK-LABEL: test_mm512_maskz_cvttps_epu64 // CHECK: @llvm.x86.avx512.mask.cvttps2uqq.512 return _mm512_maskz_cvttps_epu64(__U, __A); } __m512i test_mm512_cvtt_roundps_epu64(__m256 __A) { - // CHECK-LABEL: @test_mm512_cvtt_roundps_epu64 + // CHECK-LABEL: test_mm512_cvtt_roundps_epu64 // CHECK: @llvm.x86.avx512.mask.cvttps2uqq.512 return _mm512_cvtt_roundps_epu64(__A, _MM_FROUND_NO_EXC); } __m512i test_mm512_mask_cvtt_roundps_epu64(__m512i __W, __mmask8 __U, __m256 __A) { - // CHECK-LABEL: @test_mm512_mask_cvtt_roundps_epu64 + // CHECK-LABEL: test_mm512_mask_cvtt_roundps_epu64 // CHECK: @llvm.x86.avx512.mask.cvttps2uqq.512 return _mm512_mask_cvtt_roundps_epu64(__W, __U, __A, _MM_FROUND_NO_EXC); } __m512i test_mm512_maskz_cvtt_roundps_epu64(__mmask8 __U, __m256 __A) { - // CHECK-LABEL: @test_mm512_maskz_cvtt_roundps_epu64 + // CHECK-LABEL: test_mm512_maskz_cvtt_roundps_epu64 // CHECK: @llvm.x86.avx512.mask.cvttps2uqq.512 return _mm512_maskz_cvtt_roundps_epu64(__U, __A, _MM_FROUND_NO_EXC); } __m512d test_mm512_cvtepu64_pd(__m512i __A) { - // CHECK-LABEL: @test_mm512_cvtepu64_pd + // CHECK-LABEL: test_mm512_cvtepu64_pd // CHECK: uitofp <8 x i64> %{{.*}} to <8 x double> return _mm512_cvtepu64_pd(__A); } __m512d test_mm512_mask_cvtepu64_pd(__m512d __W, __mmask8 __U, __m512i __A) { - // CHECK-LABEL: @test_mm512_mask_cvtepu64_pd + // CHECK-LABEL: test_mm512_mask_cvtepu64_pd // CHECK: uitofp <8 x i64> %{{.*}} to <8 x double> // CHECK: select <8 x i1> %{{.*}}, <8 x double> %{{.*}}, <8 x double> %{{.*}} return _mm512_mask_cvtepu64_pd(__W, __U, __A); } __m512d test_mm512_maskz_cvtepu64_pd(__mmask8 __U, __m512i __A) { - // CHECK-LABEL: @test_mm512_maskz_cvtepu64_pd + // CHECK-LABEL: test_mm512_maskz_cvtepu64_pd // CHECK: uitofp <8 x i64> %{{.*}} to <8 x double> // CHECK: select <8 x i1> %{{.*}}, <8 x double> %{{.*}}, <8 x double> %{{.*}} return _mm512_maskz_cvtepu64_pd(__U, __A); } __m512d test_mm512_cvt_roundepu64_pd(__m512i __A) { - // CHECK-LABEL: @test_mm512_cvt_roundepu64_pd + // CHECK-LABEL: test_mm512_cvt_roundepu64_pd // CHECK: @llvm.x86.avx512.uitofp.round.v8f64.v8i64 return _mm512_cvt_roundepu64_pd(__A, _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC); } __m512d test_mm512_mask_cvt_roundepu64_pd(__m512d __W, __mmask8 __U, __m512i __A) { - // CHECK-LABEL: @test_mm512_mask_cvt_roundepu64_pd + // CHECK-LABEL: test_mm512_mask_cvt_roundepu64_pd // CHECK: @llvm.x86.avx512.uitofp.round.v8f64.v8i64 // CHECK: select <8 x i1> %{{.*}}, <8 x double> %{{.*}}, <8 x double> %{{.*}} return _mm512_mask_cvt_roundepu64_pd(__W, __U, __A, _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC); } __m512d test_mm512_maskz_cvt_roundepu64_pd(__mmask8 __U, __m512i __A) { - // CHECK-LABEL: @test_mm512_maskz_cvt_roundepu64_pd + // CHECK-LABEL: test_mm512_maskz_cvt_roundepu64_pd // CHECK: @llvm.x86.avx512.uitofp.round.v8f64.v8i64 // CHECK: select <8 x i1> %{{.*}}, <8 x double> %{{.*}}, <8 x double> %{{.*}} return _mm512_maskz_cvt_roundepu64_pd(__U, __A, _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC); } __m256 test_mm512_cvtepu64_ps(__m512i __A) { - // CHECK-LABEL: @test_mm512_cvtepu64_ps + // CHECK-LABEL: test_mm512_cvtepu64_ps // CHECK: uitofp <8 x i64> %{{.*}} to <8 x float> return _mm512_cvtepu64_ps(__A); } __m256 test_mm512_mask_cvtepu64_ps(__m256 __W, __mmask8 __U, __m512i __A) { - // CHECK-LABEL: @test_mm512_mask_cvtepu64_ps + // CHECK-LABEL: test_mm512_mask_cvtepu64_ps // CHECK: uitofp <8 x i64> %{{.*}} to <8 x float> // CHECK: select <8 x i1> %{{.*}}, <8 x float> %{{.*}}, <8 x float> %{{.*}} return _mm512_mask_cvtepu64_ps(__W, __U, __A); } __m256 test_mm512_maskz_cvtepu64_ps(__mmask8 __U, __m512i __A) { - // CHECK-LABEL: @test_mm512_maskz_cvtepu64_ps + // CHECK-LABEL: test_mm512_maskz_cvtepu64_ps // CHECK: uitofp <8 x i64> %{{.*}} to <8 x float> // CHECK: select <8 x i1> %{{.*}}, <8 x float> %{{.*}}, <8 x float> %{{.*}} return _mm512_maskz_cvtepu64_ps(__U, __A); } __m256 test_mm512_cvt_roundepu64_ps(__m512i __A) { - // CHECK-LABEL: @test_mm512_cvt_roundepu64_ps + // CHECK-LABEL: test_mm512_cvt_roundepu64_ps // CHECK: @llvm.x86.avx512.uitofp.round.v8f32.v8i64 return _mm512_cvt_roundepu64_ps(__A, _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC); } __m256 test_mm512_mask_cvt_roundepu64_ps(__m256 __W, __mmask8 __U, __m512i __A) { - // CHECK-LABEL: @test_mm512_mask_cvt_roundepu64_ps + // CHECK-LABEL: test_mm512_mask_cvt_roundepu64_ps // CHECK: @llvm.x86.avx512.uitofp.round.v8f32.v8i64 // CHECK: select <8 x i1> %{{.*}}, <8 x float> %{{.*}}, <8 x float> %{{.*}} return _mm512_mask_cvt_roundepu64_ps(__W, __U, __A, _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC); } __m256 test_mm512_maskz_cvt_roundepu64_ps(__mmask8 __U, __m512i __A) { - // CHECK-LABEL: @test_mm512_maskz_cvt_roundepu64_ps + // CHECK-LABEL: test_mm512_maskz_cvt_roundepu64_ps // CHECK: @llvm.x86.avx512.uitofp.round.v8f32.v8i64 // CHECK: select <8 x i1> %{{.*}}, <8 x float> %{{.*}}, <8 x float> %{{.*}} return _mm512_maskz_cvt_roundepu64_ps(__U, __A, _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC); } __m512d test_mm512_range_pd(__m512d __A, __m512d __B) { - // CHECK-LABEL: @test_mm512_range_pd + // CHECK-LABEL: test_mm512_range_pd // CHECK: @llvm.x86.avx512.mask.range.pd.512 return _mm512_range_pd(__A, __B, 4); } __m512d test_mm512_mask_range_pd(__m512d __W, __mmask8 __U, __m512d __A, __m512d __B) { - // CHECK-LABEL: @test_mm512_mask_range_pd + // CHECK-LABEL: test_mm512_mask_range_pd // CHECK: @llvm.x86.avx512.mask.range.pd.512 return _mm512_mask_range_pd(__W, __U, __A, __B, 4); } __m512d test_mm512_maskz_range_pd(__mmask8 __U, __m512d __A, __m512d __B) { - // CHECK-LABEL: @test_mm512_maskz_range_pd + // CHECK-LABEL: test_mm512_maskz_range_pd // CHECK: @llvm.x86.avx512.mask.range.pd.512 return _mm512_maskz_range_pd(__U, __A, __B, 4); } __m512d test_mm512_range_round_pd(__m512d __A, __m512d __B) { - // CHECK-LABEL: @test_mm512_range_round_pd + // CHECK-LABEL: test_mm512_range_round_pd // CHECK: @llvm.x86.avx512.mask.range.pd.512 return _mm512_range_round_pd(__A, __B, 4, 8); } __m512d test_mm512_mask_range_round_pd(__m512d __W, __mmask8 __U, __m512d __A, __m512d __B) { - // CHECK-LABEL: @test_mm512_mask_range_round_pd + // CHECK-LABEL: test_mm512_mask_range_round_pd // CHECK: @llvm.x86.avx512.mask.range.pd.512 return _mm512_mask_range_round_pd(__W, __U, __A, __B, 4, 8); } __m512d test_mm512_maskz_range_round_pd(__mmask8 __U, __m512d __A, __m512d __B) { - // CHECK-LABEL: @test_mm512_maskz_range_round_pd + // CHECK-LABEL: test_mm512_maskz_range_round_pd // CHECK: @llvm.x86.avx512.mask.range.pd.512 return _mm512_maskz_range_round_pd(__U, __A, __B, 4, 8); } __m128d test_mm512_range_round_sd(__m128d __A, __m128d __B) { - // CHECK-LABEL: @test_mm512_range_round_sd + // CHECK-LABEL: test_mm512_range_round_sd // CHECK: @llvm.x86.avx512.mask.range.sd return _mm_range_round_sd(__A, __B, 4, 8); } @@ -929,31 +949,31 @@ __m128d test_mm512_mask_range_round_sd(__m128d __W, __mmask8 __U, __m128d __A, _ } __m128d test_mm512_maskz_range_round_sd(__mmask8 __U, __m128d __A, __m128d __B) { - // CHECK-LABEL: @test_mm512_maskz_range_round_sd + // CHECK-LABEL: test_mm512_maskz_range_round_sd // CHECK: @llvm.x86.avx512.mask.range.sd return _mm_maskz_range_round_sd(__U, __A, __B, 4, 8); } __m128 test_mm512_range_round_ss(__m128 __A, __m128 __B) { - // CHECK-LABEL: @test_mm512_range_round_ss + // CHECK-LABEL: test_mm512_range_round_ss // CHECK: @llvm.x86.avx512.mask.range.ss return _mm_range_round_ss(__A, __B, 4, 8); } __m128 test_mm512_mask_range_round_ss(__m128 __W, __mmask8 __U, __m128 __A, __m128 __B) { - // CHECK-LABEL: @test_mm512_mask_range_round_ss + // CHECK-LABEL: test_mm512_mask_range_round_ss // CHECK: @llvm.x86.avx512.mask.range.ss return _mm_mask_range_round_ss(__W, __U, __A, __B, 4, 8); } __m128 test_mm512_maskz_range_round_ss(__mmask8 __U, __m128 __A, __m128 __B) { - // CHECK-LABEL: @test_mm512_maskz_range_round_ss + // CHECK-LABEL: test_mm512_maskz_range_round_ss // CHECK: @llvm.x86.avx512.mask.range.ss return _mm_maskz_range_round_ss(__U, __A, __B, 4, 8); } __m128d test_mm_range_sd(__m128d __A, __m128d __B) { - // CHECK-LABEL: @test_mm_range_sd + // CHECK-LABEL: test_mm_range_sd // CHECK: @llvm.x86.avx512.mask.range.sd return _mm_range_sd(__A, __B, 4); } @@ -965,558 +985,564 @@ __m128d test_mm_mask_range_sd(__m128d __W, __mmask8 __U, __m128d __A, __m128d __ } __m128d test_mm_maskz_range_sd(__mmask8 __U, __m128d __A, __m128d __B) { - // CHECK-LABEL: @test_mm_maskz_range_sd + // CHECK-LABEL: test_mm_maskz_range_sd // CHECK: @llvm.x86.avx512.mask.range.sd return _mm_maskz_range_sd(__U, __A, __B, 4); } __m128 test_mm_range_ss(__m128 __A, __m128 __B) { - // CHECK-LABEL: @test_mm_range_ss + // CHECK-LABEL: test_mm_range_ss // CHECK: @llvm.x86.avx512.mask.range.ss return _mm_range_ss(__A, __B, 4); } __m128 test_mm_mask_range_ss(__m128 __W, __mmask8 __U, __m128 __A, __m128 __B) { - // CHECK-LABEL: @test_mm_mask_range_ss + // CHECK-LABEL: test_mm_mask_range_ss // CHECK: @llvm.x86.avx512.mask.range.ss return _mm_mask_range_ss(__W, __U, __A, __B, 4); } __m128 test_mm_maskz_range_ss(__mmask8 __U, __m128 __A, __m128 __B) { - // CHECK-LABEL: @test_mm_maskz_range_ss + // CHECK-LABEL: test_mm_maskz_range_ss // CHECK: @llvm.x86.avx512.mask.range.ss return _mm_maskz_range_ss(__U, __A, __B, 4); } __m512 test_mm512_range_ps(__m512 __A, __m512 __B) { - // CHECK-LABEL: @test_mm512_range_ps + // CHECK-LABEL: test_mm512_range_ps // CHECK: @llvm.x86.avx512.mask.range.ps.512 return _mm512_range_ps(__A, __B, 4); } __m512 test_mm512_mask_range_ps(__m512 __W, __mmask16 __U, __m512 __A, __m512 __B) { - // CHECK-LABEL: @test_mm512_mask_range_ps + // CHECK-LABEL: test_mm512_mask_range_ps // CHECK: @llvm.x86.avx512.mask.range.ps.512 return _mm512_mask_range_ps(__W, __U, __A, __B, 4); } __m512 test_mm512_maskz_range_ps(__mmask16 __U, __m512 __A, __m512 __B) { - // CHECK-LABEL: @test_mm512_maskz_range_ps + // CHECK-LABEL: test_mm512_maskz_range_ps // CHECK: @llvm.x86.avx512.mask.range.ps.512 return _mm512_maskz_range_ps(__U, __A, __B, 4); } __m512 test_mm512_range_round_ps(__m512 __A, __m512 __B) { - // CHECK-LABEL: @test_mm512_range_round_ps + // CHECK-LABEL: test_mm512_range_round_ps // CHECK: @llvm.x86.avx512.mask.range.ps.512 return _mm512_range_round_ps(__A, __B, 4, 8); } __m512 test_mm512_mask_range_round_ps(__m512 __W, __mmask16 __U, __m512 __A, __m512 __B) { - // CHECK-LABEL: @test_mm512_mask_range_round_ps + // CHECK-LABEL: test_mm512_mask_range_round_ps // CHECK: @llvm.x86.avx512.mask.range.ps.512 return _mm512_mask_range_round_ps(__W, __U, __A, __B, 4, 8); } __m512 test_mm512_maskz_range_round_ps(__mmask16 __U, __m512 __A, __m512 __B) { - // CHECK-LABEL: @test_mm512_maskz_range_round_ps + // CHECK-LABEL: test_mm512_maskz_range_round_ps // CHECK: @llvm.x86.avx512.mask.range.ps.512 return _mm512_maskz_range_round_ps(__U, __A, __B, 4, 8); } __m512d test_mm512_reduce_pd(__m512d __A) { - // CHECK-LABEL: @test_mm512_reduce_pd + // CHECK-LABEL: test_mm512_reduce_pd // CHECK: @llvm.x86.avx512.mask.reduce.pd.512 return _mm512_reduce_pd(__A, 4); } __m512d test_mm512_mask_reduce_pd(__m512d __W, __mmask8 __U, __m512d __A) { - // CHECK-LABEL: @test_mm512_mask_reduce_pd + // CHECK-LABEL: test_mm512_mask_reduce_pd // CHECK: @llvm.x86.avx512.mask.reduce.pd.512 return _mm512_mask_reduce_pd(__W, __U, __A, 4); } __m512d test_mm512_maskz_reduce_pd(__mmask8 __U, __m512d __A) { - // CHECK-LABEL: @test_mm512_maskz_reduce_pd + // CHECK-LABEL: test_mm512_maskz_reduce_pd // CHECK: @llvm.x86.avx512.mask.reduce.pd.512 return _mm512_maskz_reduce_pd(__U, __A, 4); } __m512 test_mm512_reduce_ps(__m512 __A) { - // CHECK-LABEL: @test_mm512_reduce_ps + // CHECK-LABEL: test_mm512_reduce_ps // CHECK: @llvm.x86.avx512.mask.reduce.ps.512 return _mm512_reduce_ps(__A, 4); } __m512 test_mm512_mask_reduce_ps(__m512 __W, __mmask16 __U, __m512 __A) { - // CHECK-LABEL: @test_mm512_mask_reduce_ps + // CHECK-LABEL: test_mm512_mask_reduce_ps // CHECK: @llvm.x86.avx512.mask.reduce.ps.512 return _mm512_mask_reduce_ps(__W, __U, __A, 4); } __m512 test_mm512_maskz_reduce_ps(__mmask16 __U, __m512 __A) { - // CHECK-LABEL: @test_mm512_maskz_reduce_ps + // CHECK-LABEL: test_mm512_maskz_reduce_ps // CHECK: @llvm.x86.avx512.mask.reduce.ps.512 return _mm512_maskz_reduce_ps(__U, __A, 4); } __m512d test_mm512_reduce_round_pd(__m512d __A) { - // CHECK-LABEL: @test_mm512_reduce_round_pd + // CHECK-LABEL: test_mm512_reduce_round_pd // CHECK: @llvm.x86.avx512.mask.reduce.pd.512 return _mm512_reduce_round_pd(__A, 4, 8); } __m512d test_mm512_mask_reduce_round_pd(__m512d __W, __mmask8 __U, __m512d __A) { - // CHECK-LABEL: @test_mm512_mask_reduce_round_pd + // CHECK-LABEL: test_mm512_mask_reduce_round_pd // CHECK: @llvm.x86.avx512.mask.reduce.pd.512 return _mm512_mask_reduce_round_pd(__W, __U, __A, 4, 8); } __m512d test_mm512_maskz_reduce_round_pd(__mmask8 __U, __m512d __A) { - // CHECK-LABEL: @test_mm512_maskz_reduce_round_pd + // CHECK-LABEL: test_mm512_maskz_reduce_round_pd // CHECK: @llvm.x86.avx512.mask.reduce.pd.512 return _mm512_maskz_reduce_round_pd(__U, __A, 4, 8); } __m512 test_mm512_reduce_round_ps(__m512 __A) { - // CHECK-LABEL: @test_mm512_reduce_round_ps + // CHECK-LABEL: test_mm512_reduce_round_ps // CHECK: @llvm.x86.avx512.mask.reduce.ps.512 return _mm512_reduce_round_ps(__A, 4, 8); } __m512 test_mm512_mask_reduce_round_ps(__m512 __W, __mmask16 __U, __m512 __A) { - // CHECK-LABEL: @test_mm512_mask_reduce_round_ps + // CHECK-LABEL: test_mm512_mask_reduce_round_ps // CHECK: @llvm.x86.avx512.mask.reduce.ps.512 return _mm512_mask_reduce_round_ps(__W, __U, __A, 4, 8); } __m512 test_mm512_maskz_reduce_round_ps(__mmask16 __U, __m512 __A) { - // CHECK-LABEL: @test_mm512_maskz_reduce_round_ps + // CHECK-LABEL: test_mm512_maskz_reduce_round_ps // CHECK: @llvm.x86.avx512.mask.reduce.ps.512 return _mm512_maskz_reduce_round_ps(__U, __A, 4, 8); } __m128 test_mm_reduce_ss(__m128 __A, __m128 __B) { - // CHECK-LABEL: @test_mm_reduce_ss + // CHECK-LABEL: test_mm_reduce_ss // CHECK: @llvm.x86.avx512.mask.reduce.ss return _mm_reduce_ss(__A, __B, 4); } __m128 test_mm_mask_reduce_ss(__m128 __W, __mmask8 __U, __m128 __A, __m128 __B) { - // CHECK-LABEL: @test_mm_mask_reduce_ss + // CHECK-LABEL: test_mm_mask_reduce_ss // CHECK: @llvm.x86.avx512.mask.reduce.ss return _mm_mask_reduce_ss(__W, __U, __A, __B, 4); } __m128 test_mm_maskz_reduce_ss(__mmask8 __U, __m128 __A, __m128 __B) { - // CHECK-LABEL: @test_mm_maskz_reduce_ss + // CHECK-LABEL: test_mm_maskz_reduce_ss // CHECK: @llvm.x86.avx512.mask.reduce.ss return _mm_maskz_reduce_ss(__U, __A, __B, 4); } __m128 test_mm_reduce_round_ss(__m128 __A, __m128 __B) { - // CHECK-LABEL: @test_mm_reduce_round_ss + // CHECK-LABEL: test_mm_reduce_round_ss // CHECK: @llvm.x86.avx512.mask.reduce.ss return _mm_reduce_round_ss(__A, __B, 4, 8); } __m128 test_mm_mask_reduce_round_ss(__m128 __W, __mmask8 __U, __m128 __A, __m128 __B) { - // CHECK-LABEL: @test_mm_mask_reduce_round_ss + // CHECK-LABEL: test_mm_mask_reduce_round_ss // CHECK: @llvm.x86.avx512.mask.reduce.ss return _mm_mask_reduce_round_ss(__W, __U, __A, __B, 4, 8); } __m128 test_mm_maskz_reduce_round_ss(__mmask8 __U, __m128 __A, __m128 __B) { - // CHECK-LABEL: @test_mm_maskz_reduce_round_ss + // CHECK-LABEL: test_mm_maskz_reduce_round_ss // CHECK: @llvm.x86.avx512.mask.reduce.ss return _mm_maskz_reduce_round_ss(__U, __A, __B, 4, 8); } __m128d test_mm_reduce_sd(__m128d __A, __m128d __B) { - // CHECK-LABEL: @test_mm_reduce_sd + // CHECK-LABEL: test_mm_reduce_sd // CHECK: @llvm.x86.avx512.mask.reduce.sd return _mm_reduce_sd(__A, __B, 4); } __m128d test_mm_mask_reduce_sd(__m128d __W, __mmask8 __U, __m128d __A, __m128d __B) { - // CHECK-LABEL: @test_mm_mask_reduce_sd + // CHECK-LABEL: test_mm_mask_reduce_sd // CHECK: @llvm.x86.avx512.mask.reduce.sd return _mm_mask_reduce_sd(__W, __U, __A, __B, 4); } __m128d test_mm_maskz_reduce_sd(__mmask8 __U, __m128d __A, __m128d __B) { - // CHECK-LABEL: @test_mm_maskz_reduce_sd + // CHECK-LABEL: test_mm_maskz_reduce_sd // CHECK: @llvm.x86.avx512.mask.reduce.sd return _mm_maskz_reduce_sd(__U, __A, __B, 4); } __m128d test_mm_reduce_round_sd(__m128d __A, __m128d __B) { - // CHECK-LABEL: @test_mm_reduce_round_sd + // CHECK-LABEL: test_mm_reduce_round_sd // CHECK: @llvm.x86.avx512.mask.reduce.sd return _mm_reduce_round_sd(__A, __B, 4, 8); } __m128d test_mm_mask_reduce_round_sd(__m128d __W, __mmask8 __U, __m128d __A, __m128d __B) { - // CHECK-LABEL: @test_mm_mask_reduce_round_sd + // CHECK-LABEL: test_mm_mask_reduce_round_sd // CHECK: @llvm.x86.avx512.mask.reduce.sd return _mm_mask_reduce_round_sd(__W, __U, __A, __B, 4, 8); } __m128d test_mm_maskz_reduce_round_sd(__mmask8 __U, __m128d __A, __m128d __B) { - // CHECK-LABEL: @test_mm_maskz_reduce_round_sd + // CHECK-LABEL: test_mm_maskz_reduce_round_sd // CHECK: @llvm.x86.avx512.mask.reduce.sd return _mm_maskz_reduce_round_sd(__U, __A, __B, 4, 8); } __mmask16 test_mm512_movepi32_mask(__m512i __A) { - // CHECK-LABEL: @test_mm512_movepi32_mask + // CHECK-LABEL: test_mm512_movepi32_mask // CHECK: [[CMP:%.*]] = icmp slt <16 x i32> %{{.*}}, zeroinitializer return _mm512_movepi32_mask(__A); } __m512i test_mm512_movm_epi32(__mmask16 __A) { - // CHECK-LABEL: @test_mm512_movm_epi32 + // CHECK-LABEL: test_mm512_movm_epi32 // CHECK: %{{.*}} = bitcast i16 %{{.*}} to <16 x i1> // CHECK: %vpmovm2.i = sext <16 x i1> %{{.*}} to <16 x i32> return _mm512_movm_epi32(__A); } __m512i test_mm512_movm_epi64(__mmask8 __A) { - // CHECK-LABEL: @test_mm512_movm_epi64 + // CHECK-LABEL: test_mm512_movm_epi64 // CHECK: %{{.*}} = bitcast i8 %{{.*}} to <8 x i1> // CHECK: %vpmovm2.i = sext <8 x i1> %{{.*}} to <8 x i64> return _mm512_movm_epi64(__A); } __mmask8 test_mm512_movepi64_mask(__m512i __A) { - // CHECK-LABEL: @test_mm512_movepi64_mask + // CHECK-LABEL: test_mm512_movepi64_mask // CHECK: [[CMP:%.*]] = icmp slt <8 x i64> %{{.*}}, zeroinitializer return _mm512_movepi64_mask(__A); } __m512 test_mm512_broadcast_f32x2(__m128 __A) { - // CHECK-LABEL: @test_mm512_broadcast_f32x2 + // CHECK-LABEL: test_mm512_broadcast_f32x2 // CHECK: shufflevector <4 x float> %{{.*}}, <4 x float> %{{.*}}, <16 x i32> <i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1> return _mm512_broadcast_f32x2(__A); } +TEST_CONSTEXPR(match_m512(_mm512_broadcast_f32x2((__m128)(__v4sf){1.0, -2.0, 3.0, -4.0}), 1.0, -2.0, 1.0, -2.0, 1.0, -2.0, 1.0, -2.0, 1.0, -2.0, 1.0, -2.0, 1.0, -2.0, 1.0, -2.0)); __m512 test_mm512_mask_broadcast_f32x2(__m512 __O, __mmask16 __M, __m128 __A) { - // CHECK-LABEL: @test_mm512_mask_broadcast_f32x2 + // CHECK-LABEL: test_mm512_mask_broadcast_f32x2 // CHECK: shufflevector <4 x float> %{{.*}}, <4 x float> %{{.*}}, <16 x i32> <i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1> // CHECK: select <16 x i1> %{{.*}}, <16 x float> %{{.*}}, <16 x float> %{{.*}} return _mm512_mask_broadcast_f32x2(__O, __M, __A); } __m512 test_mm512_maskz_broadcast_f32x2(__mmask16 __M, __m128 __A) { - // CHECK-LABEL: @test_mm512_maskz_broadcast_f32x2 + // CHECK-LABEL: test_mm512_maskz_broadcast_f32x2 // CHECK: shufflevector <4 x float> %{{.*}}, <4 x float> %{{.*}}, <16 x i32> <i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1> // CHECK: select <16 x i1> %{{.*}}, <16 x float> %{{.*}}, <16 x float> %{{.*}} return _mm512_maskz_broadcast_f32x2(__M, __A); } __m512 test_mm512_broadcast_f32x8(float const* __A) { - // CHECK-LABEL: @test_mm512_broadcast_f32x8 + // CHECK-LABEL: test_mm512_broadcast_f32x8 // CHECK: shufflevector <8 x float> %{{.*}}, <8 x float> %{{.*}}, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7> return _mm512_broadcast_f32x8(_mm256_loadu_ps(__A)); } +TEST_CONSTEXPR(match_m512(_mm512_broadcast_f32x8((__m256)(__v8sf){1.0f, 2.0f, 3.0f, 4.0f, -5.0f, -6.0f, -7.0f, -8.0f}), 1.0f, 2.0f, 3.0f, 4.0f, -5.0f, -6.0f, -7.0f, -8.0f, 1.0f, 2.0f, 3.0f, 4.0f, -5.0f, -6.0f, -7.0f, -8.0f)); __m512 test_mm512_mask_broadcast_f32x8(__m512 __O, __mmask16 __M, float const* __A) { - // CHECK-LABEL: @test_mm512_mask_broadcast_f32x8 + // CHECK-LABEL: test_mm512_mask_broadcast_f32x8 // CHECK: shufflevector <8 x float> %{{.*}}, <8 x float> %{{.*}}, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7> // CHECK: select <16 x i1> %{{.*}}, <16 x float> %{{.*}}, <16 x float> %{{.*}} return _mm512_mask_broadcast_f32x8(__O, __M, _mm256_loadu_ps(__A)); } __m512 test_mm512_maskz_broadcast_f32x8(__mmask16 __M, float const* __A) { - // CHECK-LABEL: @test_mm512_maskz_broadcast_f32x8 + // CHECK-LABEL: test_mm512_maskz_broadcast_f32x8 // CHECK: shufflevector <8 x float> %{{.*}}, <8 x float> %{{.*}}, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7> // CHECK: select <16 x i1> %{{.*}}, <16 x float> %{{.*}}, <16 x float> %{{.*}} return _mm512_maskz_broadcast_f32x8(__M, _mm256_loadu_ps(__A)); } __m512d test_mm512_broadcast_f64x2(double const* __A) { - // CHECK-LABEL: @test_mm512_broadcast_f64x2 + // CHECK-LABEL: test_mm512_broadcast_f64x2 // CHECK: shufflevector <2 x double> %{{.*}}, <2 x double> %{{.*}}, <8 x i32> <i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1> return _mm512_broadcast_f64x2(_mm_loadu_pd(__A)); } +TEST_CONSTEXPR(match_m512d(_mm512_broadcast_f64x2((__m128d)(__v2df){1.0, -2.0}), 1.0, -2.0, 1.0, -2.0, 1.0, -2.0, 1.0, -2.0)); __m512d test_mm512_mask_broadcast_f64x2(__m512d __O, __mmask8 __M, double const* __A) { - // CHECK-LABEL: @test_mm512_mask_broadcast_f64x2 + // CHECK-LABEL: test_mm512_mask_broadcast_f64x2 // CHECK: shufflevector <2 x double> %{{.*}}, <2 x double> %{{.*}}, <8 x i32> <i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1> // CHECK: select <8 x i1> %{{.*}}, <8 x double> %{{.*}}, <8 x double> %{{.*}} return _mm512_mask_broadcast_f64x2(__O, __M, _mm_loadu_pd(__A)); } __m512d test_mm512_maskz_broadcast_f64x2(__mmask8 __M, double const* __A) { - // CHECK-LABEL: @test_mm512_maskz_broadcast_f64x2 + // CHECK-LABEL: test_mm512_maskz_broadcast_f64x2 // CHECK: shufflevector <2 x double> %{{.*}}, <2 x double> %{{.*}}, <8 x i32> <i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1> // CHECK: select <8 x i1> %{{.*}}, <8 x double> %{{.*}}, <8 x double> %{{.*}} return _mm512_maskz_broadcast_f64x2(__M, _mm_loadu_pd(__A)); } __m512i test_mm512_broadcast_i32x2(__m128i __A) { - // CHECK-LABEL: @test_mm512_broadcast_i32x2 + // CHECK-LABEL: test_mm512_broadcast_i32x2 // CHECK: shufflevector <4 x i32> %{{.*}}, <4 x i32> %{{.*}}, <16 x i32> <i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1> return _mm512_broadcast_i32x2(__A); } +TEST_CONSTEXPR(match_v16si(_mm512_broadcast_i32x2((__m128i)(__v4si){1, -2, 3, -4}), 1, -2, 1, -2, 1, -2, 1, -2, 1, -2, 1, -2, 1, -2, 1, -2)); __m512i test_mm512_mask_broadcast_i32x2(__m512i __O, __mmask16 __M, __m128i __A) { - // CHECK-LABEL: @test_mm512_mask_broadcast_i32x2 + // CHECK-LABEL: test_mm512_mask_broadcast_i32x2 // CHECK: shufflevector <4 x i32> %{{.*}}, <4 x i32> %{{.*}}, <16 x i32> <i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1> // CHECK: select <16 x i1> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}} return _mm512_mask_broadcast_i32x2(__O, __M, __A); } __m512i test_mm512_maskz_broadcast_i32x2(__mmask16 __M, __m128i __A) { - // CHECK-LABEL: @test_mm512_maskz_broadcast_i32x2 + // CHECK-LABEL: test_mm512_maskz_broadcast_i32x2 // CHECK: shufflevector <4 x i32> %{{.*}}, <4 x i32> %{{.*}}, <16 x i32> <i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1> // CHECK: select <16 x i1> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}} return _mm512_maskz_broadcast_i32x2(__M, __A); } __m512i test_mm512_broadcast_i32x8(__m256i const* __A) { - // CHECK-LABEL: @test_mm512_broadcast_i32x8 + // CHECK-LABEL: test_mm512_broadcast_i32x8 // CHECK: shufflevector <8 x i32> %{{.*}}, <8 x i32> %{{.*}}, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7> return _mm512_broadcast_i32x8(_mm256_loadu_si256(__A)); } +TEST_CONSTEXPR(match_v16si(_mm512_broadcast_i32x8((__m256i)(__v8si){1, 2, 3, 4, -5, -6, -7, -8}), 1, 2, 3, 4, -5, -6, -7, -8, 1, 2, 3, 4, -5, -6, -7, -8)); __m512i test_mm512_mask_broadcast_i32x8(__m512i __O, __mmask16 __M, __m256i const* __A) { - // CHECK-LABEL: @test_mm512_mask_broadcast_i32x8 + // CHECK-LABEL: test_mm512_mask_broadcast_i32x8 // CHECK: shufflevector <8 x i32> %{{.*}}, <8 x i32> %{{.*}}, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7> // CHECK: select <16 x i1> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}} return _mm512_mask_broadcast_i32x8(__O, __M, _mm256_loadu_si256(__A)); } __m512i test_mm512_maskz_broadcast_i32x8(__mmask16 __M, __m256i const* __A) { - // CHECK-LABEL: @test_mm512_maskz_broadcast_i32x8 + // CHECK-LABEL: test_mm512_maskz_broadcast_i32x8 // CHECK: shufflevector <8 x i32> %{{.*}}, <8 x i32> %{{.*}}, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7> // CHECK: select <16 x i1> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}} return _mm512_maskz_broadcast_i32x8(__M, _mm256_loadu_si256(__A)); } __m512i test_mm512_broadcast_i64x2(__m128i const* __A) { - // CHECK-LABEL: @test_mm512_broadcast_i64x2 + // CHECK-LABEL: test_mm512_broadcast_i64x2 // CHECK: shufflevector <2 x i64> %{{.*}}, <2 x i64> %{{.*}}, <8 x i32> <i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1> return _mm512_broadcast_i64x2(_mm_loadu_si128(__A)); } +TEST_CONSTEXPR(match_v8di(_mm512_broadcast_i64x2((__m128i)(__v2di){1, -2}), 1, -2, 1, -2, 1, -2, 1, -2)); __m512i test_mm512_mask_broadcast_i64x2(__m512i __O, __mmask8 __M, __m128i const* __A) { - // CHECK-LABEL: @test_mm512_mask_broadcast_i64x2 + // CHECK-LABEL: test_mm512_mask_broadcast_i64x2 // CHECK: shufflevector <2 x i64> %{{.*}}, <2 x i64> %{{.*}}, <8 x i32> <i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1> // CHECK: select <8 x i1> %{{.*}}, <8 x i64> %{{.*}}, <8 x i64> %{{.*}} return _mm512_mask_broadcast_i64x2(__O, __M, _mm_loadu_si128(__A)); } __m512i test_mm512_maskz_broadcast_i64x2(__mmask8 __M, __m128i const* __A) { - // CHECK-LABEL: @test_mm512_maskz_broadcast_i64x2 + // CHECK-LABEL: test_mm512_maskz_broadcast_i64x2 // CHECK: shufflevector <2 x i64> %{{.*}}, <2 x i64> %{{.*}}, <8 x i32> <i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1> // CHECK: select <8 x i1> %{{.*}}, <8 x i64> %{{.*}}, <8 x i64> %{{.*}} return _mm512_maskz_broadcast_i64x2(__M, _mm_loadu_si128(__A)); } __m256 test_mm512_extractf32x8_ps(__m512 __A) { - // CHECK-LABEL: @test_mm512_extractf32x8_ps + // CHECK-LABEL: test_mm512_extractf32x8_ps // CHECK: shufflevector <16 x float> %{{.*}}, <16 x float> poison, <8 x i32> <i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15> return _mm512_extractf32x8_ps(__A, 1); } __m256 test_mm512_mask_extractf32x8_ps(__m256 __W, __mmask8 __U, __m512 __A) { - // CHECK-LABEL: @test_mm512_mask_extractf32x8_ps + // CHECK-LABEL: test_mm512_mask_extractf32x8_ps // CHECK: shufflevector <16 x float> %{{.*}}, <16 x float> poison, <8 x i32> <i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15> // CHECK: select <8 x i1> %{{.*}}, <8 x float> %{{.*}}, <8 x float> %{{.*}} return _mm512_mask_extractf32x8_ps(__W, __U, __A, 1); } __m256 test_mm512_maskz_extractf32x8_ps(__mmask8 __U, __m512 __A) { - // CHECK-LABEL: @test_mm512_maskz_extractf32x8_ps + // CHECK-LABEL: test_mm512_maskz_extractf32x8_ps // CHECK: shufflevector <16 x float> %{{.*}}, <16 x float> poison, <8 x i32> <i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15> // CHECK: select <8 x i1> %{{.*}}, <8 x float> %{{.*}}, <8 x float> %{{.*}} return _mm512_maskz_extractf32x8_ps(__U, __A, 1); } __m128d test_mm512_extractf64x2_pd(__m512d __A) { - // CHECK-LABEL: @test_mm512_extractf64x2_pd + // CHECK-LABEL: test_mm512_extractf64x2_pd // CHECK: shufflevector <8 x double> %{{.*}}, <8 x double> poison, <2 x i32> <i32 6, i32 7> return _mm512_extractf64x2_pd(__A, 3); } __m128d test_mm512_mask_extractf64x2_pd(__m128d __W, __mmask8 __U, __m512d __A) { - // CHECK-LABEL: @test_mm512_mask_extractf64x2_pd + // CHECK-LABEL: test_mm512_mask_extractf64x2_pd // CHECK: shufflevector <8 x double> %{{.*}}, <8 x double> poison, <2 x i32> <i32 6, i32 7> // CHECK: select <2 x i1> %{{.*}}, <2 x double> %{{.*}}, <2 x double> %{{.*}} return _mm512_mask_extractf64x2_pd(__W, __U, __A, 3); } __m128d test_mm512_maskz_extractf64x2_pd(__mmask8 __U, __m512d __A) { - // CHECK-LABEL: @test_mm512_maskz_extractf64x2_pd + // CHECK-LABEL: test_mm512_maskz_extractf64x2_pd // CHECK: shufflevector <8 x double> %{{.*}}, <8 x double> poison, <2 x i32> <i32 6, i32 7> // CHECK: select <2 x i1> %{{.*}}, <2 x double> %{{.*}}, <2 x double> %{{.*}} return _mm512_maskz_extractf64x2_pd(__U, __A, 3); } __m256i test_mm512_extracti32x8_epi32(__m512i __A) { - // CHECK-LABEL: @test_mm512_extracti32x8_epi32 + // CHECK-LABEL: test_mm512_extracti32x8_epi32 // CHECK: shufflevector <16 x i32> %{{.*}}, <16 x i32> poison, <8 x i32> <i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15> return _mm512_extracti32x8_epi32(__A, 1); } __m256i test_mm512_mask_extracti32x8_epi32(__m256i __W, __mmask8 __U, __m512i __A) { - // CHECK-LABEL: @test_mm512_mask_extracti32x8_epi32 + // CHECK-LABEL: test_mm512_mask_extracti32x8_epi32 // CHECK: shufflevector <16 x i32> %{{.*}}, <16 x i32> poison, <8 x i32> <i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15> // CHECK: select <8 x i1> %{{.*}}, <8 x i32> %{{.*}}, <8 x i32> %{{.*}} return _mm512_mask_extracti32x8_epi32(__W, __U, __A, 1); } __m256i test_mm512_maskz_extracti32x8_epi32(__mmask8 __U, __m512i __A) { - // CHECK-LABEL: @test_mm512_maskz_extracti32x8_epi32 + // CHECK-LABEL: test_mm512_maskz_extracti32x8_epi32 // CHECK: shufflevector <16 x i32> %{{.*}}, <16 x i32> poison, <8 x i32> <i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15> // CHECK: select <8 x i1> %{{.*}}, <8 x i32> %{{.*}}, <8 x i32> %{{.*}} return _mm512_maskz_extracti32x8_epi32(__U, __A, 1); } __m128i test_mm512_extracti64x2_epi64(__m512i __A) { - // CHECK-LABEL: @test_mm512_extracti64x2_epi64 + // CHECK-LABEL: test_mm512_extracti64x2_epi64 // CHECK: shufflevector <8 x i64> %{{.*}}, <8 x i64> poison, <2 x i32> <i32 6, i32 7> return _mm512_extracti64x2_epi64(__A, 3); } __m128i test_mm512_mask_extracti64x2_epi64(__m128i __W, __mmask8 __U, __m512i __A) { - // CHECK-LABEL: @test_mm512_mask_extracti64x2_epi64 + // CHECK-LABEL: test_mm512_mask_extracti64x2_epi64 // CHECK: shufflevector <8 x i64> %{{.*}}, <8 x i64> poison, <2 x i32> <i32 6, i32 7> // CHECK: select <2 x i1> %{{.*}}, <2 x i64> %{{.*}}, <2 x i64> %{{.*}} return _mm512_mask_extracti64x2_epi64(__W, __U, __A, 3); } __m128i test_mm512_maskz_extracti64x2_epi64(__mmask8 __U, __m512i __A) { - // CHECK-LABEL: @test_mm512_maskz_extracti64x2_epi64 + // CHECK-LABEL: test_mm512_maskz_extracti64x2_epi64 // CHECK: shufflevector <8 x i64> %{{.*}}, <8 x i64> poison, <2 x i32> <i32 6, i32 7> // CHECK: select <2 x i1> %{{.*}}, <2 x i64> %{{.*}}, <2 x i64> %{{.*}} return _mm512_maskz_extracti64x2_epi64(__U, __A, 3); } __m512 test_mm512_insertf32x8(__m512 __A, __m256 __B) { - // CHECK-LABEL: @test_mm512_insertf32x8 + // CHECK-LABEL: test_mm512_insertf32x8 // CHECK: shufflevector <16 x float> %{{.*}}, <16 x float> %{{.*}}, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 16, i32 17, i32 18, i32 19, i32 20, i32 21, i32 22, i32 23> return _mm512_insertf32x8(__A, __B, 1); } __m512 test_mm512_mask_insertf32x8(__m512 __W, __mmask16 __U, __m512 __A, __m256 __B) { - // CHECK-LABEL: @test_mm512_mask_insertf32x8 + // CHECK-LABEL: test_mm512_mask_insertf32x8 // CHECK: shufflevector <16 x float> %{{.*}}, <16 x float> %{{.*}}, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 16, i32 17, i32 18, i32 19, i32 20, i32 21, i32 22, i32 23> // CHECK: select <16 x i1> %{{.*}}, <16 x float> %{{.*}}, <16 x float> %{{.*}} return _mm512_mask_insertf32x8(__W, __U, __A, __B, 1); } __m512 test_mm512_maskz_insertf32x8(__mmask16 __U, __m512 __A, __m256 __B) { - // CHECK-LABEL: @test_mm512_maskz_insertf32x8 + // CHECK-LABEL: test_mm512_maskz_insertf32x8 // CHECK: shufflevector <16 x float> %{{.*}}, <16 x float> %{{.*}}, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 16, i32 17, i32 18, i32 19, i32 20, i32 21, i32 22, i32 23> // CHECK: select <16 x i1> %{{.*}}, <16 x float> %{{.*}}, <16 x float> %{{.*}} return _mm512_maskz_insertf32x8(__U, __A, __B, 1); } __m512d test_mm512_insertf64x2(__m512d __A, __m128d __B) { - // CHECK-LABEL: @test_mm512_insertf64x2 + // CHECK-LABEL: test_mm512_insertf64x2 // CHECK: shufflevector <8 x double> %{{.*}}, <8 x double> %{{.*}}, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 8, i32 9> return _mm512_insertf64x2(__A, __B, 3); } __m512d test_mm512_mask_insertf64x2(__m512d __W, __mmask8 __U, __m512d __A, __m128d __B) { - // CHECK-LABEL: @test_mm512_mask_insertf64x2 + // CHECK-LABEL: test_mm512_mask_insertf64x2 // CHECK: shufflevector <8 x double> %{{.*}}, <8 x double> %{{.*}}, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 8, i32 9> // CHECK: select <8 x i1> %{{.*}}, <8 x double> %{{.*}}, <8 x double> %{{.*}} return _mm512_mask_insertf64x2(__W, __U, __A, __B, 3); } __m512d test_mm512_maskz_insertf64x2(__mmask8 __U, __m512d __A, __m128d __B) { - // CHECK-LABEL: @test_mm512_maskz_insertf64x2 + // CHECK-LABEL: test_mm512_maskz_insertf64x2 // CHECK: shufflevector <8 x double> %{{.*}}, <8 x double> %{{.*}}, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 8, i32 9> // CHECK: select <8 x i1> %{{.*}}, <8 x double> %{{.*}}, <8 x double> %{{.*}} return _mm512_maskz_insertf64x2(__U, __A, __B, 3); } __m512i test_mm512_inserti32x8(__m512i __A, __m256i __B) { - // CHECK-LABEL: @test_mm512_inserti32x8 + // CHECK-LABEL: test_mm512_inserti32x8 // CHECK: shufflevector <16 x i32> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 16, i32 17, i32 18, i32 19, i32 20, i32 21, i32 22, i32 23> return _mm512_inserti32x8(__A, __B, 1); } __m512i test_mm512_mask_inserti32x8(__m512i __W, __mmask16 __U, __m512i __A, __m256i __B) { - // CHECK-LABEL: @test_mm512_mask_inserti32x8 + // CHECK-LABEL: test_mm512_mask_inserti32x8 // CHECK: shufflevector <16 x i32> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 16, i32 17, i32 18, i32 19, i32 20, i32 21, i32 22, i32 23> // CHECK: select <16 x i1> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}} return _mm512_mask_inserti32x8(__W, __U, __A, __B, 1); } __m512i test_mm512_maskz_inserti32x8(__mmask16 __U, __m512i __A, __m256i __B) { - // CHECK-LABEL: @test_mm512_maskz_inserti32x8 + // CHECK-LABEL: test_mm512_maskz_inserti32x8 // CHECK: shufflevector <16 x i32> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 16, i32 17, i32 18, i32 19, i32 20, i32 21, i32 22, i32 23> // CHECK: select <16 x i1> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}} return _mm512_maskz_inserti32x8(__U, __A, __B, 1); } __m512i test_mm512_inserti64x2(__m512i __A, __m128i __B) { - // CHECK-LABEL: @test_mm512_inserti64x2 + // CHECK-LABEL: test_mm512_inserti64x2 // CHECK: shufflevector <8 x i64> %{{.*}}, <8 x i64> %{{.*}}, <8 x i32> <i32 0, i32 1, i32 8, i32 9, i32 4, i32 5, i32 6, i32 7> return _mm512_inserti64x2(__A, __B, 1); } __m512i test_mm512_mask_inserti64x2(__m512i __W, __mmask8 __U, __m512i __A, __m128i __B) { - // CHECK-LABEL: @test_mm512_mask_inserti64x2 + // CHECK-LABEL: test_mm512_mask_inserti64x2 // CHECK: shufflevector <8 x i64> %{{.*}}, <8 x i64> %{{.*}}, <8 x i32> <i32 0, i32 1, i32 8, i32 9, i32 4, i32 5, i32 6, i32 7> // CHECK: select <8 x i1> %{{.*}}, <8 x i64> %{{.*}}, <8 x i64> %{{.*}} return _mm512_mask_inserti64x2(__W, __U, __A, __B, 1); } __m512i test_mm512_maskz_inserti64x2(__mmask8 __U, __m512i __A, __m128i __B) { - // CHECK-LABEL: @test_mm512_maskz_inserti64x2 + // CHECK-LABEL: test_mm512_maskz_inserti64x2 // CHECK: shufflevector <8 x i64> %{{.*}}, <8 x i64> %{{.*}}, <8 x i32> <i32 0, i32 1, i32 8, i32 9, i32 4, i32 5, i32 6, i32 7> // CHECK: select <8 x i1> %{{.*}}, <8 x i64> %{{.*}}, <8 x i64> %{{.*}} return _mm512_maskz_inserti64x2(__U, __A, __B, 1); } __mmask8 test_mm512_mask_fpclass_pd_mask(__mmask8 __U, __m512d __A) { - // CHECK-LABEL: @test_mm512_mask_fpclass_pd_mask + // CHECK-LABEL: test_mm512_mask_fpclass_pd_mask // CHECK: @llvm.x86.avx512.fpclass.pd.512 return _mm512_mask_fpclass_pd_mask(__U, __A, 4); } __mmask8 test_mm512_fpclass_pd_mask(__m512d __A) { - // CHECK-LABEL: @test_mm512_fpclass_pd_mask + // CHECK-LABEL: test_mm512_fpclass_pd_mask // CHECK: @llvm.x86.avx512.fpclass.pd.512 return _mm512_fpclass_pd_mask(__A, 4); } __mmask16 test_mm512_mask_fpclass_ps_mask(__mmask16 __U, __m512 __A) { - // CHECK-LABEL: @test_mm512_mask_fpclass_ps_mask + // CHECK-LABEL: test_mm512_mask_fpclass_ps_mask // CHECK: @llvm.x86.avx512.fpclass.ps.512 return _mm512_mask_fpclass_ps_mask(__U, __A, 4); } __mmask16 test_mm512_fpclass_ps_mask(__m512 __A) { - // CHECK-LABEL: @test_mm512_fpclass_ps_mask + // CHECK-LABEL: test_mm512_fpclass_ps_mask // CHECK: @llvm.x86.avx512.fpclass.ps.512 return _mm512_fpclass_ps_mask(__A, 4); } __mmask8 test_mm_fpclass_sd_mask(__m128d __A) { - // CHECK-LABEL: @test_mm_fpclass_sd_mask + // CHECK-LABEL: test_mm_fpclass_sd_mask // CHECK: @llvm.x86.avx512.mask.fpclass.sd return _mm_fpclass_sd_mask (__A, 2); } __mmask8 test_mm_mask_fpclass_sd_mask(__mmask8 __U, __m128d __A) { - // CHECK-LABEL: @test_mm_mask_fpclass_sd_mask + // CHECK-LABEL: test_mm_mask_fpclass_sd_mask // CHECK: @llvm.x86.avx512.mask.fpclass.sd return _mm_mask_fpclass_sd_mask (__U, __A, 2); } __mmask8 test_mm_fpclass_ss_mask(__m128 __A) { - // CHECK-LABEL: @test_mm_fpclass_ss_mask + // CHECK-LABEL: test_mm_fpclass_ss_mask // CHECK: @llvm.x86.avx512.mask.fpclass.ss return _mm_fpclass_ss_mask ( __A, 2); } __mmask8 test_mm_mask_fpclass_ss_mask(__mmask8 __U, __m128 __A) { - // CHECK-LABEL: @test_mm_mask_fpclass_ss_mask + // CHECK-LABEL: test_mm_mask_fpclass_ss_mask // CHECK: @llvm.x86.avx512.mask.fpclass.ss return _mm_mask_fpclass_ss_mask (__U, __A, 2); } diff --git a/clang/test/CodeGen/X86/avx512f-builtins.c b/clang/test/CodeGen/X86/avx512f-builtins.c index 84e700c..eb3b283 100644 --- a/clang/test/CodeGen/X86/avx512f-builtins.c +++ b/clang/test/CodeGen/X86/avx512f-builtins.c @@ -3,6 +3,11 @@ // RUN: %clang_cc1 -x c++ -flax-vector-conversions=none -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +avx512f -emit-llvm -o - -Wall -Werror -Wsign-conversion | FileCheck %s // RUN: %clang_cc1 -x c++ -flax-vector-conversions=none -fms-extensions -fms-compatibility -ffreestanding %s -triple=x86_64-windows-msvc -target-feature +avx512f -emit-llvm -o - -Wall -Werror -Wsign-conversion | FileCheck %s +// RUN: %clang_cc1 -x c -flax-vector-conversions=none -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +avx512f -emit-llvm -o - -Wall -Werror -Wsign-conversion -fexperimental-new-constant-interpreter | FileCheck %s +// RUN: %clang_cc1 -x c -flax-vector-conversions=none -fms-extensions -fms-compatibility -ffreestanding %s -triple=x86_64-windows-msvc -target-feature +avx512f -emit-llvm -o - -Wall -Werror -Wsign-conversion -fexperimental-new-constant-interpreter | FileCheck %s +// RUN: %clang_cc1 -x c++ -flax-vector-conversions=none -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +avx512f -emit-llvm -o - -Wall -Werror -Wsign-conversion -fexperimental-new-constant-interpreter | FileCheck %s +// RUN: %clang_cc1 -x c++ -flax-vector-conversions=none -fms-extensions -fms-compatibility -ffreestanding %s -triple=x86_64-windows-msvc -target-feature +avx512f -emit-llvm -o - -Wall -Werror -Wsign-conversion -fexperimental-new-constant-interpreter | FileCheck %s + #include <immintrin.h> #include "builtin_test_helpers.h" @@ -154,6 +159,7 @@ __m512 test_mm512_add_ps(__m512 a, __m512 b) // CHECK: fadd <16 x float> return _mm512_add_ps(a, b); } +TEST_CONSTEXPR(match_m512(_mm512_add_ps((__m512){-1.0f, -2.0f, -3.0f, -4.0f, -5.0f, -6.0f, -7.0f, -8.0f, +1.0f, +2.0f, +3.0f, +4.0f, +5.0f, +6.0f, +7.0f, +8.0f}, (__m512){-1.0f, -2.0f, -3.0f, -4.0f, -5.0f, -6.0f, -7.0f, -8.0f, +1.0f, +2.0f, +3.0f, +4.0f, +5.0f, +6.0f, +7.0f, +8.0f}), -2.0f, -4.0f, -6.0f, -8.0f, -10.0f, -12.0f, -14.0f, -16.0f, +2.0f, +4.0f, +6.0f, +8.0f, +10.0f, +12.0f, +14.0f, +16.0f)); __m512d test_mm512_add_pd(__m512d a, __m512d b) { @@ -161,6 +167,7 @@ __m512d test_mm512_add_pd(__m512d a, __m512d b) // CHECK: fadd <8 x double> return _mm512_add_pd(a, b); } +TEST_CONSTEXPR(match_m512d(_mm512_add_pd((__m512d){-1.0, -2.0, -3.0, -4.0, +1.0, +2.0, +3.0, +4.0}, (__m512d){-1.0, -2.0, -3.0, -4.0, +1.0, +2.0, +3.0, +4.0}), -2.0, -4.0, -6.0, -8.0, +2.0, +4.0, +6.0, +8.0)); __m512 test_mm512_mul_ps(__m512 a, __m512 b) { @@ -168,6 +175,7 @@ __m512 test_mm512_mul_ps(__m512 a, __m512 b) // CHECK: fmul <16 x float> return _mm512_mul_ps(a, b); } +TEST_CONSTEXPR(match_m512(_mm512_mul_ps((__m512){-1.0f, -2.0f, -3.0f, -4.0f, -5.0f, -6.0f, -7.0f, -8.0f, +1.0f, +2.0f, +3.0f, +4.0f, +5.0f, +6.0f, +7.0f, +8.0f}, (__m512){-1.0f, -2.0f, -3.0f, -4.0f, -5.0f, -6.0f, -7.0f, -8.0f, +1.0f, +2.0f, +3.0f, +4.0f, +5.0f, +6.0f, +7.0f, +8.0f}), +1.0f, +4.0f, +9.0f, +16.0f, +25.0f, +36.0f, +49.0f, +64.0f, +1.0f, +4.0f, +9.0f, +16.0f, +25.0f, +36.0f, +49.0f, +64.0f)); __m512d test_mm512_mul_pd(__m512d a, __m512d b) { @@ -175,6 +183,7 @@ __m512d test_mm512_mul_pd(__m512d a, __m512d b) // CHECK: fmul <8 x double> return _mm512_mul_pd(a, b); } +TEST_CONSTEXPR(match_m512d(_mm512_mul_pd((__m512d){-1.0, -2.0, -3.0, -4.0, +1.0, +2.0, +3.0, +4.0}, (__m512d){-1.0, -2.0, -3.0, -4.0, +1.0, +2.0, +3.0, +4.0}), +1.0, +4.0, +9.0, +16.0, +1.0, +4.0, +9.0, +16.0)); void test_mm512_storeu_si512 (void *__P, __m512i __A) { @@ -435,6 +444,22 @@ __m512d test_mm512_set1_pd(double d) // CHECK: insertelement <8 x double> {{.*}}, i32 7 return _mm512_set1_pd(d); } +TEST_CONSTEXPR(match_m512d(_mm512_set1_pd(-100.0), -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0)); + +__m512 test_mm512_set1_ps(float d) +{ + // CHECK-LABEL: test_mm512_set1_ps + // CHECK: insertelement <16 x float> {{.*}}, i32 0 + // CHECK: insertelement <16 x float> {{.*}}, i32 1 + // CHECK: insertelement <16 x float> {{.*}}, i32 2 + // CHECK: insertelement <16 x float> {{.*}}, i32 3 + // CHECK: insertelement <16 x float> {{.*}}, i32 4 + // CHECK: insertelement <16 x float> {{.*}}, i32 5 + // CHECK: insertelement <16 x float> {{.*}}, i32 6 + // CHECK: insertelement <16 x float> {{.*}}, i32 15 + return _mm512_set1_ps(d); +} +TEST_CONSTEXPR(match_m512(_mm512_set1_ps(-55.0f), -55.0f, -55.0f, -55.0f, -55.0f, -55.0f, -55.0f, -55.0f, -55.0f, -55.0f, -55.0f, -55.0f, -55.0f, -55.0f, -55.0f, -55.0f, -55.0f)); __mmask16 test_mm512_knot(__mmask16 a) { @@ -758,6 +783,8 @@ __m512 test_mm512_fmadd_ps(__m512 __A, __m512 __B, __m512 __C) { __m512 test_mm512_mask_fmadd_ps(__m512 __A, __mmask16 __U, __m512 __B, __m512 __C) { // CHECK-LABEL: test_mm512_mask_fmadd_ps // CHECK: call {{.*}}<16 x float> @llvm.fma.v16f32(<16 x float> %{{.*}}, <16 x float> %{{.*}}, <16 x float> %{{.*}}) + // CHECK: bitcast i16 %{{.*}} to <16 x i1> + // CHECK: select <16 x i1> %{{.*}}, <16 x float> %{{.*}}, <16 x float> %{{.*}} return _mm512_mask_fmadd_ps(__A, __U, __B, __C); } __m512 test_mm512_mask3_fmadd_ps(__m512 __A, __m512 __B, __m512 __C, __mmask16 __U) { @@ -1261,6 +1288,7 @@ __m512d test_mm512_unpackhi_pd(__m512d a, __m512d b) // CHECK: shufflevector <8 x double> {{.*}} <i32 1, i32 9, i32 3, i32 11, i32 5, i32 13, i32 7, i32 15> return _mm512_unpackhi_pd(a, b); } +TEST_CONSTEXPR(match_m512d(_mm512_unpackhi_pd((__m512d){1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0}, (__m512d){9.0, 10.0, 11.0, 12.0, 13.0, 14.0, 15.0, 16.0}), +2.0, +10.0, +4.0, +12.0, +6.0, +14.0, +8.0, +16.0)); __m512d test_mm512_unpacklo_pd(__m512d a, __m512d b) { @@ -1268,6 +1296,7 @@ __m512d test_mm512_unpacklo_pd(__m512d a, __m512d b) // CHECK: shufflevector <8 x double> {{.*}} <i32 0, i32 8, i32 2, i32 10, i32 4, i32 12, i32 6, i32 14> return _mm512_unpacklo_pd(a, b); } +TEST_CONSTEXPR(match_m512d(_mm512_unpacklo_pd((__m512d){1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0}, (__m512d){9.0, 10.0, 11.0, 12.0, 13.0, 14.0, 15.0, 16.0}), +1.0, +9.0, +3.0, +11.0, +5.0, +13.0, +7.0, +15.0)); __m512 test_mm512_unpackhi_ps(__m512 a, __m512 b) { @@ -1275,6 +1304,7 @@ __m512 test_mm512_unpackhi_ps(__m512 a, __m512 b) // CHECK: shufflevector <16 x float> {{.*}} <i32 2, i32 18, i32 3, i32 19, i32 6, i32 22, i32 7, i32 23, i32 10, i32 26, i32 11, i32 27, i32 14, i32 30, i32 15, i32 31> return _mm512_unpackhi_ps(a, b); } +TEST_CONSTEXPR(match_m512(_mm512_unpackhi_ps((__m512){0.0f, 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f, 9.0f, 10.0f, 11.0f, 12.0f, 13.0f, 14.0f, 15.0f}, (__m512){16.0f, 17.0f, 18.0f, 19.0f, 20.0f, 21.0f, 22.0f, 23.0f, 24.0f, 25.0f, 26.0f, 27.0f, 28.0f, 29.0f, 30.0f, 31.0f}), +2.0f, +18.0f, +3.0f, +19.0f, +6.0f, +22.0f, +7.0f, +23.0f, +10.0f, +26.0f, +11.0f, +27.0f, +14.0f, +30.0f, +15.0f, +31.0f)); __m512 test_mm512_unpacklo_ps(__m512 a, __m512 b) { @@ -1282,6 +1312,7 @@ __m512 test_mm512_unpacklo_ps(__m512 a, __m512 b) // CHECK: shufflevector <16 x float> {{.*}} <i32 0, i32 16, i32 1, i32 17, i32 4, i32 20, i32 5, i32 21, i32 8, i32 24, i32 9, i32 25, i32 12, i32 28, i32 13, i32 29> return _mm512_unpacklo_ps(a, b); } +TEST_CONSTEXPR(match_m512(_mm512_unpacklo_ps((__m512){0.0f, 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f, 9.0f, 10.0f, 11.0f, 12.0f, 13.0f, 14.0f, 15.0f}, (__m512){16.0f, 17.0f, 18.0f, 19.0f, 20.0f, 21.0f, 22.0f, 23.0f, 24.0f, 25.0f, 26.0f, 27.0f, 28.0f, 29.0f, 30.0f, 31.0f}), +0.0f, +16.0f, +1.0f, +17.0f, +4.0f, +20.0f, +5.0f, +21.0f, +8.0f, +24.0f, +9.0f, +25.0f, +12.0f, +28.0f, +13.0f, +29.0f)); __mmask16 test_mm512_cmp_round_ps_mask(__m512 a, __m512 b) { // CHECK-LABEL: test_mm512_cmp_round_ps_mask @@ -2717,6 +2748,7 @@ __m512i test_mm512_mask_and_epi32(__m512i __src,__mmask16 __k, __m512i __a, __m5 // CHECK: select <16 x i1> %[[MASK]], <16 x i32> %{{.*}}, <16 x i32> %{{.*}} return _mm512_mask_and_epi32(__src, __k,__a, __b); } +TEST_CONSTEXPR(match_v16si(_mm512_mask_and_epi32((__m512i)(__v16si){1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000}, (__mmask16)0x0001, (__m512i)(__v16si){7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7}, (__m512i)(__v16si){3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3}), 3, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000)); __m512i test_mm512_maskz_and_epi32(__mmask16 __k, __m512i __a, __m512i __b) { // CHECK-LABEL: test_mm512_maskz_and_epi32 @@ -2733,6 +2765,7 @@ __m512i test_mm512_mask_and_epi64(__m512i __src,__mmask8 __k, __m512i __a, __m51 // CHECK: select <8 x i1> %[[MASK]], <8 x i64> %[[AND_RES]], <8 x i64> %{{.*}} return _mm512_mask_and_epi64(__src, __k,__a, __b); } +TEST_CONSTEXPR(match_m512i(_mm512_mask_and_epi64((__m512i){1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000}, (__mmask8)0x01, (__m512i){7, 7, 7, 7, 7, 7, 7, 7}, (__m512i){3, 3, 3, 3, 3, 3, 3, 3}), 3, 1000, 1000, 1000, 1000, 1000, 1000, 1000)); __m512i test_mm512_maskz_and_epi64(__mmask8 __k, __m512i __a, __m512i __b) { // CHECK-LABEL: test_mm512_maskz_and_epi64 @@ -2811,36 +2844,42 @@ __m512i test_mm512_and_epi32(__m512i __src,__mmask16 __k, __m512i __a, __m512i _ // CHECK: and <16 x i32> return _mm512_and_epi32(__a, __b); } +TEST_CONSTEXPR(match_v16si(_mm512_and_epi32((__m512i)(__v16si){0, -1, 0, -1, 0, 0, -1, -1, 0, -1, 0, -1, 0, 0, -1, -1}, (__m512i)(__v16si){0, 0, -1, -1, 0, -1, 0, -1, 0, 0, -1, -1, 0, -1, 0, -1}), 0, 0, 0, -1, 0, 0, 0, -1, 0, 0, 0, -1, 0, 0, 0, -1)); __m512i test_mm512_and_epi64(__m512i __src,__mmask8 __k, __m512i __a, __m512i __b) { // CHECK-LABEL: test_mm512_and_epi64 // CHECK: and <8 x i64> return _mm512_and_epi64(__a, __b); } +TEST_CONSTEXPR(match_v8di(_mm512_and_epi64((__m512i)(__v8di){0, -1, 0, -1, 0, 0, -1, -1}, (__m512i)(__v8di){0, 0, -1, -1, 0, -1, 0, -1}), 0, 0, 0, -1, 0, 0, 0, -1)); __m512i test_mm512_or_epi32(__m512i __src,__mmask16 __k, __m512i __a, __m512i __b) { // CHECK-LABEL: test_mm512_or_epi32 // CHECK: or <16 x i32> return _mm512_or_epi32(__a, __b); } +TEST_CONSTEXPR(match_v16si(_mm512_or_epi32((__m512i)(__v16si){0, -1, 0, -1, 0, 0, -1, -1, 0, -1, 0, -1, 0, 0, -1, -1}, (__m512i)(__v16si){0, 0, -1, -1, 0, -1, 0, -1, 0, 0, -1, -1, 0, -1, 0, -1}), 0, -1, -1, -1, 0, -1, -1, -1, 0, -1, -1, -1, 0, -1, -1, -1)); __m512i test_mm512_or_epi64(__m512i __src,__mmask8 __k, __m512i __a, __m512i __b) { // CHECK-LABEL: test_mm512_or_epi64 // CHECK: or <8 x i64> return _mm512_or_epi64(__a, __b); } +TEST_CONSTEXPR(match_v8di(_mm512_or_epi64((__m512i)(__v8di){0, -1, 0, -1, 0, 0, -1, -1}, (__m512i)(__v8di){0, 0, -1, -1, 0, -1, 0, -1}), 0, -1, -1, -1, 0, -1, -1, -1)); __m512i test_mm512_xor_epi32(__m512i __src,__mmask16 __k, __m512i __a, __m512i __b) { // CHECK-LABEL: test_mm512_xor_epi32 // CHECK: xor <16 x i32> return _mm512_xor_epi32(__a, __b); } +TEST_CONSTEXPR(match_v16si(_mm512_xor_epi32((__m512i)(__v16si){0, -1, 0, -1, 0, 0, -1, -1, 0, -1, 0, -1, 0, 0, -1, -1}, (__m512i)(__v16si){0, 0, -1, -1, 0, -1, 0, -1, 0, 0, -1, -1, 0, -1, 0, -1}), 0, -1, -1, 0, 0, -1, -1, 0, 0, -1, -1, 0, 0, -1, -1, 0)); __m512i test_mm512_xor_epi64(__m512i __src,__mmask8 __k, __m512i __a, __m512i __b) { // CHECK-LABEL: test_mm512_xor_epi64 // CHECK: xor <8 x i64> return _mm512_xor_epi64(__a, __b); } +TEST_CONSTEXPR(match_v8di(_mm512_xor_epi64((__m512i)(__v8di){0, -1, 0, -1, 0, 0, -1, -1}, (__m512i)(__v8di){0, 0, -1, -1, 0, -1, 0, -1}), 0, -1, -1, 0, 0, -1, -1, 0)); __m512i test_mm512_maskz_andnot_epi32 (__mmask16 __k,__m512i __A, __m512i __B){ // CHECK-LABEL: test_mm512_maskz_andnot_epi32 @@ -2869,6 +2908,7 @@ __m512i test_mm512_andnot_si512(__m512i __A, __m512i __B) return _mm512_andnot_si512(__A, __B); } +TEST_CONSTEXPR(match_v8di(_mm512_andnot_si512((__m512i)(__v8di){0, -1, 0, -1, 0, 0, -1, -1}, (__m512i)(__v8di){0, 0, -1, -1, 0, -1, 0, -1}), 0, 0, -1, 0, 0, -1, 0, 0)); __m512i test_mm512_andnot_epi32(__m512i __A, __m512i __B) { // CHECK-LABEL: test_mm512_andnot_epi32 @@ -2876,6 +2916,7 @@ __m512i test_mm512_andnot_epi32(__m512i __A, __m512i __B) { // CHECK: and <16 x i32> %{{.*}}, %{{.*}} return _mm512_andnot_epi32(__A,__B); } +TEST_CONSTEXPR(match_v16si(_mm512_andnot_epi32((__m512i)(__v16si){0, -1, 0, -1, 0, 0, -1, -1, 0, -1, 0, -1, 0, 0, -1, -1}, (__m512i)(__v16si){0, 0, -1, -1, 0, -1, 0, -1, 0, 0, -1, -1, 0, -1, 0, -1}), 0, 0, -1, 0, 0, -1, 0, 0, 0, 0, -1, 0, 0, -1, 0, 0)); __m512i test_mm512_maskz_andnot_epi64 (__mmask8 __k,__m512i __A, __m512i __B) { // CHECK-LABEL: test_mm512_maskz_andnot_epi64 @@ -2900,6 +2941,7 @@ __m512i test_mm512_andnot_epi64(__m512i __A, __m512i __B) { // CHECK: and <8 x i64> %{{.*}}, %{{.*}} return _mm512_andnot_epi64(__A,__B); } +TEST_CONSTEXPR(match_v8di(_mm512_andnot_epi64((__m512i)(__v8di){0, -1, 0, -1, 0, 0, -1, -1}, (__m512i)(__v8di){0, 0, -1, -1, 0, -1, 0, -1}), 0, 0, -1, 0, 0, -1, 0, 0)); __m512i test_mm512_maskz_sub_epi32 (__mmask16 __k,__m512i __A, __m512i __B) { //CHECK-LABEL: test_mm512_maskz_sub_epi32 @@ -2994,6 +3036,7 @@ __m512i test_mm512_mul_epi32(__m512i __A, __m512i __B) { //CHECK: mul <8 x i64> %{{.*}}, %{{.*}} return _mm512_mul_epi32(__A,__B); } +TEST_CONSTEXPR(match_v8di(_mm512_mul_epi32((__m512i)(__v16si){+1, -2, +3, -4, +5, -6, +7, -8, +9, -10, +11, -12, +13, -14, +15, -16}, (__m512i)(__v16si){-32, -30, +28, +26, -24, -22, +20, +18, -16, -14, +12, +10, -8, +6, -4, +2}), -32, 84, -120, 140, -144, 132, -104, -60)); __m512i test_mm512_maskz_mul_epi32 (__mmask8 __k,__m512i __A, __m512i __B) { //CHECK-LABEL: test_mm512_maskz_mul_epi32 @@ -3024,6 +3067,7 @@ __m512i test_mm512_mul_epu32 (__m512i __A, __m512i __B) { //CHECK: mul <8 x i64> %{{.*}}, %{{.*}} return _mm512_mul_epu32(__A,__B); } +TEST_CONSTEXPR(match_m512i(_mm512_mul_epu32((__m512i)(__v16si){+1, -2, +3, -4, +5, -6, +7, -8, +9, -10, +11, -12, +13, -14, +15, -16}, (__m512i)(__v16si){-32, -30, +28, +26, -24, -22, +20, +18, -16, -14, +12, +10, -8, +6, -4, +2}), 4294967264, 84, 21474836360, 140, 38654705520, 132, 55834574744, 64424509380)); __m512i test_mm512_maskz_mul_epu32 (__mmask8 __k,__m512i __A, __m512i __B) { //CHECK-LABEL: test_mm512_maskz_mul_epu32 @@ -3049,6 +3093,7 @@ __m512i test_mm512_maskz_mullo_epi32 (__mmask16 __k,__m512i __A, __m512i __B) { //CHECK: select <16 x i1> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}} return _mm512_maskz_mullo_epi32(__k,__A,__B); } +TEST_CONSTEXPR(match_v16si(_mm512_maskz_mullo_epi32(0x00FF, (__m512i)(__v16si){+1, -2, +3, -4, +5, -6, +7, -8, +9, -10, +11, -12, +13, -14, +15, -16}, (__m512i)(__v16si){-2, +3, +4, +5, -6, +7, +8, +9, -10, +11, +12, +13, -14, +15, +16, +17}), -2, -6, +12, -20, -30, -42, +56, -72, 0, 0, 0, 0, 0, 0, 0, 0)); __m512i test_mm512_mask_mullo_epi32 (__mmask16 __k,__m512i __A, __m512i __B, __m512i __src) { //CHECK-LABEL: test_mm512_mask_mullo_epi32 @@ -3056,12 +3101,14 @@ __m512i test_mm512_mask_mullo_epi32 (__mmask16 __k,__m512i __A, __m512i __B, __m //CHECK: select <16 x i1> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}} return _mm512_mask_mullo_epi32(__src,__k,__A,__B); } +TEST_CONSTEXPR(match_v16si(_mm512_mask_mullo_epi32((__m512i)(__v16si){-100, +200, -300, +400, -500, +600, -700, +800, -900, +1000, -1100, +1200, -1300, +1400, -1500, +1600}, 0x00FF, (__m512i)(__v16si){+1, -2, +3, -4, +5, -6, +7, -8, +9, -10, +11, -12, +13, -14, +15, -16}, (__m512i)(__v16si){-2, +3, +4, +5, -6, +7, +8, +9, -10, +11, +12, +13, -14, +15, +16, +17}), -2, -6, +12, -20, -30, -42, +56, -72, -900, +1000, -1100, +1200, -1300, +1400, -1500, +1600)); __m512i test_mm512_mullo_epi32(__m512i __A, __m512i __B) { //CHECK-LABEL: test_mm512_mullo_epi32 //CHECK: mul <16 x i32> return _mm512_mullo_epi32(__A,__B); } +TEST_CONSTEXPR(match_v16si(_mm512_mullo_epi32((__m512i)(__v16si){+1, -2, +3, -4, +5, -6, +7, -8, +9, -10, +11, -12, +13, -14, +15, -16}, (__m512i)(__v16si){-2, +3, +4, +5, -6, +7, +8, +9, -10, +11, +12, +13, -14, +15, +16, +17}), -2, -6, +12, -20, -30, -42, +56, -72, -90, -110, +132, -156, -182, -210, +240, -272)); __m512i test_mm512_mullox_epi64 (__m512i __A, __m512i __B) { // CHECK-LABEL: test_mm512_mullox_epi64 @@ -3542,6 +3589,7 @@ __m512d test_mm512_div_pd(__m512d __a, __m512d __b) { // CHECK: fdiv <8 x double> return _mm512_div_pd(__a,__b); } +TEST_CONSTEXPR(match_m512d(_mm512_div_pd((__m512d){+8.0, +6.0, +4.0, +2.0, -8.0, -6.0, -4.0, -2.0}, (__m512d){+2.0, +2.0, +2.0, +2.0, -2.0, -2.0, -2.0, -2.0}), +4.0, +3.0, +2.0, +1.0, +4.0, +3.0, +2.0, +1.0)); __m512d test_mm512_mask_div_pd(__m512d __w, __mmask8 __u, __m512d __a, __m512d __b) { // CHECK-LABEL: test_mm512_mask_div_pd // CHECK: fdiv <8 x double> %{{.*}}, %{{.*}} @@ -3576,6 +3624,7 @@ __m512 test_mm512_div_ps(__m512 __A, __m512 __B) { // CHECK: fdiv <16 x float> return _mm512_div_ps(__A,__B); } +TEST_CONSTEXPR(match_m512(_mm512_div_ps((__m512){+16.0f, +14.0f, +12.0f, +10.0f, +8.0f, +6.0f, +4.0f, +2.0f, -16.0f, -14.0f, -12.0f, -10.0f, -8.0f, -6.0f, -4.0f, -2.0f}, (__m512){+2.0f, +2.0f, +2.0f, +2.0f, +2.0f, +2.0f, +2.0f, +2.0f, -2.0f, -2.0f, -2.0f, -2.0f, -2.0f, -2.0f, -2.0f, -2.0f}), +8.0f, +7.0f, +6.0f, +5.0f, +4.0f, +3.0f, +2.0f, +1.0f, +8.0f, +7.0f, +6.0f, +5.0f, +4.0f, +3.0f, +2.0f, +1.0f)); __m512 test_mm512_mask_div_ps(__m512 __W, __mmask16 __U, __m512 __A, __m512 __B) { // CHECK-LABEL: test_mm512_mask_div_ps // CHECK: fdiv <16 x float> %{{.*}}, %{{.*}} @@ -3805,6 +3854,8 @@ __m512i test_mm512_cvtepi8_epi32(__m128i __A) { return _mm512_cvtepi8_epi32(__A); } +TEST_CONSTEXPR(match_v16si(_mm512_cvtepi8_epi32(_mm_setr_epi8(-3, 2, -1, 0, 1, -2, 3, -4, 5, -6, 7, -8, 9, -10, 11, -12)), -3, 2, -1, 0, 1, -2, 3, -4, 5, -6, 7, -8, 9, -10, 11, -12)); + __m512i test_mm512_mask_cvtepi8_epi32(__m512i __W, __mmask16 __U, __m128i __A) { // CHECK-LABEL: test_mm512_mask_cvtepi8_epi32 // CHECK: sext <16 x i8> %{{.*}} to <16 x i32> @@ -3825,6 +3876,8 @@ __m512i test_mm512_cvtepi8_epi64(__m128i __A) { return _mm512_cvtepi8_epi64(__A); } +TEST_CONSTEXPR(match_v8di(_mm512_cvtepi8_epi64(_mm_setr_epi8(-3, 2, -1, 0, 1, -2, 3, -4, 0, 0, 0, 0, 0, 0, 0, 0)), -3, 2, -1, 0, 1, -2, 3, -4)); + __m512i test_mm512_mask_cvtepi8_epi64(__m512i __W, __mmask8 __U, __m128i __A) { // CHECK-LABEL: test_mm512_mask_cvtepi8_epi64 // CHECK: sext <8 x i8> %{{.*}} to <8 x i64> @@ -3845,6 +3898,8 @@ __m512i test_mm512_cvtepi32_epi64(__m256i __X) { return _mm512_cvtepi32_epi64(__X); } +TEST_CONSTEXPR(match_v8di(_mm512_cvtepi32_epi64(_mm256_setr_epi32(-70000, 2, -1, 0, 1, -2, 3, -4)), -70000, 2, -1, 0, 1, -2, 3, -4)); + __m512i test_mm512_mask_cvtepi32_epi64(__m512i __W, __mmask8 __U, __m256i __X) { // CHECK-LABEL: test_mm512_mask_cvtepi32_epi64 // CHECK: sext <8 x i32> %{{.*}} to <8 x i64> @@ -3865,6 +3920,8 @@ __m512i test_mm512_cvtepi16_epi32(__m256i __A) { return _mm512_cvtepi16_epi32(__A); } +TEST_CONSTEXPR(match_v16si(_mm512_cvtepi16_epi32(_mm256_setr_epi16(-300, 2, -1, 0, 1, -2, 3, -4, 5, -6, 7, -8, 9, -10, 11, -12)), -300, 2, -1, 0, 1, -2, 3, -4, 5, -6, 7, -8, 9, -10, 11, -12)); + __m512i test_mm512_mask_cvtepi16_epi32(__m512i __W, __mmask16 __U, __m256i __A) { // CHECK-LABEL: test_mm512_mask_cvtepi16_epi32 // CHECK: sext <16 x i16> %{{.*}} to <16 x i32> @@ -3885,6 +3942,8 @@ __m512i test_mm512_cvtepi16_epi64(__m128i __A) { return _mm512_cvtepi16_epi64(__A); } +TEST_CONSTEXPR(match_v8di(_mm512_cvtepi16_epi64(_mm_setr_epi16(-300, 2, -1, 0, 1, -2, 3, -4)), -300, 2, -1, 0, 1, -2, 3, -4)); + __m512i test_mm512_mask_cvtepi16_epi64(__m512i __W, __mmask8 __U, __m128i __A) { // CHECK-LABEL: test_mm512_mask_cvtepi16_epi64 // CHECK: sext <8 x i16> %{{.*}} to <8 x i64> @@ -3905,6 +3964,8 @@ __m512i test_mm512_cvtepu8_epi32(__m128i __A) { return _mm512_cvtepu8_epi32(__A); } +TEST_CONSTEXPR(match_v16si(_mm512_cvtepu8_epi32(_mm_setr_epi8(-3, 2, -1, 0, 1, -2, 3, -4, 5, -6, 7, -8, 9, -10, 11, -12)), 253, 2, 255, 0, 1, 254, 3, 252, 5, 250, 7, 248, 9, 246, 11, 244)); + __m512i test_mm512_mask_cvtepu8_epi32(__m512i __W, __mmask16 __U, __m128i __A) { // CHECK-LABEL: test_mm512_mask_cvtepu8_epi32 // CHECK: zext <16 x i8> %{{.*}} to <16 x i32> @@ -3925,6 +3986,8 @@ __m512i test_mm512_cvtepu8_epi64(__m128i __A) { return _mm512_cvtepu8_epi64(__A); } +TEST_CONSTEXPR(match_v8di(_mm512_cvtepu8_epi64(_mm_setr_epi8(-3, 2, -1, 0, 1, -2, 3, -4, 0, 0, 0, 0, 0, 0, 0, 0)), 253, 2, 255, 0, 1, 254, 3, 252)); + __m512i test_mm512_mask_cvtepu8_epi64(__m512i __W, __mmask8 __U, __m128i __A) { // CHECK-LABEL: test_mm512_mask_cvtepu8_epi64 // CHECK: zext <8 x i8> %{{.*}} to <8 x i64> @@ -3944,6 +4007,7 @@ __m512i test_mm512_cvtepu32_epi64(__m256i __X) { // CHECK: zext <8 x i32> %{{.*}} to <8 x i64> return _mm512_cvtepu32_epi64(__X); } +TEST_CONSTEXPR(match_v8di(_mm512_cvtepu32_epi64(_mm256_setr_epi32(-70000, 2, -1, 0, 1, -2, 3, -4)), 4294897296, 2, 4294967295, 0, 1, 4294967294, 3, 4294967292)); __m512i test_mm512_mask_cvtepu32_epi64(__m512i __W, __mmask8 __U, __m256i __X) { // CHECK-LABEL: test_mm512_mask_cvtepu32_epi64 @@ -3964,6 +4028,7 @@ __m512i test_mm512_cvtepu16_epi32(__m256i __A) { // CHECK: zext <16 x i16> %{{.*}} to <16 x i32> return _mm512_cvtepu16_epi32(__A); } +TEST_CONSTEXPR(match_v16si(_mm512_cvtepu16_epi32(_mm256_setr_epi16(-300, 2, -1, 0, 1, -2, 3, -4, 5, -6, 7, -8, 9, -10, 11, -12)), 65236, 2, 65535, 0, 1, 65534, 3, 65532, 5, 65530, 7, 65528, 9, 65526, 11, 65524)); __m512i test_mm512_mask_cvtepu16_epi32(__m512i __W, __mmask16 __U, __m256i __A) { // CHECK-LABEL: test_mm512_mask_cvtepu16_epi32 @@ -3984,6 +4049,7 @@ __m512i test_mm512_cvtepu16_epi64(__m128i __A) { // CHECK: zext <8 x i16> %{{.*}} to <8 x i64> return _mm512_cvtepu16_epi64(__A); } +TEST_CONSTEXPR(match_v8di(_mm512_cvtepu16_epi64(_mm_setr_epi16(-300, 2, -1, 0, 1, -2, 3, -4)), 65236, 2, 65535, 0, 1, 65534, 3, 65532)); __m512i test_mm512_mask_cvtepu16_epi64(__m512i __W, __mmask8 __U, __m128i __A) { // CHECK-LABEL: test_mm512_mask_cvtepu16_epi64 @@ -3999,12 +4065,12 @@ __m512i test_mm512_maskz_cvtepu16_epi64(__mmask8 __U, __m128i __A) { return _mm512_maskz_cvtepu16_epi64(__U, __A); } - __m512i test_mm512_rol_epi32(__m512i __A) { // CHECK-LABEL: test_mm512_rol_epi32 // CHECK: @llvm.fshl.v16i32 return _mm512_rol_epi32(__A, 5); } +TEST_CONSTEXPR(match_v16si(_mm512_rol_epi32(((__m512i)(__v16si){1, -2, 3, -4, -5, 6, -7, 8, 9, -10, 11, -12, 13, -14, 15, -16}), 5), 32, -33, 96, -97, -129, 192, -193, 256, 288, -289, 352, -353, 416, -417, 480, -481)); __m512i test_mm512_mask_rol_epi32(__m512i __W, __mmask16 __U, __m512i __A) { // CHECK-LABEL: test_mm512_mask_rol_epi32 @@ -4012,6 +4078,7 @@ __m512i test_mm512_mask_rol_epi32(__m512i __W, __mmask16 __U, __m512i __A) { // CHECK: select <16 x i1> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}} return _mm512_mask_rol_epi32(__W, __U, __A, 5); } +TEST_CONSTEXPR(match_v16si(_mm512_mask_rol_epi32(((__m512i)(__v16si){99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99}), 0xC873, ((__m512i)(__v16si){1, -2, 3, -4, -5, 6, -7, 8, 9, -10, 11, -12, 13, -14, 15, -16}), 5), 32, -33, 99, 99, -129, 192, -193, 99, 99, 99, 99, -353, 99, 99, 480, -481)); __m512i test_mm512_maskz_rol_epi32(__mmask16 __U, __m512i __A) { // CHECK-LABEL: test_mm512_maskz_rol_epi32 @@ -4019,12 +4086,14 @@ __m512i test_mm512_maskz_rol_epi32(__mmask16 __U, __m512i __A) { // CHECK: select <16 x i1> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}} return _mm512_maskz_rol_epi32(__U, __A, 5); } +TEST_CONSTEXPR(match_v16si(_mm512_maskz_rol_epi32(0x378C, ((__m512i)(__v16si){1, -2, 3, -4, -5, 6, -7, 8, 9, -10, 11, -12, 13, -14, 15, -16}), 5), 0, 0, 96, -97, 0, 0, 0, 256, 288, -289, 352, 0, 416, -417, 0, 0)); __m512i test_mm512_rol_epi64(__m512i __A) { // CHECK-LABEL: test_mm512_rol_epi64 // CHECK: @llvm.fshl.v8i64 return _mm512_rol_epi64(__A, 5); } +TEST_CONSTEXPR(match_v8di(_mm512_rol_epi64(((__m512i)(__v8di){1, -2, 3, -4, -5, 6, -7, 8}), 5), 32, -33, 96, -97, -129, 192, -193, 256)); __m512i test_mm512_mask_rol_epi64(__m512i __W, __mmask8 __U, __m512i __A) { // CHECK-LABEL: test_mm512_mask_rol_epi64 @@ -4032,6 +4101,7 @@ __m512i test_mm512_mask_rol_epi64(__m512i __W, __mmask8 __U, __m512i __A) { // CHECK: select <8 x i1> %{{.*}}, <8 x i64> %{{.*}}, <8 x i64> %{{.*}} return _mm512_mask_rol_epi64(__W, __U, __A, 5); } +TEST_CONSTEXPR(match_v8di(_mm512_mask_rol_epi64(((__m512i)(__v8di){99, 99, 99, 99, 99, 99, 99, 99}), 0x73, ((__m512i)(__v8di){1, -2, 3, -4, -5, 6, -7, 8}), 5), 32, -33, 99, 99, -129, 192, -193, 99)); __m512i test_mm512_maskz_rol_epi64(__mmask8 __U, __m512i __A) { // CHECK-LABEL: test_mm512_maskz_rol_epi64 @@ -4039,6 +4109,7 @@ __m512i test_mm512_maskz_rol_epi64(__mmask8 __U, __m512i __A) { // CHECK: select <8 x i1> %{{.*}}, <8 x i64> %{{.*}}, <8 x i64> %{{.*}} return _mm512_maskz_rol_epi64(__U, __A, 5); } +TEST_CONSTEXPR(match_v8di(_mm512_maskz_rol_epi64(0x37, ((__m512i)(__v8di){1, -2, 3, -4, -5, 6, -7, 8}), 5), 32, -33, 96, 0, -129, 192, 0, 0)); __m512i test_mm512_rolv_epi32(__m512i __A, __m512i __B) { // CHECK-LABEL: test_mm512_rolv_epi32 @@ -4085,6 +4156,7 @@ __m512i test_mm512_ror_epi32(__m512i __A) { // CHECK: @llvm.fshr.v16i32 return _mm512_ror_epi32(__A, 5); } +TEST_CONSTEXPR(match_v16si(_mm512_ror_epi32(((__m512i)(__v16si){1, -2, 3, -4, -5, 6, -7, 8, 9, -10, 11, -12, 13, -14, 15, -16}), 5), 134217728, -134217729, 402653184, -402653185, -536870913, 805306368, -805306369, 1073741824, 1207959552, -1207959553, 1476395008, -1476395009, 1744830464, -1744830465, 2013265920, -2013265921)); __m512i test_mm512_mask_ror_epi32(__m512i __W, __mmask16 __U, __m512i __A) { // CHECK-LABEL: test_mm512_mask_ror_epi32 @@ -4092,6 +4164,7 @@ __m512i test_mm512_mask_ror_epi32(__m512i __W, __mmask16 __U, __m512i __A) { // CHECK: select <16 x i1> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}} return _mm512_mask_ror_epi32(__W, __U, __A, 5); } +TEST_CONSTEXPR(match_v16si(_mm512_mask_ror_epi32(((__m512i)(__v16si){99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99}), 0xC873, ((__m512i)(__v16si){1, -2, 3, -4, -5, 6, -7, 8, 9, -10, 11, -12, 13, -14, 15, -16}), 5), 134217728, -134217729, 99, 99, -536870913, 805306368, -805306369, 99, 99, 99, 99, -1476395009, 99, 99, 2013265920, -2013265921)); __m512i test_mm512_maskz_ror_epi32(__mmask16 __U, __m512i __A) { // CHECK-LABEL: test_mm512_maskz_ror_epi32 @@ -4099,12 +4172,14 @@ __m512i test_mm512_maskz_ror_epi32(__mmask16 __U, __m512i __A) { // CHECK: select <16 x i1> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}} return _mm512_maskz_ror_epi32(__U, __A, 5); } +TEST_CONSTEXPR(match_v16si(_mm512_maskz_ror_epi32(0x378C, ((__m512i)(__v16si){1, -2, 3, -4, -5, 6, -7, 8, 9, -10, 11, -12, 13, -14, 15, -16}), 5), 0, 0, 402653184, -402653185, 0, 0, 0, 1073741824, 1207959552, -1207959553, 1476395008, 0, 1744830464, -1744830465, 0, 0)); __m512i test_mm512_ror_epi64(__m512i __A) { // CHECK-LABEL: test_mm512_ror_epi64 // CHECK: @llvm.fshr.v8i64 return _mm512_ror_epi64(__A, 5); } +TEST_CONSTEXPR(match_v8di(_mm512_ror_epi64(((__m512i)(__v8di){1, -2, 3, -4, -5, 6, -7, 8}), 5), 576460752303423488LL, -576460752303423489LL, 1729382256910270464LL, -1729382256910270465LL, -2305843009213693953LL, 3458764513820540928LL, -3458764513820540929LL, 4611686018427387904LL)); __m512i test_mm512_mask_ror_epi64(__m512i __W, __mmask8 __U, __m512i __A) { // CHECK-LABEL: test_mm512_mask_ror_epi64 @@ -4112,6 +4187,7 @@ __m512i test_mm512_mask_ror_epi64(__m512i __W, __mmask8 __U, __m512i __A) { // CHECK: select <8 x i1> %{{.*}}, <8 x i64> %{{.*}}, <8 x i64> %{{.*}} return _mm512_mask_ror_epi64(__W, __U, __A, 5); } +TEST_CONSTEXPR(match_v8di(_mm512_mask_ror_epi64(((__m512i)(__v8di){99, 99, 99, 99, 99, 99, 99, 99}), 0x73, ((__m512i)(__v8di){1, -2, 3, -4, -5, 6, -7, 8}), 5), 576460752303423488LL, -576460752303423489LL, 99, 99, -2305843009213693953LL, 3458764513820540928LL, -3458764513820540929LL, 99)); __m512i test_mm512_maskz_ror_epi64(__mmask8 __U, __m512i __A) { // CHECK-LABEL: test_mm512_maskz_ror_epi64 @@ -4119,7 +4195,7 @@ __m512i test_mm512_maskz_ror_epi64(__mmask8 __U, __m512i __A) { // CHECK: select <8 x i1> %{{.*}}, <8 x i64> %{{.*}}, <8 x i64> %{{.*}} return _mm512_maskz_ror_epi64(__U, __A, 5); } - +TEST_CONSTEXPR(match_v8di(_mm512_maskz_ror_epi64(0x37, ((__m512i)(__v8di){1, -2, 3, -4, -5, 6, -7, 8}), 5), 576460752303423488LL, -576460752303423489LL, 1729382256910270464LL, 0, -2305843009213693953LL, 3458764513820540928LL, 0, 0)); __m512i test_mm512_rorv_epi32(__m512i __A, __m512i __B) { // CHECK-LABEL: test_mm512_rorv_epi32 @@ -4166,6 +4242,11 @@ __m512i test_mm512_slli_epi32(__m512i __A) { // CHECK: @llvm.x86.avx512.pslli.d.512 return _mm512_slli_epi32(__A, 5); } +TEST_CONSTEXPR(match_v16si(_mm512_slli_epi32((__m512i)(__v16si){0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, 0), 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)); +TEST_CONSTEXPR(match_v16si(_mm512_slli_epi32((__m512i)(__v16si){0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, 1), 0, 0x2, 0x4, 0x6, 0x8, 0xa, 0xc, 0xe, 0x10, 0x12, 0x14, 0x16, 0x18, 0x1a, 0x1c, 0x1e)); +TEST_CONSTEXPR(match_v16si(_mm512_slli_epi32((__m512i)(__v16si){0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, 10), 0, 0x400, 0x800, 0xc00, 0x1000, 0x1400, 0x1800, 0x1c00, 0x2000, 0x2400, 0x2800, 0x2c00, 0x3000, 0x3400, 0x3800, 0x3c00)); +TEST_CONSTEXPR(match_v16si(_mm512_slli_epi32((__m512i)(__v16si){0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, 32), 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)); +TEST_CONSTEXPR(match_v16si(_mm512_slli_epi32((__m512i)(__v16si){0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, 33), 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)); __m512i test_mm512_slli_epi32_2(__m512i __A, unsigned int __B) { // CHECK-LABEL: test_mm512_slli_epi32_2 @@ -4179,6 +4260,7 @@ __m512i test_mm512_mask_slli_epi32(__m512i __W, __mmask16 __U, __m512i __A) { // CHECK: select <16 x i1> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}} return _mm512_mask_slli_epi32(__W, __U, __A, 5); } +TEST_CONSTEXPR(match_v16si(_mm512_mask_slli_epi32((__m512i)(__v16si){100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115}, (__mmask16)0x5555, (__m512i)(__v16si){0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, 1), 0x0, 101, 0x4, 103, 0x8, 105, 0xc, 107, 0x10, 109, 0x14, 111, 0x18, 113, 0x1c, 115)); __m512i test_mm512_mask_slli_epi32_2(__m512i __W, __mmask16 __U, __m512i __A, unsigned int __B) { // CHECK-LABEL: test_mm512_mask_slli_epi32_2 @@ -4193,6 +4275,11 @@ __m512i test_mm512_maskz_slli_epi32(__mmask16 __U, __m512i __A) { // CHECK: select <16 x i1> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}} return _mm512_maskz_slli_epi32(__U, __A, 5); } +TEST_CONSTEXPR(match_v16si(_mm512_maskz_slli_epi32((__mmask16)0x00ffcc71, (__m512i)(__v16si){0xff, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, 32), 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)); +TEST_CONSTEXPR(match_v16si(_mm512_maskz_slli_epi32((__mmask16)0, (__m512i)(__v16si){0xff, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, 16), 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)); +TEST_CONSTEXPR(match_v16si(_mm512_maskz_slli_epi32((__mmask16)0xffff, (__m512i)(__v16si){0xff, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, 1), 0x1fe, 0x2, 0x4, 0x6, 0x8, 0xa, 0xc, 0xe, 0x10, 0x12, 0x14, 0x16, 0x18, 0x1a, 0x1c, 0x1e)); +TEST_CONSTEXPR(match_v16si(_mm512_maskz_slli_epi32((__mmask16)0x7fff, (__m512i)(__v16si){0xff, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, 1), 0x1fe, 0x2, 0x4, 0x6, 0x8, 0xa, 0xc, 0xe, 0x10, 0x12, 0x14, 0x16, 0x18, 0x1a, 0x1c, 0)); +TEST_CONSTEXPR(match_v16si(_mm512_maskz_slli_epi32((__mmask16)0x71cc, (__m512i)(__v16si){0xff, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, 1), 0, 0, 0x4, 0x6, 0, 0, 0xc, 0xe, 0x10, 0, 0, 0, 0x18, 0x1a, 0x1c, 0)); __m512i test_mm512_maskz_slli_epi32_2(__mmask16 __U, __m512i __A, unsigned int __B) { // CHECK-LABEL: test_mm512_maskz_slli_epi32_2 @@ -4206,6 +4293,7 @@ __m512i test_mm512_slli_epi64(__m512i __A) { // CHECK: @llvm.x86.avx512.pslli.q.512 return _mm512_slli_epi64(__A, 5); } +TEST_CONSTEXPR(match_v8di(_mm512_slli_epi64((__m512i)(__v8di){0, 1, 2, 3, 4, 5, 6, 7}, 1), 0x0, 0x2, 0x4, 0x6, 0x8, 0xa, 0xc, 0xe)); __m512i test_mm512_slli_epi64_2(__m512i __A, unsigned int __B) { // CHECK-LABEL: test_mm512_slli_epi64_2 @@ -4219,6 +4307,7 @@ __m512i test_mm512_mask_slli_epi64(__m512i __W, __mmask8 __U, __m512i __A) { // CHECK: select <8 x i1> %{{.*}}, <8 x i64> %{{.*}}, <8 x i64> %{{.*}} return _mm512_mask_slli_epi64(__W, __U, __A, 5); } +TEST_CONSTEXPR(match_v8di(_mm512_mask_slli_epi64((__m512i)(__v8di){100, 101, 102, 103, 104, 105, 106, 107}, (__mmask8)0x0F, (__m512i)(__v8di){0, 1, 2, 3, 4, 5, 6, 7}, 2), 0x0, 0x4, 0x8, 0xc, 104, 105, 106, 107)); __m512i test_mm512_mask_slli_epi64_2(__m512i __W, __mmask8 __U, __m512i __A, unsigned int __B) { // CHECK-LABEL: test_mm512_mask_slli_epi64_2 @@ -4233,6 +4322,11 @@ __m512i test_mm512_maskz_slli_epi64(__mmask8 __U, __m512i __A) { // CHECK: select <8 x i1> %{{.*}}, <8 x i64> %{{.*}}, <8 x i64> %{{.*}} return _mm512_maskz_slli_epi64(__U, __A, 5); } +TEST_CONSTEXPR(match_v8di(_mm512_maskz_slli_epi64((__mmask8)0x00ffcc71, (__m512i)(__v8di){0xff, 1, 2, 3, 4, 5, 6, 7}, 64), 0, 0, 0, 0, 0, 0, 0, 0)); +TEST_CONSTEXPR(match_v8di(_mm512_maskz_slli_epi64((__mmask8)0, (__m512i)(__v8di){0xff, 1, 2, 3, 4, 5, 6, 7}, 16), 0, 0, 0, 0, 0, 0, 0, 0)); +TEST_CONSTEXPR(match_v8di(_mm512_maskz_slli_epi64((__mmask8)0xff, (__m512i)(__v8di){0xff, 1, 2, 3, 4, 5, 6, 7}, 1), 0x1fe, 0x2, 0x4, 0x6, 0x8, 0xa, 0xc, 0xe)); +TEST_CONSTEXPR(match_v8di(_mm512_maskz_slli_epi64((__mmask8)0x7f, (__m512i)(__v8di){0xff, 1, 2, 3, 4, 5, 6, 7}, 1), 0x1fe, 0x2, 0x4, 0x6, 0x8, 0xa, 0xc, 0)); +TEST_CONSTEXPR(match_v8di(_mm512_maskz_slli_epi64((__mmask8)0x71, (__m512i)(__v8di){0xff, 1, 2, 3, 4, 5, 6, 7}, 1), 0x1fe, 0, 0, 0, 0x8, 0xa, 0xc, 0)); __m512i test_mm512_maskz_slli_epi64_2(__mmask8 __U, __m512i __A, unsigned int __B) { // CHECK-LABEL: test_mm512_maskz_slli_epi64_2 @@ -4246,6 +4340,7 @@ __m512i test_mm512_srli_epi32(__m512i __A) { // CHECK: @llvm.x86.avx512.psrli.d.512 return _mm512_srli_epi32(__A, 5); } +TEST_CONSTEXPR(match_v16si(_mm512_srli_epi32((__m512i)(__v16si){0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, 10), 0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0)); __m512i test_mm512_srli_epi32_2(__m512i __A, unsigned int __B) { // CHECK-LABEL: test_mm512_srli_epi32_2 @@ -4259,6 +4354,7 @@ __m512i test_mm512_mask_srli_epi32(__m512i __W, __mmask16 __U, __m512i __A) { // CHECK: select <16 x i1> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}} return _mm512_mask_srli_epi32(__W, __U, __A, 5); } +TEST_CONSTEXPR(match_v16si(_mm512_mask_srli_epi32((__m512i)(__v16si){100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115}, (__mmask16)0x5555, (__m512i)(__v16si){0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, 1), 0x0, 101, 0x1, 103, 0x2, 105, 0x3, 107, 0x4, 109, 0x5, 111, 0x6, 113, 0x7, 115)); __m512i test_mm512_mask_srli_epi32_2(__m512i __W, __mmask16 __U, __m512i __A, unsigned int __B) { // CHECK-LABEL: test_mm512_mask_srli_epi32_2 @@ -4273,6 +4369,7 @@ __m512i test_mm512_maskz_srli_epi32(__mmask16 __U, __m512i __A) { // CHECK: select <16 x i1> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}} return _mm512_maskz_srli_epi32(__U, __A, 5); } +TEST_CONSTEXPR(match_v16si(_mm512_maskz_srli_epi32((__mmask16)0x71cc, (__m512i)(__v16si){0xff, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, 1), 0, 0, 0x1, 0x1, 0, 0, 0x3, 0x3, 0x4, 0, 0, 0, 0x6, 0x6, 0x7, 0)); __m512i test_mm512_maskz_srli_epi32_2(__mmask16 __U, __m512i __A, unsigned int __B) { // CHECK-LABEL: test_mm512_maskz_srli_epi32_2 @@ -4286,6 +4383,7 @@ __m512i test_mm512_srli_epi64(__m512i __A) { // CHECK: @llvm.x86.avx512.psrli.q.512 return _mm512_srli_epi64(__A, 5); } +TEST_CONSTEXPR(match_v8di(_mm512_srli_epi64((__m512i)(__v8di){0, 1, 2, 3, 4, 5, 6, 7}, 1), 0x0, 0x0, 0x1, 0x1, 0x2, 0x2, 0x3, 0x3)); __m512i test_mm512_srli_epi64_2(__m512i __A, unsigned int __B) { // CHECK-LABEL: test_mm512_srli_epi64_2 @@ -4299,6 +4397,7 @@ __m512i test_mm512_mask_srli_epi64(__m512i __W, __mmask8 __U, __m512i __A) { // CHECK: select <8 x i1> %{{.*}}, <8 x i64> %{{.*}}, <8 x i64> %{{.*}} return _mm512_mask_srli_epi64(__W, __U, __A, 5); } +TEST_CONSTEXPR(match_v8di(_mm512_mask_srli_epi64((__m512i)(__v8di){100, 101, 102, 103, 104, 105, 106, 107}, (__mmask8)0x0F, (__m512i)(__v8di){0, 1, 2, 3, 4, 5, 6, 7}, 2), 0x0, 0x0, 0x0, 0x0, 104, 105, 106, 107)); __m512i test_mm512_mask_srli_epi64_2(__m512i __W, __mmask8 __U, __m512i __A, unsigned int __B) { // CHECK-LABEL: test_mm512_mask_srli_epi64_2 @@ -4313,6 +4412,7 @@ __m512i test_mm512_maskz_srli_epi64(__mmask8 __U, __m512i __A) { // CHECK: select <8 x i1> %{{.*}}, <8 x i64> %{{.*}}, <8 x i64> %{{.*}} return _mm512_maskz_srli_epi64(__U, __A, 5); } +TEST_CONSTEXPR(match_v8di(_mm512_maskz_srli_epi64((__mmask8)0x71, (__m512i)(__v8di){0xff, 1, 2, 3, 4, 5, 6, 7}, 1), 0x7f, 0, 0, 0, 0x2, 0x2, 0x3, 0)); __m512i test_mm512_maskz_srli_epi64_2(__mmask8 __U, __m512i __A, unsigned int __B) { // CHECK-LABEL: test_mm512_maskz_srli_epi64_2 @@ -4386,6 +4486,7 @@ __m512d test_mm512_movedup_pd(__m512d __A) { // CHECK: shufflevector <8 x double> %{{.*}}, <8 x double> %{{.*}}, <8 x i32> <i32 0, i32 0, i32 2, i32 2, i32 4, i32 4, i32 6, i32 6> return _mm512_movedup_pd(__A); } +TEST_CONSTEXPR(match_m512d(_mm512_movedup_pd((__m512d){-1.0, +2.0, +3.0, +4.0, -5.0, -6.0, +7.0, +8.0}), -1.0, -1.0, +3.0, +3.0, -5.0, -5.0, +7.0, +7.0)); __m512d test_mm512_mask_movedup_pd(__m512d __W, __mmask8 __U, __m512d __A) { // CHECK-LABEL: test_mm512_mask_movedup_pd @@ -4635,6 +4736,7 @@ __m512i test_mm512_unpackhi_epi32(__m512i __A, __m512i __B) { // CHECK: shufflevector <16 x i32> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> <i32 2, i32 18, i32 3, i32 19, i32 6, i32 22, i32 7, i32 23, i32 10, i32 26, i32 11, i32 27, i32 14, i32 30, i32 15, i32 31> return _mm512_unpackhi_epi32(__A, __B); } +TEST_CONSTEXPR(match_v16si(_mm512_unpackhi_epi32((__m512i)(__v16si){0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, (__m512i)(__v16si){16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31}), 2, 18, 3, 19, 6, 22, 7, 23, 10, 26, 11, 27, 14, 30, 15, 31)); __m512d test_mm512_maskz_unpackhi_pd(__mmask8 __U, __m512d __A, __m512d __B) { // CHECK-LABEL: test_mm512_maskz_unpackhi_pd @@ -5421,6 +5523,7 @@ __m512i test_mm512_unpackhi_epi64(__m512i __A, __m512i __B) { // CHECK: shufflevector <8 x i64> %{{.*}}, <8 x i64> %{{.*}}, <8 x i32> <i32 1, i32 9, i32 3, i32 11, i32 5, i32 13, i32 7, i32 15> return _mm512_unpackhi_epi64(__A, __B); } +TEST_CONSTEXPR(match_m512i(_mm512_unpackhi_epi64((__m512i){0, 1, 2, 3, 4, 5, 6, 7}, (__m512i){8, 9, 10, 11, 12, 13, 14, 15}), 1, 9, 3, 11, 5, 13, 7, 15)); __m512i test_mm512_mask_unpackhi_epi64(__m512i __W, __mmask8 __U, __m512i __A, __m512i __B) { // CHECK-LABEL: test_mm512_mask_unpackhi_epi64 @@ -5441,6 +5544,7 @@ __m512i test_mm512_unpacklo_epi32(__m512i __A, __m512i __B) { // CHECK: shufflevector <16 x i32> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> <i32 0, i32 16, i32 1, i32 17, i32 4, i32 20, i32 5, i32 21, i32 8, i32 24, i32 9, i32 25, i32 12, i32 28, i32 13, i32 29> return _mm512_unpacklo_epi32(__A, __B); } +TEST_CONSTEXPR(match_v16si(_mm512_unpacklo_epi32((__m512i)(__v16si){0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, (__m512i)(__v16si){16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31}), 0, 16, 1, 17, 4, 20, 5, 21, 8, 24, 9, 25, 12, 28, 13, 29)); __m512i test_mm512_mask_unpacklo_epi32(__m512i __W, __mmask16 __U, __m512i __A, __m512i __B) { // CHECK-LABEL: test_mm512_mask_unpacklo_epi32 @@ -5461,6 +5565,7 @@ __m512i test_mm512_unpacklo_epi64(__m512i __A, __m512i __B) { // CHECK: shufflevector <8 x i64> %{{.*}}, <8 x i64> %{{.*}}, <8 x i32> <i32 0, i32 8, i32 2, i32 10, i32 4, i32 12, i32 6, i32 14> return _mm512_unpacklo_epi64(__A, __B); } +TEST_CONSTEXPR(match_m512i(_mm512_unpacklo_epi64((__m512i){0, 1, 2, 3, 4, 5, 6, 7}, (__m512i){8, 9, 10, 11, 12, 13, 14, 15}), 0, 8, 2, 10, 4, 12, 6, 14)); __m512i test_mm512_mask_unpacklo_epi64(__m512i __W, __mmask8 __U, __m512i __A, __m512i __B) { // CHECK-LABEL: test_mm512_mask_unpacklo_epi64 @@ -5687,6 +5792,7 @@ __m512i test_mm512_srai_epi32(__m512i __A) { // CHECK: @llvm.x86.avx512.psrai.d.512 return _mm512_srai_epi32(__A, 5); } +TEST_CONSTEXPR(match_v16si(_mm512_srai_epi32((__m512i)(__v16si){0, -2, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, 10), 0, -1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0)); __m512i test_mm512_srai_epi32_2(__m512i __A, unsigned int __B) { // CHECK-LABEL: test_mm512_srai_epi32_2 @@ -5700,6 +5806,7 @@ __m512i test_mm512_mask_srai_epi32(__m512i __W, __mmask16 __U, __m512i __A) { // CHECK: select <16 x i1> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}} return _mm512_mask_srai_epi32(__W, __U, __A, 5); } +TEST_CONSTEXPR(match_v16si(_mm512_mask_srli_epi32((__m512i)(__v16si){100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115}, (__mmask16)0x5555, (__m512i)(__v16si){0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, 1), 0x0, 101, 0x1, 103, 0x2, 105, 0x3, 107, 0x4, 109, 0x5, 111, 0x6, 113, 0x7, 115)); __m512i test_mm512_mask_srai_epi32_2(__m512i __W, __mmask16 __U, __m512i __A, unsigned int __B) { // CHECK-LABEL: test_mm512_mask_srai_epi32_2 @@ -5714,6 +5821,7 @@ __m512i test_mm512_maskz_srai_epi32(__mmask16 __U, __m512i __A) { // CHECK: select <16 x i1> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}} return _mm512_maskz_srai_epi32(__U, __A, 5); } +TEST_CONSTEXPR(match_v16si(_mm512_maskz_srai_epi32((__mmask16)0x71cc, (__m512i)(__v16si){0xff, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, 1), 0, 0, 0x1, 0x1, 0, 0, 0x3, 0x3, 0x4, 0, 0, 0, 0x6, 0x6, 0x7, 0)); __m512i test_mm512_maskz_srai_epi32_2(__mmask16 __U, __m512i __A, unsigned int __B) { // CHECK-LABEL: test_mm512_maskz_srai_epi32_2 @@ -5727,6 +5835,7 @@ __m512i test_mm512_srai_epi64(__m512i __A) { // CHECK: @llvm.x86.avx512.psrai.q.512 return _mm512_srai_epi64(__A, 5); } +TEST_CONSTEXPR(match_v8di(_mm512_srai_epi64((__m512i)(__v8di){0, 1, 2, 3, 4, 5, 6, 7}, 1), 0x0, 0x0, 0x1, 0x1, 0x2, 0x2, 0x3, 0x3)); __m512i test_mm512_srai_epi64_2(__m512i __A, unsigned int __B) { // CHECK-LABEL: test_mm512_srai_epi64_2 @@ -5740,6 +5849,7 @@ __m512i test_mm512_mask_srai_epi64(__m512i __W, __mmask8 __U, __m512i __A) { // CHECK: select <8 x i1> %{{.*}}, <8 x i64> %{{.*}}, <8 x i64> %{{.*}} return _mm512_mask_srai_epi64(__W, __U, __A, 5); } +TEST_CONSTEXPR(match_v8di(_mm512_mask_srai_epi64((__m512i)(__v8di){100, 101, 102, 103, 104, 105, 106, 107}, (__mmask8)0x0F, (__m512i)(__v8di){0, 1, 2, 3, 4, 5, 6, 7}, 2), 0x0, 0x0, 0x0, 0x0, 104, 105, 106, 107)); __m512i test_mm512_mask_srai_epi64_2(__m512i __W, __mmask8 __U, __m512i __A, unsigned int __B) { // CHECK-LABEL: test_mm512_mask_srai_epi64_2 @@ -5754,6 +5864,7 @@ __m512i test_mm512_maskz_srai_epi64(__mmask8 __U, __m512i __A) { // CHECK: select <8 x i1> %{{.*}}, <8 x i64> %{{.*}}, <8 x i64> %{{.*}} return _mm512_maskz_srai_epi64(__U, __A, 5); } +TEST_CONSTEXPR(match_v8di(_mm512_maskz_srai_epi64((__mmask8)0x71, (__m512i)(__v8di){0xff, 1, 2, 3, 4, 5, 6, 7}, 1), 0x7f, 0, 0, 0, 0x2, 0x2, 0x3, 0)); __m512i test_mm512_maskz_srai_epi64_2(__mmask8 __U, __m512i __A, unsigned int __B) { // CHECK-LABEL: test_mm512_maskz_srai_epi64_2 @@ -6251,6 +6362,7 @@ __m512 test_mm512_broadcast_f32x4(float const* __A) { // CHECK: shufflevector <4 x float> %{{.*}}, <4 x float> %{{.*}}, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 0, i32 1, i32 2, i32 3, i32 0, i32 1, i32 2, i32 3, i32 0, i32 1, i32 2, i32 3> return _mm512_broadcast_f32x4(_mm_loadu_ps(__A)); } +TEST_CONSTEXPR(match_m512(_mm512_broadcast_f32x4((__m128)(__v4sf){1.0f, 2.0f, -3.0f, -4.0f}), 1.0f, 2.0f, -3.0f, -4.0f, 1.0f, 2.0f, -3.0f, -4.0f, 1.0f, 2.0f, -3.0f, -4.0f, 1.0f, 2.0f, -3.0f, -4.0f)); __m512 test_mm512_mask_broadcast_f32x4(__m512 __O, __mmask16 __M, float const* __A) { // CHECK-LABEL: test_mm512_mask_broadcast_f32x4 @@ -6271,6 +6383,7 @@ __m512d test_mm512_broadcast_f64x4(double const* __A) { // CHECK: shufflevector <4 x double> %{{.*}}, <4 x double> %{{.*}}, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 0, i32 1, i32 2, i32 3> return _mm512_broadcast_f64x4(_mm256_loadu_pd(__A)); } +TEST_CONSTEXPR(match_m512d(_mm512_broadcast_f64x4((__m256d)(__v4df){1.0, 2.0, -3.0, -4.0}), 1.0, 2.0, -3.0, -4.0, 1.0, 2.0, -3.0, -4.0)); __m512d test_mm512_mask_broadcast_f64x4(__m512d __O, __mmask8 __M, double const* __A) { // CHECK-LABEL: test_mm512_mask_broadcast_f64x4 @@ -6291,6 +6404,7 @@ __m512i test_mm512_broadcast_i32x4(__m128i const* __A) { // CHECK: shufflevector <4 x i32> %{{.*}}, <4 x i32> %{{.*}}, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 0, i32 1, i32 2, i32 3, i32 0, i32 1, i32 2, i32 3, i32 0, i32 1, i32 2, i32 3> return _mm512_broadcast_i32x4(_mm_loadu_si128(__A)); } +TEST_CONSTEXPR(match_v16si(_mm512_broadcast_i32x4((__m128i)(__v4si){1, 2, -3, -4}), 1, 2, -3, -4, 1, 2, -3, -4, 1, 2, -3, -4, 1, 2, -3, -4)); __m512i test_mm512_mask_broadcast_i32x4(__m512i __O, __mmask16 __M, __m128i const* __A) { // CHECK-LABEL: test_mm512_mask_broadcast_i32x4 @@ -6311,6 +6425,7 @@ __m512i test_mm512_broadcast_i64x4(__m256i const* __A) { // CHECK: shufflevector <4 x i64> %{{.*}}, <4 x i64> %{{.*}}, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 0, i32 1, i32 2, i32 3> return _mm512_broadcast_i64x4(_mm256_loadu_si256(__A)); } +TEST_CONSTEXPR(match_v8di(_mm512_broadcast_i64x4((__m256i)(__v4di){1, 2, -3, -4}), 1, 2, -3, -4, 1, 2, -3, -4)); __m512i test_mm512_mask_broadcast_i64x4(__m512i __O, __mmask8 __M, __m256i const* __A) { // CHECK-LABEL: test_mm512_mask_broadcast_i64x4 @@ -6331,6 +6446,7 @@ __m512d test_mm512_broadcastsd_pd(__m128d __A) { // CHECK: shufflevector <2 x double> %{{.*}}, <2 x double> %{{.*}}, <8 x i32> zeroinitializer return _mm512_broadcastsd_pd(__A); } +TEST_CONSTEXPR(match_m512d(_mm512_broadcastsd_pd((__m128d)(__v2df){1.0, 2.0}), 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0)); __m512d test_mm512_mask_broadcastsd_pd(__m512d __O, __mmask8 __M, __m128d __A) { // CHECK-LABEL: test_mm512_mask_broadcastsd_pd @@ -6351,6 +6467,7 @@ __m512 test_mm512_broadcastss_ps(__m128 __A) { // CHECK: shufflevector <4 x float> %{{.*}}, <4 x float> %{{.*}}, <16 x i32> zeroinitializer return _mm512_broadcastss_ps(__A); } +TEST_CONSTEXPR(match_m512(_mm512_broadcastss_ps((__m128)(__v4sf){1.0f, 2.0f, -3.0f, -4.0f}), 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f)); __m512 test_mm512_mask_broadcastss_ps(__m512 __O, __mmask16 __M, __m128 __A) { // CHECK-LABEL: test_mm512_mask_broadcastss_ps @@ -6371,6 +6488,7 @@ __m512i test_mm512_broadcastd_epi32(__m128i __A) { // CHECK: shufflevector <4 x i32> %{{.*}}, <4 x i32> %{{.*}}, <16 x i32> zeroinitializer return _mm512_broadcastd_epi32(__A); } +TEST_CONSTEXPR(match_v16si(_mm512_broadcastd_epi32((__m128i)(__v4si){-42, 0, 0, 0}), -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42)); __m512i test_mm512_mask_broadcastd_epi32(__m512i __O, __mmask16 __M, __m128i __A) { // CHECK-LABEL: test_mm512_mask_broadcastd_epi32 @@ -6391,6 +6509,7 @@ __m512i test_mm512_broadcastq_epi64(__m128i __A) { // CHECK: shufflevector <2 x i64> %{{.*}}, <2 x i64> %{{.*}}, <8 x i32> zeroinitializer return _mm512_broadcastq_epi64(__A); } +TEST_CONSTEXPR(match_v8di(_mm512_broadcastq_epi64((__m128i)(__v2di){-42, 0}), -42, -42, -42, -42, -42, -42, -42, -42)); __m512i test_mm512_mask_broadcastq_epi64(__m512i __O, __mmask8 __M, __m128i __A) { // CHECK-LABEL: test_mm512_mask_broadcastq_epi64 @@ -8682,6 +8801,7 @@ __m512 test_mm512_movehdup_ps(__m512 __A) { // CHECK: shufflevector <16 x float> %{{.*}}, <16 x float> %{{.*}}, <16 x i32> <i32 1, i32 1, i32 3, i32 3, i32 5, i32 5, i32 7, i32 7, i32 9, i32 9, i32 11, i32 11, i32 13, i32 13, i32 15, i32 15> return _mm512_movehdup_ps(__A); } +TEST_CONSTEXPR(match_m512(_mm512_movehdup_ps((__m512){+1.0f,-1.0f,+2.0f,-2.0f,+3.0f,-3.0f,+4.0f,-4.0f,+5.0f,-5.0f,+6.0f,-6.0f,+7.0f,-7.0f,+8.0f,-8.0f}), -1.0f, -1.0f, -2.0f, -2.0f, -3.0f, -3.0f, -4.0f, -4.0f, -5.0f, -5.0f, -6.0f, -6.0f, -7.0f, -7.0f, -8.0f, -8.0f)); __m512 test_mm512_mask_movehdup_ps(__m512 __W, __mmask16 __U, __m512 __A) { // CHECK-LABEL: test_mm512_mask_movehdup_ps @@ -8702,6 +8822,7 @@ __m512 test_mm512_moveldup_ps(__m512 __A) { // CHECK: shufflevector <16 x float> %{{.*}}, <16 x float> %{{.*}}, <16 x i32> <i32 0, i32 0, i32 2, i32 2, i32 4, i32 4, i32 6, i32 6, i32 8, i32 8, i32 10, i32 10, i32 12, i32 12, i32 14, i32 14> return _mm512_moveldup_ps(__A); } +TEST_CONSTEXPR(match_m512(_mm512_moveldup_ps((__m512){+1.0f,-1.0f,+2.0f,-2.0f,+3.0f,-3.0f,+4.0f,-4.0f,+5.0f,-5.0f,+6.0f,-6.0f,+7.0f,-7.0f,+8.0f,-8.0f}), +1.0f, +1.0f, +2.0f, +2.0f, +3.0f, +3.0f, +4.0f, +4.0f, +5.0f, +5.0f, +6.0f, +6.0f, +7.0f, +7.0f, +8.0f, +8.0f)); __m512 test_mm512_mask_moveldup_ps(__m512 __W, __mmask16 __U, __m512 __A) { // CHECK-LABEL: test_mm512_mask_moveldup_ps @@ -8855,6 +8976,8 @@ __m512d test_mm512_cvtps_pd(__m256 __A) { return _mm512_cvtps_pd(__A); } +TEST_CONSTEXPR(match_m512d(_mm512_cvtps_pd((__m256){0.0f, 1.0f, 2.0f, 4.0f, -8.0f, -16.0f, -32.0f, -64.0f}), 0.0, 1.0, 2.0, 4.0, -8.0, -16.0, -32.0, -64.0)); + __m512d test_mm512_cvtpslo_pd(__m512 __A) { // CHECK-LABEL: test_mm512_cvtpslo_pd // CHECK: shufflevector <16 x float> %{{.*}}, <16 x float> %{{.*}}, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7> @@ -8862,6 +8985,8 @@ __m512d test_mm512_cvtpslo_pd(__m512 __A) { return _mm512_cvtpslo_pd(__A); } +TEST_CONSTEXPR(match_m512d(_mm512_cvtpslo_pd((__m512){0.0f, 1.0f, 2.0f, 4.0f, -8.0f, -16.0f, -32.0f, -64.0f, -128.0f, -256.0f, -512.0f, -1024.0f, -2048.0f, -4096.0f, -8192.0f, -16384.0f}), 0.0, 1.0, 2.0, 4.0, -8.0, -16.0, -32.0, -64.0)); + __m512d test_mm512_mask_cvtps_pd(__m512d __W, __mmask8 __U, __m256 __A) { // CHECK-LABEL: test_mm512_mask_cvtps_pd // CHECK: fpext <8 x float> %{{.*}} to <8 x double> @@ -8869,6 +8994,8 @@ __m512d test_mm512_mask_cvtps_pd(__m512d __W, __mmask8 __U, __m256 __A) { return _mm512_mask_cvtps_pd(__W, __U, __A); } +TEST_CONSTEXPR(match_m512d(_mm512_mask_cvtps_pd(_mm512_set1_pd(-777.0), /*1010 1101=*/0xad, (__m256){0.0f, 1.0f, 2.0f, 4.0f, -8.0f, -16.0f, -32.0f, -64.0f}), 0.0, -777.0, 2.0, 4.0, -777.0, -16.0, -777.0, -64.0)); + __m512d test_mm512_mask_cvtpslo_pd(__m512d __W, __mmask8 __U, __m512 __A) { // CHECK-LABEL: test_mm512_mask_cvtpslo_pd // CHECK: shufflevector <16 x float> %{{.*}}, <16 x float> %{{.*}}, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7> @@ -8877,35 +9004,45 @@ __m512d test_mm512_mask_cvtpslo_pd(__m512d __W, __mmask8 __U, __m512 __A) { return _mm512_mask_cvtpslo_pd(__W, __U, __A); } +TEST_CONSTEXPR(match_m512d(_mm512_mask_cvtpslo_pd(_mm512_set1_pd(-777.0), /*1010 1101=*/0xad, (__m512){0.0f, 1.0f, 2.0f, 4.0f, -8.0f, -16.0f, -32.0f, -64.0f, -128.0f, -256.0f, -512.0f, -1024.0f, -2048.0f, -4096.0f, -8192.0f, -16384.0f}), 0.0, -777.0, 2.0, 4.0, -777.0, -16.0, -777.0, -64.0)); + + __m512d test_mm512_maskz_cvtps_pd(__mmask8 __U, __m256 __A) { // CHECK-LABEL: test_mm512_maskz_cvtps_pd // CHECK: fpext <8 x float> %{{.*}} to <8 x double> // CHECK: select <8 x i1> %{{.*}}, <8 x double> %{{.*}}, <8 x double> %{{.*}} return _mm512_maskz_cvtps_pd(__U, __A); } + +TEST_CONSTEXPR(match_m512d(_mm512_maskz_cvtps_pd(/*1010 1101=*/0xad, (__m256){0.0f, 1.0f, 2.0f, 4.0f, -8.0f, -16.0f, -32.0f, -64.0f}), 0.0, 0.0, 2.0, 4.0, 0.0, -16.0, 0.0, -64.0)); + __m512d test_mm512_mask_mov_pd(__m512d __W, __mmask8 __U, __m512d __A) { // CHECK-LABEL: test_mm512_mask_mov_pd // CHECK: select <8 x i1> %{{.*}}, <8 x double> %{{.*}}, <8 x double> %{{.*}} return _mm512_mask_mov_pd(__W, __U, __A); } +TEST_CONSTEXPR(match_m512d(_mm512_mask_mov_pd((__m512d){-8.0, -7.0, -6.0, -5.0, -4.0, -3.0, -2.0, -1.0}, 0xC3, (__m512d){+1.0, +2.0, +3.0, +4.0, +5.0, +6.0, +7.0, +8.0}), +1.0, +2.0, -6.0, -5.0, -4.0, -3.0, +7.0, +8.0)); __m512d test_mm512_maskz_mov_pd(__mmask8 __U, __m512d __A) { // CHECK-LABEL: test_mm512_maskz_mov_pd // CHECK: select <8 x i1> %{{.*}}, <8 x double> %{{.*}}, <8 x double> %{{.*}} return _mm512_maskz_mov_pd(__U, __A); } +TEST_CONSTEXPR(match_m512d(_mm512_maskz_mov_pd(0xC3, (__m512d){+1.0, +2.0, +3.0, +4.0, +5.0, +6.0, +7.0, +8.0}), +1.0, +2.0, +0.0, +0.0, +0.0, +0.0, +7.0, +8.0)); __m512 test_mm512_mask_mov_ps(__m512 __W, __mmask16 __U, __m512 __A) { // CHECK-LABEL: test_mm512_mask_mov_ps // CHECK: select <16 x i1> %{{.*}}, <16 x float> %{{.*}}, <16 x float> %{{.*}} return _mm512_mask_mov_ps(__W, __U, __A); } +TEST_CONSTEXPR(match_m512(_mm512_mask_mov_ps((__m512){-16.0f, -15.0f, -14.0f, -13.0f, -12.0f, -11.0f, -10.0f, -9.0f, -8.0f, -7.0f, -6.0f, -5.0f, -4.0f, -3.0f, -2.0f, -1.0f}, 0x0FF0, (__m512){+1.0f, +2.0f, +3.0f, +4.0f, +5.0f, +6.0f, +7.0f, +8.0f, +9.0f, +10.0f, +11.0f, +12.0f, +13.0f, +14.0f, +15.0f, +16.0f}), -16.0f, -15.0f, -14.0f, -13.0f, 5.0f, 6.0f, 7.0f, 8.0f, 9.0f, 10.0f, 11.0f, 12.0f, -4.0f, -3.0f, -2.0f, -1.0f)); __m512 test_mm512_maskz_mov_ps(__mmask16 __U, __m512 __A) { // CHECK-LABEL: test_mm512_maskz_mov_ps // CHECK: select <16 x i1> %{{.*}}, <16 x float> %{{.*}}, <16 x float> %{{.*}} return _mm512_maskz_mov_ps(__U, __A); } +TEST_CONSTEXPR(match_m512(_mm512_maskz_mov_ps(0xF3F3, (__m512){+1.0f, +2.0f, +3.0f, +4.0f, +5.0f, +6.0f, +7.0f, +8.0f, +9.0f, +10.0f, +11.0f, +12.0f, +13.0f, +14.0f, +15.0f, +16.0f}), +1.0f, +2.0f, 0.0f, 0.0f, +5.0f, +6.0f, +7.0f, +8.0f, +9.0f, +10.0f, 0.0f, 0.0f, +13.0f, +14.0f, +15.0f, +16.0f)); void test_mm512_mask_compressstoreu_pd(void *__P, __mmask8 __U, __m512d __A) { // CHECK-LABEL: test_mm512_mask_compressstoreu_pd @@ -9024,6 +9161,7 @@ __m512i test_mm512_set1_epi8(char d) // CHECK: insertelement <64 x i8> {{.*}}, i32 63 return _mm512_set1_epi8(d); } +TEST_CONSTEXPR(match_v64qi(_mm512_set1_epi8(127), 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127)); __m512i test_mm512_set1_epi16(short d) { @@ -9039,6 +9177,37 @@ __m512i test_mm512_set1_epi16(short d) // CHECK: insertelement <32 x i16> {{.*}}, i32 31 return _mm512_set1_epi16(d); } +TEST_CONSTEXPR(match_v32hi(_mm512_set1_epi16(-511), -511, -511, -511, -511, -511, -511, -511, -511, -511, -511, -511, -511, -511, -511, -511, -511, -511, -511, -511, -511, -511, -511, -511, -511, -511, -511, -511, -511, -511, -511, -511, -511)); + +__m512i test_mm512_set1_epi32(int d) +{ + // CHECK-LABEL: test_mm512_set1_epi32 + // CHECK: insertelement <16 x i32> {{.*}}, i32 0 + // CHECK: insertelement <16 x i32> {{.*}}, i32 1 + // CHECK: insertelement <16 x i32> {{.*}}, i32 2 + // CHECK: insertelement <16 x i32> {{.*}}, i32 3 + // CHECK: insertelement <16 x i32> {{.*}}, i32 4 + // CHECK: insertelement <16 x i32> {{.*}}, i32 5 + // CHECK: insertelement <16 x i32> {{.*}}, i32 6 + // CHECK: insertelement <16 x i32> {{.*}}, i32 15 + return _mm512_set1_epi32(d); +} +TEST_CONSTEXPR(match_v16si(_mm512_set1_epi32(99), 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99)); + +__m512i test_mm512_set1_epi64(long long d) +{ + // CHECK-LABEL: test_mm512_set1_epi64 + // CHECK: insertelement <8 x i64> {{.*}}, i32 0 + // CHECK: insertelement <8 x i64> {{.*}}, i32 1 + // CHECK: insertelement <8 x i64> {{.*}}, i32 2 + // CHECK: insertelement <8 x i64> {{.*}}, i32 3 + // CHECK: insertelement <8 x i64> {{.*}}, i32 4 + // CHECK: insertelement <8 x i64> {{.*}}, i32 5 + // CHECK: insertelement <8 x i64> {{.*}}, i32 6 + // CHECK: insertelement <8 x i64> {{.*}}, i32 7 + return _mm512_set1_epi64(d); +} +TEST_CONSTEXPR(match_v8di(_mm512_set1_epi64(-42), -42, -42, -42, -42, -42, -42, -42, -42)); __m512i test_mm512_set4_epi32 (int __A, int __B, int __C, int __D) { @@ -9046,6 +9215,7 @@ __m512i test_mm512_set4_epi32 (int __A, int __B, int __C, int __D) // CHECK: insertelement <16 x i32> {{.*}}, i32 15 return _mm512_set4_epi32 (__A,__B,__C,__D); } +TEST_CONSTEXPR(match_v16si(_mm512_set4_epi32(10, 20, 30, 40), 40, 30, 20, 10, 40, 30, 20, 10, 40, 30, 20, 10, 40, 30, 20, 10)); __m512i test_mm512_set4_epi64 (long long __A, long long __B, long long __C, long long __D) { @@ -9053,6 +9223,7 @@ __m512i test_mm512_set4_epi64 (long long __A, long long __B, long long __C, long // CHECK: insertelement <8 x i64> {{.*}}, i32 7 return _mm512_set4_epi64 (__A,__B,__C,__D); } +TEST_CONSTEXPR(match_v8di(_mm512_set4_epi64(1, -3, 5, -7), -7, 5, -3, 1, -7, 5, -3, 1)); __m512d test_mm512_set4_pd (double __A, double __B, double __C, double __D) { @@ -9060,6 +9231,7 @@ __m512d test_mm512_set4_pd (double __A, double __B, double __C, double __D) // CHECK: insertelement <8 x double> {{.*}}, i32 7 return _mm512_set4_pd (__A,__B,__C,__D); } +TEST_CONSTEXPR(match_m512d(_mm512_set4_pd(10.0, 20.0, 30.0, 40.0), 40.0, 30.0, 20.0, 10.0, 40.0, 30.0, 20.0, 10.0)); __m512 test_mm512_set4_ps (float __A, float __B, float __C, float __D) { @@ -9067,6 +9239,7 @@ __m512 test_mm512_set4_ps (float __A, float __B, float __C, float __D) // CHECK: insertelement <16 x float> {{.*}}, i32 15 return _mm512_set4_ps (__A,__B,__C,__D); } +TEST_CONSTEXPR(match_m512(_mm512_set4_ps(1.1f, 2.2f, 3.3f, 4.4f), 4.4f, 3.3f, 2.2f, 1.1f, 4.4f, 3.3f, 2.2f, 1.1f, 4.4f, 3.3f, 2.2f, 1.1f, 4.4f, 3.3f, 2.2f, 1.1f)); __m512i test_mm512_setr4_epi32(int e0, int e1, int e2, int e3) { @@ -9118,6 +9291,8 @@ __m256 test_mm512_castps512_ps256 (__m512 __A) return _mm512_castps512_ps256 (__A); } +TEST_CONSTEXPR(match_m256(_mm512_castps512_ps256((__m512){0.0f, 1.0f, 2.0f, 4.0f, -8.0f, -16.0f, -32.0f, -64.0f, -128.0f, -256.0f, -512.0f, -1024.0f, -2048.0f, -4096.0f, -8192.0f, -16384.0f}), 0.0f, 1.0f, 2.0f, 4.0f, -8.0f, -16.0f, -32.0f, -64.0f)); + __m512i test_mm512_castps_si512 (__m512 __A) { // CHECK-LABEL: test_mm512_castps_si512 @@ -9170,6 +9345,8 @@ __m256i test_mm512_castsi512_si256 (__m512i __A) return _mm512_castsi512_si256 (__A); } +TEST_CONSTEXPR(match_v8si(_mm512_castsi512_si256((__m512i)(__v16si){0, 1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096, 8192, 16384}), 0, 1, 2, 4, 8, 16, 32, 64)); + __m128 test_mm_cvt_roundsd_ss(__m128 __A, __m128d __B) { // CHECK-LABEL: test_mm_cvt_roundsd_ss // CHECK: @llvm.x86.avx512.mask.cvtsd2ss.round @@ -9317,6 +9494,8 @@ __m512 test_mm512_cvtepu32_ps (__m512i __A) return _mm512_cvtepu32_ps (__A); } +TEST_CONSTEXPR(match_m512(_mm512_cvtepu32_ps((__m512i)(__v16su){0, 1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096, 8192, 16384}), 0.0f, 1.0f, 2.0f, 4.0f, 8.0f, 16.0f, 32.0f, 64.0f, 128.0f, 256.0f, 512.0f, 1024.0f, 2048.0f, 4096.0f, 8192.0f, 16384.0f)); + __m512 test_mm512_mask_cvtepu32_ps (__m512 __W, __mmask16 __U, __m512i __A) { // CHECK-LABEL: test_mm512_mask_cvtepu32_ps @@ -9325,6 +9504,8 @@ __m512 test_mm512_mask_cvtepu32_ps (__m512 __W, __mmask16 __U, __m512i __A) return _mm512_mask_cvtepu32_ps (__W,__U,__A); } +TEST_CONSTEXPR(match_m512(_mm512_mask_cvtepu32_ps(_mm512_set1_ps(-777.0f), /*1010 1100 1010 1101=*/0xacad, (__m512i)(__v16su){0, 1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096, 8192, 16384}), 0.0f, -777.0f, 2.0f, 4.0f, -777.0f, 16.0f, -777.0f, 64.0f, -777.0f, -777.0f, 512.0f, 1024.0f, -777.0f, 4096.0f, -777.0f, 16384.0f)); + __m512 test_mm512_maskz_cvtepu32_ps (__mmask16 __U, __m512i __A) { // CHECK-LABEL: test_mm512_maskz_cvtepu32_ps @@ -9333,6 +9514,8 @@ __m512 test_mm512_maskz_cvtepu32_ps (__mmask16 __U, __m512i __A) return _mm512_maskz_cvtepu32_ps (__U,__A); } +TEST_CONSTEXPR(match_m512(_mm512_maskz_cvtepu32_ps(/*1010 1100 1010 1101=*/0xacad, (__m512i)(__v16su){0, 1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096, 8192, 16384}), 0.0f, 0.0f, 2.0f, 4.0f, 0.0f, 16.0f, 0.0f, 64.0f, 0.0f, 0.0f, 512.0f, 1024.0f, 0.0f, 4096.0f, 0.0f, 16384.0f)); + __m512d test_mm512_cvtepi32_pd (__m256i __A) { // CHECK-LABEL: test_mm512_cvtepi32_pd @@ -9340,6 +9523,8 @@ __m512d test_mm512_cvtepi32_pd (__m256i __A) return _mm512_cvtepi32_pd (__A); } +TEST_CONSTEXPR(match_m512d(_mm512_cvtepi32_pd((__m256i)(__v8si){-8, -4, -2, -1, 0, 1, 2, 4}), -8.0, -4.0, -2.0, -1.0, 0.0, 1.0, 2.0, 4.0)); + __m512d test_mm512_mask_cvtepi32_pd (__m512d __W, __mmask8 __U, __m256i __A) { // CHECK-LABEL: test_mm512_mask_cvtepi32_pd @@ -9348,6 +9533,8 @@ __m512d test_mm512_mask_cvtepi32_pd (__m512d __W, __mmask8 __U, __m256i __A) return _mm512_mask_cvtepi32_pd (__W,__U,__A); } +TEST_CONSTEXPR(match_m512d(_mm512_mask_cvtepi32_pd(_mm512_set1_pd(-777.0), /*0101 1100=*/0x5c, (__m256i)(__v8si){-8, -4, -2, -1, 0, 1, 2, 4}), -777.0, -777.0, -2.0, -1.0, 0.0, -777.0, 2.0, -777.0)); + __m512d test_mm512_maskz_cvtepi32_pd (__mmask8 __U, __m256i __A) { // CHECK-LABEL: test_mm512_maskz_cvtepi32_pd @@ -9356,6 +9543,8 @@ __m512d test_mm512_maskz_cvtepi32_pd (__mmask8 __U, __m256i __A) return _mm512_maskz_cvtepi32_pd (__U,__A); } +TEST_CONSTEXPR(match_m512d(_mm512_maskz_cvtepi32_pd(/*0101 1100=*/0x5c, (__m256i)(__v8si){-8, -4, -2, -1, 0, 1, 2, 4}), 0.0, 0.0, -2.0, -1.0, 0.0, 0.0, 2.0, 0.0)); + __m512d test_mm512_cvtepi32lo_pd (__m512i __A) { // CHECK-LABEL: test_mm512_cvtepi32lo_pd @@ -9364,6 +9553,8 @@ __m512d test_mm512_cvtepi32lo_pd (__m512i __A) return _mm512_cvtepi32lo_pd (__A); } +TEST_CONSTEXPR(match_m512d(_mm512_cvtepi32lo_pd((__m512i)(__v16si){-128, -64, -32, -16, -8, -4, -2, -1, 0, 1, 2, 4, 8, 16, 32, 64}), -128.0, -64.0, -32.0, -16.0, -8.0, -4.0, -2.0, -1.0)); + __m512d test_mm512_mask_cvtepi32lo_pd (__m512d __W, __mmask8 __U, __m512i __A) { // CHECK-LABEL: test_mm512_mask_cvtepi32lo_pd @@ -9373,6 +9564,8 @@ __m512d test_mm512_mask_cvtepi32lo_pd (__m512d __W, __mmask8 __U, __m512i __A) return _mm512_mask_cvtepi32lo_pd (__W, __U, __A); } +TEST_CONSTEXPR(match_m512d(_mm512_mask_cvtepi32lo_pd(_mm512_set1_pd(-777.0), /*1010 1101=*/0xad, (__m512i)(__v16si){-128, -64, -32, -16, -8, -4, -2, -1, 0, 1, 2, 4, 8, 16, 32, 64}), -128.0, -777.0, -32.0, -16.0, -777.0, -4.0, -777.0, -1.0)); + __m512 test_mm512_cvtepi32_ps (__m512i __A) { // CHECK-LABEL: test_mm512_cvtepi32_ps @@ -9380,6 +9573,8 @@ __m512 test_mm512_cvtepi32_ps (__m512i __A) return _mm512_cvtepi32_ps (__A); } +TEST_CONSTEXPR(match_m512(_mm512_cvtepi32_ps((__m512i)(__v16si){-128, -64, -32, -16, -8, -4, -2, -1, 0, 1, 2, 4, 8, 16, 32, 64}), -128.0f, -64.0f, -32.0f, -16.0f, -8.0f, -4.0f, -2.0f, -1.0f, 0.0f, 1.0f, 2.0f, 4.0f, 8.0f, 16.0f, 32.0f, 64.0f)); + __m512 test_mm512_mask_cvtepi32_ps (__m512 __W, __mmask16 __U, __m512i __A) { // CHECK-LABEL: test_mm512_mask_cvtepi32_ps @@ -9388,6 +9583,8 @@ __m512 test_mm512_mask_cvtepi32_ps (__m512 __W, __mmask16 __U, __m512i __A) return _mm512_mask_cvtepi32_ps (__W,__U,__A); } +TEST_CONSTEXPR(match_m512(_mm512_mask_cvtepi32_ps(_mm512_set1_ps(-777.0f), /*1010 1100 1010 1101=*/0xacad, (__m512i)(__v16si){-128, -64, -32, -16, -8, -4, -2, -1, 0, 1, 2, 4, 8, 16, 32, 64}), -128.0f, -777.0f, -32.0f, -16.0f, -777.0f, -4.0f, -777.0f, -1.0f, -777.0f, -777.0f, 2.0f, 4.0f, -777.0f, 16.0f, -777.0f, 64.0f)); + __m512 test_mm512_maskz_cvtepi32_ps (__mmask16 __U, __m512i __A) { // CHECK-LABEL: test_mm512_maskz_cvtepi32_ps @@ -9396,6 +9593,8 @@ __m512 test_mm512_maskz_cvtepi32_ps (__mmask16 __U, __m512i __A) return _mm512_maskz_cvtepi32_ps (__U,__A); } +TEST_CONSTEXPR(match_m512(_mm512_maskz_cvtepi32_ps(/*1010 1100 1010 1101=*/0xacad, (__m512i)(__v16si){-128, -64, -32, -16, -8, -4, -2, -1, 0, 1, 2, 4, 8, 16, 32, 64}), -128.0f, 0.0f, -32.0f, -16.0f, 0.0f, -4.0f, 0.0f, -1.0f, 0.0f, 0.0f, 2.0f, 4.0f, 0.0f, 16.0f, 0.0f, 64.0f)); + __m512d test_mm512_cvtepu32_pd(__m256i __A) { // CHECK-LABEL: test_mm512_cvtepu32_pd @@ -9403,6 +9602,8 @@ __m512d test_mm512_cvtepu32_pd(__m256i __A) return _mm512_cvtepu32_pd(__A); } +TEST_CONSTEXPR(match_m512d(_mm512_cvtepu32_pd((__m256i)(__v8su){0, 1, 2, 4, 8, 16, 32, 64}), 0.0, 1.0, 2.0, 4.0, 8.0, 16.0, 32.0, 64.0)); + __m512d test_mm512_mask_cvtepu32_pd (__m512d __W, __mmask8 __U, __m256i __A) { // CHECK-LABEL: test_mm512_mask_cvtepu32_pd @@ -9411,6 +9612,8 @@ __m512d test_mm512_mask_cvtepu32_pd (__m512d __W, __mmask8 __U, __m256i __A) return _mm512_mask_cvtepu32_pd (__W,__U,__A); } +TEST_CONSTEXPR(match_m512d(_mm512_mask_cvtepu32_pd(_mm512_set1_pd(-777.0), /*0101 1100=*/0x5c, (__m256i)(__v8su){0, 1, 2, 4, 8, 16, 32, 64}), -777.0, -777.0, 2.0, 4.0, 8.0, -777.0, 32.0, -777.0)); + __m512d test_mm512_maskz_cvtepu32_pd (__mmask8 __U, __m256i __A) { // CHECK-LABEL: test_mm512_maskz_cvtepu32_pd @@ -9419,6 +9622,8 @@ __m512d test_mm512_maskz_cvtepu32_pd (__mmask8 __U, __m256i __A) return _mm512_maskz_cvtepu32_pd (__U,__A); } +TEST_CONSTEXPR(match_m512d(_mm512_maskz_cvtepu32_pd(/*0101 1100=*/0x5c, (__m256i)(__v8su){0, 1, 2, 4, 8, 16, 32, 64}), 0.0, 0.0, 2.0, 4.0, 8.0, 0.0, 32.0, 0.0)); + __m512d test_mm512_cvtepu32lo_pd (__m512i __A) { // CHECK-LABEL: test_mm512_cvtepu32lo_pd @@ -9427,6 +9632,9 @@ __m512d test_mm512_cvtepu32lo_pd (__m512i __A) return _mm512_cvtepu32lo_pd (__A); } +TEST_CONSTEXPR(match_m512d(_mm512_cvtepu32lo_pd((__m512i)(__v16su){0, 1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096, 8192, 16384}), 0.0, 1.0, 2.0, 4.0, 8.0, 16.0, 32.0, 64.0)); + + __m512d test_mm512_mask_cvtepu32lo_pd (__m512d __W, __mmask8 __U, __m512i __A) { // CHECK-LABEL: test_mm512_mask_cvtepu32lo_pd @@ -9436,6 +9644,8 @@ __m512d test_mm512_mask_cvtepu32lo_pd (__m512d __W, __mmask8 __U, __m512i __A) return _mm512_mask_cvtepu32lo_pd (__W, __U, __A); } +TEST_CONSTEXPR(match_m512d(_mm512_mask_cvtepu32lo_pd(_mm512_set1_pd(-777.0), /*1010 1101=*/0xad, (__m512i)(__v16su){0, 1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096, 8192, 16384}), 0.0, -777.0, 2.0, 4.0, -777.0, 16.0, -777.0, 64.0)); + __m256 test_mm512_cvtpd_ps (__m512d __A) { // CHECK-LABEL: test_mm512_cvtpd_ps @@ -10206,6 +10416,11 @@ __m512i test_mm512_set_epi8(char e63, char e62, char e61, char e60, char e59, e25, e24, e23, e22, e21, e20, e19, e18, e17, e16, e15, e14, e13, e12, e11, e10, e9, e8, e7, e6, e5, e4, e3, e2, e1, e0); } +TEST_CONSTEXPR(match_v64qi(_mm512_set_epi8(63, 62, 61, 60, 59, 58, 57, 56, 55, 54, 53, 52, 51, 50, 49, 48, + 47, 46, 45, 44, 43, 42, 41, 40, 39, 38, 37, 36, 35, 34, 33, 32, + 31, 30, 29, 28, 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, 17, 16, + 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0), 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, + 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63)); __m512i test_mm512_set_epi16(short e31, short e30, short e29, short e28, short e27, short e26, short e25, short e24, short e23, short e22, @@ -10249,8 +10464,9 @@ __m512i test_mm512_set_epi16(short e31, short e30, short e29, short e28, return _mm512_set_epi16(e31, e30, e29, e28, e27, e26, e25, e24, e23, e22, e21, e20, e19, e18, e17, e16, e15, e14, e13, e12, e11, e10, e9, e8, e7, e6, e5, e4, e3, e2, e1, e0); - } +TEST_CONSTEXPR(match_v32hi(_mm512_set_epi16(-31, 30, -29, 28, -27, 26, -25, 24, -23, 22, -21, 20, -19, 18, -17, 16, -15, 14, -13, 12, -11, 10, -9, 8, -7, 6, -5, 4, -3, 2, -1, 0), 0, -1, 2, -3, 4, -5, 6, -7, 8, -9, 10, -11, 12, -13, 14, -15, 16, -17, 18, -19, 20, -21, 22, -23, 24, -25, 26, -27, 28, -29, 30, -31)); + __m512i test_mm512_set_epi32 (int __A, int __B, int __C, int __D, int __E, int __F, int __G, int __H, int __I, int __J, int __K, int __L, @@ -10276,6 +10492,7 @@ __m512i test_mm512_set_epi32 (int __A, int __B, int __C, int __D, return _mm512_set_epi32( __A, __B, __C, __D,__E, __F, __G, __H, __I, __J, __K, __L,__M, __N, __O, __P); } +TEST_CONSTEXPR(match_v16si(_mm512_set_epi32(-15, -14, -13, -12, -11, -10, -9, -8, -7, -6, -5, -4, -3, -2, -1, 0), 0, -1, -2, -3, -4, -5, -6, -7, -8, -9, -10, -11, -12, -13, -14, -15)); __m512i test_mm512_setr_epi32 (int __A, int __B, int __C, int __D, int __E, int __F, int __G, int __H, @@ -10318,6 +10535,7 @@ __m512i test_mm512_setr_epi32 (int __A, int __B, int __C, int __D, return _mm512_setr_epi32( __A, __B, __C, __D,__E, __F, __G, __H, __I, __J, __K, __L,__M, __N, __O, __P); } +TEST_CONSTEXPR(match_v16si(_mm512_setr_epi32(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15), 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)); __m512i test_mm512_mask_set1_epi64 (__m512i __O, __mmask8 __M, long long __A) { @@ -10365,6 +10583,7 @@ __m512i test_mm512_set_epi64 (long long __A, long long __B, long long __C, //CHECK: insertelement{{.*}}i32 7 return _mm512_set_epi64(__A, __B, __C, __D, __E, __F, __G, __H ); } +TEST_CONSTEXPR(match_v8di(_mm512_set_epi64(-15, 13, -11, 9, -7, 5, -3, 1), 1, -3, 5, -7, 9, -11, 13, -15)); __m512i test_mm512_setr_epi64 (long long __A, long long __B, long long __C, long long __D, long long __E, long long __F, @@ -10389,6 +10608,7 @@ __m512i test_mm512_setr_epi64 (long long __A, long long __B, long long __C, //CHECK: insertelement{{.*}}i32 7 return _mm512_setr_epi64(__A, __B, __C, __D, __E, __F, __G, __H ); } +TEST_CONSTEXPR(match_v8di(_mm512_setr_epi64(-1, 3, -5, 7, -9, 11, -13, 15), -1, 3, -5, 7, -9, 11, -13, 15)); __m512d test_mm512_set_pd (double __A, double __B, double __C, double __D, double __E, double __F, double __G, double __H) @@ -10404,6 +10624,7 @@ __m512d test_mm512_set_pd (double __A, double __B, double __C, double __D, //CHECK: insertelement{{.*}}i32 7 return _mm512_set_pd( __A, __B, __C, __D, __E, __F, __G, __H); } +TEST_CONSTEXPR(match_m512d(_mm512_set_pd(20.0, 40.0, 60.0, 80.0, 100.0, 120.0, 140.0, 160.0), 160.0, 140.0, 120.0, 100.0, 80.0, 60.0, 40.0, 20.0)); __m512d test_mm512_setr_pd (double __A, double __B, double __C, double __D, double __E, double __F, double __G, double __H) @@ -10427,6 +10648,7 @@ __m512d test_mm512_setr_pd (double __A, double __B, double __C, double __D, //CHECK: insertelement{{.*}}i32 7 return _mm512_setr_pd( __A, __B, __C, __D, __E, __F, __G, __H); } +TEST_CONSTEXPR(match_m512d(_mm512_setr_pd(-20.0, 40.0, -60.0, 80.0, -100.0, 120.0, -140.0, 160.0), -20.0, 40.0, -60.0, 80.0, -100.0, 120.0, -140.0, 160.0)); __m512 test_mm512_set_ps (float __A, float __B, float __C, float __D, float __E, float __F, float __G, float __H, @@ -10453,6 +10675,9 @@ __m512 test_mm512_set_ps (float __A, float __B, float __C, float __D, return _mm512_set_ps( __A, __B, __C, __D, __E, __F, __G, __H, __I, __J, __K, __L, __M, __N, __O, __P); } +TEST_CONSTEXPR(match_m512(_mm512_set_ps(-16.0f, 15.0f, -14.0f, 13.0f, -12.0f, 11.0f, -10.0f, 9.0f, -8.0f, 7.0f, -6.0f, 5.0f, -4.0f, 3.0f, -2.0f, 1.0f), 1.0f, -2.0f, 3.0f, -4.0f, 5.0f, -6.0f, 7.0f, -8.0f, 9.0f, -10.0f, 11.0f, -12.0f, 13.0f, -14.0f, 15.0f, -16.0f)); + +TEST_CONSTEXPR(match_v8di(_mm512_abs_epi64((__m512i)(__v8di){-1, 2, 2, 2, 2, 2, 2, 2}), 1, 2, 2, 2, 2, 2, 2, 2)); __m512i test_mm512_mask_abs_epi64 (__m512i __W, __mmask8 __U, __m512i __A) { @@ -10461,6 +10686,7 @@ __m512i test_mm512_mask_abs_epi64 (__m512i __W, __mmask8 __U, __m512i __A) // CHECK: select <8 x i1> %{{.*}}, <8 x i64> [[ABS]], <8 x i64> %{{.*}} return _mm512_mask_abs_epi64 (__W,__U,__A); } +TEST_CONSTEXPR(match_v8di(_mm512_mask_abs_epi64((__m512i)(__v8di){99, 99, 99, 99, 99, 99, 99, 99}, (__mmask8)0x01, (__m512i)(__v8di){-1, 2, 2, 2, 2, 2, 2, 2}), 1, 99, 99, 99, 99, 99, 99, 99)); __m512i test_mm512_maskz_abs_epi64 (__mmask8 __U, __m512i __A) { @@ -10469,6 +10695,9 @@ __m512i test_mm512_maskz_abs_epi64 (__mmask8 __U, __m512i __A) // CHECK: select <8 x i1> %{{.*}}, <8 x i64> [[ABS]], <8 x i64> %{{.*}} return _mm512_maskz_abs_epi64 (__U,__A); } +TEST_CONSTEXPR(match_v8di(_mm512_maskz_abs_epi64((__mmask8)0x01, (__m512i)(__v8di){-1, 2, 2, 2, 2, 2, 2, 2}), 1, 0, 0, 0, 0, 0, 0, 0)); + +TEST_CONSTEXPR(match_v16si(_mm512_abs_epi32((__m512i)(__v16si){-1, 2, 2, 2, 2, 2, 2, 2, -1, 2, 2, 2, 2, 2, 2, 2}), 1, 2, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 2)); __m512i test_mm512_mask_abs_epi32 (__m512i __W, __mmask16 __U, __m512i __A) { @@ -10479,6 +10708,7 @@ __m512i test_mm512_mask_abs_epi32 (__m512i __W, __mmask16 __U, __m512i __A) // CHECK: select <16 x i1> %{{.*}}, <16 x i32> [[ABS]], <16 x i32> %{{.*}} return _mm512_mask_abs_epi32 (__W,__U,__A); } +TEST_CONSTEXPR(match_v16si(_mm512_mask_abs_epi32((__m512i)(__v16si){99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99}, (__mmask16)0x0001, (__m512i)(__v16si){-1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2}), 1, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99)); __m512i test_mm512_maskz_abs_epi32 (__mmask16 __U, __m512i __A) { @@ -10489,6 +10719,7 @@ __m512i test_mm512_maskz_abs_epi32 (__mmask16 __U, __m512i __A) // CHECK: select <16 x i1> %{{.*}}, <16 x i32> [[ABS]], <16 x i32> %{{.*}} return _mm512_maskz_abs_epi32 (__U,__A); } +TEST_CONSTEXPR(match_v16si(_mm512_maskz_abs_epi32((__mmask16)0x0001, (__m512i)(__v16si){-1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2}), 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)); __m512 test_mm512_setr_ps (float __A, float __B, float __C, float __D, float __E, float __F, float __G, float __H, @@ -10531,6 +10762,7 @@ __m512 test_mm512_setr_ps (float __A, float __B, float __C, float __D, return _mm512_setr_ps( __A, __B, __C, __D, __E, __F, __G, __H, __I, __J, __K, __L, __M, __N, __O, __P); } +TEST_CONSTEXPR(match_m512(_mm512_setr_ps(-1.0f, 2.0f, -3.0f, 4.0f, -5.0f, 6.0f, -7.0f, 8.0f, -9.0f, 10.0f, -11.0f, 12.0f, -13.0f, 14.0f, -15.0f, 16.0f), -1.0f, 2.0f, -3.0f, 4.0f, -5.0f, 6.0f, -7.0f, 8.0f, -9.0f, 10.0f, -11.0f, 12.0f, -13.0f, 14.0f, -15.0f, 16.0f)); int test_mm_cvtss_i32(__m128 A) { // CHECK-LABEL: test_mm_cvtss_i32 @@ -10773,6 +11005,7 @@ __m512d test_mm512_abs_pd(__m512d a){ // CHECK: and <8 x i64> return _mm512_abs_pd(a); } +TEST_CONSTEXPR(match_m512d(_mm512_abs_pd((__m512d){-1.0, 2.0, -3.0, 4.0, -5.0, 6.0, -7.0, 8.0}), 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0)); __m512d test_mm512_mask_abs_pd (__m512d __W, __mmask8 __U, __m512d __A){ // CHECK-LABEL: test_mm512_mask_abs_pd @@ -10781,12 +11014,14 @@ __m512d test_mm512_mask_abs_pd (__m512d __W, __mmask8 __U, __m512d __A){ // CHECK: select <8 x i1> %[[MASK]], <8 x i64> %[[AND_RES]], <8 x i64> %{{.*}} return _mm512_mask_abs_pd (__W,__U,__A); } +TEST_CONSTEXPR(match_m512d(_mm512_mask_abs_pd((__m512d){99.0, 99.0, 99.0, 99.0, 99.0, 99.0, 99.0, 99.0}, (__mmask8)0x01, (__m512d){-1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0}), 1.0, 99.0, 99.0, 99.0, 99.0, 99.0, 99.0, 99.0)); __m512 test_mm512_abs_ps(__m512 a){ // CHECK-LABEL: test_mm512_abs_ps // CHECK: and <16 x i32> return _mm512_abs_ps(a); } +TEST_CONSTEXPR(match_m512(_mm512_abs_ps((__m512){-1.0f, 2.0f, -3.0f, 4.0f, -5.0f, 6.0f, -7.0f, 8.0f, -9.0f, 10.0f, -11.0f, 12.0f, -13.0f, 14.0f, -15.0f, -16.0f}), 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f, 9.0f, 10.0f, 11.0f, 12.0f, 13.0f, 14.0f, 15.0f, 16.0f)); __m512 test_mm512_mask_abs_ps(__m512 __W, __mmask16 __U, __m512 __A){ // CHECK-LABEL: test_mm512_mask_abs_ps @@ -10795,6 +11030,7 @@ __m512 test_mm512_mask_abs_ps(__m512 __W, __mmask16 __U, __m512 __A){ // CHECK: select <16 x i1> %[[MASK]], <16 x i32> %{{.*}}, <16 x i32> %{{.*}} return _mm512_mask_abs_ps( __W, __U, __A); } +TEST_CONSTEXPR(match_m512(_mm512_mask_abs_ps((__m512){99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99}, (__mmask16)0x0001, (__m512){-1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2}), 1, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99)); __m512d test_mm512_zextpd128_pd512(__m128d A) { // CHECK-LABEL: test_mm512_zextpd128_pd512 @@ -10802,6 +11038,7 @@ __m512d test_mm512_zextpd128_pd512(__m128d A) { // CHECK: shufflevector <2 x double> %{{.*}}, <2 x double> %{{.*}}, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 2, i32 3, i32 2, i32 3> return _mm512_zextpd128_pd512(A); } +TEST_CONSTEXPR(match_m512d(_mm512_zextpd128_pd512((__m128d){+99.0, -1.0}), +99.0, -1.0, +0.0, +0.0, 0.0, 0.0, 0.0, 0.0)); __m512d test_mm512_zextpd256_pd512(__m256d A) { // CHECK-LABEL: test_mm512_zextpd256_pd512 @@ -10809,6 +11046,7 @@ __m512d test_mm512_zextpd256_pd512(__m256d A) { // CHECK: shufflevector <4 x double> %{{.*}}, <4 x double> %{{.*}}, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7> return _mm512_zextpd256_pd512(A); } +TEST_CONSTEXPR(match_m512d(_mm512_zextpd256_pd512((__m256d){1.0, 2.0, 3.0, 4.0}), 1.0, 2.0, 3.0, 4.0, 0.0, 0.0, 0.0, 0.0)); __m512 test_mm512_zextps128_ps512(__m128 A) { // CHECK-LABEL: test_mm512_zextps128_ps512 @@ -10816,6 +11054,7 @@ __m512 test_mm512_zextps128_ps512(__m128 A) { // CHECK: shufflevector <4 x float> %{{.*}}, <4 x float> %{{.*}}, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 4, i32 5, i32 6, i32 7, i32 4, i32 5, i32 6, i32 7> return _mm512_zextps128_ps512(A); } +TEST_CONSTEXPR(match_m512(_mm512_zextps128_ps512((__m128){1.0f, 2.0f, 3.0f, 4.0f}), 1.0f, 2.0f, 3.0f, 4.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f)); __m512 test_mm512_zextps256_ps512(__m256 A) { // CHECK-LABEL: test_mm512_zextps256_ps512 @@ -10823,6 +11062,7 @@ __m512 test_mm512_zextps256_ps512(__m256 A) { // CHECK: shufflevector <8 x float> %{{.*}}, <8 x float> %{{.*}}, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15> return _mm512_zextps256_ps512(A); } +TEST_CONSTEXPR(match_m512(_mm512_zextps256_ps512((__m256){1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f}), 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f)); __m512i test_mm512_zextsi128_si512(__m128i A) { // CHECK-LABEL: test_mm512_zextsi128_si512 @@ -10830,6 +11070,7 @@ __m512i test_mm512_zextsi128_si512(__m128i A) { // CHECK: shufflevector <2 x i64> %{{.*}}, <2 x i64> %{{.*}}, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 2, i32 3, i32 2, i32 3> return _mm512_zextsi128_si512(A); } +TEST_CONSTEXPR(match_m512i(_mm512_zextsi128_si512((__m128i){1, 2}), 1, 2, 0, 0, 0, 0, 0, 0)); __m512i test_mm512_zextsi256_si512(__m256i A) { // CHECK-LABEL: test_mm512_zextsi256_si512 @@ -10837,6 +11078,7 @@ __m512i test_mm512_zextsi256_si512(__m256i A) { // CHECK: shufflevector <4 x i64> %{{.*}}, <4 x i64> %{{.*}}, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7> return _mm512_zextsi256_si512(A); } +TEST_CONSTEXPR(match_m512i(_mm512_zextsi256_si512((__m256i){1, 2, 3, 4}), 1, 2, 3, 4, 0, 0, 0, 0)); __m512d test_mm512_i32logather_pd(__m512i __index, void const *__addr) { // CHECK-LABEL: test_mm512_i32logather_pd diff --git a/clang/test/CodeGen/X86/avx512fp16-builtins.c b/clang/test/CodeGen/X86/avx512fp16-builtins.c index d277d05..37443d5 100644 --- a/clang/test/CodeGen/X86/avx512fp16-builtins.c +++ b/clang/test/CodeGen/X86/avx512fp16-builtins.c @@ -1,51 +1,64 @@ -// RUN: %clang_cc1 -ffreestanding -flax-vector-conversions=none %s -triple=x86_64-unknown-unknown -target-feature +avx512fp16 -emit-llvm -o - -Wall -Werror | FileCheck %s +// RUN: %clang_cc1 -x c -ffreestanding -flax-vector-conversions=none %s -triple=x86_64-unknown-unknown -target-feature +avx512fp16 -emit-llvm -o - -Wall -Werror | FileCheck %s --check-prefixes=CHECK,X64 +// RUN: %clang_cc1 -x c -ffreestanding -flax-vector-conversions=none %s -triple=i686-unknown-unknown -target-feature +avx512fp16 -emit-llvm -o - -Wall -Werror | FileCheck %s --check-prefixes=CHECK +// RUN: %clang_cc1 -x c++ -ffreestanding -flax-vector-conversions=none %s -triple=x86_64-unknown-unknown -target-feature +avx512fp16 -emit-llvm -o - -Wall -Werror | FileCheck %s --check-prefixes=CHECK,X64 +// RUN: %clang_cc1 -x c++ -ffreestanding -flax-vector-conversions=none %s -triple=i686-unknown-unknown -target-feature +avx512fp16 -emit-llvm -o - -Wall -Werror | FileCheck %s --check-prefixes=CHECK + +// RUN: %clang_cc1 -x c -ffreestanding -flax-vector-conversions=none %s -triple=x86_64-unknown-unknown -target-feature +avx512fp16 -emit-llvm -o - -Wall -Werror -fexperimental-new-constant-interpreter | FileCheck %s --check-prefixes=CHECK,X64 +// RUN: %clang_cc1 -x c -ffreestanding -flax-vector-conversions=none %s -triple=i686-unknown-unknown -target-feature +avx512fp16 -emit-llvm -o - -Wall -Werror -fexperimental-new-constant-interpreter | FileCheck %s --check-prefixes=CHECK +// RUN: %clang_cc1 -x c++ -ffreestanding -flax-vector-conversions=none %s -triple=x86_64-unknown-unknown -target-feature +avx512fp16 -emit-llvm -o - -Wall -Werror -fexperimental-new-constant-interpreter | FileCheck %s --check-prefixes=CHECK,X64 +// RUN: %clang_cc1 -x c++ -ffreestanding -flax-vector-conversions=none %s -triple=i686-unknown-unknown -target-feature +avx512fp16 -emit-llvm -o - -Wall -Werror -fexperimental-new-constant-interpreter | FileCheck %s --check-prefixes=CHECK + #include <immintrin.h> +#include "builtin_test_helpers.h" _Float16 test_mm512_cvtsh_h(__m512h __A) { - // CHECK-LABEL: @test_mm512_cvtsh_h + // CHECK-LABEL: test_mm512_cvtsh_h // CHECK: extractelement <32 x half> %{{.*}}, i32 0 return _mm512_cvtsh_h(__A); } __m128h test_mm_setzero_ph(void) { - // CHECK-LABEL: @test_mm_setzero_ph + // CHECK-LABEL: test_mm_setzero_ph // CHECK: zeroinitializer return _mm_setzero_ph(); } +TEST_CONSTEXPR(match_m128h(_mm_setzero_ph(), +0.0f, +0.0f, +0.0f, +0.0f, +0.0f, +0.0f, +0.0f, +0.0f)); __m256h test_mm256_setzero_ph(void) { - // CHECK-LABEL: @test_mm256_setzero_ph + // CHECK-LABEL: test_mm256_setzero_ph // CHECK: zeroinitializer return _mm256_setzero_ph(); } +TEST_CONSTEXPR(match_m256h(_mm256_setzero_ph(), +0.0f, +0.0f, +0.0f, +0.0f, +0.0f, +0.0f, +0.0f, +0.0f, +0.0f, +0.0f, +0.0f, +0.0f, +0.0f, +0.0f, +0.0f, +0.0f)); __m256h test_mm256_undefined_ph(void) { - // CHECK-LABEL: @test_mm256_undefined_ph + // CHECK-LABEL: test_mm256_undefined_ph // CHECK: ret <16 x half> zeroinitializer return _mm256_undefined_ph(); } __m512h test_mm512_setzero_ph(void) { - // CHECK-LABEL: @test_mm512_setzero_ph + // CHECK-LABEL: test_mm512_setzero_ph // CHECK: zeroinitializer return _mm512_setzero_ph(); } +TEST_CONSTEXPR(match_m512h(_mm512_setzero_ph(), +0.0f, +0.0f, +0.0f, +0.0f, +0.0f, +0.0f, +0.0f, +0.0f, +0.0f, +0.0f, +0.0f, +0.0f, +0.0f, +0.0f, +0.0f, +0.0f, +0.0f, +0.0f, +0.0f, +0.0f, +0.0f, +0.0f, +0.0f, +0.0f, +0.0f, +0.0f, +0.0f, +0.0f, +0.0f, +0.0f, +0.0f, +0.0f)); __m128h test_mm_undefined_ph(void) { - // CHECK-LABEL: @test_mm_undefined_ph + // CHECK-LABEL: test_mm_undefined_ph // CHECK: ret <8 x half> zeroinitializer return _mm_undefined_ph(); } __m512h test_mm512_undefined_ph(void) { - // CHECK-LABEL: @test_mm512_undefined_ph + // CHECK-LABEL: test_mm512_undefined_ph // CHECK: ret <32 x half> zeroinitializer return _mm512_undefined_ph(); } __m512h test_mm512_set1_ph(_Float16 h) { - // CHECK-LABEL: @test_mm512_set1_ph + // CHECK-LABEL: test_mm512_set1_ph // CHECK: insertelement <32 x half> {{.*}}, i32 0 // CHECK: insertelement <32 x half> {{.*}}, i32 1 // CHECK: insertelement <32 x half> {{.*}}, i32 2 @@ -80,9 +93,10 @@ __m512h test_mm512_set1_ph(_Float16 h) { // CHECK: insertelement <32 x half> {{.*}}, i32 31 return _mm512_set1_ph(h); } +TEST_CONSTEXPR(match_m512h(_mm512_set1_ph(-101.0f), -101.0f, -101.0f, -101.0f, -101.0f, -101.0f, -101.0f, -101.0f, -101.0f, -101.0f, -101.0f, -101.0f, -101.0f, -101.0f, -101.0f, -101.0f, -101.0f, -101.0f, -101.0f, -101.0f, -101.0f, -101.0f, -101.0f, -101.0f, -101.0f, -101.0f, -101.0f, -101.0f, -101.0f, -101.0f, -101.0f, -101.0f, -101.0f)); __m512h test_mm512_set1_pch(_Float16 _Complex h) { - // CHECK-LABEL: @test_mm512_set1_pch + // CHECK-LABEL: test_mm512_set1_pch // CHECK: insertelement <16 x float> {{.*}}, i32 0 // CHECK: insertelement <16 x float> {{.*}}, i32 1 // CHECK: insertelement <16 x float> {{.*}}, i32 2 @@ -111,7 +125,7 @@ __m512h test_mm512_set_ph(_Float16 __h1, _Float16 __h2, _Float16 __h3, _Float16 _Float16 __h21, _Float16 __h22, _Float16 __h23, _Float16 __h24, _Float16 __h25, _Float16 __h26, _Float16 __h27, _Float16 __h28, _Float16 __h29, _Float16 __h30, _Float16 __h31, _Float16 __h32) { - // CHECK-LABEL: @test_mm512_set_ph + // CHECK-LABEL: test_mm512_set_ph // CHECK: insertelement <32 x half> {{.*}}, i32 0 // CHECK: insertelement <32 x half> {{.*}}, i32 1 // CHECK: insertelement <32 x half> {{.*}}, i32 2 @@ -149,6 +163,13 @@ __m512h test_mm512_set_ph(_Float16 __h1, _Float16 __h2, _Float16 __h3, _Float16 __h17, __h18, __h19, __h20, __h21, __h22, __h23, __h24, __h25, __h26, __h27, __h28, __h29, __h30, __h31, __h32); } +TEST_CONSTEXPR(match_m512h(_mm512_set_ph(32.0f, -31.0f, 30.0f, -29.0f, 28.0f, -27.0f, 26.0f, -25.0f, + 24.0f, -23.0f, 22.0f, -21.0f, 20.0f, -19.0f, 18.0f, -17.0f, + 16.0f, -15.0f, 14.0f, -13.0f, 12.0f, -11.0f, 10.0f, -9.0f, + 8.0f, -7.0f, 6.0f, -5.0f, 4.0f, -3.0f, 2.0f, -1.0f), -1.0f, 2.0f, -3.0f, 4.0f, -5.0f, 6.0f, -7.0f, 8.0f, + -9.0f, 10.0f, -11.0f, 12.0f, -13.0f, 14.0f, -15.0f, 16.0f, + -17.0f, 18.0f, -19.0f, 20.0f, -21.0f, 22.0f, -23.0f, 24.0f, + -25.0f, 26.0f, -27.0f, 28.0f, -29.0f, 30.0f, -31.0f, 32.0f)); __m512h test_mm512_setr_ph(_Float16 __h1, _Float16 __h2, _Float16 __h3, _Float16 __h4, _Float16 __h5, _Float16 __h6, _Float16 __h7, _Float16 __h8, @@ -158,7 +179,7 @@ __m512h test_mm512_setr_ph(_Float16 __h1, _Float16 __h2, _Float16 __h3, _Float16 _Float16 __h21, _Float16 __h22, _Float16 __h23, _Float16 __h24, _Float16 __h25, _Float16 __h26, _Float16 __h27, _Float16 __h28, _Float16 __h29, _Float16 __h30, _Float16 __h31, _Float16 __h32) { - // CHECK-LABEL: @test_mm512_setr_ph + // CHECK-LABEL: test_mm512_setr_ph // CHECK: insertelement <32 x half> {{.*}}, i32 0 // CHECK: insertelement <32 x half> {{.*}}, i32 1 // CHECK: insertelement <32 x half> {{.*}}, i32 2 @@ -196,6 +217,14 @@ __m512h test_mm512_setr_ph(_Float16 __h1, _Float16 __h2, _Float16 __h3, _Float16 __h17, __h18, __h19, __h20, __h21, __h22, __h23, __h24, __h25, __h26, __h27, __h28, __h29, __h30, __h31, __h32); } +TEST_CONSTEXPR(match_m512h(_mm512_setr_ph(1.0f, -3.0f, 5.0f, -7.0f, 9.0f, -11.0f, 13.0f, -15.0f, + 17.0f, -19.0f, 21.0f, -23.0f, 25.0f, -27.0f, 29.0f, -31.0f, + 33.0f, -35.0f, 37.0f, -39.0f, 41.0f, -43.0f, 45.0f, -47.0f, + 49.0f, -51.0f, 53.0f, -55.0f, 57.0f, -59.0f, 61.0f, -63.0f), + 1.0f, -3.0f, 5.0f, -7.0f, 9.0f, -11.0f, 13.0f, -15.0f, + 17.0f, -19.0f, 21.0f, -23.0f, 25.0f, -27.0f, 29.0f, -31.0f, + 33.0f, -35.0f, 37.0f, -39.0f, 41.0f, -43.0f, 45.0f, -47.0f, + 49.0f, -51.0f, 53.0f, -55.0f, 57.0f, -59.0f, 61.0f, -63.0f)); __m128 test_mm_castph_ps(__m128h A) { // CHECK-LABEL: test_mm_castph_ps @@ -353,342 +382,346 @@ __m256h test_mm256_zextph128_ph256(__m128h __a) { // CHECK: shufflevector <8 x half> %{{.*}}, <8 x half> {{.*}}, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15> return _mm256_zextph128_ph256(__a); } +TEST_CONSTEXPR(match_m256h(_mm256_zextph128_ph256((__m128h){1.0f16, 2.0f16, 3.0f16, 4.0f16, 5.0f16, 6.0f16, 7.0f16, 8.0f16}), 1.0f16, 2.0f16, 3.0f16, 4.0f16, 5.0f16, 6.0f16, 7.0f16, 8.0f16, 0.0f16, 0.0f16, 0.0f16, 0.0f16, 0.0f16, 0.0f16, 0.0f16, 0.0f16)); __m512h test_mm512_zextph128_ph512(__m128h __a) { // CHECK-LABEL: test_mm512_zextph128_ph512 // CHECK: shufflevector <8 x half> %{{.*}}, <8 x half> {{.*}}, <32 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15> return _mm512_zextph128_ph512(__a); } +TEST_CONSTEXPR(match_m512h(_mm512_zextph128_ph512((__m128h){1.0f16, 2.0f16, 3.0f16, 4.0f16, 5.0f16, 6.0f16, 7.0f16, 8.0f16}), 1.0f16, 2.0f16, 3.0f16, 4.0f16, 5.0f16, 6.0f16, 7.0f16, 8.0f16, 0.0f16, 0.0f16, 0.0f16, 0.0f16, 0.0f16, 0.0f16, 0.0f16, 0.0f16, 0.0f16, 0.0f16, 0.0f16, 0.0f16, 0.0f16, 0.0f16, 0.0f16, 0.0f16, 0.0f16, 0.0f16, 0.0f16, 0.0f16, 0.0f16, 0.0f16, 0.0f16, 0.0f16)); __m512h test_mm512_zextph256_ph512(__m256h __a) { // CHECK-LABEL: test_mm512_zextph256_ph512 // CHECK: shufflevector <16 x half> %{{.*}}, <16 x half> {{.*}}, <32 x i32> return _mm512_zextph256_ph512(__a); } +TEST_CONSTEXPR(match_m512h(_mm512_zextph256_ph512((__m256h){1.0f16, 2.0f16, 3.0f16, 4.0f16, 5.0f16, 6.0f16, 7.0f16, 8.0f16, 9.0f16, 10.0f16, 11.0f16, 12.0f16, 13.0f16, 14.0f16, 15.0f16, 16.0f16}), 1.0f16, 2.0f16, 3.0f16, 4.0f16, 5.0f16, 6.0f16, 7.0f16, 8.0f16, 9.0f16, 10.0f16, 11.0f16, 12.0f16, 13.0f16, 14.0f16, 15.0f16, 16.0f16, 0.0f16, 0.0f16, 0.0f16, 0.0f16, 0.0f16, 0.0f16, 0.0f16, 0.0f16, 0.0f16, 0.0f16, 0.0f16, 0.0f16, 0.0f16, 0.0f16, 0.0f16, 0.0f16)); int test_mm_comi_round_sh(__m128h __A, __m128h __B) { // CHECK-LABEL: test_mm_comi_round_sh - // CHECK: %{{.}} = call i32 @llvm.x86.avx512fp16.vcomi.sh(<8 x half> %{{.}}, <8 x half> %{{.}}, i32 0, i32 8) + // CHECK: @llvm.x86.avx512fp16.vcomi.sh(<8 x half> %{{.}}, <8 x half> %{{.}}, i32 0, i32 8) return _mm_comi_round_sh(__A, __B, 0, _MM_FROUND_NO_EXC); } int test_mm_comi_sh(__m128h __A, __m128h __B) { // CHECK-LABEL: test_mm_comi_sh - // CHECK: %{{.}} = call i32 @llvm.x86.avx512fp16.vcomi.sh(<8 x half> %{{.}}, <8 x half> %{{.}}, i32 0, i32 4) + // CHECK: @llvm.x86.avx512fp16.vcomi.sh(<8 x half> %{{.}}, <8 x half> %{{.}}, i32 0, i32 4) return _mm_comi_sh(__A, __B, 0); } int test_mm_comieq_sh(__m128h __A, __m128h __B) { // CHECK-LABEL: test_mm_comieq_sh - // CHECK: %{{.}} = call i32 @llvm.x86.avx512fp16.vcomi.sh(<8 x half> %{{.}}, <8 x half> %{{.}}, i32 16, i32 4) + // CHECK: @llvm.x86.avx512fp16.vcomi.sh(<8 x half> %{{.}}, <8 x half> %{{.}}, i32 16, i32 4) return _mm_comieq_sh(__A, __B); } int test_mm_comilt_sh(__m128h __A, __m128h __B) { // CHECK-LABEL: test_mm_comilt_sh - // CHECK: %{{.}} = call i32 @llvm.x86.avx512fp16.vcomi.sh(<8 x half> %{{.}}, <8 x half> %{{.}}, i32 1, i32 4) + // CHECK: @llvm.x86.avx512fp16.vcomi.sh(<8 x half> %{{.}}, <8 x half> %{{.}}, i32 1, i32 4) return _mm_comilt_sh(__A, __B); } int test_mm_comile_sh(__m128h __A, __m128h __B) { // CHECK-LABEL: test_mm_comile_sh - // CHECK: %{{.}} = call i32 @llvm.x86.avx512fp16.vcomi.sh(<8 x half> %{{.}}, <8 x half> %{{.}}, i32 2, i32 4) + // CHECK: @llvm.x86.avx512fp16.vcomi.sh(<8 x half> %{{.}}, <8 x half> %{{.}}, i32 2, i32 4) return _mm_comile_sh(__A, __B); } int test_mm_comigt_sh(__m128h __A, __m128h __B) { // CHECK-LABEL: test_mm_comigt_sh - // CHECK: %{{.}} = call i32 @llvm.x86.avx512fp16.vcomi.sh(<8 x half> %{{.}}, <8 x half> %{{.}}, i32 14, i32 4) + // CHECK: @llvm.x86.avx512fp16.vcomi.sh(<8 x half> %{{.}}, <8 x half> %{{.}}, i32 14, i32 4) return _mm_comigt_sh(__A, __B); } int test_mm_comige_sh(__m128h __A, __m128h __B) { // CHECK-LABEL: test_mm_comige_sh - // CHECK: %{{.}} = call i32 @llvm.x86.avx512fp16.vcomi.sh(<8 x half> %{{.}}, <8 x half> %{{.}}, i32 13, i32 4) + // CHECK: @llvm.x86.avx512fp16.vcomi.sh(<8 x half> %{{.}}, <8 x half> %{{.}}, i32 13, i32 4) return _mm_comige_sh(__A, __B); } int test_mm_comineq_sh(__m128h __A, __m128h __B) { // CHECK-LABEL: test_mm_comineq_sh - // CHECK: %{{.}} = call i32 @llvm.x86.avx512fp16.vcomi.sh(<8 x half> %{{.}}, <8 x half> %{{.}}, i32 20, i32 4) + // CHECK: @llvm.x86.avx512fp16.vcomi.sh(<8 x half> %{{.}}, <8 x half> %{{.}}, i32 20, i32 4) return _mm_comineq_sh(__A, __B); } int test_mm_ucomieq_sh(__m128h __A, __m128h __B) { // CHECK-LABEL: test_mm_ucomieq_sh - // CHECK: %{{.}} = call i32 @llvm.x86.avx512fp16.vcomi.sh(<8 x half> %{{.}}, <8 x half> %{{.}}, i32 0, i32 4) + // CHECK: @llvm.x86.avx512fp16.vcomi.sh(<8 x half> %{{.}}, <8 x half> %{{.}}, i32 0, i32 4) return _mm_ucomieq_sh(__A, __B); } int test_mm_ucomilt_sh(__m128h __A, __m128h __B) { // CHECK-LABEL: test_mm_ucomilt_sh - // CHECK: %{{.}} = call i32 @llvm.x86.avx512fp16.vcomi.sh(<8 x half> %{{.}}, <8 x half> %{{.}}, i32 17, i32 4) + // CHECK: @llvm.x86.avx512fp16.vcomi.sh(<8 x half> %{{.}}, <8 x half> %{{.}}, i32 17, i32 4) return _mm_ucomilt_sh(__A, __B); } int test_mm_ucomile_sh(__m128h __A, __m128h __B) { // CHECK-LABEL: test_mm_ucomile_sh - // CHECK: %{{.}} = call i32 @llvm.x86.avx512fp16.vcomi.sh(<8 x half> %{{.}}, <8 x half> %{{.}}, i32 18, i32 4) + // CHECK: @llvm.x86.avx512fp16.vcomi.sh(<8 x half> %{{.}}, <8 x half> %{{.}}, i32 18, i32 4) return _mm_ucomile_sh(__A, __B); } int test_mm_ucomigt_sh(__m128h __A, __m128h __B) { // CHECK-LABEL: test_mm_ucomigt_sh - // CHECK: %{{.}} = call i32 @llvm.x86.avx512fp16.vcomi.sh(<8 x half> %{{.}}, <8 x half> %{{.}}, i32 30, i32 4) + // CHECK: @llvm.x86.avx512fp16.vcomi.sh(<8 x half> %{{.}}, <8 x half> %{{.}}, i32 30, i32 4) return _mm_ucomigt_sh(__A, __B); } int test_mm_ucomige_sh(__m128h __A, __m128h __B) { // CHECK-LABEL: test_mm_ucomige_sh - // CHECK: %{{.}} = call i32 @llvm.x86.avx512fp16.vcomi.sh(<8 x half> %{{.}}, <8 x half> %{{.}}, i32 29, i32 4) + // CHECK: @llvm.x86.avx512fp16.vcomi.sh(<8 x half> %{{.}}, <8 x half> %{{.}}, i32 29, i32 4) return _mm_ucomige_sh(__A, __B); } int test_mm_ucomineq_sh(__m128h __A, __m128h __B) { // CHECK-LABEL: test_mm_ucomineq_sh - // CHECK: %{{.}} = call i32 @llvm.x86.avx512fp16.vcomi.sh(<8 x half> %{{.}}, <8 x half> %{{.}}, i32 4, i32 4) + // CHECK: @llvm.x86.avx512fp16.vcomi.sh(<8 x half> %{{.}}, <8 x half> %{{.}}, i32 4, i32 4) return _mm_ucomineq_sh(__A, __B); } __m512h test_mm512_add_ph(__m512h __A, __m512h __B) { - // CHECK-LABEL: @test_mm512_add_ph + // CHECK-LABEL: test_mm512_add_ph // CHECK: %{{.*}} = fadd <32 x half> %{{.*}}, %{{.*}} return _mm512_add_ph(__A, __B); } __m512h test_mm512_mask_add_ph(__m512h __W, __mmask32 __U, __m512h __A, __m512h __B) { - // CHECK-LABEL: @test_mm512_mask_add_ph + // CHECK-LABEL: test_mm512_mask_add_ph // CHECK: %{{.*}} = fadd <32 x half> %{{.*}}, %{{.*}} // CHECK: select <32 x i1> %{{.*}}, <32 x half> %{{.*}}, <32 x half> %{{.*}} return (__m512h)_mm512_mask_add_ph(__W, __U, __A, __B); } __m512h test_mm512_maskz_add_ph(__mmask32 __U, __m512h __A, __m512h __B) { - // CHECK-LABEL: @test_mm512_maskz_add_ph + // CHECK-LABEL: test_mm512_maskz_add_ph // CHECK: %{{.*}} = fadd <32 x half> %{{.*}}, %{{.*}} // CHECK: select <32 x i1> %{{.*}}, <32 x half> %{{.*}}, <32 x half> %{{.*}} return _mm512_maskz_add_ph(__U, __A, __B); } __m512h test_mm512_add_round_ph(__m512h __A, __m512h __B) { - // CHECK-LABEL: @test_mm512_add_round_ph + // CHECK-LABEL: test_mm512_add_round_ph // CHECK: @llvm.x86.avx512fp16.add.ph.512 return _mm512_add_round_ph(__A, __B, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC); } __m512h test_mm512_mask_add_round_ph(__m512h __W, __mmask32 __U, __m512h __A, __m512h __B) { - // CHECK-LABEL: @test_mm512_mask_add_round_ph + // CHECK-LABEL: test_mm512_mask_add_round_ph // CHECK: @llvm.x86.avx512fp16.add.ph.512 // CHECK: select <32 x i1> %{{.*}}, <32 x half> %{{.*}}, <32 x half> %{{.*}} return _mm512_mask_add_round_ph(__W, __U, __A, __B, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC); } __m512h test_mm512_maskz_add_round_ph(__mmask32 __U, __m512h __A, __m512h __B) { - // CHECK-LABEL: @test_mm512_maskz_add_round_ph + // CHECK-LABEL: test_mm512_maskz_add_round_ph // CHECK: @llvm.x86.avx512fp16.add.ph.512 // CHECK: select <32 x i1> %{{.*}}, <32 x half> %{{.*}}, <32 x half> %{{.*}} return _mm512_maskz_add_round_ph(__U, __A, __B, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC); } __m512h test_mm512_sub_ph(__m512h __A, __m512h __B) { - // CHECK-LABEL: @test_mm512_sub_ph + // CHECK-LABEL: test_mm512_sub_ph // CHECK: %{{.*}} = fsub <32 x half> %{{.*}}, %{{.*}} return _mm512_sub_ph(__A, __B); } __m512h test_mm512_mask_sub_ph(__m512h __W, __mmask32 __U, __m512h __A, __m512h __B) { - // CHECK-LABEL: @test_mm512_mask_sub_ph + // CHECK-LABEL: test_mm512_mask_sub_ph // CHECK: %{{.*}} = fsub <32 x half> %{{.*}}, %{{.*}} // CHECK: select <32 x i1> %{{.*}}, <32 x half> %{{.*}}, <32 x half> %{{.*}} return (__m512h)_mm512_mask_sub_ph(__W, __U, __A, __B); } __m512h test_mm512_maskz_sub_ph(__mmask32 __U, __m512h __A, __m512h __B) { - // CHECK-LABEL: @test_mm512_maskz_sub_ph + // CHECK-LABEL: test_mm512_maskz_sub_ph // CHECK: %{{.*}} = fsub <32 x half> %{{.*}}, %{{.*}} // CHECK: select <32 x i1> %{{.*}}, <32 x half> %{{.*}}, <32 x half> %{{.*}} return _mm512_maskz_sub_ph(__U, __A, __B); } __m512h test_mm512_sub_round_ph(__m512h __A, __m512h __B) { - // CHECK-LABEL: @test_mm512_sub_round_ph + // CHECK-LABEL: test_mm512_sub_round_ph // CHECK: @llvm.x86.avx512fp16.sub.ph.512 return _mm512_sub_round_ph(__A, __B, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC); } __m512h test_mm512_mask_sub_round_ph(__m512h __W, __mmask32 __U, __m512h __A, __m512h __B) { - // CHECK-LABEL: @test_mm512_mask_sub_round_ph + // CHECK-LABEL: test_mm512_mask_sub_round_ph // CHECK: @llvm.x86.avx512fp16.sub.ph.512 // CHECK: select <32 x i1> %{{.*}}, <32 x half> %{{.*}}, <32 x half> %{{.*}} return _mm512_mask_sub_round_ph(__W, __U, __A, __B, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC); } __m512h test_mm512_maskz_sub_round_ph(__mmask32 __U, __m512h __A, __m512h __B) { - // CHECK-LABEL: @test_mm512_maskz_sub_round_ph + // CHECK-LABEL: test_mm512_maskz_sub_round_ph // CHECK: @llvm.x86.avx512fp16.sub.ph.512 // CHECK: select <32 x i1> %{{.*}}, <32 x half> %{{.*}}, <32 x half> %{{.*}} return _mm512_maskz_sub_round_ph(__U, __A, __B, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC); } __m512h test_mm512_mul_ph(__m512h __A, __m512h __B) { - // CHECK-LABEL: @test_mm512_mul_ph + // CHECK-LABEL: test_mm512_mul_ph // CHECK: %{{.*}} = fmul <32 x half> %{{.*}}, %{{.*}} return _mm512_mul_ph(__A, __B); } __m512h test_mm512_mask_mul_ph(__m512h __W, __mmask32 __U, __m512h __A, __m512h __B) { - // CHECK-LABEL: @test_mm512_mask_mul_ph + // CHECK-LABEL: test_mm512_mask_mul_ph // CHECK: %{{.*}} = fmul <32 x half> %{{.*}}, %{{.*}} // CHECK: select <32 x i1> %{{.*}}, <32 x half> %{{.*}}, <32 x half> %{{.*}} return (__m512h)_mm512_mask_mul_ph(__W, __U, __A, __B); } __m512h test_mm512_maskz_mul_ph(__mmask32 __U, __m512h __A, __m512h __B) { - // CHECK-LABEL: @test_mm512_maskz_mul_ph + // CHECK-LABEL: test_mm512_maskz_mul_ph // CHECK: %{{.*}} = fmul <32 x half> %{{.*}}, %{{.*}} // CHECK: select <32 x i1> %{{.*}}, <32 x half> %{{.*}}, <32 x half> %{{.*}} return _mm512_maskz_mul_ph(__U, __A, __B); } __m512h test_mm512_mul_round_ph(__m512h __A, __m512h __B) { - // CHECK-LABEL: @test_mm512_mul_round_ph + // CHECK-LABEL: test_mm512_mul_round_ph // CHECK: @llvm.x86.avx512fp16.mul.ph.512 return _mm512_mul_round_ph(__A, __B, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC); } __m512h test_mm512_mask_mul_round_ph(__m512h __W, __mmask32 __U, __m512h __A, __m512h __B) { - // CHECK-LABEL: @test_mm512_mask_mul_round_ph + // CHECK-LABEL: test_mm512_mask_mul_round_ph // CHECK: @llvm.x86.avx512fp16.mul.ph.512 // CHECK: select <32 x i1> %{{.*}}, <32 x half> %{{.*}}, <32 x half> %{{.*}} return _mm512_mask_mul_round_ph(__W, __U, __A, __B, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC); } __m512h test_mm512_maskz_mul_round_ph(__mmask32 __U, __m512h __A, __m512h __B) { - // CHECK-LABEL: @test_mm512_maskz_mul_round_ph + // CHECK-LABEL: test_mm512_maskz_mul_round_ph // CHECK: @llvm.x86.avx512fp16.mul.ph.512 // CHECK: select <32 x i1> %{{.*}}, <32 x half> %{{.*}}, <32 x half> %{{.*}} return _mm512_maskz_mul_round_ph(__U, __A, __B, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC); } __m512h test_mm512_div_ph(__m512h __A, __m512h __B) { - // CHECK-LABEL: @test_mm512_div_ph + // CHECK-LABEL: test_mm512_div_ph // CHECK: %{{.*}} = fdiv <32 x half> %{{.*}}, %{{.*}} return _mm512_div_ph(__A, __B); } __m512h test_mm512_mask_div_ph(__m512h __W, __mmask32 __U, __m512h __A, __m512h __B) { - // CHECK-LABEL: @test_mm512_mask_div_ph + // CHECK-LABEL: test_mm512_mask_div_ph // CHECK: %{{.*}} = fdiv <32 x half> %{{.*}}, %{{.*}} // CHECK: select <32 x i1> %{{.*}}, <32 x half> %{{.*}}, <32 x half> %{{.*}} return (__m512h)_mm512_mask_div_ph(__W, __U, __A, __B); } __m512h test_mm512_maskz_div_ph(__mmask32 __U, __m512h __A, __m512h __B) { - // CHECK-LABEL: @test_mm512_maskz_div_ph + // CHECK-LABEL: test_mm512_maskz_div_ph // CHECK: %{{.*}} = fdiv <32 x half> %{{.*}}, %{{.*}} // CHECK: select <32 x i1> %{{.*}}, <32 x half> %{{.*}}, <32 x half> %{{.*}} return _mm512_maskz_div_ph(__U, __A, __B); } __m512h test_mm512_div_round_ph(__m512h __A, __m512h __B) { - // CHECK-LABEL: @test_mm512_div_round_ph + // CHECK-LABEL: test_mm512_div_round_ph // CHECK: @llvm.x86.avx512fp16.div.ph.512 return _mm512_div_round_ph(__A, __B, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC); } __m512h test_mm512_mask_div_round_ph(__m512h __W, __mmask32 __U, __m512h __A, __m512h __B) { - // CHECK-LABEL: @test_mm512_mask_div_round_ph + // CHECK-LABEL: test_mm512_mask_div_round_ph // CHECK: @llvm.x86.avx512fp16.div.ph.512 // CHECK: select <32 x i1> %{{.*}}, <32 x half> %{{.*}}, <32 x half> %{{.*}} return _mm512_mask_div_round_ph(__W, __U, __A, __B, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC); } __m512h test_mm512_maskz_div_round_ph(__mmask32 __U, __m512h __A, __m512h __B) { - // CHECK-LABEL: @test_mm512_maskz_div_round_ph + // CHECK-LABEL: test_mm512_maskz_div_round_ph // CHECK: @llvm.x86.avx512fp16.div.ph.512 // CHECK: select <32 x i1> %{{.*}}, <32 x half> %{{.*}}, <32 x half> %{{.*}} return _mm512_maskz_div_round_ph(__U, __A, __B, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC); } __m512h test_mm512_min_ph(__m512h __A, __m512h __B) { - // CHECK-LABEL: @test_mm512_min_ph + // CHECK-LABEL: test_mm512_min_ph // CHECK: @llvm.x86.avx512fp16.min.ph.512 return _mm512_min_ph(__A, __B); } __m512h test_mm512_mask_min_ph(__m512h __W, __mmask32 __U, __m512h __A, __m512h __B) { - // CHECK-LABEL: @test_mm512_mask_min_ph + // CHECK-LABEL: test_mm512_mask_min_ph // CHECK: @llvm.x86.avx512fp16.min.ph.512 // CHECK: select <32 x i1> %{{.*}}, <32 x half> %{{.*}}, <32 x half> %{{.*}} return (__m512h)_mm512_mask_min_ph(__W, __U, __A, __B); } __m512h test_mm512_maskz_min_ph(__mmask32 __U, __m512h __A, __m512h __B) { - // CHECK-LABEL: @test_mm512_maskz_min_ph + // CHECK-LABEL: test_mm512_maskz_min_ph // CHECK: @llvm.x86.avx512fp16.min.ph.512 // CHECK: select <32 x i1> %{{.*}}, <32 x half> %{{.*}}, <32 x half> %{{.*}} return _mm512_maskz_min_ph(__U, __A, __B); } __m512h test_mm512_min_round_ph(__m512h __A, __m512h __B) { - // CHECK-LABEL: @test_mm512_min_round_ph + // CHECK-LABEL: test_mm512_min_round_ph // CHECK: @llvm.x86.avx512fp16.min.ph.512 return _mm512_min_round_ph(__A, __B, _MM_FROUND_NO_EXC); } __m512h test_mm512_mask_min_round_ph(__m512h __W, __mmask32 __U, __m512h __A, __m512h __B) { - // CHECK-LABEL: @test_mm512_mask_min_round_ph + // CHECK-LABEL: test_mm512_mask_min_round_ph // CHECK: @llvm.x86.avx512fp16.min.ph.512 // CHECK: select <32 x i1> %{{.*}}, <32 x half> %{{.*}}, <32 x half> %{{.*}} return _mm512_mask_min_round_ph(__W, __U, __A, __B, _MM_FROUND_NO_EXC); } __m512h test_mm512_maskz_min_round_ph(__mmask32 __U, __m512h __A, __m512h __B) { - // CHECK-LABEL: @test_mm512_maskz_min_round_ph + // CHECK-LABEL: test_mm512_maskz_min_round_ph // CHECK: @llvm.x86.avx512fp16.min.ph.512 // CHECK: select <32 x i1> %{{.*}}, <32 x half> %{{.*}}, <32 x half> %{{.*}} return _mm512_maskz_min_round_ph(__U, __A, __B, _MM_FROUND_NO_EXC); } __m512h test_mm512_max_ph(__m512h __A, __m512h __B) { - // CHECK-LABEL: @test_mm512_max_ph + // CHECK-LABEL: test_mm512_max_ph // CHECK: @llvm.x86.avx512fp16.max.ph.512 return _mm512_max_ph(__A, __B); } __m512h test_mm512_mask_max_ph(__m512h __W, __mmask32 __U, __m512h __A, __m512h __B) { - // CHECK-LABEL: @test_mm512_mask_max_ph + // CHECK-LABEL: test_mm512_mask_max_ph // CHECK: @llvm.x86.avx512fp16.max.ph.512 // CHECK: select <32 x i1> %{{.*}}, <32 x half> %{{.*}}, <32 x half> %{{.*}} return (__m512h)_mm512_mask_max_ph(__W, __U, __A, __B); } __m512h test_mm512_maskz_max_ph(__mmask32 __U, __m512h __A, __m512h __B) { - // CHECK-LABEL: @test_mm512_maskz_max_ph + // CHECK-LABEL: test_mm512_maskz_max_ph // CHECK: @llvm.x86.avx512fp16.max.ph.512 // CHECK: select <32 x i1> %{{.*}}, <32 x half> %{{.*}}, <32 x half> %{{.*}} return _mm512_maskz_max_ph(__U, __A, __B); } __m512h test_mm512_max_round_ph(__m512h __A, __m512h __B) { - // CHECK-LABEL: @test_mm512_max_round_ph + // CHECK-LABEL: test_mm512_max_round_ph // CHECK: @llvm.x86.avx512fp16.max.ph.512 return _mm512_max_round_ph(__A, __B, _MM_FROUND_NO_EXC); } __m512h test_mm512_mask_max_round_ph(__m512h __W, __mmask32 __U, __m512h __A, __m512h __B) { - // CHECK-LABEL: @test_mm512_mask_max_round_ph + // CHECK-LABEL: test_mm512_mask_max_round_ph // CHECK: @llvm.x86.avx512fp16.max.ph.512 // CHECK: select <32 x i1> %{{.*}}, <32 x half> %{{.*}}, <32 x half> %{{.*}} return _mm512_mask_max_round_ph(__W, __U, __A, __B, _MM_FROUND_NO_EXC); } __m512h test_mm512_maskz_max_round_ph(__mmask32 __U, __m512h __A, __m512h __B) { - // CHECK-LABEL: @test_mm512_maskz_max_round_ph + // CHECK-LABEL: test_mm512_maskz_max_round_ph // CHECK: @llvm.x86.avx512fp16.max.ph.512 // CHECK: select <32 x i1> %{{.*}}, <32 x half> %{{.*}}, <32 x half> %{{.*}} return _mm512_maskz_max_round_ph(__U, __A, __B, _MM_FROUND_NO_EXC); } __m512h test_mm512_abs_ph(__m512h a) { - // CHECK-LABEL: @test_mm512_abs_ph + // CHECK-LABEL: test_mm512_abs_ph // CHECK: and <16 x i32> return _mm512_abs_ph(a); } +TEST_CONSTEXPR(match_m512h(_mm512_abs_ph((__m512h){-1.0, 2.0, -3.0, 4.0, -5.0, 6.0, -7.0, 8.0, -9.0, 10.0, -11.0, 12.0, -13.0, 14.0, -15.0, -16.0, -17.0, 18.0, -19.0, 20.0, -21.0, 22.0, -23.0, 24.0, -25.0, 26.0, -27.0, 28.0, -29.0, 30.0, -31.0, 32.0}), 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0, 13.0, 14.0, 15.0, 16.0, 17.0, 18.0, 19.0, 20.0, 21.0, 22.0, 23.0, 24.0, 25.0, 26.0, 27.0, 28.0, 29.0, 30.0, 31.0, 32.0)); __m512h test_mm512_conj_pch(__m512h __A) { - // CHECK-LABEL: @test_mm512_conj_pch + // CHECK-LABEL: test_mm512_conj_pch // CHECK: %{{.*}} = bitcast <32 x half> %{{.*}} to <8 x i64> // CHECK: %{{.*}} = bitcast <8 x i64> %{{.*}} to <16 x i32> // CHECK: %{{.*}} = bitcast <8 x i64> %{{.*}} to <16 x i32> @@ -699,7 +732,7 @@ __m512h test_mm512_conj_pch(__m512h __A) { } __m512h test_mm512_mask_conj_pch(__m512h __W, __mmask32 __U, __m512h __A) { - // CHECK-LABEL: @test_mm512_mask_conj_pch + // CHECK-LABEL: test_mm512_mask_conj_pch // CHECK: %{{.*}} = trunc i32 %{{.*}} to i16 // CHECK: %{{.*}} = bitcast <32 x half> %{{.*}} to <8 x i64> // CHECK: %{{.*}} = bitcast <8 x i64> %{{.*}} to <16 x i32> @@ -715,7 +748,7 @@ __m512h test_mm512_mask_conj_pch(__m512h __W, __mmask32 __U, __m512h __A) { } __m512h test_mm512_maskz_conj_pch(__mmask32 __U, __m512h __A) { - // CHECK-LABEL: @test_mm512_maskz_conj_pch + // CHECK-LABEL: test_mm512_maskz_conj_pch // CHECK: %{{.*}} = trunc i32 %{{.*}} to i16 // CHECK: %{{.*}} = bitcast <32 x half> %{{.*}} to <8 x i64> // CHECK: %{{.*}} = bitcast <8 x i64> %{{.*}} to <16 x i32> @@ -730,22 +763,22 @@ __m512h test_mm512_maskz_conj_pch(__mmask32 __U, __m512h __A) { } __m128h test_mm_add_round_sh(__m128h __A, __m128h __B) { - // CHECK-LABEL: @test_mm_add_round_sh + // CHECK-LABEL: test_mm_add_round_sh // CHECK: @llvm.x86.avx512fp16.mask.add.sh.round return _mm_add_round_sh(__A, __B, _MM_FROUND_NO_EXC | _MM_FROUND_TO_ZERO); } __m128h test_mm_mask_add_round_sh(__m128h __W, __mmask8 __U, __m128h __A, __m128h __B) { - // CHECK-LABEL: @test_mm_mask_add_round_sh + // CHECK-LABEL: test_mm_mask_add_round_sh // CHECK: @llvm.x86.avx512fp16.mask.add.sh.round return _mm_mask_add_round_sh(__W, __U, __A, __B, _MM_FROUND_NO_EXC | _MM_FROUND_TO_ZERO); } __m128h test_mm_maskz_add_round_sh(__mmask8 __U, __m128h __A, __m128h __B) { - // CHECK-LABEL: @test_mm_maskz_add_round_sh + // CHECK-LABEL: test_mm_maskz_add_round_sh // CHECK: @llvm.x86.avx512fp16.mask.add.sh.round return _mm_maskz_add_round_sh(__U, __A, __B, _MM_FROUND_NO_EXC | _MM_FROUND_TO_ZERO); } __m128h test_mm_mask_add_sh(__m128h __W, __mmask8 __U, __m128h __A, __m128h __B) { - // CHECK-LABEL: @test_mm_mask_add_sh + // CHECK-LABEL: test_mm_mask_add_sh // CHECK: %{{.*}} = extractelement <8 x half> %{{.*}}, i32 0 // CHECK: %{{.*}} = extractelement <8 x half> %{{.*}}, i32 0 // CHECK: %{{.*}} = fadd half %{{.*}}, %{{.*}} @@ -759,7 +792,7 @@ __m128h test_mm_mask_add_sh(__m128h __W, __mmask8 __U, __m128h __A, __m128h __B) return _mm_mask_add_sh(__W, __U, __A, __B); } __m128h test_mm_maskz_add_sh(__mmask8 __U, __m128h __A, __m128h __B) { - // CHECK-LABEL: @test_mm_maskz_add_sh + // CHECK-LABEL: test_mm_maskz_add_sh // CHECK: %{{.*}} = extractelement <8 x half> %{{.*}}, i32 0 // CHECK: %{{.*}} = extractelement <8 x half> %{{.*}}, i32 0 // CHECK: %{{.*}} = fadd half %{{.*}}, %{{.*}} @@ -774,7 +807,7 @@ __m128h test_mm_maskz_add_sh(__mmask8 __U, __m128h __A, __m128h __B) { } __m128h test_mm_add_sh(__m128h __A, __m128h __B) { - // CHECK-LABEL: @test_mm_add_sh + // CHECK-LABEL: test_mm_add_sh // CHECK: %{{.*}} = extractelement <8 x half> %{{.*}}, i32 0 // CHECK: %{{.*}} = extractelement <8 x half> %{{.*}}, i32 0 // CHECK: %{{.*}} = fadd half %{{.*}}, %{{.*}} @@ -783,22 +816,22 @@ __m128h test_mm_add_sh(__m128h __A, __m128h __B) { } __m128h test_mm_sub_round_sh(__m128h __A, __m128h __B) { - // CHECK-LABEL: @test_mm_sub_round_sh + // CHECK-LABEL: test_mm_sub_round_sh // CHECK: @llvm.x86.avx512fp16.mask.sub.sh.round return _mm_sub_round_sh(__A, __B, _MM_FROUND_NO_EXC | _MM_FROUND_TO_ZERO); } __m128h test_mm_mask_sub_round_sh(__m128h __W, __mmask8 __U, __m128h __A, __m128h __B) { - // CHECK-LABEL: @test_mm_mask_sub_round_sh + // CHECK-LABEL: test_mm_mask_sub_round_sh // CHECK: @llvm.x86.avx512fp16.mask.sub.sh.round return _mm_mask_sub_round_sh(__W, __U, __A, __B, _MM_FROUND_NO_EXC | _MM_FROUND_TO_ZERO); } __m128h test_mm_maskz_sub_round_sh(__mmask8 __U, __m128h __A, __m128h __B) { - // CHECK-LABEL: @test_mm_maskz_sub_round_sh + // CHECK-LABEL: test_mm_maskz_sub_round_sh // CHECK: @llvm.x86.avx512fp16.mask.sub.sh.round return _mm_maskz_sub_round_sh(__U, __A, __B, _MM_FROUND_NO_EXC | _MM_FROUND_TO_ZERO); } __m128h test_mm_mask_sub_sh(__m128h __W, __mmask8 __U, __m128h __A, __m128h __B) { - // CHECK-LABEL: @test_mm_mask_sub_sh + // CHECK-LABEL: test_mm_mask_sub_sh // CHECK: %{{.*}} = extractelement <8 x half> %{{.*}}, i32 0 // CHECK: %{{.*}} = extractelement <8 x half> %{{.*}}, i32 0 // CHECK: %{{.*}} = fsub half %{{.*}}, %{{.*}} @@ -812,7 +845,7 @@ __m128h test_mm_mask_sub_sh(__m128h __W, __mmask8 __U, __m128h __A, __m128h __B) return _mm_mask_sub_sh(__W, __U, __A, __B); } __m128h test_mm_maskz_sub_sh(__mmask8 __U, __m128h __A, __m128h __B) { - // CHECK-LABEL: @test_mm_maskz_sub_sh + // CHECK-LABEL: test_mm_maskz_sub_sh // CHECK: %{{.*}} = extractelement <8 x half> %{{.*}}, i32 0 // CHECK: %{{.*}} = extractelement <8 x half> %{{.*}}, i32 0 // CHECK: %{{.*}} = fsub half %{{.*}}, %{{.*}} @@ -827,7 +860,7 @@ __m128h test_mm_maskz_sub_sh(__mmask8 __U, __m128h __A, __m128h __B) { } __m128h test_mm_sub_sh(__m128h __A, __m128h __B) { - // CHECK-LABEL: @test_mm_sub_sh + // CHECK-LABEL: test_mm_sub_sh // CHECK: %{{.*}} = extractelement <8 x half> %{{.*}}, i32 0 // CHECK: %{{.*}} = extractelement <8 x half> %{{.*}}, i32 0 // CHECK: %{{.*}} = fsub half %{{.*}}, %{{.*}} @@ -836,22 +869,22 @@ __m128h test_mm_sub_sh(__m128h __A, __m128h __B) { } __m128h test_mm_mul_round_sh(__m128h __A, __m128h __B) { - // CHECK-LABEL: @test_mm_mul_round_sh + // CHECK-LABEL: test_mm_mul_round_sh // CHECK: @llvm.x86.avx512fp16.mask.mul.sh.round return _mm_mul_round_sh(__A, __B, _MM_FROUND_NO_EXC | _MM_FROUND_TO_ZERO); } __m128h test_mm_mask_mul_round_sh(__m128h __W, __mmask8 __U, __m128h __A, __m128h __B) { - // CHECK-LABEL: @test_mm_mask_mul_round_sh + // CHECK-LABEL: test_mm_mask_mul_round_sh // CHECK: @llvm.x86.avx512fp16.mask.mul.sh.round return _mm_mask_mul_round_sh(__W, __U, __A, __B, _MM_FROUND_NO_EXC | _MM_FROUND_TO_ZERO); } __m128h test_mm_maskz_mul_round_sh(__mmask8 __U, __m128h __A, __m128h __B) { - // CHECK-LABEL: @test_mm_maskz_mul_round_sh + // CHECK-LABEL: test_mm_maskz_mul_round_sh // CHECK: @llvm.x86.avx512fp16.mask.mul.sh.round return _mm_maskz_mul_round_sh(__U, __A, __B, _MM_FROUND_NO_EXC | _MM_FROUND_TO_ZERO); } __m128h test_mm_mask_mul_sh(__m128h __W, __mmask8 __U, __m128h __A, __m128h __B) { - // CHECK-LABEL: @test_mm_mask_mul_sh + // CHECK-LABEL: test_mm_mask_mul_sh // CHECK: %{{.*}} = extractelement <8 x half> %{{.*}}, i32 0 // CHECK: %{{.*}} = extractelement <8 x half> %{{.*}}, i32 0 // CHECK: %{{.*}} = fmul half %{{.*}}, %{{.*}} @@ -865,7 +898,7 @@ __m128h test_mm_mask_mul_sh(__m128h __W, __mmask8 __U, __m128h __A, __m128h __B) return _mm_mask_mul_sh(__W, __U, __A, __B); } __m128h test_mm_maskz_mul_sh(__mmask8 __U, __m128h __A, __m128h __B) { - // CHECK-LABEL: @test_mm_maskz_mul_sh + // CHECK-LABEL: test_mm_maskz_mul_sh // CHECK: %{{.*}} = extractelement <8 x half> %{{.*}}, i32 0 // CHECK: %{{.*}} = extractelement <8 x half> %{{.*}}, i32 0 // CHECK: %{{.*}} = fmul half %{{.*}}, %{{.*}} @@ -880,7 +913,7 @@ __m128h test_mm_maskz_mul_sh(__mmask8 __U, __m128h __A, __m128h __B) { } __m128h test_mm_mul_sh(__m128h __A, __m128h __B) { - // CHECK-LABEL: @test_mm_mul_sh + // CHECK-LABEL: test_mm_mul_sh // CHECK: %{{.*}} = extractelement <8 x half> %{{.*}}, i32 0 // CHECK: %{{.*}} = extractelement <8 x half> %{{.*}}, i32 0 // CHECK: %{{.*}} = fmul half %{{.*}}, %{{.*}} @@ -889,22 +922,22 @@ __m128h test_mm_mul_sh(__m128h __A, __m128h __B) { } __m128h test_mm_div_round_sh(__m128h __A, __m128h __B) { - // CHECK-LABEL: @test_mm_div_round_sh + // CHECK-LABEL: test_mm_div_round_sh // CHECK: @llvm.x86.avx512fp16.mask.div.sh.round return _mm_div_round_sh(__A, __B, _MM_FROUND_NO_EXC | _MM_FROUND_TO_ZERO); } __m128h test_mm_mask_div_round_sh(__m128h __W, __mmask8 __U, __m128h __A, __m128h __B) { - // CHECK-LABEL: @test_mm_mask_div_round_sh + // CHECK-LABEL: test_mm_mask_div_round_sh // CHECK: @llvm.x86.avx512fp16.mask.div.sh.round return _mm_mask_div_round_sh(__W, __U, __A, __B, _MM_FROUND_NO_EXC | _MM_FROUND_TO_ZERO); } __m128h test_mm_maskz_div_round_sh(__mmask8 __U, __m128h __A, __m128h __B) { - // CHECK-LABEL: @test_mm_maskz_div_round_sh + // CHECK-LABEL: test_mm_maskz_div_round_sh // CHECK: @llvm.x86.avx512fp16.mask.div.sh.round return _mm_maskz_div_round_sh(__U, __A, __B, _MM_FROUND_NO_EXC | _MM_FROUND_TO_ZERO); } __m128h test_mm_mask_div_sh(__m128h __W, __mmask8 __U, __m128h __A, __m128h __B) { - // CHECK-LABEL: @test_mm_mask_div_sh + // CHECK-LABEL: test_mm_mask_div_sh // CHECK: %{{.*}} = extractelement <8 x half> %{{.*}}, i32 0 // CHECK: %{{.*}} = extractelement <8 x half> %{{.*}}, i32 0 // CHECK: %{{.*}} = fdiv half %{{.*}}, %{{.*}} @@ -918,7 +951,7 @@ __m128h test_mm_mask_div_sh(__m128h __W, __mmask8 __U, __m128h __A, __m128h __B) return _mm_mask_div_sh(__W, __U, __A, __B); } __m128h test_mm_maskz_div_sh(__mmask8 __U, __m128h __A, __m128h __B) { - // CHECK-LABEL: @test_mm_maskz_div_sh + // CHECK-LABEL: test_mm_maskz_div_sh // CHECK: %{{.*}} = extractelement <8 x half> %{{.*}}, i32 0 // CHECK: %{{.*}} = extractelement <8 x half> %{{.*}}, i32 0 // CHECK: %{{.*}} = fdiv half %{{.*}}, %{{.*}} @@ -933,7 +966,7 @@ __m128h test_mm_maskz_div_sh(__mmask8 __U, __m128h __A, __m128h __B) { } __m128h test_mm_div_sh(__m128h __A, __m128h __B) { - // CHECK-LABEL: @test_mm_div_sh + // CHECK-LABEL: test_mm_div_sh // CHECK: %{{.*}} = extractelement <8 x half> %{{.*}}, i32 0 // CHECK: %{{.*}} = extractelement <8 x half> %{{.*}}, i32 0 // CHECK: %{{.*}} = fdiv half %{{.*}}, %{{.*}} @@ -942,83 +975,83 @@ __m128h test_mm_div_sh(__m128h __A, __m128h __B) { } __m128h test_mm_min_round_sh(__m128h __A, __m128h __B) { - // CHECK-LABEL: @test_mm_min_round_sh + // CHECK-LABEL: test_mm_min_round_sh // CHECK: @llvm.x86.avx512fp16.mask.min.sh.round return _mm_min_round_sh(__A, __B, 0x08); } __m128h test_mm_mask_min_round_sh(__m128h __W, __mmask8 __U, __m128h __A, __m128h __B) { - // CHECK-LABEL: @test_mm_mask_min_round_sh + // CHECK-LABEL: test_mm_mask_min_round_sh // CHECK: @llvm.x86.avx512fp16.mask.min.sh.round return _mm_mask_min_round_sh(__W, __U, __A, __B, 0x08); } __m128h test_mm_maskz_min_round_sh(__mmask8 __U, __m128h __A, __m128h __B) { - // CHECK-LABEL: @test_mm_maskz_min_round_sh + // CHECK-LABEL: test_mm_maskz_min_round_sh // CHECK: @llvm.x86.avx512fp16.mask.min.sh.round return _mm_maskz_min_round_sh(__U, __A, __B, 0x08); } __m128h test_mm_mask_min_sh(__m128h __W, __mmask8 __U, __m128h __A, __m128h __B) { - // CHECK-LABEL: @test_mm_mask_min_sh + // CHECK-LABEL: test_mm_mask_min_sh // CHECK: @llvm.x86.avx512fp16.mask.min.sh.round return _mm_mask_min_sh(__W, __U, __A, __B); } __m128h test_mm_maskz_min_sh(__mmask8 __U, __m128h __A, __m128h __B) { - // CHECK-LABEL: @test_mm_maskz_min_sh + // CHECK-LABEL: test_mm_maskz_min_sh // CHECK: @llvm.x86.avx512fp16.mask.min.sh.round return _mm_maskz_min_sh(__U, __A, __B); } __m128h test_mm_min_sh(__m128h __A, __m128h __B) { - // CHECK-LABEL: @test_mm_min_sh + // CHECK-LABEL: test_mm_min_sh // CHECK: @llvm.x86.avx512fp16.mask.min.sh.round return _mm_min_sh(__A, __B); } __m128h test_mm_max_round_sh(__m128h __A, __m128h __B) { - // CHECK-LABEL: @test_mm_max_round_sh + // CHECK-LABEL: test_mm_max_round_sh // CHECK: @llvm.x86.avx512fp16.mask.max.sh.round return _mm_max_round_sh(__A, __B, 0x08); } __m128h test_mm_mask_max_round_sh(__m128h __W, __mmask8 __U, __m128h __A, __m128h __B) { - // CHECK-LABEL: @test_mm_mask_max_round_sh + // CHECK-LABEL: test_mm_mask_max_round_sh // CHECK: @llvm.x86.avx512fp16.mask.max.sh.round return _mm_mask_max_round_sh(__W, __U, __A, __B, 0x08); } __m128h test_mm_maskz_max_round_sh(__mmask8 __U, __m128h __A, __m128h __B) { - // CHECK-LABEL: @test_mm_maskz_max_round_sh + // CHECK-LABEL: test_mm_maskz_max_round_sh // CHECK: @llvm.x86.avx512fp16.mask.max.sh.round return _mm_maskz_max_round_sh(__U, __A, __B, 0x08); } __m128h test_mm_mask_max_sh(__m128h __W, __mmask8 __U, __m128h __A, __m128h __B) { - // CHECK-LABEL: @test_mm_mask_max_sh + // CHECK-LABEL: test_mm_mask_max_sh // CHECK: @llvm.x86.avx512fp16.mask.max.sh.round return _mm_mask_max_sh(__W, __U, __A, __B); } __m128h test_mm_maskz_max_sh(__mmask8 __U, __m128h __A, __m128h __B) { - // CHECK-LABEL: @test_mm_maskz_max_sh + // CHECK-LABEL: test_mm_maskz_max_sh // CHECK: @llvm.x86.avx512fp16.mask.max.sh.round return _mm_maskz_max_sh(__U, __A, __B); } __m128h test_mm_max_sh(__m128h __A, __m128h __B) { - // CHECK-LABEL: @test_mm_max_sh + // CHECK-LABEL: test_mm_max_sh // CHECK: @llvm.x86.avx512fp16.mask.max.sh.round return _mm_max_sh(__A, __B); } __mmask32 test_mm512_cmp_round_ph_mask(__m512h a, __m512h b) { - // CHECK-LABEL: @test_mm512_cmp_round_ph_mask + // CHECK-LABEL: test_mm512_cmp_round_ph_mask // CHECK: fcmp oeq <32 x half> %{{.*}}, %{{.*}} return _mm512_cmp_round_ph_mask(a, b, 0, _MM_FROUND_NO_EXC); } __mmask32 test_mm512_mask_cmp_round_ph_mask(__mmask32 m, __m512h a, __m512h b) { - // CHECK-LABEL: @test_mm512_mask_cmp_round_ph_mask + // CHECK-LABEL: test_mm512_mask_cmp_round_ph_mask // CHECK: [[CMP:%.*]] = fcmp oeq <32 x half> %{{.*}}, %{{.*}} // CHECK: and <32 x i1> [[CMP]], {{.*}} return _mm512_mask_cmp_round_ph_mask(m, a, b, 0, _MM_FROUND_NO_EXC); } __mmask32 test_mm512_cmp_ph_mask_eq_oq(__m512h a, __m512h b) { - // CHECK-LABEL: @test_mm512_cmp_ph_mask_eq_oq + // CHECK-LABEL: test_mm512_cmp_ph_mask_eq_oq // CHECK: fcmp oeq <32 x half> %{{.*}}, %{{.*}} return _mm512_cmp_ph_mask(a, b, _CMP_EQ_OQ); } @@ -1210,7 +1243,7 @@ __mmask32 test_mm512_cmp_ph_mask_true_us(__m512h a, __m512h b) { } __mmask32 test_mm512_mask_cmp_ph_mask_eq_oq(__mmask32 m, __m512h a, __m512h b) { - // CHECK-LABEL: @test_mm512_mask_cmp_ph_mask_eq_oq + // CHECK-LABEL: test_mm512_mask_cmp_ph_mask_eq_oq // CHECK: [[CMP:%.*]] = fcmp oeq <32 x half> %{{.*}}, %{{.*}} // CHECK: and <32 x i1> [[CMP]], {{.*}} return _mm512_mask_cmp_ph_mask(m, a, b, _CMP_EQ_OQ); @@ -1434,25 +1467,25 @@ __mmask32 test_mm512_mask_cmp_ph_mask_true_us(__mmask32 m, __m512h a, __m512h b) } __mmask8 test_mm_cmp_round_sh_mask(__m128h __X, __m128h __Y) { - // CHECK-LABEL: @test_mm_cmp_round_sh_mask + // CHECK-LABEL: test_mm_cmp_round_sh_mask // CHECK: @llvm.x86.avx512fp16.mask.cmp.sh return _mm_cmp_round_sh_mask(__X, __Y, _CMP_NLT_US, _MM_FROUND_NO_EXC); } __mmask8 test_mm_mask_cmp_round_sh_mask(__mmask8 __M, __m128h __X, __m128h __Y) { - // CHECK-LABEL: @test_mm_mask_cmp_round_sh_mask + // CHECK-LABEL: test_mm_mask_cmp_round_sh_mask // CHECK: @llvm.x86.avx512fp16.mask.cmp.sh return _mm_mask_cmp_round_sh_mask(__M, __X, __Y, _CMP_NLT_US, _MM_FROUND_NO_EXC); } __mmask8 test_mm_cmp_sh_mask(__m128h __X, __m128h __Y) { - // CHECK-LABEL: @test_mm_cmp_sh_mask + // CHECK-LABEL: test_mm_cmp_sh_mask // CHECK: @llvm.x86.avx512fp16.mask.cmp.sh return _mm_cmp_sh_mask(__X, __Y, _CMP_NLT_US); } __mmask8 test_mm_mask_cmp_sh_mask(__mmask8 __M, __m128h __X, __m128h __Y) { - // CHECK-LABEL: @test_mm_mask_cmp_sh_mask + // CHECK-LABEL: test_mm_mask_cmp_sh_mask // CHECK: @llvm.x86.avx512fp16.mask.cmp.sh return _mm_mask_cmp_sh_mask(__M, __X, __Y, _CMP_NLT_US); } @@ -1466,49 +1499,49 @@ __m128h test_mm_load_sh(void const *A) { } __m128h test_mm_mask_load_sh(__m128h __A, __mmask8 __U, const void *__W) { - // CHECK-LABEL: @test_mm_mask_load_sh - // CHECK: %{{.*}} = call <8 x half> @llvm.masked.load.v8f16.p0(ptr %{{.*}}, i32 1, <8 x i1> %{{.*}}, <8 x half> %{{.*}}) + // CHECK-LABEL: test_mm_mask_load_sh + // CHECK: @llvm.masked.load.v8f16.p0(ptr %{{.*}}, i32 1, <8 x i1> %{{.*}}, <8 x half> %{{.*}}) return _mm_mask_load_sh(__A, __U, __W); } __m128h test_mm_maskz_load_sh(__mmask8 __U, const void *__W) { - // CHECK-LABEL: @test_mm_maskz_load_sh - // CHECK: %{{.*}} = call <8 x half> @llvm.masked.load.v8f16.p0(ptr %{{.*}}, i32 1, <8 x i1> %{{.*}}, <8 x half> %{{.*}}) + // CHECK-LABEL: test_mm_maskz_load_sh + // CHECK: @llvm.masked.load.v8f16.p0(ptr %{{.*}}, i32 1, <8 x i1> %{{.*}}, <8 x half> %{{.*}}) return _mm_maskz_load_sh(__U, __W); } __m512h test_mm512_load_ph(void *p) { - // CHECK-LABEL: @test_mm512_load_ph + // CHECK-LABEL: test_mm512_load_ph // CHECK: load <32 x half>, ptr %{{.*}}, align 64{{$}} return _mm512_load_ph(p); } __m256h test_mm256_load_ph(void *p) { - // CHECK-LABEL: @test_mm256_load_ph + // CHECK-LABEL: test_mm256_load_ph // CHECK: load <16 x half>, ptr %{{.*}}, align 32{{$}} return _mm256_load_ph(p); } __m128h test_mm_load_ph(void *p) { - // CHECK-LABEL: @test_mm_load_ph + // CHECK-LABEL: test_mm_load_ph // CHECK: load <8 x half>, ptr %{{.*}}, align 16{{$}} return _mm_load_ph(p); } __m512h test_mm512_loadu_ph(void *p) { - // CHECK-LABEL: @test_mm512_loadu_ph + // CHECK-LABEL: test_mm512_loadu_ph // CHECK: load <32 x half>, ptr {{.*}}, align 1{{$}} return _mm512_loadu_ph(p); } __m256h test_mm256_loadu_ph(void *p) { - // CHECK-LABEL: @test_mm256_loadu_ph + // CHECK-LABEL: test_mm256_loadu_ph // CHECK: load <16 x half>, ptr {{.*}}, align 1{{$}} return _mm256_loadu_ph(p); } __m128h test_mm_loadu_ph(void *p) { - // CHECK-LABEL: @test_mm_loadu_ph + // CHECK-LABEL: test_mm_loadu_ph // CHECK: load <8 x half>, ptr {{.*}}, align 1{{$}} return _mm_loadu_ph(p); } @@ -1521,45 +1554,45 @@ void test_mm_store_sh(void *A, __m128h B) { } void test_mm_mask_store_sh(void *__P, __mmask8 __U, __m128h __A) { - // CHECK-LABEL: @test_mm_mask_store_sh + // CHECK-LABEL: test_mm_mask_store_sh // CHECK: call void @llvm.masked.store.v8f16.p0(<8 x half> %{{.*}}, ptr %{{.*}}, i32 1, <8 x i1> %{{.*}}) _mm_mask_store_sh(__P, __U, __A); } void test_mm512_store_ph(void *p, __m512h a) { - // CHECK-LABEL: @test_mm512_store_ph + // CHECK-LABEL: test_mm512_store_ph // CHECK: store <32 x half> %{{.*}}, ptr %{{.*}}, align 64 _mm512_store_ph(p, a); } void test_mm256_store_ph(void *p, __m256h a) { - // CHECK-LABEL: @test_mm256_store_ph + // CHECK-LABEL: test_mm256_store_ph // CHECK: store <16 x half> %{{.*}}, ptr %{{.*}}, align 32 _mm256_store_ph(p, a); } void test_mm_store_ph(void *p, __m128h a) { - // CHECK-LABEL: @test_mm_store_ph + // CHECK-LABEL: test_mm_store_ph // CHECK: store <8 x half> %{{.*}}, ptr %{{.*}}, align 16 _mm_store_ph(p, a); } void test_mm512_storeu_ph(void *p, __m512h a) { - // CHECK-LABEL: @test_mm512_storeu_ph + // CHECK-LABEL: test_mm512_storeu_ph // CHECK: store <32 x half> %{{.*}}, ptr %{{.*}}, align 1{{$}} // CHECK-NEXT: ret void _mm512_storeu_ph(p, a); } void test_mm256_storeu_ph(void *p, __m256h a) { - // CHECK-LABEL: @test_mm256_storeu_ph + // CHECK-LABEL: test_mm256_storeu_ph // CHECK: store <16 x half> %{{.*}}, ptr %{{.*}}, align 1{{$}} // CHECK-NEXT: ret void _mm256_storeu_ph(p, a); } void test_mm_storeu_ph(void *p, __m128h a) { - // CHECK-LABEL: @test_mm_storeu_ph + // CHECK-LABEL: test_mm_storeu_ph // CHECK: store <8 x half> %{{.*}}, ptr %{{.*}}, align 1{{$}} // CHECK-NEXT: ret void _mm_storeu_ph(p, a); @@ -1573,7 +1606,7 @@ __m128h test_mm_move_sh(__m128h A, __m128h B) { } __m128h test_mm_mask_move_sh(__m128h __W, __mmask8 __U, __m128h __A, __m128h __B) { - // CHECK-LABEL: @test_mm_mask_move_sh + // CHECK-LABEL: test_mm_mask_move_sh // CHECK: [[EXT:%.*]] = extractelement <8 x half> %{{.*}}, i32 0 // CHECK: insertelement <8 x half> %{{.*}}, half [[EXT]], i32 0 // CHECK: [[A:%.*]] = extractelement <8 x half> [[VEC:%.*]], i64 0 @@ -1586,7 +1619,7 @@ __m128h test_mm_mask_move_sh(__m128h __W, __mmask8 __U, __m128h __A, __m128h __B } __m128h test_mm_maskz_move_sh(__mmask8 __U, __m128h __A, __m128h __B) { - // CHECK-LABEL: @test_mm_maskz_move_sh + // CHECK-LABEL: test_mm_maskz_move_sh // CHECK: [[EXT:%.*]] = extractelement <8 x half> %{{.*}}, i32 0 // CHECK: insertelement <8 x half> %{{.*}}, half [[EXT]], i32 0 // CHECK: [[A:%.*]] = extractelement <8 x half> [[VEC:%.*]], i64 0 @@ -1614,532 +1647,532 @@ __m128i test_mm_cvtsi16_si128(short A) { } __m512h test_mm512_rcp_ph(__m512h __A) { - // CHECK-LABEL: @test_mm512_rcp_ph + // CHECK-LABEL: test_mm512_rcp_ph // CHECK: @llvm.x86.avx512fp16.mask.rcp.ph.512 return _mm512_rcp_ph(__A); } __m512h test_mm512_mask_rcp_ph(__m512h __W, __mmask32 __U, __m512h __A) { - // CHECK-LABEL: @test_mm512_mask_rcp_ph + // CHECK-LABEL: test_mm512_mask_rcp_ph // CHECK: @llvm.x86.avx512fp16.mask.rcp.ph.512 return (__m512h)_mm512_mask_rcp_ph(__W, __U, __A); } __m512h test_mm512_maskz_rcp_ph(__mmask32 __U, __m512h __A) { - // CHECK-LABEL: @test_mm512_maskz_rcp_ph + // CHECK-LABEL: test_mm512_maskz_rcp_ph // CHECK: @llvm.x86.avx512fp16.mask.rcp.ph.512 return _mm512_maskz_rcp_ph(__U, __A); } __m512h test_mm512_rsqrt_ph(__m512h __A) { - // CHECK-LABEL: @test_mm512_rsqrt_ph + // CHECK-LABEL: test_mm512_rsqrt_ph // CHECK: @llvm.x86.avx512fp16.mask.rsqrt.ph.512 return _mm512_rsqrt_ph(__A); } __m512h test_mm512_mask_rsqrt_ph(__m512h __W, __mmask32 __U, __m512h __A) { - // CHECK-LABEL: @test_mm512_mask_rsqrt_ph + // CHECK-LABEL: test_mm512_mask_rsqrt_ph // CHECK: @llvm.x86.avx512fp16.mask.rsqrt.ph.512 return (__m512h)_mm512_mask_rsqrt_ph(__W, __U, __A); } __m512h test_mm512_maskz_rsqrt_ph(__mmask32 __U, __m512h __A) { - // CHECK-LABEL: @test_mm512_maskz_rsqrt_ph + // CHECK-LABEL: test_mm512_maskz_rsqrt_ph // CHECK: @llvm.x86.avx512fp16.mask.rsqrt.ph.512 return _mm512_maskz_rsqrt_ph(__U, __A); } __m512h test_mm512_getmant_round_ph(__m512h __A) { - // CHECK-LABEL: @test_mm512_getmant_round_ph + // CHECK-LABEL: test_mm512_getmant_round_ph // CHECK: @llvm.x86.avx512fp16.mask.getmant.ph.512 return _mm512_getmant_round_ph(__A, _MM_MANT_NORM_p5_2, _MM_MANT_SIGN_nan, _MM_FROUND_NO_EXC); } __m512h test_mm512_mask_getmant_round_ph(__m512h __W, __mmask32 __U, __m512h __A) { - // CHECK-LABEL: @test_mm512_mask_getmant_round_ph + // CHECK-LABEL: test_mm512_mask_getmant_round_ph // CHECK: @llvm.x86.avx512fp16.mask.getmant.ph.512 return _mm512_mask_getmant_round_ph(__W, __U, __A, _MM_MANT_NORM_p5_2, _MM_MANT_SIGN_nan, _MM_FROUND_NO_EXC); } __m512h test_mm512_maskz_getmant_round_ph(__mmask32 __U, __m512h __A) { - // CHECK-LABEL: @test_mm512_maskz_getmant_round_ph + // CHECK-LABEL: test_mm512_maskz_getmant_round_ph // CHECK: @llvm.x86.avx512fp16.mask.getmant.ph.512 return _mm512_maskz_getmant_round_ph(__U, __A, _MM_MANT_NORM_p5_2, _MM_MANT_SIGN_nan, _MM_FROUND_NO_EXC); } __m512h test_mm512_getmant_ph(__m512h __A) { - // CHECK-LABEL: @test_mm512_getmant_ph + // CHECK-LABEL: test_mm512_getmant_ph // CHECK: @llvm.x86.avx512fp16.mask.getmant.ph.512 return _mm512_getmant_ph(__A, _MM_MANT_NORM_p5_2, _MM_MANT_SIGN_nan); } __m512h test_mm512_mask_getmant_ph(__m512h __W, __mmask32 __U, __m512h __A) { - // CHECK-LABEL: @test_mm512_mask_getmant_ph + // CHECK-LABEL: test_mm512_mask_getmant_ph // CHECK: @llvm.x86.avx512fp16.mask.getmant.ph.512 return _mm512_mask_getmant_ph(__W, __U, __A, _MM_MANT_NORM_p5_2, _MM_MANT_SIGN_nan); } __m512h test_mm512_maskz_getmant_ph(__mmask32 __U, __m512h __A) { - // CHECK-LABEL: @test_mm512_maskz_getmant_ph + // CHECK-LABEL: test_mm512_maskz_getmant_ph // CHECK: @llvm.x86.avx512fp16.mask.getmant.ph.512 return _mm512_maskz_getmant_ph(__U, __A, _MM_MANT_NORM_p5_2, _MM_MANT_SIGN_nan); } __m512h test_mm512_scalef_round_ph(__m512h __A, __m512h __B) { - // CHECK-LABEL: @test_mm512_scalef_round_ph + // CHECK-LABEL: test_mm512_scalef_round_ph // CHECK: @llvm.x86.avx512fp16.mask.scalef.ph.512 return _mm512_scalef_round_ph(__A, __B, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC); } __m512h test_mm512_mask_scalef_round_ph(__m512h __W, __mmask32 __U, __m512h __A, __m512h __B) { - // CHECK-LABEL: @test_mm512_mask_scalef_round_ph + // CHECK-LABEL: test_mm512_mask_scalef_round_ph // CHECK: @llvm.x86.avx512fp16.mask.scalef.ph.512 return _mm512_mask_scalef_round_ph(__W, __U, __A, __B, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC); } __m512h test_mm512_maskz_scalef_round_ph(__mmask32 __U, __m512h __A, __m512h __B) { - // CHECK-LABEL: @test_mm512_maskz_scalef_round_ph + // CHECK-LABEL: test_mm512_maskz_scalef_round_ph // CHECK: @llvm.x86.avx512fp16.mask.scalef.ph.512 return _mm512_maskz_scalef_round_ph(__U, __A, __B, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC); } __m512h test_mm512_scalef_ph(__m512h __A, __m512h __B) { - // CHECK-LABEL: @test_mm512_scalef_ph + // CHECK-LABEL: test_mm512_scalef_ph // CHECK: @llvm.x86.avx512fp16.mask.scalef.ph.512 return _mm512_scalef_ph(__A, __B); } __m512h test_mm512_mask_scalef_ph(__m512h __W, __mmask32 __U, __m512h __A, __m512h __B) { - // CHECK-LABEL: @test_mm512_mask_scalef_ph + // CHECK-LABEL: test_mm512_mask_scalef_ph // CHECK: @llvm.x86.avx512fp16.mask.scalef.ph.512 return _mm512_mask_scalef_ph(__W, __U, __A, __B); } __m512h test_mm512_maskz_scalef_ph(__mmask32 __U, __m512h __A, __m512h __B) { - // CHECK-LABEL: @test_mm512_maskz_scalef_ph + // CHECK-LABEL: test_mm512_maskz_scalef_ph // CHECK: @llvm.x86.avx512fp16.mask.scalef.ph.512 return _mm512_maskz_scalef_ph(__U, __A, __B); } __m512h test_mm512_mask_roundscale_ph(__m512h __W, __mmask16 __U, __m512h __A) { - // CHECK-LABEL: @test_mm512_mask_roundscale_ph + // CHECK-LABEL: test_mm512_mask_roundscale_ph // CHECK: @llvm.x86.avx512fp16.mask.rndscale.ph.512 return _mm512_mask_roundscale_ph(__W, __U, __A, 1); } __m512h test_mm512_maskz_roundscale_ph(__mmask16 __U, __m512h __A) { - // CHECK-LABEL: @test_mm512_maskz_roundscale_ph + // CHECK-LABEL: test_mm512_maskz_roundscale_ph // CHECK: @llvm.x86.avx512fp16.mask.rndscale.ph.512 return _mm512_maskz_roundscale_ph(__U, __A, 1); } __m512h test_mm512_mask_roundscale_round_ph(__m512h __A, __mmask16 __U, __m512h __C) { - // CHECK-LABEL: @test_mm512_mask_roundscale_round_ph + // CHECK-LABEL: test_mm512_mask_roundscale_round_ph // CHECK: @llvm.x86.avx512fp16.mask.rndscale.ph.512 return _mm512_mask_roundscale_round_ph(__A, __U, __C, 3, _MM_FROUND_NO_EXC); } __m512h test_mm512_maskz_roundscale_round_ph(__m512h __A, __mmask16 __U) { - // CHECK-LABEL: @test_mm512_maskz_roundscale_round_ph + // CHECK-LABEL: test_mm512_maskz_roundscale_round_ph // CHECK: @llvm.x86.avx512fp16.mask.rndscale.ph.512 return _mm512_maskz_roundscale_round_ph(__U, __A, 3, _MM_FROUND_NO_EXC); } __m512h test_mm512_roundscale_round_ph(__m512h __A) { - // CHECK-LABEL: @test_mm512_roundscale_round_ph + // CHECK-LABEL: test_mm512_roundscale_round_ph // CHECK: @llvm.x86.avx512fp16.mask.rndscale.ph.512 return _mm512_roundscale_round_ph(__A, 3, _MM_FROUND_NO_EXC); } __m512h test_mm512_roundscale_ph(__m512h __A) { - // CHECK-LABEL: @test_mm512_roundscale_ph + // CHECK-LABEL: test_mm512_roundscale_ph // CHECK: @llvm.x86.avx512fp16.mask.rndscale.ph.512 return _mm512_roundscale_ph(__A, 3); } __m512h test_mm512_getexp_round_ph(__m512h __A) { - // CHECK-LABEL: @test_mm512_getexp_round_ph + // CHECK-LABEL: test_mm512_getexp_round_ph // CHECK: @llvm.x86.avx512fp16.mask.getexp.ph.512 return _mm512_getexp_round_ph(__A, _MM_FROUND_NO_EXC); } __m512h test_mm512_mask_getexp_round_ph(__m512h __W, __mmask32 __U, __m512h __A) { - // CHECK-LABEL: @test_mm512_mask_getexp_round_ph + // CHECK-LABEL: test_mm512_mask_getexp_round_ph // CHECK: @llvm.x86.avx512fp16.mask.getexp.ph.512 return _mm512_mask_getexp_round_ph(__W, __U, __A, _MM_FROUND_NO_EXC); } __m512h test_mm512_maskz_getexp_round_ph(__mmask32 __U, __m512h __A) { - // CHECK-LABEL: @test_mm512_maskz_getexp_round_ph + // CHECK-LABEL: test_mm512_maskz_getexp_round_ph // CHECK: @llvm.x86.avx512fp16.mask.getexp.ph.512 return _mm512_maskz_getexp_round_ph(__U, __A, _MM_FROUND_NO_EXC); } __m512h test_mm512_getexp_ph(__m512h __A) { - // CHECK-LABEL: @test_mm512_getexp_ph + // CHECK-LABEL: test_mm512_getexp_ph // CHECK: @llvm.x86.avx512fp16.mask.getexp.ph.512 return _mm512_getexp_ph(__A); } __m512h test_mm512_mask_getexp_ph(__m512h __W, __mmask32 __U, __m512h __A) { - // CHECK-LABEL: @test_mm512_mask_getexp_ph + // CHECK-LABEL: test_mm512_mask_getexp_ph // CHECK: @llvm.x86.avx512fp16.mask.getexp.ph.512 return _mm512_mask_getexp_ph(__W, __U, __A); } __m512h test_mm512_maskz_getexp_ph(__mmask32 __U, __m512h __A) { - // CHECK-LABEL: @test_mm512_maskz_getexp_ph + // CHECK-LABEL: test_mm512_maskz_getexp_ph // CHECK: @llvm.x86.avx512fp16.mask.getexp.ph.512 return _mm512_maskz_getexp_ph(__U, __A); } __m512h test_mm512_mask_reduce_ph(__m512h __W, __mmask16 __U, __m512h __A) { - // CHECK-LABEL: @test_mm512_mask_reduce_ph + // CHECK-LABEL: test_mm512_mask_reduce_ph // CHECK: @llvm.x86.avx512fp16.mask.reduce.ph.512 return _mm512_mask_reduce_ph(__W, __U, __A, 1); } __m512h test_mm512_maskz_reduce_ph(__mmask16 __U, __m512h __A) { - // CHECK-LABEL: @test_mm512_maskz_reduce_ph + // CHECK-LABEL: test_mm512_maskz_reduce_ph // CHECK: @llvm.x86.avx512fp16.mask.reduce.ph.512 return _mm512_maskz_reduce_ph(__U, __A, 1); } __m512h test_mm512_mask_reduce_round_ph(__m512h __A, __mmask16 __U, __m512h __C) { - // CHECK-LABEL: @test_mm512_mask_reduce_round_ph + // CHECK-LABEL: test_mm512_mask_reduce_round_ph // CHECK: @llvm.x86.avx512fp16.mask.reduce.ph.512 return _mm512_mask_reduce_round_ph(__A, __U, __C, 3, _MM_FROUND_NO_EXC); } __m512h test_mm512_maskz_reduce_round_ph(__m512h __A, __mmask16 __U) { - // CHECK-LABEL: @test_mm512_maskz_reduce_round_ph + // CHECK-LABEL: test_mm512_maskz_reduce_round_ph // CHECK: @llvm.x86.avx512fp16.mask.reduce.ph.512 return _mm512_maskz_reduce_round_ph(__U, __A, 3, _MM_FROUND_NO_EXC); } __m512h test_mm512_reduce_round_ph(__m512h __A) { - // CHECK-LABEL: @test_mm512_reduce_round_ph + // CHECK-LABEL: test_mm512_reduce_round_ph // CHECK: @llvm.x86.avx512fp16.mask.reduce.ph.512 return _mm512_reduce_round_ph(__A, 3, _MM_FROUND_NO_EXC); } __m512h test_mm512_reduce_ph(__m512h __A) { - // CHECK-LABEL: @test_mm512_reduce_ph + // CHECK-LABEL: test_mm512_reduce_ph // CHECK: @llvm.x86.avx512fp16.mask.reduce.ph.512 return _mm512_reduce_ph(__A, 3); } __m128h test_mm_rcp_sh(__m128h __A, __m128h __B) { - // CHECK-LABEL: @test_mm_rcp_sh + // CHECK-LABEL: test_mm_rcp_sh // CHECK: @llvm.x86.avx512fp16.mask.rcp.sh return _mm_rcp_sh(__A, __B); } __m128h test_mm_mask_rcp_sh(__m128h __W, __mmask8 __U, __m128h __A, __m128h __B) { - // CHECK-LABEL: @test_mm_mask_rcp_sh + // CHECK-LABEL: test_mm_mask_rcp_sh // CHECK: @llvm.x86.avx512fp16.mask.rcp.sh return _mm_mask_rcp_sh(__W, __U, __A, __B); } __m128h test_mm_maskz_rcp_sh(__mmask8 __U, __m128h __A, __m128h __B) { - // CHECK-LABEL: @test_mm_maskz_rcp_sh + // CHECK-LABEL: test_mm_maskz_rcp_sh // CHECK: @llvm.x86.avx512fp16.mask.rcp.sh return _mm_maskz_rcp_sh(__U, __A, __B); } __m128h test_mm_rsqrt_sh(__m128h __A, __m128h __B) { - // CHECK-LABEL: @test_mm_rsqrt_sh + // CHECK-LABEL: test_mm_rsqrt_sh // CHECK: @llvm.x86.avx512fp16.mask.rsqrt.sh return _mm_rsqrt_sh(__A, __B); } __m128h test_mm_mask_rsqrt_sh(__m128h __W, __mmask8 __U, __m128h __A, __m128h __B) { - // CHECK-LABEL: @test_mm_mask_rsqrt_sh + // CHECK-LABEL: test_mm_mask_rsqrt_sh // CHECK: @llvm.x86.avx512fp16.mask.rsqrt.sh return _mm_mask_rsqrt_sh(__W, __U, __A, __B); } __m128h test_mm_maskz_rsqrt_sh(__mmask8 __U, __m128h __A, __m128h __B) { - // CHECK-LABEL: @test_mm_maskz_rsqrt_sh + // CHECK-LABEL: test_mm_maskz_rsqrt_sh // CHECK: @llvm.x86.avx512fp16.mask.rsqrt.sh return _mm_maskz_rsqrt_sh(__U, __A, __B); } __m128h test_mm_getmant_round_sh(__m128h __A, __m128h __B) { - // CHECK-LABEL: @test_mm_getmant_round_sh + // CHECK-LABEL: test_mm_getmant_round_sh // CHECK: @llvm.x86.avx512fp16.mask.getmant.sh return _mm_getmant_round_sh(__A, __B, _MM_MANT_NORM_1_2, _MM_MANT_SIGN_src, 8); } __m128h test_mm_getmant_sh(__m128h __A, __m128h __B) { - // CHECK-LABEL: @test_mm_getmant_sh + // CHECK-LABEL: test_mm_getmant_sh // CHECK: @llvm.x86.avx512fp16.mask.getmant.sh return _mm_getmant_sh(__A, __B, _MM_MANT_NORM_1_2, _MM_MANT_SIGN_src); } __m128h test_mm_mask_getmant_sh(__m128h __W, __mmask8 __U, __m128h __A, __m128h __B) { - // CHECK-LABEL: @test_mm_mask_getmant_sh + // CHECK-LABEL: test_mm_mask_getmant_sh // CHECK: @llvm.x86.avx512fp16.mask.getmant.sh return _mm_mask_getmant_sh(__W, __U, __A, __B, 1, 2); } __m128h test_mm_mask_getmant_round_sh(__m128h __W, __mmask8 __U, __m128h __A, __m128h __B) { - // CHECK-LABEL: @test_mm_mask_getmant_round_sh + // CHECK-LABEL: test_mm_mask_getmant_round_sh // CHECK: @llvm.x86.avx512fp16.mask.getmant.sh return _mm_mask_getmant_round_sh(__W, __U, __A, __B, 1, 2, _MM_FROUND_NO_EXC); } __m128h test_mm_maskz_getmant_sh(__mmask8 __U, __m128h __A, __m128h __B) { - // CHECK-LABEL: @test_mm_maskz_getmant_sh + // CHECK-LABEL: test_mm_maskz_getmant_sh // CHECK: @llvm.x86.avx512fp16.mask.getmant.sh return _mm_maskz_getmant_sh(__U, __A, __B, 1, 2); } __m128h test_mm_maskz_getmant_round_sh(__mmask8 __U, __m128h __A, __m128h __B) { - // CHECK-LABEL: @test_mm_maskz_getmant_round_sh + // CHECK-LABEL: test_mm_maskz_getmant_round_sh // CHECK: @llvm.x86.avx512fp16.mask.getmant.sh return _mm_maskz_getmant_round_sh(__U, __A, __B, 1, 2, _MM_FROUND_NO_EXC); } __m128h test_mm_getexp_round_sh(__m128h __A, __m128h __B) { - // CHECK-LABEL: @test_mm_getexp_round_sh + // CHECK-LABEL: test_mm_getexp_round_sh // CHECK: @llvm.x86.avx512fp16.mask.getexp.sh return _mm_getexp_round_sh(__A, __B, 8); } __m128h test_mm_getexp_sh(__m128h __A, __m128h __B) { - // CHECK-LABEL: @test_mm_getexp_sh + // CHECK-LABEL: test_mm_getexp_sh // CHECK: @llvm.x86.avx512fp16.mask.getexp.sh return _mm_getexp_sh(__A, __B); } __m128h test_mm_mask_getexp_sh(__m128h __W, __mmask8 __U, __m128h __A, __m128h __B) { - // CHECK-LABEL: @test_mm_mask_getexp_sh + // CHECK-LABEL: test_mm_mask_getexp_sh // CHECK: @llvm.x86.avx512fp16.mask.getexp.sh return _mm_mask_getexp_sh(__W, __U, __A, __B); } __m128h test_mm_mask_getexp_round_sh(__m128h __W, __mmask8 __U, __m128h __A, __m128h __B) { - // CHECK-LABEL: @test_mm_mask_getexp_round_sh + // CHECK-LABEL: test_mm_mask_getexp_round_sh // CHECK: @llvm.x86.avx512fp16.mask.getexp.sh return _mm_mask_getexp_round_sh(__W, __U, __A, __B, _MM_FROUND_NO_EXC); } __m128h test_mm_maskz_getexp_sh(__mmask8 __U, __m128h __A, __m128h __B) { - // CHECK-LABEL: @test_mm_maskz_getexp_sh + // CHECK-LABEL: test_mm_maskz_getexp_sh // CHECK: @llvm.x86.avx512fp16.mask.getexp.sh return _mm_maskz_getexp_sh(__U, __A, __B); } __m128h test_mm_maskz_getexp_round_sh(__mmask8 __U, __m128h __A, __m128h __B) { - // CHECK-LABEL: @test_mm_maskz_getexp_round_sh + // CHECK-LABEL: test_mm_maskz_getexp_round_sh // CHECK: @llvm.x86.avx512fp16.mask.getexp.sh return _mm_maskz_getexp_round_sh(__U, __A, __B, _MM_FROUND_NO_EXC); } __m128h test_mm_scalef_round_sh(__m128h __A, __m128h __B) { - // CHECK-LABEL: @test_mm_scalef_round_sh + // CHECK-LABEL: test_mm_scalef_round_sh // CHECK: @llvm.x86.avx512fp16.mask.scalef.sh(<8 x half> %{{.*}}, <8 x half> %{{.*}}, <8 x half> %{{.*}}, i8 -1, i32 11) return _mm_scalef_round_sh(__A, __B, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC); } __m128h test_mm_scalef_sh(__m128h __A, __m128h __B) { - // CHECK-LABEL: @test_mm_scalef_sh + // CHECK-LABEL: test_mm_scalef_sh // CHECK: @llvm.x86.avx512fp16.mask.scalef.sh return _mm_scalef_sh(__A, __B); } __m128h test_mm_mask_scalef_sh(__m128h __W, __mmask8 __U, __m128h __A, __m128h __B) { - // CHECK-LABEL: @test_mm_mask_scalef_sh + // CHECK-LABEL: test_mm_mask_scalef_sh // CHECK: @llvm.x86.avx512fp16.mask.scalef.sh return _mm_mask_scalef_sh(__W, __U, __A, __B); } __m128h test_mm_mask_scalef_round_sh(__m128h __W, __mmask8 __U, __m128h __A, __m128h __B) { - // CHECK-LABEL: @test_mm_mask_scalef_round_sh + // CHECK-LABEL: test_mm_mask_scalef_round_sh // CHECK: @llvm.x86.avx512fp16.mask.scalef.sh(<8 x half> %{{.*}}, <8 x half> %{{.*}}, <8 x half> %{{.*}}, i8 %{{.*}}, i32 11) return _mm_mask_scalef_round_sh(__W, __U, __A, __B, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC); } __m128h test_mm_maskz_scalef_sh(__mmask8 __U, __m128h __A, __m128h __B) { - // CHECK-LABEL: @test_mm_maskz_scalef_sh + // CHECK-LABEL: test_mm_maskz_scalef_sh // CHECK: @llvm.x86.avx512fp16.mask.scalef.sh return _mm_maskz_scalef_sh(__U, __A, __B); } __m128h test_mm_maskz_scalef_round_sh(__mmask8 __U, __m128h __A, __m128h __B) { - // CHECK-LABEL: @test_mm_maskz_scalef_round_sh + // CHECK-LABEL: test_mm_maskz_scalef_round_sh // CHECK: @llvm.x86.avx512fp16.mask.scalef.sh(<8 x half> %{{.*}}, <8 x half> %{{.*}}, <8 x half> %{{.*}}, i8 %{{.*}}, i32 11) return _mm_maskz_scalef_round_sh(__U, __A, __B, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC); } __m128h test_mm_roundscale_round_sh(__m128h __A, __m128h __B) { - // CHECK-LABEL: @test_mm_roundscale_round_sh + // CHECK-LABEL: test_mm_roundscale_round_sh // CHECK: @llvm.x86.avx512fp16.mask.rndscale.sh return _mm_roundscale_round_sh(__A, __B, 3, _MM_FROUND_NO_EXC); } __m128h test_mm_roundscale_sh(__m128h __A, __m128h __B) { - // CHECK-LABEL: @test_mm_roundscale_sh + // CHECK-LABEL: test_mm_roundscale_sh // CHECK: @llvm.x86.avx512fp16.mask.rndscale.sh return _mm_roundscale_sh(__A, __B, 3); } __m128h test_mm_mask_roundscale_sh(__m128h __W, __mmask8 __U, __m128h __A, __m128h __B) { - // CHECK-LABEL: @test_mm_mask_roundscale_sh + // CHECK-LABEL: test_mm_mask_roundscale_sh // CHECK: @llvm.x86.avx512fp16.mask.rndscale.sh return _mm_mask_roundscale_sh(__W, __U, __A, __B, 3); } __m128h test_mm_mask_roundscale_round_sh(__m128h __W, __mmask8 __U, __m128h __A, __m128h __B) { - // CHECK-LABEL: @test_mm_mask_roundscale_round_sh + // CHECK-LABEL: test_mm_mask_roundscale_round_sh // CHECK: @llvm.x86.avx512fp16.mask.rndscale.sh return _mm_mask_roundscale_round_sh(__W, __U, __A, __B, 3, _MM_FROUND_NO_EXC); } __m128h test_mm_maskz_roundscale_round_sh(__mmask8 __U, __m128h __A, __m128h __B) { - // CHECK-LABEL: @test_mm_maskz_roundscale_round_sh + // CHECK-LABEL: test_mm_maskz_roundscale_round_sh // CHECK: @llvm.x86.avx512fp16.mask.rndscale.sh return _mm_maskz_roundscale_round_sh(__U, __A, __B, 3, _MM_FROUND_NO_EXC); } __m128h test_mm_maskz_roundscale_sh(__mmask8 __U, __m128h __A, __m128h __B) { - // CHECK-LABEL: @test_mm_maskz_roundscale_sh + // CHECK-LABEL: test_mm_maskz_roundscale_sh // CHECK: @llvm.x86.avx512fp16.mask.rndscale.sh return _mm_maskz_roundscale_sh(__U, __A, __B, 3); } __m128h test_mm_reduce_sh(__m128h __A, __m128h __B) { - // CHECK-LABEL: @test_mm_reduce_sh + // CHECK-LABEL: test_mm_reduce_sh // CHECK: @llvm.x86.avx512fp16.mask.reduce.sh return _mm_reduce_sh(__A, __B, 4); } __m128h test_mm_mask_reduce_sh(__m128h __W, __mmask8 __U, __m128h __A, __m128h __B) { - // CHECK-LABEL: @test_mm_mask_reduce_sh + // CHECK-LABEL: test_mm_mask_reduce_sh // CHECK: @llvm.x86.avx512fp16.mask.reduce.sh return _mm_mask_reduce_sh(__W, __U, __A, __B, 4); } __m128h test_mm_maskz_reduce_sh(__mmask8 __U, __m128h __A, __m128h __B) { - // CHECK-LABEL: @test_mm_maskz_reduce_sh + // CHECK-LABEL: test_mm_maskz_reduce_sh // CHECK: @llvm.x86.avx512fp16.mask.reduce.sh return _mm_maskz_reduce_sh(__U, __A, __B, 4); } __m128h test_mm_reduce_round_sh(__m128h __A, __m128h __B) { - // CHECK-LABEL: @test_mm_reduce_round_sh + // CHECK-LABEL: test_mm_reduce_round_sh // CHECK: @llvm.x86.avx512fp16.mask.reduce.sh return _mm_reduce_round_sh(__A, __B, 4, 8); } __m128h test_mm_mask_reduce_round_sh(__m128h __W, __mmask8 __U, __m128h __A, __m128h __B) { - // CHECK-LABEL: @test_mm_mask_reduce_round_sh + // CHECK-LABEL: test_mm_mask_reduce_round_sh // CHECK: @llvm.x86.avx512fp16.mask.reduce.sh return _mm_mask_reduce_round_sh(__W, __U, __A, __B, 4, 8); } __m128h test_mm_maskz_reduce_round_sh(__mmask8 __U, __m128h __A, __m128h __B) { - // CHECK-LABEL: @test_mm_maskz_reduce_round_sh + // CHECK-LABEL: test_mm_maskz_reduce_round_sh // CHECK: @llvm.x86.avx512fp16.mask.reduce.sh return _mm_maskz_reduce_round_sh(__U, __A, __B, 4, 8); } __m512h test_mm512_sqrt_round_ph(__m512h __A) { - // CHECK-LABEL: @test_mm512_sqrt_round_ph - // CHECK: call <32 x half> @llvm.x86.avx512fp16.sqrt.ph.512(<32 x half> %{{.*}}, i32 11) + // CHECK-LABEL: test_mm512_sqrt_round_ph + // CHECK: @llvm.x86.avx512fp16.sqrt.ph.512(<32 x half> %{{.*}}, i32 11) return _mm512_sqrt_round_ph(__A, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC); } __m512h test_mm512_mask_sqrt_round_ph(__m512h __W, __mmask32 __U, __m512h __A) { - // CHECK-LABEL: @test_mm512_mask_sqrt_round_ph - // CHECK: call <32 x half> @llvm.x86.avx512fp16.sqrt.ph.512(<32 x half> %{{.*}}, i32 11) + // CHECK-LABEL: test_mm512_mask_sqrt_round_ph + // CHECK: @llvm.x86.avx512fp16.sqrt.ph.512(<32 x half> %{{.*}}, i32 11) // CHECK: bitcast i32 %{{.*}} to <32 x i1> // CHECK: select <32 x i1> %{{.*}}, <32 x half> %{{.*}}, <32 x half> %{{.*}} return _mm512_mask_sqrt_round_ph(__W, __U, __A, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC); } __m512h test_mm512_maskz_sqrt_round_ph(__mmask32 __U, __m512h __A) { - // CHECK-LABEL: @test_mm512_maskz_sqrt_round_ph - // CHECK: call <32 x half> @llvm.x86.avx512fp16.sqrt.ph.512(<32 x half> %{{.*}}, i32 11) + // CHECK-LABEL: test_mm512_maskz_sqrt_round_ph + // CHECK: @llvm.x86.avx512fp16.sqrt.ph.512(<32 x half> %{{.*}}, i32 11) // CHECK: bitcast i32 %{{.*}} to <32 x i1> // CHECK: select <32 x i1> %{{.*}}, <32 x half> %{{.*}}, <32 x half> {{.*}} return _mm512_maskz_sqrt_round_ph(__U, __A, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC); } __m512h test_mm512_sqrt_ph(__m512h __A) { - // CHECK-LABEL: @test_mm512_sqrt_ph - // CHECK: %{{.*}} = call <32 x half> @llvm.sqrt.v32f16(<32 x half> %{{.*}}) + // CHECK-LABEL: test_mm512_sqrt_ph + // CHECK: @llvm.sqrt.v32f16(<32 x half> %{{.*}}) return _mm512_sqrt_ph(__A); } __m512h test_mm512_mask_sqrt_ph(__m512h __W, __mmask32 __U, __m512h __A) { - // CHECK-LABEL: @test_mm512_mask_sqrt_ph - // CHECK: %{{.*}} = call <32 x half> @llvm.sqrt.v32f16(<32 x half> %{{.*}}) + // CHECK-LABEL: test_mm512_mask_sqrt_ph + // CHECK: @llvm.sqrt.v32f16(<32 x half> %{{.*}}) // CHECK: bitcast i32 %{{.*}} to <32 x i1> // CHECK: select <32 x i1> %{{.*}}, <32 x half> %{{.*}}, <32 x half> %{{.*}} return _mm512_mask_sqrt_ph(__W, __U, __A); } __m512h test_mm512_maskz_sqrt_ph(__mmask32 __U, __m512h __A) { - // CHECK-LABEL: @test_mm512_maskz_sqrt_ph - // CHECK: %{{.*}} = call <32 x half> @llvm.sqrt.v32f16(<32 x half> %{{.*}}) + // CHECK-LABEL: test_mm512_maskz_sqrt_ph + // CHECK: @llvm.sqrt.v32f16(<32 x half> %{{.*}}) // CHECK: bitcast i32 %{{.*}} to <32 x i1> // CHECK: select <32 x i1> %{{.*}}, <32 x half> %{{.*}}, <32 x half> {{.*}} return _mm512_maskz_sqrt_ph(__U, __A); } __m128h test_mm_sqrt_round_sh(__m128h __A, __m128h __B) { - // CHECK-LABEL: @test_mm_sqrt_round_sh + // CHECK-LABEL: test_mm_sqrt_round_sh // CHECK: call <8 x half> @llvm.x86.avx512fp16.mask.sqrt.sh(<8 x half> %{{.*}}, <8 x half> %{{.*}}, <8 x half> %{{.*}}, i8 -1, i32 11) return _mm_sqrt_round_sh(__A, __B, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC); } __m128h test_mm_mask_sqrt_round_sh(__m128h __W, __mmask8 __U, __m128h __A, __m128h __B) { - // CHECK-LABEL: @test_mm_mask_sqrt_round_sh + // CHECK-LABEL: test_mm_mask_sqrt_round_sh // CHECK: call <8 x half> @llvm.x86.avx512fp16.mask.sqrt.sh(<8 x half> %{{.*}}, <8 x half> %{{.*}}, <8 x half> %{{.*}}, i8 {{.*}}, i32 11) return _mm_mask_sqrt_round_sh(__W, __U, __A, __B, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC); } __m128h test_mm_maskz_sqrt_round_sh(__mmask8 __U, __m128h __A, __m128h __B) { - // CHECK-LABEL: @test_mm_maskz_sqrt_round_sh + // CHECK-LABEL: test_mm_maskz_sqrt_round_sh // CHECK: call <8 x half> @llvm.x86.avx512fp16.mask.sqrt.sh(<8 x half> %{{.*}}, <8 x half> %{{.*}}, <8 x half> %{{.*}}, i8 {{.*}}, i32 11) return _mm_maskz_sqrt_round_sh(__U, __A, __B, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC); } __m128h test_mm_sqrt_sh(__m128h __A, __m128h __B) { - // CHECK-LABEL: @test_mm_sqrt_sh + // CHECK-LABEL: test_mm_sqrt_sh // CHECK: %{{.*}} = call half @llvm.sqrt.f16(half %{{.*}}) return _mm_sqrt_sh(__A, __B); } __m128h test_mm_mask_sqrt_sh(__m128h __W, __mmask8 __U, __m128h __A, __m128h __B) { - // CHECK-LABEL: @test_mm_mask_sqrt_sh + // CHECK-LABEL: test_mm_mask_sqrt_sh // CHECK: %{{.*}} = call half @llvm.sqrt.f16(half %{{.*}}) return _mm_mask_sqrt_sh(__W, __U, __A, __B); } __m128h test_mm_maskz_sqrt_sh(__mmask8 __U, __m128h __A, __m128h __B) { - // CHECK-LABEL: @test_mm_maskz_sqrt_sh + // CHECK-LABEL: test_mm_maskz_sqrt_sh // CHECK: %{{.*}} = call half @llvm.sqrt.f16(half %{{.*}}) return _mm_maskz_sqrt_sh(__U, __A, __B); } __mmask32 test_mm512_mask_fpclass_ph_mask(__mmask32 __U, __m512h __A) { - // CHECK-LABEL: @test_mm512_mask_fpclass_ph_mask + // CHECK-LABEL: test_mm512_mask_fpclass_ph_mask // CHECK: @llvm.x86.avx512fp16.fpclass.ph.512 return _mm512_mask_fpclass_ph_mask(__U, __A, 4); } __mmask32 test_mm512_fpclass_ph_mask(__m512h __A) { - // CHECK-LABEL: @test_mm512_fpclass_ph_mask + // CHECK-LABEL: test_mm512_fpclass_ph_mask // CHECK: @llvm.x86.avx512fp16.fpclass.ph.512 return _mm512_fpclass_ph_mask(__A, 4); } __mmask8 test_mm_fpclash_sh_mask(__m128 __A) { - // CHECK-LABEL: @test_mm_fpclash_sh_mask + // CHECK-LABEL: test_mm_fpclash_sh_mask // CHECK: @llvm.x86.avx512fp16.mask.fpclass.sh return _mm_fpclass_sh_mask(__A, 2); } __mmask8 test_mm_mask_fpclash_sh_mask(__mmask8 __U, __m128 __A) { - // CHECK-LABEL: @test_mm_mask_fpclash_sh_mask + // CHECK-LABEL: test_mm_mask_fpclash_sh_mask // CHECK: @llvm.x86.avx512fp16.mask.fpclass.sh return _mm_mask_fpclass_sh_mask(__U, __A, 2); } @@ -3034,26 +3067,26 @@ unsigned int test_mm_cvtsh_u32(__m128h A) { #ifdef __x86_64__ long long test_mm_cvt_roundsh_i64(__m128h A) { - // CHECK-LABEL: test_mm_cvt_roundsh_i64 - // CHECK: @llvm.x86.avx512fp16.vcvtsh2si64 + // X64-LABEL: test_mm_cvt_roundsh_i64 + // X64: @llvm.x86.avx512fp16.vcvtsh2si64 return _mm_cvt_roundsh_i64(A, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC); } long long test_mm_cvtsh_i64(__m128h A) { - // CHECK-LABEL: test_mm_cvtsh_i64 - // CHECK: @llvm.x86.avx512fp16.vcvtsh2si64 + // X64-LABEL: test_mm_cvtsh_i64 + // X64: @llvm.x86.avx512fp16.vcvtsh2si64 return _mm_cvtsh_i64(A); } unsigned long long test_mm_cvt_roundsh_u64(__m128h A) { - // CHECK-LABEL: test_mm_cvt_roundsh_u64 - // CHECK: @llvm.x86.avx512fp16.vcvtsh2usi64 + // X64-LABEL: test_mm_cvt_roundsh_u64 + // X64: @llvm.x86.avx512fp16.vcvtsh2usi64 return _mm_cvt_roundsh_u64(A, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC); } unsigned long long test_mm_cvtsh_u64(__m128h A) { - // CHECK-LABEL: test_mm_cvtsh_u64 - // CHECK: @llvm.x86.avx512fp16.vcvtsh2usi64 + // X64-LABEL: test_mm_cvtsh_u64 + // X64: @llvm.x86.avx512fp16.vcvtsh2usi64 return _mm_cvtsh_u64(A); } #endif @@ -3072,14 +3105,14 @@ __m128h test_mm_cvtu32_sh(__m128h A, unsigned int B) { #ifdef __x86_64__ __m128h test_mm_cvt_roundu64_sh(__m128h A, unsigned long long B) { - // CHECK-LABEL: test_mm_cvt_roundu64_sh - // CHECK: @llvm.x86.avx512fp16.vcvtusi642sh + // X64-LABEL: test_mm_cvt_roundu64_sh + // X64: @llvm.x86.avx512fp16.vcvtusi642sh return _mm_cvt_roundu64_sh(A, B, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC); } __m128h test_mm_cvtu64_sh(__m128h A, unsigned long long B) { - // CHECK-LABEL: test_mm_cvtu64_sh - // CHECK: %{{.*}} = uitofp i64 %{{.*}} to half + // X64-LABEL: test_mm_cvtu64_sh + // X64: %{{.*}} = uitofp i64 %{{.*}} to half return _mm_cvtu64_sh(A, B); } #endif @@ -3098,14 +3131,14 @@ __m128h test_mm_cvti32_sh(__m128h A, int B) { #ifdef __x86_64__ __m128h test_mm_cvt_roundi64_sh(__m128h A, long long B) { - // CHECK-LABEL: test_mm_cvt_roundi64_sh - // CHECK: @llvm.x86.avx512fp16.vcvtsi642sh + // X64-LABEL: test_mm_cvt_roundi64_sh + // X64: @llvm.x86.avx512fp16.vcvtsi642sh return _mm_cvt_roundi64_sh(A, B, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC); } __m128h test_mm_cvti64_sh(__m128h A, long long B) { - // CHECK-LABEL: test_mm_cvti64_sh - // CHECK: %{{.*}} = sitofp i64 %{{.*}} to half + // X64-LABEL: test_mm_cvti64_sh + // X64: %{{.*}} = sitofp i64 %{{.*}} to half return _mm_cvti64_sh(A, B); } #endif @@ -3124,14 +3157,14 @@ int test_mm_cvttsh_i32(__m128h A) { #ifdef __x86_64__ long long test_mm_cvtt_roundsh_i64(__m128h A) { - // CHECK-LABEL: test_mm_cvtt_roundsh_i64 - // CHECK: @llvm.x86.avx512fp16.vcvttsh2si64 + // X64-LABEL: test_mm_cvtt_roundsh_i64 + // X64: @llvm.x86.avx512fp16.vcvttsh2si64 return _mm_cvtt_roundsh_i64(A, _MM_FROUND_NO_EXC); } long long test_mm_cvttsh_i64(__m128h A) { - // CHECK-LABEL: test_mm_cvttsh_i64 - // CHECK: @llvm.x86.avx512fp16.vcvttsh2si64 + // X64-LABEL: test_mm_cvttsh_i64 + // X64: @llvm.x86.avx512fp16.vcvttsh2si64 return _mm_cvttsh_i64(A); } #endif @@ -3150,14 +3183,14 @@ unsigned int test_mm_cvttsh_u32(__m128h A) { #ifdef __x86_64__ unsigned long long test_mm_cvtt_roundsh_u64(__m128h A) { - // CHECK-LABEL: test_mm_cvtt_roundsh_u64 - // CHECK: @llvm.x86.avx512fp16.vcvttsh2usi64 + // X64-LABEL: test_mm_cvtt_roundsh_u64 + // X64: @llvm.x86.avx512fp16.vcvttsh2usi64 return _mm_cvtt_roundsh_u64(A, _MM_FROUND_NO_EXC); } unsigned long long test_mm_cvttsh_u64(__m128h A) { - // CHECK-LABEL: test_mm_cvttsh_u64 - // CHECK: @llvm.x86.avx512fp16.vcvttsh2usi64 + // X64-LABEL: test_mm_cvttsh_u64 + // X64: @llvm.x86.avx512fp16.vcvttsh2usi64 return _mm_cvttsh_u64(A); } #endif @@ -3235,13 +3268,13 @@ __m256h test_mm512_maskz_cvtxps_ph(__mmask16 A, __m512 B) { } __m512h test_mm512_fmadd_round_ph(__m512h __A, __m512h __B, __m512h __C) { - // CHECK-LABEL: @test_mm512_fmadd_round_ph + // CHECK-LABEL: test_mm512_fmadd_round_ph // CHECK: @llvm.x86.avx512fp16.vfmadd.ph.512 return _mm512_fmadd_round_ph(__A, __B, __C, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC); } __m512h test_mm512_mask_fmadd_round_ph(__m512h __A, __mmask32 __U, __m512h __B, __m512h __C) { - // CHECK-LABEL: @test_mm512_mask_fmadd_round_ph + // CHECK-LABEL: test_mm512_mask_fmadd_round_ph // CHECK: @llvm.x86.avx512fp16.vfmadd.ph.512 // CHECK: bitcast i32 %{{.*}} to <32 x i1> // CHECK: select <32 x i1> %{{.*}}, <32 x half> %{{.*}}, <32 x half> %{{.*}} @@ -3249,7 +3282,7 @@ __m512h test_mm512_mask_fmadd_round_ph(__m512h __A, __mmask32 __U, __m512h __B, } __m512h test_mm512_mask3_fmadd_round_ph(__m512h __A, __m512h __B, __m512h __C, __mmask32 __U) { - // CHECK-LABEL: @test_mm512_mask3_fmadd_round_ph + // CHECK-LABEL: test_mm512_mask3_fmadd_round_ph // CHECK: @llvm.x86.avx512fp16.vfmadd.ph.512 // CHECK: bitcast i32 %{{.*}} to <32 x i1> // CHECK: select <32 x i1> %{{.*}}, <32 x half> %{{.*}}, <32 x half> %{{.*}} @@ -3257,7 +3290,7 @@ __m512h test_mm512_mask3_fmadd_round_ph(__m512h __A, __m512h __B, __m512h __C, _ } __m512h test_mm512_maskz_fmadd_round_ph(__mmask32 __U, __m512h __A, __m512h __B, __m512h __C) { - // CHECK-LABEL: @test_mm512_maskz_fmadd_round_ph + // CHECK-LABEL: test_mm512_maskz_fmadd_round_ph // CHECK: @llvm.x86.avx512fp16.vfmadd.ph.512 // CHECK: bitcast i32 %{{.*}} to <32 x i1> // CHECK: select <32 x i1> %{{.*}}, <32 x half> %{{.*}}, <32 x half> zeroinitializer @@ -3265,14 +3298,14 @@ __m512h test_mm512_maskz_fmadd_round_ph(__mmask32 __U, __m512h __A, __m512h __B, } __m512h test_mm512_fmsub_round_ph(__m512h __A, __m512h __B, __m512h __C) { - // CHECK-LABEL: @test_mm512_fmsub_round_ph + // CHECK-LABEL: test_mm512_fmsub_round_ph // CHECK: fneg // CHECK: @llvm.x86.avx512fp16.vfmadd.ph.512 return _mm512_fmsub_round_ph(__A, __B, __C, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC); } __m512h test_mm512_mask_fmsub_round_ph(__m512h __A, __mmask32 __U, __m512h __B, __m512h __C) { - // CHECK-LABEL: @test_mm512_mask_fmsub_round_ph + // CHECK-LABEL: test_mm512_mask_fmsub_round_ph // CHECK: fneg // CHECK: @llvm.x86.avx512fp16.vfmadd.ph.512 // CHECK: bitcast i32 %{{.*}} to <32 x i1> @@ -3281,7 +3314,7 @@ __m512h test_mm512_mask_fmsub_round_ph(__m512h __A, __mmask32 __U, __m512h __B, } __m512h test_mm512_maskz_fmsub_round_ph(__mmask32 __U, __m512h __A, __m512h __B, __m512h __C) { - // CHECK-LABEL: @test_mm512_maskz_fmsub_round_ph + // CHECK-LABEL: test_mm512_maskz_fmsub_round_ph // CHECK: fneg // CHECK: @llvm.x86.avx512fp16.vfmadd.ph.512 // CHECK: bitcast i32 %{{.*}} to <32 x i1> @@ -3290,14 +3323,14 @@ __m512h test_mm512_maskz_fmsub_round_ph(__mmask32 __U, __m512h __A, __m512h __B, } __m512h test_mm512_fnmadd_round_ph(__m512h __A, __m512h __B, __m512h __C) { - // CHECK-LABEL: @test_mm512_fnmadd_round_ph + // CHECK-LABEL: test_mm512_fnmadd_round_ph // CHECK: fneg // CHECK: @llvm.x86.avx512fp16.vfmadd.ph.512 return _mm512_fnmadd_round_ph(__A, __B, __C, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC); } __m512h test_mm512_mask3_fnmadd_round_ph(__m512h __A, __m512h __B, __m512h __C, __mmask32 __U) { - // CHECK-LABEL: @test_mm512_mask3_fnmadd_round_ph + // CHECK-LABEL: test_mm512_mask3_fnmadd_round_ph // CHECK: fneg // CHECK: @llvm.x86.avx512fp16.vfmadd.ph.512 // CHECK: bitcast i32 %{{.*}} to <32 x i1> @@ -3306,7 +3339,7 @@ __m512h test_mm512_mask3_fnmadd_round_ph(__m512h __A, __m512h __B, __m512h __C, } __m512h test_mm512_maskz_fnmadd_round_ph(__mmask32 __U, __m512h __A, __m512h __B, __m512h __C) { - // CHECK-LABEL: @test_mm512_maskz_fnmadd_round_ph + // CHECK-LABEL: test_mm512_maskz_fnmadd_round_ph // CHECK: fneg // CHECK: @llvm.x86.avx512fp16.vfmadd.ph.512 // CHECK: bitcast i32 %{{.*}} to <32 x i1> @@ -3315,7 +3348,7 @@ __m512h test_mm512_maskz_fnmadd_round_ph(__mmask32 __U, __m512h __A, __m512h __B } __m512h test_mm512_fnmsub_round_ph(__m512h __A, __m512h __B, __m512h __C) { - // CHECK-LABEL: @test_mm512_fnmsub_round_ph + // CHECK-LABEL: test_mm512_fnmsub_round_ph // CHECK: fneg // CHECK: fneg // CHECK: @llvm.x86.avx512fp16.vfmadd.ph.512 @@ -3323,7 +3356,7 @@ __m512h test_mm512_fnmsub_round_ph(__m512h __A, __m512h __B, __m512h __C) { } __m512h test_mm512_maskz_fnmsub_round_ph(__mmask32 __U, __m512h __A, __m512h __B, __m512h __C) { - // CHECK-LABEL: @test_mm512_maskz_fnmsub_round_ph + // CHECK-LABEL: test_mm512_maskz_fnmsub_round_ph // CHECK: fneg // CHECK: fneg // CHECK: @llvm.x86.avx512fp16.vfmadd.ph.512 @@ -3333,109 +3366,109 @@ __m512h test_mm512_maskz_fnmsub_round_ph(__mmask32 __U, __m512h __A, __m512h __B } __m512h test_mm512_fmadd_ph(__m512h __A, __m512h __B, __m512h __C) { - // CHECK-LABEL: @test_mm512_fmadd_ph - // CHECK: call <32 x half> @llvm.fma.v32f16(<32 x half> %{{.*}}, <32 x half> %{{.*}}, <32 x half> %{{.*}}) + // CHECK-LABEL: test_mm512_fmadd_ph + // CHECK: @llvm.fma.v32f16(<32 x half> %{{.*}}, <32 x half> %{{.*}}, <32 x half> %{{.*}}) return _mm512_fmadd_ph(__A, __B, __C); } __m512h test_mm512_mask_fmadd_ph(__m512h __A, __mmask32 __U, __m512h __B, __m512h __C) { - // CHECK-LABEL: @test_mm512_mask_fmadd_ph - // CHECK: call <32 x half> @llvm.fma.v32f16(<32 x half> %{{.*}}, <32 x half> %{{.*}}, <32 x half> %{{.*}}) + // CHECK-LABEL: test_mm512_mask_fmadd_ph + // CHECK: @llvm.fma.v32f16(<32 x half> %{{.*}}, <32 x half> %{{.*}}, <32 x half> %{{.*}}) return _mm512_mask_fmadd_ph(__A, __U, __B, __C); } __m512h test_mm512_mask3_fmadd_ph(__m512h __A, __m512h __B, __m512h __C, __mmask32 __U) { - // CHECK-LABEL: @test_mm512_mask3_fmadd_ph - // CHECK: call <32 x half> @llvm.fma.v32f16(<32 x half> %{{.*}}, <32 x half> %{{.*}}, <32 x half> %{{.*}}) + // CHECK-LABEL: test_mm512_mask3_fmadd_ph + // CHECK: @llvm.fma.v32f16(<32 x half> %{{.*}}, <32 x half> %{{.*}}, <32 x half> %{{.*}}) // CHECK: bitcast i32 %{{.*}} to <32 x i1> // CHECK: select <32 x i1> %{{.*}}, <32 x half> %{{.*}}, <32 x half> %{{.*}} return _mm512_mask3_fmadd_ph(__A, __B, __C, __U); } __m512h test_mm512_maskz_fmadd_ph(__mmask32 __U, __m512h __A, __m512h __B, __m512h __C) { - // CHECK-LABEL: @test_mm512_maskz_fmadd_ph - // CHECK: call <32 x half> @llvm.fma.v32f16(<32 x half> %{{.*}}, <32 x half> %{{.*}}, <32 x half> %{{.*}}) + // CHECK-LABEL: test_mm512_maskz_fmadd_ph + // CHECK: @llvm.fma.v32f16(<32 x half> %{{.*}}, <32 x half> %{{.*}}, <32 x half> %{{.*}}) // CHECK: bitcast i32 %{{.*}} to <32 x i1> // CHECK: select <32 x i1> %{{.*}}, <32 x half> %{{.*}}, <32 x half> zeroinitializer return _mm512_maskz_fmadd_ph(__U, __A, __B, __C); } __m512h test_mm512_fmsub_ph(__m512h __A, __m512h __B, __m512h __C) { - // CHECK-LABEL: @test_mm512_fmsub_ph + // CHECK-LABEL: test_mm512_fmsub_ph // CHECK: fneg - // CHECK: call <32 x half> @llvm.fma.v32f16(<32 x half> %{{.*}}, <32 x half> %{{.*}}, <32 x half> %{{.*}}) + // CHECK: @llvm.fma.v32f16(<32 x half> %{{.*}}, <32 x half> %{{.*}}, <32 x half> %{{.*}}) return _mm512_fmsub_ph(__A, __B, __C); } __m512h test_mm512_mask_fmsub_ph(__m512h __A, __mmask32 __U, __m512h __B, __m512h __C) { - // CHECK-LABEL: @test_mm512_mask_fmsub_ph + // CHECK-LABEL: test_mm512_mask_fmsub_ph // CHECK: fneg - // CHECK: call <32 x half> @llvm.fma.v32f16(<32 x half> %{{.*}}, <32 x half> %{{.*}}, <32 x half> %{{.*}}) + // CHECK: @llvm.fma.v32f16(<32 x half> %{{.*}}, <32 x half> %{{.*}}, <32 x half> %{{.*}}) // CHECK: bitcast i32 %{{.*}} to <32 x i1> // CHECK: select <32 x i1> %{{.*}}, <32 x half> %{{.*}}, <32 x half> %{{.*}} return _mm512_mask_fmsub_ph(__A, __U, __B, __C); } __m512h test_mm512_maskz_fmsub_ph(__mmask32 __U, __m512h __A, __m512h __B, __m512h __C) { - // CHECK-LABEL: @test_mm512_maskz_fmsub_ph + // CHECK-LABEL: test_mm512_maskz_fmsub_ph // CHECK: fneg - // CHECK: call <32 x half> @llvm.fma.v32f16(<32 x half> %{{.*}}, <32 x half> %{{.*}}, <32 x half> %{{.*}}) + // CHECK: @llvm.fma.v32f16(<32 x half> %{{.*}}, <32 x half> %{{.*}}, <32 x half> %{{.*}}) // CHECK: bitcast i32 %{{.*}} to <32 x i1> // CHECK: select <32 x i1> %{{.*}}, <32 x half> %{{.*}}, <32 x half> zeroinitializer return _mm512_maskz_fmsub_ph(__U, __A, __B, __C); } __m512h test_mm512_fnmadd_ph(__m512h __A, __m512h __B, __m512h __C) { - // CHECK-LABEL: @test_mm512_fnmadd_ph + // CHECK-LABEL: test_mm512_fnmadd_ph // CHECK: fneg - // CHECK: call <32 x half> @llvm.fma.v32f16(<32 x half> %{{.*}}, <32 x half> %{{.*}}, <32 x half> %{{.*}}) + // CHECK: @llvm.fma.v32f16(<32 x half> %{{.*}}, <32 x half> %{{.*}}, <32 x half> %{{.*}}) return _mm512_fnmadd_ph(__A, __B, __C); } __m512h test_mm512_mask3_fnmadd_ph(__m512h __A, __m512h __B, __m512h __C, __mmask32 __U) { - // CHECK-LABEL: @test_mm512_mask3_fnmadd_ph + // CHECK-LABEL: test_mm512_mask3_fnmadd_ph // CHECK: fneg - // CHECK: call <32 x half> @llvm.fma.v32f16(<32 x half> %{{.*}}, <32 x half> %{{.*}}, <32 x half> %{{.*}}) + // CHECK: @llvm.fma.v32f16(<32 x half> %{{.*}}, <32 x half> %{{.*}}, <32 x half> %{{.*}}) // CHECK: bitcast i32 %{{.*}} to <32 x i1> // CHECK: select <32 x i1> %{{.*}}, <32 x half> %{{.*}}, <32 x half> %{{.*}} return _mm512_mask3_fnmadd_ph(__A, __B, __C, __U); } __m512h test_mm512_maskz_fnmadd_ph(__mmask32 __U, __m512h __A, __m512h __B, __m512h __C) { - // CHECK-LABEL: @test_mm512_maskz_fnmadd_ph + // CHECK-LABEL: test_mm512_maskz_fnmadd_ph // CHECK: fneg - // CHECK: call <32 x half> @llvm.fma.v32f16(<32 x half> %{{.*}}, <32 x half> %{{.*}}, <32 x half> %{{.*}}) + // CHECK: @llvm.fma.v32f16(<32 x half> %{{.*}}, <32 x half> %{{.*}}, <32 x half> %{{.*}}) // CHECK: bitcast i32 %{{.*}} to <32 x i1> // CHECK: select <32 x i1> %{{.*}}, <32 x half> %{{.*}}, <32 x half> zeroinitializer return _mm512_maskz_fnmadd_ph(__U, __A, __B, __C); } __m512h test_mm512_fnmsub_ph(__m512h __A, __m512h __B, __m512h __C) { - // CHECK-LABEL: @test_mm512_fnmsub_ph + // CHECK-LABEL: test_mm512_fnmsub_ph // CHECK: fneg // CHECK: fneg - // CHECK: call <32 x half> @llvm.fma.v32f16(<32 x half> %{{.*}}, <32 x half> %{{.*}}, <32 x half> %{{.*}}) + // CHECK: @llvm.fma.v32f16(<32 x half> %{{.*}}, <32 x half> %{{.*}}, <32 x half> %{{.*}}) return _mm512_fnmsub_ph(__A, __B, __C); } __m512h test_mm512_maskz_fnmsub_ph(__mmask32 __U, __m512h __A, __m512h __B, __m512h __C) { - // CHECK-LABEL: @test_mm512_maskz_fnmsub_ph + // CHECK-LABEL: test_mm512_maskz_fnmsub_ph // CHECK: fneg // CHECK: fneg - // CHECK: call <32 x half> @llvm.fma.v32f16(<32 x half> %{{.*}}, <32 x half> %{{.*}}, <32 x half> %{{.*}}) + // CHECK: @llvm.fma.v32f16(<32 x half> %{{.*}}, <32 x half> %{{.*}}, <32 x half> %{{.*}}) // CHECK: bitcast i32 %{{.*}} to <32 x i1> // CHECK: select <32 x i1> %{{.*}}, <32 x half> %{{.*}}, <32 x half> zeroinitializer return _mm512_maskz_fnmsub_ph(__U, __A, __B, __C); } __m512h test_mm512_fmaddsub_round_ph(__m512h __A, __m512h __B, __m512h __C) { - // CHECK-LABEL: @test_mm512_fmaddsub_round_ph + // CHECK-LABEL: test_mm512_fmaddsub_round_ph // CHECK: @llvm.x86.avx512fp16.vfmaddsub.ph.512 return _mm512_fmaddsub_round_ph(__A, __B, __C, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC); } __m512h test_mm512_mask_fmaddsub_round_ph(__m512h __A, __mmask32 __U, __m512h __B, __m512h __C) { - // CHECK-LABEL: @test_mm512_mask_fmaddsub_round_ph + // CHECK-LABEL: test_mm512_mask_fmaddsub_round_ph // CHECK: @llvm.x86.avx512fp16.vfmaddsub.ph.512 // CHECK: bitcast i32 %{{.*}} to <32 x i1> // CHECK: select <32 x i1> %{{.*}}, <32 x half> %{{.*}}, <32 x half> %{{.*}} @@ -3443,7 +3476,7 @@ __m512h test_mm512_mask_fmaddsub_round_ph(__m512h __A, __mmask32 __U, __m512h __ } __m512h test_mm512_mask3_fmaddsub_round_ph(__m512h __A, __m512h __B, __m512h __C, __mmask32 __U) { - // CHECK-LABEL: @test_mm512_mask3_fmaddsub_round_ph + // CHECK-LABEL: test_mm512_mask3_fmaddsub_round_ph // CHECK: @llvm.x86.avx512fp16.vfmaddsub.ph.512 // CHECK: bitcast i32 %{{.*}} to <32 x i1> // CHECK: select <32 x i1> %{{.*}}, <32 x half> %{{.*}}, <32 x half> %{{.*}} @@ -3451,7 +3484,7 @@ __m512h test_mm512_mask3_fmaddsub_round_ph(__m512h __A, __m512h __B, __m512h __C } __m512h test_mm512_maskz_fmaddsub_round_ph(__mmask32 __U, __m512h __A, __m512h __B, __m512h __C) { - // CHECK-LABEL: @test_mm512_maskz_fmaddsub_round_ph + // CHECK-LABEL: test_mm512_maskz_fmaddsub_round_ph // CHECK: @llvm.x86.avx512fp16.vfmaddsub.ph.512 // CHECK: bitcast i32 %{{.*}} to <32 x i1> // CHECK: select <32 x i1> %{{.*}}, <32 x half> %{{.*}}, <32 x half> zeroinitializer @@ -3459,14 +3492,14 @@ __m512h test_mm512_maskz_fmaddsub_round_ph(__mmask32 __U, __m512h __A, __m512h _ } __m512h test_mm512_fmsubadd_round_ph(__m512h __A, __m512h __B, __m512h __C) { - // CHECK-LABEL: @test_mm512_fmsubadd_round_ph + // CHECK-LABEL: test_mm512_fmsubadd_round_ph // CHECK: fneg // CHECK: @llvm.x86.avx512fp16.vfmaddsub.ph.512 return _mm512_fmsubadd_round_ph(__A, __B, __C, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC); } __m512h test_mm512_mask_fmsubadd_round_ph(__m512h __A, __mmask32 __U, __m512h __B, __m512h __C) { - // CHECK-LABEL: @test_mm512_mask_fmsubadd_round_ph + // CHECK-LABEL: test_mm512_mask_fmsubadd_round_ph // CHECK: fneg // CHECK: @llvm.x86.avx512fp16.vfmaddsub.ph.512 // CHECK: bitcast i32 %{{.*}} to <32 x i1> @@ -3475,7 +3508,7 @@ __m512h test_mm512_mask_fmsubadd_round_ph(__m512h __A, __mmask32 __U, __m512h __ } __m512h test_mm512_maskz_fmsubadd_round_ph(__mmask32 __U, __m512h __A, __m512h __B, __m512h __C) { - // CHECK-LABEL: @test_mm512_maskz_fmsubadd_round_ph + // CHECK-LABEL: test_mm512_maskz_fmsubadd_round_ph // CHECK: fneg // CHECK: @llvm.x86.avx512fp16.vfmaddsub.ph.512 // CHECK: bitcast i32 %{{.*}} to <32 x i1> @@ -3484,66 +3517,66 @@ __m512h test_mm512_maskz_fmsubadd_round_ph(__mmask32 __U, __m512h __A, __m512h _ } __m512h test_mm512_fmaddsub_ph(__m512h __A, __m512h __B, __m512h __C) { - // CHECK-LABEL: @test_mm512_fmaddsub_ph + // CHECK-LABEL: test_mm512_fmaddsub_ph // CHECK-NOT: fneg - // CHECK: call <32 x half> @llvm.x86.avx512fp16.vfmaddsub.ph.512(<32 x half> %{{.*}}, <32 x half> %{{.*}}, <32 x half> %{{.*}}, i32 4) + // CHECK: @llvm.x86.avx512fp16.vfmaddsub.ph.512(<32 x half> %{{.*}}, <32 x half> %{{.*}}, <32 x half> %{{.*}}, i32 4) return _mm512_fmaddsub_ph(__A, __B, __C); } __m512h test_mm512_mask_fmaddsub_ph(__m512h __A, __mmask32 __U, __m512h __B, __m512h __C) { - // CHECK-LABEL: @test_mm512_mask_fmaddsub_ph + // CHECK-LABEL: test_mm512_mask_fmaddsub_ph // CHECK-NOT: fneg - // CHECK: call <32 x half> @llvm.x86.avx512fp16.vfmaddsub.ph.512(<32 x half> %{{.*}}, <32 x half> %{{.*}}, <32 x half> %{{.*}}, i32 4) + // CHECK: @llvm.x86.avx512fp16.vfmaddsub.ph.512(<32 x half> %{{.*}}, <32 x half> %{{.*}}, <32 x half> %{{.*}}, i32 4) // CHECK: bitcast i32 %{{.*}} to <32 x i1> // CHECK: select <32 x i1> %{{.*}}, <32 x half> %{{.*}}, <32 x half> %{{.*}} return _mm512_mask_fmaddsub_ph(__A, __U, __B, __C); } __m512h test_mm512_mask3_fmaddsub_ph(__m512h __A, __m512h __B, __m512h __C, __mmask32 __U) { - // CHECK-LABEL: @test_mm512_mask3_fmaddsub_ph + // CHECK-LABEL: test_mm512_mask3_fmaddsub_ph // CHECK-NOT: fneg - // CHECK: call <32 x half> @llvm.x86.avx512fp16.vfmaddsub.ph.512(<32 x half> %{{.*}}, <32 x half> %{{.*}}, <32 x half> %{{.*}}, i32 4) + // CHECK: @llvm.x86.avx512fp16.vfmaddsub.ph.512(<32 x half> %{{.*}}, <32 x half> %{{.*}}, <32 x half> %{{.*}}, i32 4) // CHECK: bitcast i32 %{{.*}} to <32 x i1> // CHECK: select <32 x i1> %{{.*}}, <32 x half> %{{.*}}, <32 x half> %{{.*}} return _mm512_mask3_fmaddsub_ph(__A, __B, __C, __U); } __m512h test_mm512_maskz_fmaddsub_ph(__mmask32 __U, __m512h __A, __m512h __B, __m512h __C) { - // CHECK-LABEL: @test_mm512_maskz_fmaddsub_ph + // CHECK-LABEL: test_mm512_maskz_fmaddsub_ph // CHECK-NOT: fneg - // CHECK: call <32 x half> @llvm.x86.avx512fp16.vfmaddsub.ph.512(<32 x half> %{{.*}}, <32 x half> %{{.*}}, <32 x half> %{{.*}}, i32 4) + // CHECK: @llvm.x86.avx512fp16.vfmaddsub.ph.512(<32 x half> %{{.*}}, <32 x half> %{{.*}}, <32 x half> %{{.*}}, i32 4) // CHECK: bitcast i32 %{{.*}} to <32 x i1> // CHECK: select <32 x i1> %{{.*}}, <32 x half> %{{.*}}, <32 x half> zeroinitializer return _mm512_maskz_fmaddsub_ph(__U, __A, __B, __C); } __m512h test_mm512_fmsubadd_ph(__m512h __A, __m512h __B, __m512h __C) { - // CHECK-LABEL: @test_mm512_fmsubadd_ph + // CHECK-LABEL: test_mm512_fmsubadd_ph // CHECK: [[NEG:%.+]] = fneg - // CHECK: call <32 x half> @llvm.x86.avx512fp16.vfmaddsub.ph.512(<32 x half> %{{.*}}, <32 x half> %{{.*}}, <32 x half> [[NEG]], i32 4) + // CHECK: @llvm.x86.avx512fp16.vfmaddsub.ph.512(<32 x half> %{{.*}}, <32 x half> %{{.*}}, <32 x half> [[NEG]], i32 4) return _mm512_fmsubadd_ph(__A, __B, __C); } __m512h test_mm512_mask_fmsubadd_ph(__m512h __A, __mmask32 __U, __m512h __B, __m512h __C) { - // CHECK-LABEL: @test_mm512_mask_fmsubadd_ph + // CHECK-LABEL: test_mm512_mask_fmsubadd_ph // CHECK: [[NEG:%.+]] = fneg - // CHECK: call <32 x half> @llvm.x86.avx512fp16.vfmaddsub.ph.512(<32 x half> %{{.*}}, <32 x half> %{{.*}}, <32 x half> [[NEG]], i32 4) + // CHECK: @llvm.x86.avx512fp16.vfmaddsub.ph.512(<32 x half> %{{.*}}, <32 x half> %{{.*}}, <32 x half> [[NEG]], i32 4) // CHECK: bitcast i32 %{{.*}} to <32 x i1> // CHECK: select <32 x i1> %{{.*}}, <32 x half> %{{.*}}, <32 x half> %{{.*}} return _mm512_mask_fmsubadd_ph(__A, __U, __B, __C); } __m512h test_mm512_maskz_fmsubadd_ph(__mmask32 __U, __m512h __A, __m512h __B, __m512h __C) { - // CHECK-LABEL: @test_mm512_maskz_fmsubadd_ph + // CHECK-LABEL: test_mm512_maskz_fmsubadd_ph // CHECK: [[NEG:%.+]] = fneg - // CHECK: call <32 x half> @llvm.x86.avx512fp16.vfmaddsub.ph.512(<32 x half> %{{.*}}, <32 x half> %{{.*}}, <32 x half> [[NEG]], i32 4) + // CHECK: @llvm.x86.avx512fp16.vfmaddsub.ph.512(<32 x half> %{{.*}}, <32 x half> %{{.*}}, <32 x half> [[NEG]], i32 4) // CHECK: bitcast i32 %{{.*}} to <32 x i1> // CHECK: select <32 x i1> %{{.*}}, <32 x half> %{{.*}}, <32 x half> zeroinitializer return _mm512_maskz_fmsubadd_ph(__U, __A, __B, __C); } __m512h test_mm512_mask3_fmsub_round_ph(__m512h __A, __m512h __B, __m512h __C, __mmask32 __U) { - // CHECK-LABEL: @test_mm512_mask3_fmsub_round_ph + // CHECK-LABEL: test_mm512_mask3_fmsub_round_ph // CHECK: fneg // CHECK: @llvm.x86.avx512fp16.vfmadd.ph.512 // CHECK: bitcast i32 %{{.*}} to <32 x i1> @@ -3552,16 +3585,16 @@ __m512h test_mm512_mask3_fmsub_round_ph(__m512h __A, __m512h __B, __m512h __C, _ } __m512h test_mm512_mask3_fmsub_ph(__m512h __A, __m512h __B, __m512h __C, __mmask32 __U) { - // CHECK-LABEL: @test_mm512_mask3_fmsub_ph + // CHECK-LABEL: test_mm512_mask3_fmsub_ph // CHECK: fneg - // CHECK: call <32 x half> @llvm.fma.v32f16(<32 x half> %{{.*}}, <32 x half> %{{.*}}, <32 x half> %{{.*}}) + // CHECK: @llvm.fma.v32f16(<32 x half> %{{.*}}, <32 x half> %{{.*}}, <32 x half> %{{.*}}) // CHECK: bitcast i32 %{{.*}} to <32 x i1> // CHECK: select <32 x i1> %{{.*}}, <32 x half> %{{.*}}, <32 x half> %{{.*}} return _mm512_mask3_fmsub_ph(__A, __B, __C, __U); } __m512h test_mm512_mask3_fmsubadd_round_ph(__m512h __A, __m512h __B, __m512h __C, __mmask32 __U) { - // CHECK-LABEL: @test_mm512_mask3_fmsubadd_round_ph + // CHECK-LABEL: test_mm512_mask3_fmsubadd_round_ph // CHECK: fneg // CHECK: @llvm.x86.avx512fp16.vfmaddsub.ph.512 // CHECK: bitcast i32 %{{.*}} to <32 x i1> @@ -3570,16 +3603,16 @@ __m512h test_mm512_mask3_fmsubadd_round_ph(__m512h __A, __m512h __B, __m512h __C } __m512h test_mm512_mask3_fmsubadd_ph(__m512h __A, __m512h __B, __m512h __C, __mmask32 __U) { - // CHECK-LABEL: @test_mm512_mask3_fmsubadd_ph + // CHECK-LABEL: test_mm512_mask3_fmsubadd_ph // CHECK: [[NEG:%.+]] = fneg - // CHECK: call <32 x half> @llvm.x86.avx512fp16.vfmaddsub.ph.512(<32 x half> %{{.*}}, <32 x half> %{{.*}}, <32 x half> [[NEG]], i32 4) + // CHECK: @llvm.x86.avx512fp16.vfmaddsub.ph.512(<32 x half> %{{.*}}, <32 x half> %{{.*}}, <32 x half> [[NEG]], i32 4) // CHECK: bitcast i32 %{{.*}} to <32 x i1> // CHECK: select <32 x i1> %{{.*}}, <32 x half> %{{.*}}, <32 x half> %{{.*}} return _mm512_mask3_fmsubadd_ph(__A, __B, __C, __U); } __m512h test_mm512_mask_fnmadd_round_ph(__m512h __A, __mmask32 __U, __m512h __B, __m512h __C) { - // CHECK-LABEL: @test_mm512_mask_fnmadd_round_ph + // CHECK-LABEL: test_mm512_mask_fnmadd_round_ph // CHECK: fneg // CHECK: @llvm.x86.avx512fp16.vfmadd.ph.512 // CHECK: bitcast i32 %{{.*}} to <32 x i1> @@ -3588,16 +3621,16 @@ __m512h test_mm512_mask_fnmadd_round_ph(__m512h __A, __mmask32 __U, __m512h __B, } __m512h test_mm512_mask_fnmadd_ph(__m512h __A, __mmask32 __U, __m512h __B, __m512h __C) { - // CHECK-LABEL: @test_mm512_mask_fnmadd_ph + // CHECK-LABEL: test_mm512_mask_fnmadd_ph // CHECK: fneg - // CHECK: call <32 x half> @llvm.fma.v32f16(<32 x half> %{{.*}}, <32 x half> %{{.*}}, <32 x half> %{{.*}}) + // CHECK: @llvm.fma.v32f16(<32 x half> %{{.*}}, <32 x half> %{{.*}}, <32 x half> %{{.*}}) // CHECK: bitcast i32 %{{.*}} to <32 x i1> // CHECK: select <32 x i1> %{{.*}}, <32 x half> %{{.*}}, <32 x half> %{{.*}} return _mm512_mask_fnmadd_ph(__A, __U, __B, __C); } __m512h test_mm512_mask_fnmsub_round_ph(__m512h __A, __mmask32 __U, __m512h __B, __m512h __C) { - // CHECK-LABEL: @test_mm512_mask_fnmsub_round_ph + // CHECK-LABEL: test_mm512_mask_fnmsub_round_ph // CHECK: fneg // CHECK: fneg // CHECK: @llvm.x86.avx512fp16.vfmadd.ph.512 @@ -3607,7 +3640,7 @@ __m512h test_mm512_mask_fnmsub_round_ph(__m512h __A, __mmask32 __U, __m512h __B, } __m512h test_mm512_mask3_fnmsub_round_ph(__m512h __A, __m512h __B, __m512h __C, __mmask32 __U) { - // CHECK-LABEL: @test_mm512_mask3_fnmsub_round_ph + // CHECK-LABEL: test_mm512_mask3_fnmsub_round_ph // CHECK: fneg // CHECK: fneg // CHECK: @llvm.x86.avx512fp16.vfmadd.ph.512 @@ -3617,27 +3650,27 @@ __m512h test_mm512_mask3_fnmsub_round_ph(__m512h __A, __m512h __B, __m512h __C, } __m512h test_mm512_mask_fnmsub_ph(__m512h __A, __mmask32 __U, __m512h __B, __m512h __C) { - // CHECK-LABEL: @test_mm512_mask_fnmsub_ph + // CHECK-LABEL: test_mm512_mask_fnmsub_ph // CHECK: fneg // CHECK: fneg - // CHECK: call <32 x half> @llvm.fma.v32f16(<32 x half> %{{.*}}, <32 x half> %{{.*}}, <32 x half> %{{.*}}) + // CHECK: @llvm.fma.v32f16(<32 x half> %{{.*}}, <32 x half> %{{.*}}, <32 x half> %{{.*}}) // CHECK: bitcast i32 %{{.*}} to <32 x i1> // CHECK: select <32 x i1> %{{.*}}, <32 x half> %{{.*}}, <32 x half> %{{.*}} return _mm512_mask_fnmsub_ph(__A, __U, __B, __C); } __m512h test_mm512_mask3_fnmsub_ph(__m512h __A, __m512h __B, __m512h __C, __mmask32 __U) { - // CHECK-LABEL: @test_mm512_mask3_fnmsub_ph + // CHECK-LABEL: test_mm512_mask3_fnmsub_ph // CHECK: fneg // CHECK: fneg - // CHECK: call <32 x half> @llvm.fma.v32f16(<32 x half> %{{.*}}, <32 x half> %{{.*}}, <32 x half> %{{.*}}) + // CHECK: @llvm.fma.v32f16(<32 x half> %{{.*}}, <32 x half> %{{.*}}, <32 x half> %{{.*}}) // CHECK: bitcast i32 %{{.*}} to <32 x i1> // CHECK: select <32 x i1> %{{.*}}, <32 x half> %{{.*}}, <32 x half> %{{.*}} return _mm512_mask3_fnmsub_ph(__A, __B, __C, __U); } __m128h test_mm_fmadd_sh(__m128h __W, __m128h __A, __m128h __B) { - // CHECK-LABEL: @test_mm_fmadd_sh + // CHECK-LABEL: test_mm_fmadd_sh // CHECK: [[A:%.+]] = extractelement <8 x half> [[ORIGA:%.+]], i64 0 // CHECK-NEXT: [[B:%.+]] = extractelement <8 x half> %{{.*}}, i64 0 // CHECK-NEXT: [[C:%.+]] = extractelement <8 x half> %{{.*}}, i64 0 @@ -3646,7 +3679,7 @@ __m128h test_mm_fmadd_sh(__m128h __W, __m128h __A, __m128h __B) { } __m128h test_mm_mask_fmadd_sh(__m128h __W, __mmask8 __U, __m128h __A, __m128h __B) { - // CHECK-LABEL: @test_mm_mask_fmadd_sh + // CHECK-LABEL: test_mm_mask_fmadd_sh // CHECK: [[A:%.+]] = extractelement <8 x half> [[ORIGA:%.+]], i64 0 // CHECK-NEXT: [[B:%.+]] = extractelement <8 x half> %{{.*}}, i64 0 // CHECK-NEXT: [[C:%.+]] = extractelement <8 x half> %{{.*}}, i64 0 @@ -3659,7 +3692,7 @@ __m128h test_mm_mask_fmadd_sh(__m128h __W, __mmask8 __U, __m128h __A, __m128h __ } __m128h test_mm_fmadd_round_sh(__m128h __A, __m128h __B, __m128h __C) { - // CHECK-LABEL: @test_mm_fmadd_round_sh + // CHECK-LABEL: test_mm_fmadd_round_sh // CHECK: [[A:%.+]] = extractelement <8 x half> [[ORIGA:%.+]], i64 0 // CHECK-NEXT: [[B:%.+]] = extractelement <8 x half> %{{.*}}, i64 0 // CHECK-NEXT: [[C:%.+]] = extractelement <8 x half> %{{.*}}, i64 0 @@ -3669,7 +3702,7 @@ __m128h test_mm_fmadd_round_sh(__m128h __A, __m128h __B, __m128h __C) { } __m128h test_mm_mask_fmadd_round_sh(__m128h __W, __mmask8 __U, __m128h __A, __m128h __B) { - // CHECK-LABEL: @test_mm_mask_fmadd_round_sh + // CHECK-LABEL: test_mm_mask_fmadd_round_sh // CHECK: [[A:%.+]] = extractelement <8 x half> [[ORIGA:%.+]], i64 0 // CHECK-NEXT: [[B:%.+]] = extractelement <8 x half> %{{.*}}, i64 0 // CHECK-NEXT: [[C:%.+]] = extractelement <8 x half> %{{.*}}, i64 0 @@ -3682,7 +3715,7 @@ __m128h test_mm_mask_fmadd_round_sh(__m128h __W, __mmask8 __U, __m128h __A, __m1 } __m128h test_mm_maskz_fmadd_sh(__mmask8 __U, __m128h __A, __m128h __B, __m128h __C) { - // CHECK-LABEL: @test_mm_maskz_fmadd_sh + // CHECK-LABEL: test_mm_maskz_fmadd_sh // CHECK: [[A:%.+]] = extractelement <8 x half> [[ORIGA:%.+]], i64 0 // CHECK-NEXT: [[B:%.+]] = extractelement <8 x half> %{{.*}}, i64 0 // CHECK-NEXT: [[C:%.+]] = extractelement <8 x half> %{{.*}}, i64 0 @@ -3695,7 +3728,7 @@ __m128h test_mm_maskz_fmadd_sh(__mmask8 __U, __m128h __A, __m128h __B, __m128h _ } __m128h test_mm_maskz_fmadd_round_sh(__mmask8 __U, __m128h __A, __m128h __B, __m128h __C) { - // CHECK-LABEL: @test_mm_maskz_fmadd_round_sh + // CHECK-LABEL: test_mm_maskz_fmadd_round_sh // CHECK: [[A:%.+]] = extractelement <8 x half> [[ORIGA:%.+]], i64 0 // CHECK-NEXT: [[B:%.+]] = extractelement <8 x half> %{{.*}}, i64 0 // CHECK-NEXT: [[C:%.+]] = extractelement <8 x half> %{{.*}}, i64 0 @@ -3708,7 +3741,7 @@ __m128h test_mm_maskz_fmadd_round_sh(__mmask8 __U, __m128h __A, __m128h __B, __m } __m128h test_mm_mask3_fmadd_sh(__m128h __W, __m128h __X, __m128h __Y, __mmask8 __U) { - // CHECK-LABEL: @test_mm_mask3_fmadd_sh + // CHECK-LABEL: test_mm_mask3_fmadd_sh // CHECK: [[A:%.+]] = extractelement <8 x half> %{{.*}}, i64 0 // CHECK-NEXT: [[B:%.+]] = extractelement <8 x half> %{{.*}}, i64 0 // CHECK-NEXT: [[C:%.+]] = extractelement <8 x half> [[ORIGC:%.+]], i64 0 @@ -3721,7 +3754,7 @@ __m128h test_mm_mask3_fmadd_sh(__m128h __W, __m128h __X, __m128h __Y, __mmask8 _ } __m128h test_mm_mask3_fmadd_round_sh(__m128h __W, __m128h __X, __m128h __Y, __mmask8 __U) { - // CHECK-LABEL: @test_mm_mask3_fmadd_round_sh + // CHECK-LABEL: test_mm_mask3_fmadd_round_sh // CHECK: [[A:%.+]] = extractelement <8 x half> %{{.*}}, i64 0 // CHECK-NEXT: [[B:%.+]] = extractelement <8 x half> %{{.*}}, i64 0 // CHECK-NEXT: [[C:%.+]] = extractelement <8 x half> [[ORIGC:%.+]], i64 0 @@ -3734,7 +3767,7 @@ __m128h test_mm_mask3_fmadd_round_sh(__m128h __W, __m128h __X, __m128h __Y, __mm } __m128h test_mm_fmsub_sh(__m128h __W, __m128h __A, __m128h __B) { - // CHECK-LABEL: @test_mm_fmsub_sh + // CHECK-LABEL: test_mm_fmsub_sh // CHECK: %{{.*}} = fneg <8 x half> %{{.*}} // CHECK-NEXT: %{{.*}} = extractelement <8 x half> %{{.*}}, i64 0 // CHECK-NEXT: %{{.*}} = extractelement <8 x half> %{{.*}}, i64 0 @@ -3746,7 +3779,7 @@ __m128h test_mm_fmsub_sh(__m128h __W, __m128h __A, __m128h __B) { } __m128h test_mm_mask_fmsub_sh(__m128h __W, __mmask8 __U, __m128h __A, __m128h __B) { - // CHECK-LABEL: @test_mm_mask_fmsub_sh + // CHECK-LABEL: test_mm_mask_fmsub_sh // CHECK: %{{.*}} = fneg <8 x half> %{{.*}} // CHECK: %{{.*}} = extractelement <8 x half> %{{.*}}, i64 0 // CHECK-NEXT: %{{.*}} = extractelement <8 x half> %{{.*}}, i64 0 @@ -3761,7 +3794,7 @@ __m128h test_mm_mask_fmsub_sh(__m128h __W, __mmask8 __U, __m128h __A, __m128h __ } __m128h test_mm_fmsub_round_sh(__m128h __A, __m128h __B, __m128h __C) { - // CHECK-LABEL: @test_mm_fmsub_round_sh + // CHECK-LABEL: test_mm_fmsub_round_sh // CHECK: %{{.*}} = fneg <8 x half> %{{.*}} // CHECK-NEXT: %{{.*}} = extractelement <8 x half> %{{.*}}, i64 0 // CHECK-NEXT: %{{.*}} = extractelement <8 x half> %{{.*}}, i64 0 @@ -3773,7 +3806,7 @@ __m128h test_mm_fmsub_round_sh(__m128h __A, __m128h __B, __m128h __C) { } __m128h test_mm_mask_fmsub_round_sh(__m128h __W, __mmask8 __U, __m128h __A, __m128h __B) { - // CHECK-LABEL: @test_mm_mask_fmsub_round_sh + // CHECK-LABEL: test_mm_mask_fmsub_round_sh // CHECK: %{{.*}} = fneg <8 x half> %{{.*}} // CHECK: %{{.*}} = extractelement <8 x half> %{{.*}}, i64 0 // CHECK-NEXT: %{{.*}} = extractelement <8 x half> %{{.*}}, i64 0 @@ -3788,7 +3821,7 @@ __m128h test_mm_mask_fmsub_round_sh(__m128h __W, __mmask8 __U, __m128h __A, __m1 } __m128h test_mm_maskz_fmsub_sh(__mmask8 __U, __m128h __A, __m128h __B, __m128h __C) { - // CHECK-LABEL: @test_mm_maskz_fmsub_sh + // CHECK-LABEL: test_mm_maskz_fmsub_sh // CHECK: %{{.*}} = fneg <8 x half> %{{.*}} // CHECK: %{{.*}} = extractelement <8 x half> %{{.*}}, i64 0 // CHECK-NEXT: %{{.*}} = extractelement <8 x half> %{{.*}}, i64 0 @@ -3803,7 +3836,7 @@ __m128h test_mm_maskz_fmsub_sh(__mmask8 __U, __m128h __A, __m128h __B, __m128h _ } __m128h test_mm_maskz_fmsub_round_sh(__mmask8 __U, __m128h __A, __m128h __B, __m128h __C) { - // CHECK-LABEL: @test_mm_maskz_fmsub_round_sh + // CHECK-LABEL: test_mm_maskz_fmsub_round_sh // CHECK: %{{.*}} = fneg <8 x half> %{{.*}} // CHECK: %{{.*}} = extractelement <8 x half> %{{.*}}, i64 0 // CHECK-NEXT: %{{.*}} = extractelement <8 x half> %{{.*}}, i64 0 @@ -3818,7 +3851,7 @@ __m128h test_mm_maskz_fmsub_round_sh(__mmask8 __U, __m128h __A, __m128h __B, __m } __m128h test_mm_mask3_fmsub_sh(__m128h __W, __m128h __X, __m128h __Y, __mmask8 __U) { - // CHECK-LABEL: @test_mm_mask3_fmsub_sh + // CHECK-LABEL: test_mm_mask3_fmsub_sh // CHECK: [[NEG:%.+]] = fneg // CHECK: [[A:%.+]] = extractelement <8 x half> %{{.*}}, i64 0 // CHECK-NEXT: [[B:%.+]] = extractelement <8 x half> %{{.*}}, i64 0 @@ -3833,7 +3866,7 @@ __m128h test_mm_mask3_fmsub_sh(__m128h __W, __m128h __X, __m128h __Y, __mmask8 _ } __m128h test_mm_mask3_fmsub_round_sh(__m128h __W, __m128h __X, __m128h __Y, __mmask8 __U) { - // CHECK-LABEL: @test_mm_mask3_fmsub_round_sh + // CHECK-LABEL: test_mm_mask3_fmsub_round_sh // CHECK: [[NEG:%.+]] = fneg // CHECK: [[A:%.+]] = extractelement <8 x half> %{{.*}}, i64 0 // CHECK-NEXT: [[B:%.+]] = extractelement <8 x half> %{{.*}}, i64 0 @@ -3848,7 +3881,7 @@ __m128h test_mm_mask3_fmsub_round_sh(__m128h __W, __m128h __X, __m128h __Y, __mm } __m128h test_mm_fnmadd_sh(__m128h __W, __m128h __A, __m128h __B) { - // CHECK-LABEL: @test_mm_fnmadd_sh + // CHECK-LABEL: test_mm_fnmadd_sh // CHECK: [[NEG:%.+]] = fneg // CHECK: [[A:%.+]] = extractelement <8 x half> [[ORIGA:%.+]], i64 0 // CHECK-NEXT: [[B:%.+]] = extractelement <8 x half> %{{.*}}, i64 0 @@ -3858,7 +3891,7 @@ __m128h test_mm_fnmadd_sh(__m128h __W, __m128h __A, __m128h __B) { } __m128h test_mm_mask_fnmadd_sh(__m128h __W, __mmask8 __U, __m128h __A, __m128h __B) { - // CHECK-LABEL: @test_mm_mask_fnmadd_sh + // CHECK-LABEL: test_mm_mask_fnmadd_sh // CHECK: [[NEG:%.+]] = fneg // CHECK: [[A:%.+]] = extractelement <8 x half> [[ORIGA:%.+]], i64 0 // CHECK-NEXT: [[B:%.+]] = extractelement <8 x half> %{{.*}}, i64 0 @@ -3872,7 +3905,7 @@ __m128h test_mm_mask_fnmadd_sh(__m128h __W, __mmask8 __U, __m128h __A, __m128h _ } __m128h test_mm_fnmadd_round_sh(__m128h __A, __m128h __B, __m128h __C) { - // CHECK-LABEL: @test_mm_fnmadd_round_sh + // CHECK-LABEL: test_mm_fnmadd_round_sh // CHECK: [[NEG:%.+]] = fneg // CHECK: [[A:%.+]] = extractelement <8 x half> [[ORIGA:%.+]], i64 0 // CHECK-NEXT: [[B:%.+]] = extractelement <8 x half> %{{.*}}, i64 0 @@ -3883,7 +3916,7 @@ __m128h test_mm_fnmadd_round_sh(__m128h __A, __m128h __B, __m128h __C) { } __m128h test_mm_mask_fnmadd_round_sh(__m128h __W, __mmask8 __U, __m128h __A, __m128h __B) { - // CHECK-LABEL: @test_mm_mask_fnmadd_round_sh + // CHECK-LABEL: test_mm_mask_fnmadd_round_sh // CHECK: [[NEG:%.+]] = fneg // CHECK: [[A:%.+]] = extractelement <8 x half> [[ORIGA:%.+]], i64 0 // CHECK-NEXT: [[B:%.+]] = extractelement <8 x half> %{{.*}}, i64 0 @@ -3897,7 +3930,7 @@ __m128h test_mm_mask_fnmadd_round_sh(__m128h __W, __mmask8 __U, __m128h __A, __m } __m128h test_mm_maskz_fnmadd_sh(__mmask8 __U, __m128h __A, __m128h __B, __m128h __C) { - // CHECK-LABEL: @test_mm_maskz_fnmadd_sh + // CHECK-LABEL: test_mm_maskz_fnmadd_sh // CHECK: [[NEG:%.+]] = fneg // CHECK: [[A:%.+]] = extractelement <8 x half> [[ORIGA:%.+]], i64 0 // CHECK-NEXT: [[B:%.+]] = extractelement <8 x half> %{{.*}}, i64 0 @@ -3911,7 +3944,7 @@ __m128h test_mm_maskz_fnmadd_sh(__mmask8 __U, __m128h __A, __m128h __B, __m128h } __m128h test_mm_maskz_fnmadd_round_sh(__mmask8 __U, __m128h __A, __m128h __B, __m128h __C) { - // CHECK-LABEL: @test_mm_maskz_fnmadd_round_sh + // CHECK-LABEL: test_mm_maskz_fnmadd_round_sh // CHECK: [[NEG:%.+]] = fneg // CHECK: [[A:%.+]] = extractelement <8 x half> [[ORIGA:%.+]], i64 0 // CHECK-NEXT: [[B:%.+]] = extractelement <8 x half> %{{.*}}, i64 0 @@ -3925,7 +3958,7 @@ __m128h test_mm_maskz_fnmadd_round_sh(__mmask8 __U, __m128h __A, __m128h __B, __ } __m128h test_mm_mask3_fnmadd_sh(__m128h __W, __m128h __X, __m128h __Y, __mmask8 __U) { - // CHECK-LABEL: @test_mm_mask3_fnmadd_sh + // CHECK-LABEL: test_mm_mask3_fnmadd_sh // CHECK: [[NEG:%.+]] = fneg // CHECK: [[A:%.+]] = extractelement <8 x half> %{{.*}}, i64 0 // CHECK-NEXT: [[B:%.+]] = extractelement <8 x half> %{{.*}}, i64 0 @@ -3939,7 +3972,7 @@ __m128h test_mm_mask3_fnmadd_sh(__m128h __W, __m128h __X, __m128h __Y, __mmask8 } __m128h test_mm_mask3_fnmadd_round_sh(__m128h __W, __m128h __X, __m128h __Y, __mmask8 __U) { - // CHECK-LABEL: @test_mm_mask3_fnmadd_round_sh + // CHECK-LABEL: test_mm_mask3_fnmadd_round_sh // CHECK: [[NEG:%.+]] = fneg // CHECK: [[A:%.+]] = extractelement <8 x half> %{{.*}}, i64 0 // CHECK-NEXT: [[B:%.+]] = extractelement <8 x half> %{{.*}}, i64 0 @@ -3953,7 +3986,7 @@ __m128h test_mm_mask3_fnmadd_round_sh(__m128h __W, __m128h __X, __m128h __Y, __m } __m128h test_mm_fnmsub_sh(__m128h __W, __m128h __A, __m128h __B) { - // CHECK-LABEL: @test_mm_fnmsub_sh + // CHECK-LABEL: test_mm_fnmsub_sh // CHECK: [[NEG:%.+]] = fneg // CHECK: [[NEG2:%.+]] = fneg // CHECK: [[A:%.+]] = extractelement <8 x half> [[ORIGA:%.+]], i64 0 @@ -3964,7 +3997,7 @@ __m128h test_mm_fnmsub_sh(__m128h __W, __m128h __A, __m128h __B) { } __m128h test_mm_mask_fnmsub_sh(__m128h __W, __mmask8 __U, __m128h __A, __m128h __B) { - // CHECK-LABEL: @test_mm_mask_fnmsub_sh + // CHECK-LABEL: test_mm_mask_fnmsub_sh // CHECK: [[NEG:%.+]] = fneg // CHECK: [[NEG2:%.+]] = fneg // CHECK: [[A:%.+]] = extractelement <8 x half> [[ORIGA:%.+]], i64 0 @@ -3979,7 +4012,7 @@ __m128h test_mm_mask_fnmsub_sh(__m128h __W, __mmask8 __U, __m128h __A, __m128h _ } __m128h test_mm_fnmsub_round_sh(__m128h __A, __m128h __B, __m128h __C) { - // CHECK-LABEL: @test_mm_fnmsub_round_sh + // CHECK-LABEL: test_mm_fnmsub_round_sh // CHECK: [[NEG:%.+]] = fneg // CHECK: [[NEG2:%.+]] = fneg // CHECK: [[A:%.+]] = extractelement <8 x half> [[ORIGA:%.+]], i64 0 @@ -3991,7 +4024,7 @@ __m128h test_mm_fnmsub_round_sh(__m128h __A, __m128h __B, __m128h __C) { } __m128h test_mm_mask_fnmsub_round_sh(__m128h __W, __mmask8 __U, __m128h __A, __m128h __B) { - // CHECK-LABEL: @test_mm_mask_fnmsub_round_sh + // CHECK-LABEL: test_mm_mask_fnmsub_round_sh // CHECK: [[NEG:%.+]] = fneg // CHECK: [[NEG2:%.+]] = fneg // CHECK: [[A:%.+]] = extractelement <8 x half> [[ORIGA:%.+]], i64 0 @@ -4006,7 +4039,7 @@ __m128h test_mm_mask_fnmsub_round_sh(__m128h __W, __mmask8 __U, __m128h __A, __m } __m128h test_mm_maskz_fnmsub_sh(__mmask8 __U, __m128h __A, __m128h __B, __m128h __C) { - // CHECK-LABEL: @test_mm_maskz_fnmsub_sh + // CHECK-LABEL: test_mm_maskz_fnmsub_sh // CHECK: [[NEG:%.+]] = fneg // CHECK: [[NEG2:%.+]] = fneg // CHECK: [[A:%.+]] = extractelement <8 x half> [[ORIGA:%.+]], i64 0 @@ -4021,7 +4054,7 @@ __m128h test_mm_maskz_fnmsub_sh(__mmask8 __U, __m128h __A, __m128h __B, __m128h } __m128h test_mm_maskz_fnmsub_round_sh(__mmask8 __U, __m128h __A, __m128h __B, __m128h __C) { - // CHECK-LABEL: @test_mm_maskz_fnmsub_round_sh + // CHECK-LABEL: test_mm_maskz_fnmsub_round_sh // CHECK: [[NEG:%.+]] = fneg // CHECK: [[NEG2:%.+]] = fneg // CHECK: [[A:%.+]] = extractelement <8 x half> [[ORIGA:%.+]], i64 0 @@ -4036,7 +4069,7 @@ __m128h test_mm_maskz_fnmsub_round_sh(__mmask8 __U, __m128h __A, __m128h __B, __ } __m128h test_mm_mask3_fnmsub_sh(__m128h __W, __m128h __X, __m128h __Y, __mmask8 __U) { - // CHECK-LABEL: @test_mm_mask3_fnmsub_sh + // CHECK-LABEL: test_mm_mask3_fnmsub_sh // CHECK: [[NEG:%.+]] = fneg // CHECK: [[NEG2:%.+]] = fneg // CHECK: [[A:%.+]] = extractelement <8 x half> %{{.*}}, i64 0 @@ -4052,7 +4085,7 @@ __m128h test_mm_mask3_fnmsub_sh(__m128h __W, __m128h __X, __m128h __Y, __mmask8 } __m128h test_mm_mask3_fnmsub_round_sh(__m128h __W, __m128h __X, __m128h __Y, __mmask8 __U) { - // CHECK-LABEL: @test_mm_mask3_fnmsub_round_sh + // CHECK-LABEL: test_mm_mask3_fnmsub_round_sh // CHECK: [[NEG:%.+]] = fneg // CHECK: [[NEG2:%.+]] = fneg // CHECK: [[A:%.+]] = extractelement <8 x half> %{{.*}}, i64 0 @@ -4068,13 +4101,13 @@ __m128h test_mm_mask3_fnmsub_round_sh(__m128h __W, __m128h __X, __m128h __Y, __m } __m128h test_mm_fcmadd_sch(__m128h __A, __m128h __B, __m128h __C) { - // CHECK-LABEL: @test_mm_fcmadd_sch + // CHECK-LABEL: test_mm_fcmadd_sch // CHECK: @llvm.x86.avx512fp16.mask.vfcmadd.csh return _mm_fcmadd_sch(__A, __B, __C); } __m128h test_mm_mask_fcmadd_sch(__m128h __A, __mmask8 __U, __m128h __B, __m128h __C) { - // CHECK-LABEL: @test_mm_mask_fcmadd_sch + // CHECK-LABEL: test_mm_mask_fcmadd_sch // CHECK: @llvm.x86.avx512fp16.mask.vfcmadd.csh // CHECK: %{{.*}} = shufflevector <8 x i1> %{{.*}}, <8 x i1> %{{.*}}, <4 x i32> <i32 0, i32 1, i32 2, i32 3> // CHECK: %{{.*}} = select <4 x i1> %{{.*}}, <4 x float> %{{.*}}, <4 x float> %{{.*}} @@ -4082,13 +4115,13 @@ __m128h test_mm_mask_fcmadd_sch(__m128h __A, __mmask8 __U, __m128h __B, __m128h } __m128h test_mm_maskz_fcmadd_sch(__mmask8 __U, __m128h __A, __m128h __B, __m128h __C) { - // CHECK-LABEL: @test_mm_maskz_fcmadd_sch + // CHECK-LABEL: test_mm_maskz_fcmadd_sch // CHECK: @llvm.x86.avx512fp16.maskz.vfcmadd.csh return _mm_maskz_fcmadd_sch(__U, __A, __B, __C); } __m128h test_mm_mask3_fcmadd_sch(__m128h __A, __m128h __B, __m128h __C, __mmask8 __U) { - // CHECK-LABEL: @test_mm_mask3_fcmadd_sch + // CHECK-LABEL: test_mm_mask3_fcmadd_sch // CHECK: %{{.*}} = bitcast <8 x half> %{{.*}} to <4 x float> // CHECK: %{{.*}} = bitcast <8 x half> %{{.*}} to <4 x float> // CHECK: %{{.*}} = bitcast <8 x half> %{{.*}} to <4 x float> @@ -4099,13 +4132,13 @@ __m128h test_mm_mask3_fcmadd_sch(__m128h __A, __m128h __B, __m128h __C, __mmask8 } __m128h test_mm_fcmadd_round_sch(__m128h __A, __m128h __B, __m128h __C) { - // CHECK-LABEL: @test_mm_fcmadd_round_sch + // CHECK-LABEL: test_mm_fcmadd_round_sch // CHECK: @llvm.x86.avx512fp16.mask.vfcmadd.csh return _mm_fcmadd_round_sch(__A, __B, __C, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC); } __m128h test_mm_mask_fcmadd_round_sch(__m128h __A, __mmask8 __U, __m128h __B, __m128h __C) { - // CHECK-LABEL: @test_mm_mask_fcmadd_round_sch + // CHECK-LABEL: test_mm_mask_fcmadd_round_sch // CHECK: @llvm.x86.avx512fp16.mask.vfcmadd.csh // CHECK: %{{.*}} = shufflevector <8 x i1> %{{.*}}, <8 x i1> %{{.*}}, <4 x i32> <i32 0, i32 1, i32 2, i32 3> // CHECK: %{{.*}} = select <4 x i1> %{{.*}}, <4 x float> %{{.*}}, <4 x float> %{{.*}} @@ -4113,13 +4146,13 @@ __m128h test_mm_mask_fcmadd_round_sch(__m128h __A, __mmask8 __U, __m128h __B, __ } __m128h test_mm_maskz_fcmadd_round_sch(__mmask8 __U, __m128h __A, __m128h __B, __m128h __C) { - // CHECK-LABEL: @test_mm_maskz_fcmadd_round_sch + // CHECK-LABEL: test_mm_maskz_fcmadd_round_sch // CHECK: @llvm.x86.avx512fp16.maskz.vfcmadd.csh return _mm_maskz_fcmadd_round_sch(__U, __A, __B, __C, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC); } __m128h test_mm_mask3_fcmadd_round_sch(__m128h __A, __m128h __B, __m128h __C, __mmask8 __U) { - // CHECK-LABEL: @test_mm_mask3_fcmadd_round_sch + // CHECK-LABEL: test_mm_mask3_fcmadd_round_sch // CHECK: %{{.*}} = bitcast <8 x half> %{{.*}} to <4 x float> // CHECK: %{{.*}} = bitcast <8 x half> %{{.*}} to <4 x float> // CHECK: %{{.*}} = bitcast <8 x half> %{{.*}} to <4 x float> @@ -4130,13 +4163,13 @@ __m128h test_mm_mask3_fcmadd_round_sch(__m128h __A, __m128h __B, __m128h __C, __ } __m128h test_mm_fmadd_sch(__m128h __A, __m128h __B, __m128h __C) { - // CHECK-LABEL: @test_mm_fmadd_sch + // CHECK-LABEL: test_mm_fmadd_sch // CHECK: @llvm.x86.avx512fp16.mask.vfmadd.csh return _mm_fmadd_sch(__A, __B, __C); } __m128h test_mm_mask_fmadd_sch(__m128h __A, __mmask8 __U, __m128h __B, __m128h __C) { - // CHECK-LABEL: @test_mm_mask_fmadd_sch + // CHECK-LABEL: test_mm_mask_fmadd_sch // CHECK: @llvm.x86.avx512fp16.mask.vfmadd.csh // CHECK: %{{.*}} = shufflevector <8 x i1> %{{.*}}, <8 x i1> %{{.*}}, <4 x i32> <i32 0, i32 1, i32 2, i32 3> // CHECK: %{{.*}} = select <4 x i1> %{{.*}}, <4 x float> %{{.*}}, <4 x float> %{{.*}} @@ -4144,13 +4177,13 @@ __m128h test_mm_mask_fmadd_sch(__m128h __A, __mmask8 __U, __m128h __B, __m128h _ } __m128h test_mm_maskz_fmadd_sch(__mmask8 __U, __m128h __A, __m128h __B, __m128h __C) { - // CHECK-LABEL: @test_mm_maskz_fmadd_sch + // CHECK-LABEL: test_mm_maskz_fmadd_sch // CHECK: @llvm.x86.avx512fp16.maskz.vfmadd.csh return _mm_maskz_fmadd_sch(__U, __A, __B, __C); } __m128h test_mm_mask3_fmadd_sch(__m128h __A, __m128h __B, __m128h __C, __mmask8 __U) { - // CHECK-LABEL: @test_mm_mask3_fmadd_sch + // CHECK-LABEL: test_mm_mask3_fmadd_sch // CHECK: %{{.*}} = bitcast <8 x half> %{{.*}} to <4 x float> // CHECK: %{{.*}} = bitcast <8 x half> %{{.*}} to <4 x float> // CHECK: %{{.*}} = bitcast <8 x half> %{{.*}} to <4 x float> @@ -4161,13 +4194,13 @@ __m128h test_mm_mask3_fmadd_sch(__m128h __A, __m128h __B, __m128h __C, __mmask8 } __m128h test_mm_fmadd_round_sch(__m128h __A, __m128h __B, __m128h __C) { - // CHECK-LABEL: @test_mm_fmadd_round_sch + // CHECK-LABEL: test_mm_fmadd_round_sch // CHECK: @llvm.x86.avx512fp16.mask.vfmadd.csh return _mm_fmadd_round_sch(__A, __B, __C, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC); } __m128h test_mm_mask_fmadd_round_sch(__m128h __A, __mmask8 __U, __m128h __B, __m128h __C) { - // CHECK-LABEL: @test_mm_mask_fmadd_round_sch + // CHECK-LABEL: test_mm_mask_fmadd_round_sch // CHECK: @llvm.x86.avx512fp16.mask.vfmadd.csh // CHECK: %{{.*}} = shufflevector <8 x i1> %{{.*}}, <8 x i1> %{{.*}}, <4 x i32> <i32 0, i32 1, i32 2, i32 3> // CHECK: %{{.*}} = select <4 x i1> %{{.*}}, <4 x float> %{{.*}}, <4 x float> %{{.*}} @@ -4175,13 +4208,13 @@ __m128h test_mm_mask_fmadd_round_sch(__m128h __A, __mmask8 __U, __m128h __B, __m } __m128h test_mm_maskz_fmadd_round_sch(__mmask8 __U, __m128h __A, __m128h __B, __m128h __C) { - // CHECK-LABEL: @test_mm_maskz_fmadd_round_sch + // CHECK-LABEL: test_mm_maskz_fmadd_round_sch // CHECK: @llvm.x86.avx512fp16.maskz.vfmadd.csh return _mm_maskz_fmadd_round_sch(__U, __A, __B, __C, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC); } __m128h test_mm_mask3_fmadd_round_sch(__m128h __A, __m128h __B, __m128h __C, __mmask8 __U) { - // CHECK-LABEL: @test_mm_mask3_fmadd_round_sch + // CHECK-LABEL: test_mm_mask3_fmadd_round_sch // CHECK: %{{.*}} = bitcast <8 x half> %{{.*}} to <4 x float> // CHECK: %{{.*}} = bitcast <8 x half> %{{.*}} to <4 x float> // CHECK: %{{.*}} = bitcast <8 x half> %{{.*}} to <4 x float> @@ -4192,286 +4225,286 @@ __m128h test_mm_mask3_fmadd_round_sch(__m128h __A, __m128h __B, __m128h __C, __m } __m128h test_mm_fcmul_sch(__m128h __A, __m128h __B) { - // CHECK-LABEL: @test_mm_fcmul_sch + // CHECK-LABEL: test_mm_fcmul_sch // CHECK: @llvm.x86.avx512fp16.mask.vfcmul.csh return _mm_fcmul_sch(__A, __B); } __m128h test_mm_mask_fcmul_sch(__m128h __W, __mmask8 __U, __m128h __A, __m128h __B) { - // CHECK-LABEL: @test_mm_mask_fcmul_sch + // CHECK-LABEL: test_mm_mask_fcmul_sch // CHECK: @llvm.x86.avx512fp16.mask.vfcmul.csh return _mm_mask_fcmul_sch(__W, __U, __A, __B); } __m128h test_mm_maskz_fcmul_sch(__mmask8 __U, __m128h __A, __m128h __B) { - // CHECK-LABEL: @test_mm_maskz_fcmul_sch + // CHECK-LABEL: test_mm_maskz_fcmul_sch // CHECK: @llvm.x86.avx512fp16.mask.vfcmul.csh return _mm_maskz_fcmul_sch(__U, __A, __B); } __m128h test_mm_fcmul_round_sch(__m128h __A, __m128h __B) { - // CHECK-LABEL: @test_mm_fcmul_round_sch + // CHECK-LABEL: test_mm_fcmul_round_sch // CHECK: @llvm.x86.avx512fp16.mask.vfcmul.csh return _mm_fcmul_round_sch(__A, __B, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC); } __m128h test_mm_mask_fcmul_round_sch(__m128h __W, __mmask8 __U, __m128h __A, __m128h __B) { - // CHECK-LABEL: @test_mm_mask_fcmul_round_sch + // CHECK-LABEL: test_mm_mask_fcmul_round_sch // CHECK: @llvm.x86.avx512fp16.mask.vfcmul.csh return _mm_mask_fcmul_round_sch(__W, __U, __A, __B, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC); } __m128h test_mm_maskz_fcmul_round_sch(__mmask8 __U, __m128h __A, __m128h __B) { - // CHECK-LABEL: @test_mm_maskz_fcmul_round_sch + // CHECK-LABEL: test_mm_maskz_fcmul_round_sch // CHECK: @llvm.x86.avx512fp16.mask.vfcmul.csh return _mm_maskz_fcmul_round_sch(__U, __A, __B, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC); } __m512h test_mm512_fcmul_pch(__m512h __A, __m512h __B) { - // CHECK-LABEL: @test_mm512_fcmul_pch + // CHECK-LABEL: test_mm512_fcmul_pch // CHECK: @llvm.x86.avx512fp16.mask.vfcmul.cph.512 return _mm512_fcmul_pch(__A, __B); } __m512h test_mm512_mask_fcmul_pch(__m512h __W, __mmask16 __U, __m512h __A, __m512h __B) { - // CHECK-LABEL: @test_mm512_mask_fcmul_pch + // CHECK-LABEL: test_mm512_mask_fcmul_pch // CHECK: @llvm.x86.avx512fp16.mask.vfcmul.cph.512 return _mm512_mask_fcmul_pch(__W, __U, __A, __B); } __m512h test_mm512_maskz_fcmul_pch(__mmask16 __U, __m512h __A, __m512h __B) { - // CHECK-LABEL: @test_mm512_maskz_fcmul_pch + // CHECK-LABEL: test_mm512_maskz_fcmul_pch // CHECK: @llvm.x86.avx512fp16.mask.vfcmul.cph.512 return _mm512_maskz_fcmul_pch(__U, __A, __B); } __m512h test_mm512_fcmul_round_pch(__m512h __A, __m512h __B) { - // CHECK-LABEL: @test_mm512_fcmul_round_pch + // CHECK-LABEL: test_mm512_fcmul_round_pch // CHECK: @llvm.x86.avx512fp16.mask.vfcmul.cph.512 return _mm512_fcmul_round_pch(__A, __B, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC); } __m512h test_mm512_mask_fcmul_round_pch(__m512h __W, __mmask16 __U, __m512h __A, __m512h __B) { - // CHECK-LABEL: @test_mm512_mask_fcmul_round_pch + // CHECK-LABEL: test_mm512_mask_fcmul_round_pch // CHECK: @llvm.x86.avx512fp16.mask.vfcmul.cph.512 return _mm512_mask_fcmul_round_pch(__W, __U, __A, __B, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC); } __m512h test_mm512_maskz_fcmul_round_pch(__mmask16 __U, __m512h __A, __m512h __B) { - // CHECK-LABEL: @test_mm512_maskz_fcmul_round_pch + // CHECK-LABEL: test_mm512_maskz_fcmul_round_pch // CHECK: @llvm.x86.avx512fp16.mask.vfcmul.cph.512 return _mm512_maskz_fcmul_round_pch(__U, __A, __B, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC); } __m512h test_mm512_fcmadd_pch(__m512h __A, __m512h __B, __m512h __C) { - // CHECK-LABEL: @test_mm512_fcmadd_pch + // CHECK-LABEL: test_mm512_fcmadd_pch // CHECK: @llvm.x86.avx512fp16.mask.vfcmadd.cph.512 return _mm512_fcmadd_pch(__A, __B, __C); } __m512h test_mm512_mask_fcmadd_pch(__m512h __A, __mmask16 __U, __m512h __B, __m512h __C) { - // CHECK-LABEL: @test_mm512_mask_fcmadd_pch + // CHECK-LABEL: test_mm512_mask_fcmadd_pch // CHECK: @llvm.x86.avx512fp16.mask.vfcmadd.cph.512 // CHECK: %{{.*}} = select <16 x i1> %{{.*}}, <16 x float> %{{.*}}, <16 x float> %{{.*}} return _mm512_mask_fcmadd_pch(__A, __U, __B, __C); } __m512h test_mm512_mask3_fcmadd_pch(__m512h __A, __m512h __B, __m512h __C, __mmask16 __U) { - // CHECK-LABEL: @test_mm512_mask3_fcmadd_pch + // CHECK-LABEL: test_mm512_mask3_fcmadd_pch // CHECK: @llvm.x86.avx512fp16.mask.vfcmadd.cph.512 // CHECK-NOT: %{{.*}} = select <16 x i1> %{{.*}}, <16 x float> %{{.*}}, <16 x float> %{{.*}} return _mm512_mask3_fcmadd_pch(__A, __B, __C, __U); } __m512h test_mm512_maskz_fcmadd_pch(__mmask16 __U, __m512h __A, __m512h __B, __m512h __C) { - // CHECK-LABEL: @test_mm512_maskz_fcmadd_pch + // CHECK-LABEL: test_mm512_maskz_fcmadd_pch // CHECK: @llvm.x86.avx512fp16.maskz.vfcmadd.cph.512 return _mm512_maskz_fcmadd_pch(__U, __A, __B, __C); } __m512h test_mm512_fcmadd_round_pch(__m512h __A, __m512h __B, __m512h __C) { - // CHECK-LABEL: @test_mm512_fcmadd_round_pch + // CHECK-LABEL: test_mm512_fcmadd_round_pch // CHECK: @llvm.x86.avx512fp16.mask.vfcmadd.cph.512 return _mm512_fcmadd_round_pch(__A, __B, __C, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC); } __m512h test_mm512_mask_fcmadd_round_pch(__m512h __A, __mmask16 __U, __m512h __B, __m512h __C) { - // CHECK-LABEL: @test_mm512_mask_fcmadd_round_pch + // CHECK-LABEL: test_mm512_mask_fcmadd_round_pch // CHECK: @llvm.x86.avx512fp16.mask.vfcmadd.cph.512 // CHECK: %{{.*}} = select <16 x i1> %{{.*}}, <16 x float> %{{.*}}, <16 x float> %{{.*}} return _mm512_mask_fcmadd_round_pch(__A, __U, __B, __C, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC); } __m512h test_mm512_mask3_fcmadd_round_pch(__m512h __A, __m512h __B, __m512h __C, __mmask16 __U) { - // CHECK-LABEL: @test_mm512_mask3_fcmadd_round_pch + // CHECK-LABEL: test_mm512_mask3_fcmadd_round_pch // CHECK: @llvm.x86.avx512fp16.mask.vfcmadd.cph.512 // CHECK-NOT: %{{.*}} = select <16 x i1> %{{.*}}, <16 x float> %{{.*}}, <16 x float> %{{.*}} return _mm512_mask3_fcmadd_round_pch(__A, __B, __C, __U, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC); } __m512h test_mm512_maskz_fcmadd_round_pch(__mmask16 __U, __m512h __A, __m512h __B, __m512h __C) { - // CHECK-LABEL: @test_mm512_maskz_fcmadd_round_pch + // CHECK-LABEL: test_mm512_maskz_fcmadd_round_pch // CHECK: @llvm.x86.avx512fp16.maskz.vfcmadd.cph.512 return _mm512_maskz_fcmadd_round_pch(__U, __A, __B, __C, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC); } __m512h test_mm512_fmul_pch(__m512h __A, __m512h __B) { - // CHECK-LABEL: @test_mm512_fmul_pch + // CHECK-LABEL: test_mm512_fmul_pch // CHECK: @llvm.x86.avx512fp16.mask.vfmul.cph.512 return _mm512_fmul_pch(__A, __B); } __m512h test_mm512_mask_fmul_pch(__m512h __W, __mmask16 __U, __m512h __A, __m512h __B) { - // CHECK-LABEL: @test_mm512_mask_fmul_pch + // CHECK-LABEL: test_mm512_mask_fmul_pch // CHECK: @llvm.x86.avx512fp16.mask.vfmul.cph.512 return _mm512_mask_fmul_pch(__W, __U, __A, __B); } __m512h test_mm512_maskz_fmul_pch(__mmask16 __U, __m512h __A, __m512h __B) { - // CHECK-LABEL: @test_mm512_maskz_fmul_pch + // CHECK-LABEL: test_mm512_maskz_fmul_pch // CHECK: @llvm.x86.avx512fp16.mask.vfmul.cph.512 return _mm512_maskz_fmul_pch(__U, __A, __B); } __m512h test_mm512_fmul_round_pch(__m512h __A, __m512h __B) { - // CHECK-LABEL: @test_mm512_fmul_round_pch + // CHECK-LABEL: test_mm512_fmul_round_pch // CHECK: @llvm.x86.avx512fp16.mask.vfmul.cph.512 return _mm512_fmul_round_pch(__A, __B, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC); } __m512h test_mm512_mask_fmul_round_pch(__m512h __W, __mmask16 __U, __m512h __A, __m512h __B) { - // CHECK-LABEL: @test_mm512_mask_fmul_round_pch + // CHECK-LABEL: test_mm512_mask_fmul_round_pch // CHECK: @llvm.x86.avx512fp16.mask.vfmul.cph.512 return _mm512_mask_fmul_round_pch(__W, __U, __A, __B, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC); } __m512h test_mm512_maskz_fmul_round_pch(__mmask16 __U, __m512h __A, __m512h __B) { - // CHECK-LABEL: @test_mm512_maskz_fmul_round_pch + // CHECK-LABEL: test_mm512_maskz_fmul_round_pch // CHECK: @llvm.x86.avx512fp16.mask.vfmul.cph.512 return _mm512_maskz_fmul_round_pch(__U, __A, __B, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC); } __m512h test_mm512_fmadd_pch(__m512h __A, __m512h __B, __m512h __C) { - // CHECK-LABEL: @test_mm512_fmadd_pch + // CHECK-LABEL: test_mm512_fmadd_pch // CHECK: @llvm.x86.avx512fp16.mask.vfmadd.cph.512 return _mm512_fmadd_pch(__A, __B, __C); } __m512h test_mm512_mask_fmadd_pch(__m512h __A, __mmask16 __U, __m512h __B, __m512h __C) { - // CHECK-LABEL: @test_mm512_mask_fmadd_pch + // CHECK-LABEL: test_mm512_mask_fmadd_pch // CHECK: @llvm.x86.avx512fp16.mask.vfmadd.cph.512 // CHECK: %{{.*}} = select <16 x i1> %{{.*}}, <16 x float> %{{.*}}, <16 x float> %{{.*}} return _mm512_mask_fmadd_pch(__A, __U, __B, __C); } __m512h test_mm512_mask3_fmadd_pch(__m512h __A, __m512h __B, __m512h __C, __mmask16 __U) { - // CHECK-LABEL: @test_mm512_mask3_fmadd_pch + // CHECK-LABEL: test_mm512_mask3_fmadd_pch // CHECK: @llvm.x86.avx512fp16.mask.vfmadd.cph.512 // CHECK-NOT: %{{.*}} = select <16 x i1> %{{.*}}, <16 x float> %{{.*}}, <16 x float> %{{.*}} return _mm512_mask3_fmadd_pch(__A, __B, __C, __U); } __m512h test_mm512_maskz_fmadd_pch(__mmask16 __U, __m512h __A, __m512h __B, __m512h __C) { - // CHECK-LABEL: @test_mm512_maskz_fmadd_pch + // CHECK-LABEL: test_mm512_maskz_fmadd_pch // CHECK: @llvm.x86.avx512fp16.maskz.vfmadd.cph.512 return _mm512_maskz_fmadd_pch(__U, __A, __B, __C); } __m512h test_mm512_fmadd_round_pch(__m512h __A, __m512h __B, __m512h __C) { - // CHECK-LABEL: @test_mm512_fmadd_round_pch + // CHECK-LABEL: test_mm512_fmadd_round_pch // CHECK: @llvm.x86.avx512fp16.mask.vfmadd.cph.512 return _mm512_fmadd_round_pch(__A, __B, __C, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC); } __m512h test_mm512_mask_fmadd_round_pch(__m512h __A, __mmask16 __U, __m512h __B, __m512h __C) { - // CHECK-LABEL: @test_mm512_mask_fmadd_round_pch + // CHECK-LABEL: test_mm512_mask_fmadd_round_pch // CHECK: @llvm.x86.avx512fp16.mask.vfmadd.cph.512 // CHECK: %{{.*}} = select <16 x i1> %{{.*}}, <16 x float> %{{.*}}, <16 x float> %{{.*}} return _mm512_mask_fmadd_round_pch(__A, __U, __B, __C, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC); } __m512h test_mm512_mask3_fmadd_round_pch(__m512h __A, __m512h __B, __m512h __C, __mmask16 __U) { - // CHECK-LABEL: @test_mm512_mask3_fmadd_round_pch + // CHECK-LABEL: test_mm512_mask3_fmadd_round_pch // CHECK: @llvm.x86.avx512fp16.mask.vfmadd.cph.512 // CHECK-NOT: %{{.*}} = select <16 x i1> %{{.*}}, <16 x float> %{{.*}}, <16 x float> %{{.*}} return _mm512_mask3_fmadd_round_pch(__A, __B, __C, __U, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC); } __m512h test_mm512_maskz_fmadd_round_pch(__mmask16 __U, __m512h __A, __m512h __B, __m512h __C) { - // CHECK-LABEL: @test_mm512_maskz_fmadd_round_pch + // CHECK-LABEL: test_mm512_maskz_fmadd_round_pch // CHECK: @llvm.x86.avx512fp16.maskz.vfmadd.cph.512 return _mm512_maskz_fmadd_round_pch(__U, __A, __B, __C, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC); } __m128h test_mm_fmul_sch(__m128h __A, __m128h __B) { - // CHECK-LABEL: @test_mm_fmul_sch + // CHECK-LABEL: test_mm_fmul_sch // CHECK: @llvm.x86.avx512fp16.mask.vfmul.csh return _mm_fmul_sch(__A, __B); } __m128h test_mm_mask_fmul_sch(__m128h __W, __mmask8 __U, __m128h __A, __m128h __B) { - // CHECK-LABEL: @test_mm_mask_fmul_sch + // CHECK-LABEL: test_mm_mask_fmul_sch // CHECK: @llvm.x86.avx512fp16.mask.vfmul.csh return _mm_mask_fmul_sch(__W, __U, __A, __B); } __m128h test_mm_maskz_fmul_sch(__mmask8 __U, __m128h __A, __m128h __B) { - // CHECK-LABEL: @test_mm_maskz_fmul_sch + // CHECK-LABEL: test_mm_maskz_fmul_sch // CHECK: @llvm.x86.avx512fp16.mask.vfmul.csh return _mm_maskz_fmul_sch(__U, __A, __B); } __m128h test_mm_fmul_round_sch(__m128h __A, __m128h __B) { - // CHECK-LABEL: @test_mm_fmul_round_sch + // CHECK-LABEL: test_mm_fmul_round_sch // CHECK: @llvm.x86.avx512fp16.mask.vfmul.csh return _mm_fmul_round_sch(__A, __B, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC); } __m128h test_mm_mask_fmul_round_sch(__m128h __W, __mmask8 __U, __m128h __A, __m128h __B) { - // CHECK-LABEL: @test_mm_mask_fmul_round_sch + // CHECK-LABEL: test_mm_mask_fmul_round_sch // CHECK: @llvm.x86.avx512fp16.mask.vfmul.csh return _mm_mask_fmul_round_sch(__W, __U, __A, __B, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC); } __m128h test_mm_maskz_fmul_round_sch(__mmask8 __U, __m128h __A, __m128h __B) { - // CHECK-LABEL: @test_mm_maskz_fmul_round_sch + // CHECK-LABEL: test_mm_maskz_fmul_round_sch // CHECK: @llvm.x86.avx512fp16.mask.vfmul.csh return _mm_maskz_fmul_round_sch(__U, __A, __B, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC); } _Float16 test_mm512_reduce_add_ph(__m512h __W) { - // CHECK-LABEL: @test_mm512_reduce_add_ph - // CHECK: call reassoc half @llvm.vector.reduce.fadd.v32f16(half 0xH8000, <32 x half> %{{.*}}) + // CHECK-LABEL: test_mm512_reduce_add_ph + // CHECK: @llvm.vector.reduce.fadd.v32f16(half 0xH8000, <32 x half> %{{.*}}) return _mm512_reduce_add_ph(__W); } _Float16 test_mm512_reduce_mul_ph(__m512h __W) { - // CHECK-LABEL: @test_mm512_reduce_mul_ph - // CHECK: call reassoc half @llvm.vector.reduce.fmul.v32f16(half 0xH3C00, <32 x half> %{{.*}}) + // CHECK-LABEL: test_mm512_reduce_mul_ph + // CHECK: @llvm.vector.reduce.fmul.v32f16(half 0xH3C00, <32 x half> %{{.*}}) return _mm512_reduce_mul_ph(__W); } _Float16 test_mm512_reduce_max_ph(__m512h __W) { - // CHECK-LABEL: @test_mm512_reduce_max_ph - // CHECK: call nnan half @llvm.vector.reduce.fmax.v32f16(<32 x half> %{{.*}}) + // CHECK-LABEL: test_mm512_reduce_max_ph + // CHECK: @llvm.vector.reduce.fmax.v32f16(<32 x half> %{{.*}}) return _mm512_reduce_max_ph(__W); } _Float16 test_mm512_reduce_min_ph(__m512h __W) { - // CHECK-LABEL: @test_mm512_reduce_min_ph - // CHECK: call nnan half @llvm.vector.reduce.fmin.v32f16(<32 x half> %{{.*}}) + // CHECK-LABEL: test_mm512_reduce_min_ph + // CHECK: @llvm.vector.reduce.fmin.v32f16(<32 x half> %{{.*}}) return _mm512_reduce_min_ph(__W); } __m512h test_mm512_mask_blend_ph(__mmask32 __U, __m512h __A, __m512h __W) { - // CHECK-LABEL: @test_mm512_mask_blend_ph + // CHECK-LABEL: test_mm512_mask_blend_ph // CHECK: %{{.*}} = bitcast i32 %{{.*}} to <32 x i1> // CHECK: %{{.*}} = select <32 x i1> %{{.*}}, <32 x half> %{{.*}}, <32 x half> %{{.*}} return _mm512_mask_blend_ph(__U, __A, __W); } __m512h test_mm512_permutex2var_ph(__m512h __A, __m512i __I, __m512h __B) { - // CHECK-LABEL: @test_mm512_permutex2var_ph + // CHECK-LABEL: test_mm512_permutex2var_ph // CHECK: %{{.*}} = bitcast <32 x half> %{{.*}} to <32 x i16> // CHECK: %{{.*}} = bitcast <8 x i64> %{{.*}} to <32 x i16> // CHECK: %{{.*}} = bitcast <32 x half> %{{.*}} to <32 x i16> @@ -4481,7 +4514,7 @@ __m512h test_mm512_permutex2var_ph(__m512h __A, __m512i __I, __m512h __B) { } __m512h test_mm512_permutexvar_epi16(__m512i __A, __m512h __B) { - // CHECK-LABEL: @test_mm512_permutexvar_epi16 + // CHECK-LABEL: test_mm512_permutexvar_epi16 // CHECK: %{{.*}} = bitcast <32 x half> %{{.*}} to <32 x i16> // CHECK: %{{.*}} = bitcast <8 x i64> %{{.*}} to <32 x i16> // CHECK: %{{.*}} = call <32 x i16> @llvm.x86.avx512.permvar.hi.512(<32 x i16> %{{.*}}, <32 x i16> %{{.*}}) @@ -4491,144 +4524,144 @@ __m512h test_mm512_permutexvar_epi16(__m512i __A, __m512h __B) { // tests below are for alias intrinsics. __m512h test_mm512_mul_pch(__m512h __A, __m512h __B) { - // CHECK-LABEL: @test_mm512_mul_pch + // CHECK-LABEL: test_mm512_mul_pch // CHECK: @llvm.x86.avx512fp16.mask.vfmul.cph.512 return _mm512_mul_pch(__A, __B); } __m512h test_mm512_mask_mul_pch(__m512h __W, __mmask16 __U, __m512h __A, __m512h __B) { - // CHECK-LABEL: @test_mm512_mask_mul_pch + // CHECK-LABEL: test_mm512_mask_mul_pch // CHECK: @llvm.x86.avx512fp16.mask.vfmul.cph.512 return _mm512_mask_mul_pch(__W, __U, __A, __B); } __m512h test_mm512_maskz_mul_pch(__mmask16 __U, __m512h __A, __m512h __B) { - // CHECK-LABEL: @test_mm512_maskz_mul_pch + // CHECK-LABEL: test_mm512_maskz_mul_pch // CHECK: @llvm.x86.avx512fp16.mask.vfmul.cph.512 return _mm512_maskz_mul_pch(__U, __A, __B); } __m512h test_mm512_cmul_pch(__m512h __A, __m512h __B) { - // CHECK-LABEL: @test_mm512_cmul_pch + // CHECK-LABEL: test_mm512_cmul_pch // CHECK: @llvm.x86.avx512fp16.mask.vfcmul.cph.512 return _mm512_cmul_pch(__A, __B); } __m512h test_mm512_mask_cmul_pch(__m512h __W, __mmask16 __U, __m512h __A, __m512h __B) { - // CHECK-LABEL: @test_mm512_mask_cmul_pch + // CHECK-LABEL: test_mm512_mask_cmul_pch // CHECK: @llvm.x86.avx512fp16.mask.vfcmul.cph.512 return _mm512_mask_cmul_pch(__W, __U, __A, __B); } __m512h test_mm512_maskz_cmul_pch(__mmask16 __U, __m512h __A, __m512h __B) { - // CHECK-LABEL: @test_mm512_maskz_cmul_pch + // CHECK-LABEL: test_mm512_maskz_cmul_pch // CHECK: @llvm.x86.avx512fp16.mask.vfcmul.cph.512 return _mm512_maskz_cmul_pch(__U, __A, __B); } __m128h test_mm_mul_sch(__m128h __A, __m128h __B) { - // CHECK-LABEL: @test_mm_mul_sch + // CHECK-LABEL: test_mm_mul_sch // CHECK: @llvm.x86.avx512fp16.mask.vfmul.csh return _mm_mul_sch(__A, __B); } __m128h test_mm_mask_mul_sch(__m128h __W, __mmask8 __U, __m128h __A, __m128h __B) { - // CHECK-LABEL: @test_mm_mask_mul_sch + // CHECK-LABEL: test_mm_mask_mul_sch // CHECK: @llvm.x86.avx512fp16.mask.vfmul.csh return _mm_mask_mul_sch(__W, __U, __A, __B); } __m128h test_mm_maskz_mul_sch(__mmask8 __U, __m128h __A, __m128h __B) { - // CHECK-LABEL: @test_mm_maskz_mul_sch + // CHECK-LABEL: test_mm_maskz_mul_sch // CHECK: @llvm.x86.avx512fp16.mask.vfmul.csh return _mm_maskz_mul_sch(__U, __A, __B); } __m128h test_mm_mul_round_sch(__m128h __A, __m128h __B) { - // CHECK-LABEL: @test_mm_mul_round_sch + // CHECK-LABEL: test_mm_mul_round_sch // CHECK: @llvm.x86.avx512fp16.mask.vfmul.csh return _mm_mul_round_sch(__A, __B, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC); } __m128h test_mm_mask_mul_round_sch(__m128h __W, __mmask8 __U, __m128h __A, __m128h __B) { - // CHECK-LABEL: @test_mm_mask_mul_round_sch + // CHECK-LABEL: test_mm_mask_mul_round_sch // CHECK: @llvm.x86.avx512fp16.mask.vfmul.csh return _mm_mask_mul_round_sch(__W, __U, __A, __B, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC); } __m128h test_mm_maskz_mul_round_sch(__mmask8 __U, __m128h __A, __m128h __B) { - // CHECK-LABEL: @test_mm_maskz_mul_round_sch + // CHECK-LABEL: test_mm_maskz_mul_round_sch // CHECK: @llvm.x86.avx512fp16.mask.vfmul.csh return _mm_maskz_mul_round_sch(__U, __A, __B, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC); } __m512h test_mm512_mul_round_pch(__m512h __A, __m512h __B) { - // CHECK-LABEL: @test_mm512_mul_round_pch + // CHECK-LABEL: test_mm512_mul_round_pch // CHECK: @llvm.x86.avx512fp16.mask.vfmul.cph.512 return _mm512_mul_round_pch(__A, __B, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC); } __m512h test_mm512_mask_mul_round_pch(__m512h __W, __mmask16 __U, __m512h __A, __m512h __B) { - // CHECK-LABEL: @test_mm512_mask_mul_round_pch + // CHECK-LABEL: test_mm512_mask_mul_round_pch // CHECK: @llvm.x86.avx512fp16.mask.vfmul.cph.512 return _mm512_mask_mul_round_pch(__W, __U, __A, __B, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC); } __m512h test_mm512_maskz_mul_round_pch(__mmask16 __U, __m512h __A, __m512h __B) { - // CHECK-LABEL: @test_mm512_maskz_mul_round_pch + // CHECK-LABEL: test_mm512_maskz_mul_round_pch // CHECK: @llvm.x86.avx512fp16.mask.vfmul.cph.512 return _mm512_maskz_mul_round_pch(__U, __A, __B, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC); } __m512h test_mm512_cmul_round_pch(__m512h __A, __m512h __B) { - // CHECK-LABEL: @test_mm512_cmul_round_pch + // CHECK-LABEL: test_mm512_cmul_round_pch // CHECK: @llvm.x86.avx512fp16.mask.vfcmul.cph.512 return _mm512_cmul_round_pch(__A, __B, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC); } __m512h test_mm512_mask_cmul_round_pch(__m512h __W, __mmask16 __U, __m512h __A, __m512h __B) { - // CHECK-LABEL: @test_mm512_mask_cmul_round_pch + // CHECK-LABEL: test_mm512_mask_cmul_round_pch // CHECK: @llvm.x86.avx512fp16.mask.vfcmul.cph.512 return _mm512_mask_cmul_round_pch(__W, __U, __A, __B, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC); } __m512h test_mm512_maskz_cmul_round_pch(__mmask16 __U, __m512h __A, __m512h __B) { - // CHECK-LABEL: @test_mm512_maskz_cmul_round_pch + // CHECK-LABEL: test_mm512_maskz_cmul_round_pch // CHECK: @llvm.x86.avx512fp16.mask.vfcmul.cph.512 return _mm512_maskz_cmul_round_pch(__U, __A, __B, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC); } __m128h test_mm_cmul_sch(__m128h __A, __m128h __B) { - // CHECK-LABEL: @test_mm_cmul_sch + // CHECK-LABEL: test_mm_cmul_sch // CHECK: @llvm.x86.avx512fp16.mask.vfcmul.csh return _mm_cmul_sch(__A, __B); } __m128h test_mm_mask_cmul_sch(__m128h __W, __mmask8 __U, __m128h __A, __m128h __B) { - // CHECK-LABEL: @test_mm_mask_cmul_sch + // CHECK-LABEL: test_mm_mask_cmul_sch // CHECK: @llvm.x86.avx512fp16.mask.vfcmul.csh return _mm_mask_cmul_sch(__W, __U, __A, __B); } __m128h test_mm_maskz_cmul_sch(__mmask8 __U, __m128h __A, __m128h __B) { - // CHECK-LABEL: @test_mm_maskz_cmul_sch + // CHECK-LABEL: test_mm_maskz_cmul_sch // CHECK: @llvm.x86.avx512fp16.mask.vfcmul.csh return _mm_maskz_cmul_sch(__U, __A, __B); } __m128h test_mm_cmul_round_sch(__m128h __A, __m128h __B) { - // CHECK-LABEL: @test_mm_cmul_round_sch + // CHECK-LABEL: test_mm_cmul_round_sch // CHECK: @llvm.x86.avx512fp16.mask.vfcmul.csh return _mm_cmul_round_sch(__A, __B, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC); } __m128h test_mm_mask_cmul_round_sch(__m128h __W, __mmask8 __U, __m128h __A, __m128h __B) { - // CHECK-LABEL: @test_mm_mask_cmul_round_sch + // CHECK-LABEL: test_mm_mask_cmul_round_sch // CHECK: @llvm.x86.avx512fp16.mask.vfcmul.csh return _mm_mask_cmul_round_sch(__W, __U, __A, __B, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC); } __m128h test_mm_maskz_cmul_round_sch(__mmask8 __U, __m128h __A, __m128h __B) { - // CHECK-LABEL: @test_mm_maskz_cmul_round_sch + // CHECK-LABEL: test_mm_maskz_cmul_round_sch // CHECK: @llvm.x86.avx512fp16.mask.vfcmul.csh return _mm_maskz_cmul_round_sch(__U, __A, __B, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC); } diff --git a/clang/test/CodeGen/X86/avx512ifma-builtins.c b/clang/test/CodeGen/X86/avx512ifma-builtins.c index e2077b5..7c7c492 100644 --- a/clang/test/CodeGen/X86/avx512ifma-builtins.c +++ b/clang/test/CodeGen/X86/avx512ifma-builtins.c @@ -1,44 +1,47 @@ -// RUN: %clang_cc1 -flax-vector-conversions=none -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +avx512ifma -emit-llvm -o - -Wall -Werror | FileCheck %s +// RUN: %clang_cc1 -x c -flax-vector-conversions=none -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +avx512ifma -emit-llvm -o - -Wall -Werror | FileCheck %s +// RUN: %clang_cc1 -x c -flax-vector-conversions=none -ffreestanding %s -triple=i386-apple-darwin -target-feature +avx512ifma -emit-llvm -o - -Wall -Werror | FileCheck %s +// RUN: %clang_cc1 -x c++ -flax-vector-conversions=none -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +avx512ifma -emit-llvm -o - -Wall -Werror | FileCheck %s +// RUN: %clang_cc1 -x c++ -flax-vector-conversions=none -ffreestanding %s -triple=i386-apple-darwin -target-feature +avx512ifma -emit-llvm -o - -Wall -Werror | FileCheck %s #include <immintrin.h> __m512i test_mm512_madd52hi_epu64(__m512i __X, __m512i __Y, __m512i __Z) { - // CHECK-LABEL: @test_mm512_madd52hi_epu64 - // CHECK: @llvm.x86.avx512.vpmadd52h.uq.512 + // CHECK-LABEL: test_mm512_madd52hi_epu64 + // CHECK: call {{.*}}<8 x i64> @llvm.x86.avx512.vpmadd52h.uq.512(<8 x i64> %{{.*}}, <8 x i64> %{{.*}}, <8 x i64> %{{.*}}) return _mm512_madd52hi_epu64(__X, __Y, __Z); } __m512i test_mm512_mask_madd52hi_epu64(__m512i __W, __mmask8 __M, __m512i __X, __m512i __Y) { - // CHECK-LABEL: @test_mm512_mask_madd52hi_epu64 - // CHECK: @llvm.x86.avx512.vpmadd52h.uq.512 + // CHECK-LABEL: test_mm512_mask_madd52hi_epu64 + // CHECK: call {{.*}}<8 x i64> @llvm.x86.avx512.vpmadd52h.uq.512(<8 x i64> %{{.*}}, <8 x i64> %{{.*}}, <8 x i64> %{{.*}}) // CHECK: select <8 x i1> %{{.*}}, <8 x i64> %{{.*}}, <8 x i64> %{{.*}} return _mm512_mask_madd52hi_epu64(__W, __M, __X, __Y); } __m512i test_mm512_maskz_madd52hi_epu64(__mmask8 __M, __m512i __X, __m512i __Y, __m512i __Z) { - // CHECK-LABEL: @test_mm512_maskz_madd52hi_epu64 - // CHECK: @llvm.x86.avx512.vpmadd52h.uq.512 + // CHECK-LABEL: test_mm512_maskz_madd52hi_epu64 + // CHECK: call {{.*}}<8 x i64> @llvm.x86.avx512.vpmadd52h.uq.512(<8 x i64> %{{.*}}, <8 x i64> %{{.*}}, <8 x i64> %{{.*}}) // CHECK: select <8 x i1> %{{.*}}, <8 x i64> %{{.*}}, <8 x i64> %{{.*}} return _mm512_maskz_madd52hi_epu64(__M, __X, __Y, __Z); } __m512i test_mm512_madd52lo_epu64(__m512i __X, __m512i __Y, __m512i __Z) { - // CHECK-LABEL: @test_mm512_madd52lo_epu64 - // CHECK: @llvm.x86.avx512.vpmadd52l.uq.512 + // CHECK-LABEL: test_mm512_madd52lo_epu64 + // CHECK: call {{.*}}<8 x i64> @llvm.x86.avx512.vpmadd52l.uq.512(<8 x i64> %{{.*}}, <8 x i64> %{{.*}}, <8 x i64> %{{.*}}) return _mm512_madd52lo_epu64(__X, __Y, __Z); } __m512i test_mm512_mask_madd52lo_epu64(__m512i __W, __mmask8 __M, __m512i __X, __m512i __Y) { - // CHECK-LABEL: @test_mm512_mask_madd52lo_epu64 - // CHECK: @llvm.x86.avx512.vpmadd52l.uq.512 + // CHECK-LABEL: test_mm512_mask_madd52lo_epu64 + // CHECK: call {{.*}}<8 x i64> @llvm.x86.avx512.vpmadd52l.uq.512(<8 x i64> %{{.*}}, <8 x i64> %{{.*}}, <8 x i64> %{{.*}}) // CHECK: select <8 x i1> %{{.*}}, <8 x i64> %{{.*}}, <8 x i64> %{{.*}} return _mm512_mask_madd52lo_epu64(__W, __M, __X, __Y); } __m512i test_mm512_maskz_madd52lo_epu64(__mmask8 __M, __m512i __X, __m512i __Y, __m512i __Z) { - // CHECK-LABEL: @test_mm512_maskz_madd52lo_epu64 - // CHECK: @llvm.x86.avx512.vpmadd52l.uq.512 + // CHECK-LABEL: test_mm512_maskz_madd52lo_epu64 + // CHECK: call {{.*}}<8 x i64> @llvm.x86.avx512.vpmadd52l.uq.512(<8 x i64> %{{.*}}, <8 x i64> %{{.*}}, <8 x i64> %{{.*}}) // CHECK: select <8 x i1> %{{.*}}, <8 x i64> %{{.*}}, <8 x i64> %{{.*}} return _mm512_maskz_madd52lo_epu64(__M, __X, __Y, __Z); } diff --git a/clang/test/CodeGen/X86/avx512ifmavl-builtins.c b/clang/test/CodeGen/X86/avx512ifmavl-builtins.c index 3b74478..c115b60 100644 --- a/clang/test/CodeGen/X86/avx512ifmavl-builtins.c +++ b/clang/test/CodeGen/X86/avx512ifmavl-builtins.c @@ -1,83 +1,86 @@ -// RUN: %clang_cc1 %s -flax-vector-conversions=none -ffreestanding -triple=x86_64-apple-darwin -target-feature +avx512ifma -target-feature +avx512vl -emit-llvm -o - -Wall -Werror | FileCheck %s +// RUN: %clang_cc1 -x c %s -flax-vector-conversions=none -ffreestanding -triple=x86_64-apple-darwin -target-feature +avx512ifma -target-feature +avx512vl -emit-llvm -o - -Wall -Werror | FileCheck %s +// RUN: %clang_cc1 -x c %s -flax-vector-conversions=none -ffreestanding -triple=i386-apple-darwin -target-feature +avx512ifma -target-feature +avx512vl -emit-llvm -o - -Wall -Werror | FileCheck %s +// RUN: %clang_cc1 -x c++ %s -flax-vector-conversions=none -ffreestanding -triple=x86_64-apple-darwin -target-feature +avx512ifma -target-feature +avx512vl -emit-llvm -o - -Wall -Werror | FileCheck %s +// RUN: %clang_cc1 -x c++ %s -flax-vector-conversions=none -ffreestanding -triple=i386-apple-darwin -target-feature +avx512ifma -target-feature +avx512vl -emit-llvm -o - -Wall -Werror | FileCheck %s #include <immintrin.h> __m128i test_mm_madd52hi_epu64(__m128i __X, __m128i __Y, __m128i __Z) { - // CHECK-LABEL: @test_mm_madd52hi_epu64 - // CHECK: @llvm.x86.avx512.vpmadd52h.uq.128 + // CHECK-LABEL: test_mm_madd52hi_epu64 + // CHECK: call {{.*}}<2 x i64> @llvm.x86.avx512.vpmadd52h.uq.128(<2 x i64> %{{.*}}, <2 x i64> %{{.*}}, <2 x i64> %{{.*}}) return _mm_madd52hi_epu64(__X, __Y, __Z); } __m128i test_mm_mask_madd52hi_epu64(__m128i __W, __mmask8 __M, __m128i __X, __m128i __Y) { - // CHECK-LABEL: @test_mm_mask_madd52hi_epu64 - // CHECK: @llvm.x86.avx512.vpmadd52h.uq.128 + // CHECK-LABEL: test_mm_mask_madd52hi_epu64 + // CHECK: call {{.*}}<2 x i64> @llvm.x86.avx512.vpmadd52h.uq.128(<2 x i64> %{{.*}}, <2 x i64> %{{.*}}, <2 x i64> %{{.*}}) // CHECK: select <2 x i1> %{{.*}}, <2 x i64> %{{.*}}, <2 x i64> %{{.*}} return _mm_mask_madd52hi_epu64(__W, __M, __X, __Y); } __m128i test_mm_maskz_madd52hi_epu64(__mmask8 __M, __m128i __X, __m128i __Y, __m128i __Z) { - // CHECK-LABEL: @test_mm_maskz_madd52hi_epu64 - // CHECK: @llvm.x86.avx512.vpmadd52h.uq.128 + // CHECK-LABEL: test_mm_maskz_madd52hi_epu64 + // CHECK: call {{.*}}<2 x i64> @llvm.x86.avx512.vpmadd52h.uq.128(<2 x i64> %{{.*}}, <2 x i64> %{{.*}}, <2 x i64> %{{.*}}) // CHECK: select <2 x i1> %{{.*}}, <2 x i64> %{{.*}}, <2 x i64> %{{.*}} return _mm_maskz_madd52hi_epu64(__M, __X, __Y, __Z); } __m256i test_mm256_madd52hi_epu64(__m256i __X, __m256i __Y, __m256i __Z) { - // CHECK-LABEL: @test_mm256_madd52hi_epu64 - // CHECK: @llvm.x86.avx512.vpmadd52h.uq.256 + // CHECK-LABEL: test_mm256_madd52hi_epu64 + // CHECK: call {{.*}}<4 x i64> @llvm.x86.avx512.vpmadd52h.uq.256(<4 x i64> %{{.*}}, <4 x i64> %{{.*}}, <4 x i64> %{{.*}}) return _mm256_madd52hi_epu64(__X, __Y, __Z); } __m256i test_mm256_mask_madd52hi_epu64(__m256i __W, __mmask8 __M, __m256i __X, __m256i __Y) { - // CHECK-LABEL: @test_mm256_mask_madd52hi_epu64 - // CHECK: @llvm.x86.avx512.vpmadd52h.uq.256 + // CHECK-LABEL: test_mm256_mask_madd52hi_epu64 + // CHECK: call {{.*}}<4 x i64> @llvm.x86.avx512.vpmadd52h.uq.256(<4 x i64> %{{.*}}, <4 x i64> %{{.*}}, <4 x i64> %{{.*}}) // CHECK: select <4 x i1> %{{.*}}, <4 x i64> %{{.*}}, <4 x i64> %{{.*}} return _mm256_mask_madd52hi_epu64(__W, __M, __X, __Y); } __m256i test_mm256_maskz_madd52hi_epu64(__mmask8 __M, __m256i __X, __m256i __Y, __m256i __Z) { - // CHECK-LABEL: @test_mm256_maskz_madd52hi_epu64 - // CHECK: @llvm.x86.avx512.vpmadd52h.uq.256 + // CHECK-LABEL: test_mm256_maskz_madd52hi_epu64 + // CHECK: call {{.*}}<4 x i64> @llvm.x86.avx512.vpmadd52h.uq.256(<4 x i64> %{{.*}}, <4 x i64> %{{.*}}, <4 x i64> %{{.*}}) // CHECK: select <4 x i1> %{{.*}}, <4 x i64> %{{.*}}, <4 x i64> %{{.*}} return _mm256_maskz_madd52hi_epu64(__M, __X, __Y, __Z); } __m128i test_mm_madd52lo_epu64(__m128i __X, __m128i __Y, __m128i __Z) { - // CHECK-LABEL: @test_mm_madd52lo_epu64 - // CHECK: @llvm.x86.avx512.vpmadd52l.uq.128 + // CHECK-LABEL: test_mm_madd52lo_epu64 + // CHECK: call {{.*}}<2 x i64> @llvm.x86.avx512.vpmadd52l.uq.128(<2 x i64> %{{.*}}, <2 x i64> %{{.*}}, <2 x i64> %{{.*}}) return _mm_madd52lo_epu64(__X, __Y, __Z); } __m128i test_mm_mask_madd52lo_epu64(__m128i __W, __mmask8 __M, __m128i __X, __m128i __Y) { - // CHECK-LABEL: @test_mm_mask_madd52lo_epu64 - // CHECK: @llvm.x86.avx512.vpmadd52l.uq.128 + // CHECK-LABEL: test_mm_mask_madd52lo_epu64 + // CHECK: call {{.*}}<2 x i64> @llvm.x86.avx512.vpmadd52l.uq.128(<2 x i64> %{{.*}}, <2 x i64> %{{.*}}, <2 x i64> %{{.*}}) // CHECK: select <2 x i1> %{{.*}}, <2 x i64> %{{.*}}, <2 x i64> %{{.*}} return _mm_mask_madd52lo_epu64(__W, __M, __X, __Y); } __m128i test_mm_maskz_madd52lo_epu64(__mmask8 __M, __m128i __X, __m128i __Y, __m128i __Z) { - // CHECK-LABEL: @test_mm_maskz_madd52lo_epu64 - // CHECK: @llvm.x86.avx512.vpmadd52l.uq.128 + // CHECK-LABEL: test_mm_maskz_madd52lo_epu64 + // CHECK: call {{.*}}<2 x i64> @llvm.x86.avx512.vpmadd52l.uq.128(<2 x i64> %{{.*}}, <2 x i64> %{{.*}}, <2 x i64> %{{.*}}) // CHECK: select <2 x i1> %{{.*}}, <2 x i64> %{{.*}}, <2 x i64> %{{.*}} return _mm_maskz_madd52lo_epu64(__M, __X, __Y, __Z); } __m256i test_mm256_madd52lo_epu64(__m256i __X, __m256i __Y, __m256i __Z) { - // CHECK-LABEL: @test_mm256_madd52lo_epu64 - // CHECK: @llvm.x86.avx512.vpmadd52l.uq.256 + // CHECK-LABEL: test_mm256_madd52lo_epu64 + // CHECK: call {{.*}}<4 x i64> @llvm.x86.avx512.vpmadd52l.uq.256(<4 x i64> %{{.*}}, <4 x i64> %{{.*}}, <4 x i64> %{{.*}}) return _mm256_madd52lo_epu64(__X, __Y, __Z); } __m256i test_mm256_mask_madd52lo_epu64(__m256i __W, __mmask8 __M, __m256i __X, __m256i __Y) { - // CHECK-LABEL: @test_mm256_mask_madd52lo_epu64 - // CHECK: @llvm.x86.avx512.vpmadd52l.uq.256 + // CHECK-LABEL: test_mm256_mask_madd52lo_epu64 + // CHECK: call {{.*}}<4 x i64> @llvm.x86.avx512.vpmadd52l.uq.256(<4 x i64> %{{.*}}, <4 x i64> %{{.*}}, <4 x i64> %{{.*}}) // CHECK: select <4 x i1> %{{.*}}, <4 x i64> %{{.*}}, <4 x i64> %{{.*}} return _mm256_mask_madd52lo_epu64(__W, __M, __X, __Y); } __m256i test_mm256_maskz_madd52lo_epu64(__mmask8 __M, __m256i __X, __m256i __Y, __m256i __Z) { - // CHECK-LABEL: @test_mm256_maskz_madd52lo_epu64 - // CHECK: @llvm.x86.avx512.vpmadd52l.uq.256 + // CHECK-LABEL: test_mm256_maskz_madd52lo_epu64 + // CHECK: call {{.*}}<4 x i64> @llvm.x86.avx512.vpmadd52l.uq.256(<4 x i64> %{{.*}}, <4 x i64> %{{.*}}, <4 x i64> %{{.*}}) // CHECK: select <4 x i1> %{{.*}}, <4 x i64> %{{.*}}, <4 x i64> %{{.*}} return _mm256_maskz_madd52lo_epu64(__M, __X, __Y, __Z); } diff --git a/clang/test/CodeGen/X86/avx512vbmi-builtins.c b/clang/test/CodeGen/X86/avx512vbmi-builtins.c index aefc39f..c3b6298 100644 --- a/clang/test/CodeGen/X86/avx512vbmi-builtins.c +++ b/clang/test/CodeGen/X86/avx512vbmi-builtins.c @@ -1,71 +1,74 @@ -// RUN: %clang_cc1 -flax-vector-conversions=none -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +avx512vbmi -emit-llvm -o - -Wall -Werror | FileCheck %s +// RUN: %clang_cc1 -x c -flax-vector-conversions=none -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +avx512vbmi -emit-llvm -o - -Wall -Werror | FileCheck %s +// RUN: %clang_cc1 -x c -flax-vector-conversions=none -ffreestanding %s -triple=i386-apple-darwin -target-feature +avx512vbmi -emit-llvm -o - -Wall -Werror | FileCheck %s +// RUN: %clang_cc1 -x c++ -flax-vector-conversions=none -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +avx512vbmi -emit-llvm -o - -Wall -Werror | FileCheck %s +// RUN: %clang_cc1 -x c++ -flax-vector-conversions=none -ffreestanding %s -triple=i386-apple-darwin -target-feature +avx512vbmi -emit-llvm -o - -Wall -Werror | FileCheck %s #include <immintrin.h> __m512i test_mm512_mask2_permutex2var_epi8(__m512i __A, __m512i __I, __mmask64 __U, __m512i __B) { - // CHECK-LABEL: @test_mm512_mask2_permutex2var_epi8 - // CHECK: @llvm.x86.avx512.vpermi2var.qi.512 + // CHECK-LABEL: test_mm512_mask2_permutex2var_epi8 + // CHECK: call <64 x i8> @llvm.x86.avx512.vpermi2var.qi.512(<64 x i8> %{{.*}}, <64 x i8> %{{.*}}, <64 x i8> %{{.*}}) // CHECK: select <64 x i1> %{{.*}}, <64 x i8> %{{.*}}, <64 x i8> %{{.*}} return _mm512_mask2_permutex2var_epi8(__A, __I, __U, __B); } __m512i test_mm512_permutex2var_epi8(__m512i __A, __m512i __I, __m512i __B) { - // CHECK-LABEL: @test_mm512_permutex2var_epi8 - // CHECK: @llvm.x86.avx512.vpermi2var.qi.512 + // CHECK-LABEL: test_mm512_permutex2var_epi8 + // CHECK: call <64 x i8> @llvm.x86.avx512.vpermi2var.qi.512(<64 x i8> %{{.*}}, <64 x i8> %{{.*}}, <64 x i8> %{{.*}}) return _mm512_permutex2var_epi8(__A, __I, __B); } __m512i test_mm512_mask_permutex2var_epi8(__m512i __A, __mmask64 __U, __m512i __I, __m512i __B) { - // CHECK-LABEL: @test_mm512_mask_permutex2var_epi8 - // CHECK: @llvm.x86.avx512.vpermi2var.qi.512 + // CHECK-LABEL: test_mm512_mask_permutex2var_epi8 + // CHECK: call <64 x i8> @llvm.x86.avx512.vpermi2var.qi.512(<64 x i8> %{{.*}}, <64 x i8> %{{.*}}, <64 x i8> %{{.*}}) // CHECK: select <64 x i1> %{{.*}}, <64 x i8> %{{.*}}, <64 x i8> %{{.*}} return _mm512_mask_permutex2var_epi8(__A, __U, __I, __B); } __m512i test_mm512_maskz_permutex2var_epi8(__mmask64 __U, __m512i __A, __m512i __I, __m512i __B) { - // CHECK-LABEL: @test_mm512_maskz_permutex2var_epi8 - // CHECK: @llvm.x86.avx512.vpermi2var.qi.512 + // CHECK-LABEL: test_mm512_maskz_permutex2var_epi8 + // CHECK: call <64 x i8> @llvm.x86.avx512.vpermi2var.qi.512(<64 x i8> %{{.*}}, <64 x i8> %{{.*}}, <64 x i8> %{{.*}}) // CHECK: select <64 x i1> %{{.*}}, <64 x i8> %{{.*}}, <64 x i8> %{{.*}} return _mm512_maskz_permutex2var_epi8(__U, __A, __I, __B); } __m512i test_mm512_permutexvar_epi8(__m512i __A, __m512i __B) { - // CHECK-LABEL: @test_mm512_permutexvar_epi8 - // CHECK: @llvm.x86.avx512.permvar.qi.512 + // CHECK-LABEL: test_mm512_permutexvar_epi8 + // CHECK: call <64 x i8> @llvm.x86.avx512.permvar.qi.512(<64 x i8> %{{.*}}, <64 x i8> %{{.*}}) return _mm512_permutexvar_epi8(__A, __B); } __m512i test_mm512_maskz_permutexvar_epi8(__mmask64 __M, __m512i __A, __m512i __B) { - // CHECK-LABEL: @test_mm512_maskz_permutexvar_epi8 - // CHECK: @llvm.x86.avx512.permvar.qi.512 + // CHECK-LABEL: test_mm512_maskz_permutexvar_epi8 + // CHECK: call <64 x i8> @llvm.x86.avx512.permvar.qi.512(<64 x i8> %{{.*}}, <64 x i8> %{{.*}}) // CHECK: select <64 x i1> %{{.*}}, <64 x i8> %{{.*}}, <64 x i8> %{{.*}} return _mm512_maskz_permutexvar_epi8(__M, __A, __B); } __m512i test_mm512_mask_permutexvar_epi8(__m512i __W, __mmask64 __M, __m512i __A, __m512i __B) { - // CHECK-LABEL: @test_mm512_mask_permutexvar_epi8 - // CHECK: @llvm.x86.avx512.permvar.qi.512 + // CHECK-LABEL: test_mm512_mask_permutexvar_epi8 + // CHECK: call <64 x i8> @llvm.x86.avx512.permvar.qi.512(<64 x i8> %{{.*}}, <64 x i8> %{{.*}}) // CHECK: select <64 x i1> %{{.*}}, <64 x i8> %{{.*}}, <64 x i8> %{{.*}} return _mm512_mask_permutexvar_epi8(__W, __M, __A, __B); } __m512i test_mm512_mask_multishift_epi64_epi8(__m512i __W, __mmask64 __M, __m512i __X, __m512i __Y) { - // CHECK-LABEL: @test_mm512_mask_multishift_epi64_epi8 - // CHECK: @llvm.x86.avx512.pmultishift.qb.512 + // CHECK-LABEL: test_mm512_mask_multishift_epi64_epi8 + // CHECK: call <64 x i8> @llvm.x86.avx512.pmultishift.qb.512(<64 x i8> %{{.*}}, <64 x i8> %{{.*}}) // CHECK: select <64 x i1> %{{.*}}, <64 x i8> %{{.*}}, <64 x i8> %{{.*}} return _mm512_mask_multishift_epi64_epi8(__W, __M, __X, __Y); } __m512i test_mm512_maskz_multishift_epi64_epi8(__mmask64 __M, __m512i __X, __m512i __Y) { - // CHECK-LABEL: @test_mm512_maskz_multishift_epi64_epi8 - // CHECK: @llvm.x86.avx512.pmultishift.qb.512 + // CHECK-LABEL: test_mm512_maskz_multishift_epi64_epi8 + // CHECK: call <64 x i8> @llvm.x86.avx512.pmultishift.qb.512(<64 x i8> %{{.*}}, <64 x i8> %{{.*}}) // CHECK: select <64 x i1> %{{.*}}, <64 x i8> %{{.*}}, <64 x i8> %{{.*}} return _mm512_maskz_multishift_epi64_epi8(__M, __X, __Y); } __m512i test_mm512_multishift_epi64_epi8(__m512i __X, __m512i __Y) { - // CHECK-LABEL: @test_mm512_multishift_epi64_epi8 - // CHECK: @llvm.x86.avx512.pmultishift.qb.512 + // CHECK-LABEL: test_mm512_multishift_epi64_epi8 + // CHECK: call <64 x i8> @llvm.x86.avx512.pmultishift.qb.512(<64 x i8> %{{.*}}, <64 x i8> %{{.*}}) return _mm512_multishift_epi64_epi8(__X, __Y); } diff --git a/clang/test/CodeGen/X86/avx512vbmi2-builtins.c b/clang/test/CodeGen/X86/avx512vbmi2-builtins.c index 1e804c3..4f6139b 100644 --- a/clang/test/CodeGen/X86/avx512vbmi2-builtins.c +++ b/clang/test/CodeGen/X86/avx512vbmi2-builtins.c @@ -1,328 +1,331 @@ -// RUN: %clang_cc1 -flax-vector-conversions=none -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +avx512vbmi2 -emit-llvm -o - -Wall -Werror | FileCheck %s +// RUN: %clang_cc1 -x c -flax-vector-conversions=none -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +avx512vbmi2 -emit-llvm -o - -Wall -Werror | FileCheck %s +// RUN: %clang_cc1 -x c -flax-vector-conversions=none -ffreestanding %s -triple=i386-apple-darwin -target-feature +avx512vbmi2 -emit-llvm -o - -Wall -Werror | FileCheck %s +// RUN: %clang_cc1 -x c++ -flax-vector-conversions=none -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +avx512vbmi2 -emit-llvm -o - -Wall -Werror | FileCheck %s +// RUN: %clang_cc1 -x c++ -flax-vector-conversions=none -ffreestanding %s -triple=i386-apple-darwin -target-feature +avx512vbmi2 -emit-llvm -o - -Wall -Werror | FileCheck %s #include <immintrin.h> __m512i test_mm512_mask_compress_epi16(__m512i __S, __mmask32 __U, __m512i __D) { - // CHECK-LABEL: @test_mm512_mask_compress_epi16 - // CHECK: @llvm.x86.avx512.mask.compress + // CHECK-LABEL: test_mm512_mask_compress_epi16 + // CHECK: call <32 x i16> @llvm.x86.avx512.mask.compress.v32i16(<32 x i16> %{{.*}}, <32 x i16> %{{.*}}, <32 x i1> %{{.*}}) return _mm512_mask_compress_epi16(__S, __U, __D); } __m512i test_mm512_maskz_compress_epi16(__mmask32 __U, __m512i __D) { - // CHECK-LABEL: @test_mm512_maskz_compress_epi16 - // CHECK: @llvm.x86.avx512.mask.compress + // CHECK-LABEL: test_mm512_maskz_compress_epi16 + // CHECK: call <32 x i16> @llvm.x86.avx512.mask.compress.v32i16(<32 x i16> %{{.*}}, <32 x i16> %{{.*}}, <32 x i1> %{{.*}}) return _mm512_maskz_compress_epi16(__U, __D); } __m512i test_mm512_mask_compress_epi8(__m512i __S, __mmask64 __U, __m512i __D) { - // CHECK-LABEL: @test_mm512_mask_compress_epi8 - // CHECK: @llvm.x86.avx512.mask.compress + // CHECK-LABEL: test_mm512_mask_compress_epi8 + // CHECK: call <64 x i8> @llvm.x86.avx512.mask.compress.v64i8(<64 x i8> %{{.*}}, <64 x i8> %{{.*}}, <64 x i1> %{{.*}}) return _mm512_mask_compress_epi8(__S, __U, __D); } __m512i test_mm512_maskz_compress_epi8(__mmask64 __U, __m512i __D) { - // CHECK-LABEL: @test_mm512_maskz_compress_epi8 - // CHECK: @llvm.x86.avx512.mask.compress + // CHECK-LABEL: test_mm512_maskz_compress_epi8 + // CHECK: call <64 x i8> @llvm.x86.avx512.mask.compress.v64i8(<64 x i8> %{{.*}}, <64 x i8> %{{.*}}, <64 x i1> %{{.*}}) return _mm512_maskz_compress_epi8(__U, __D); } void test_mm512_mask_compressstoreu_epi16(void *__P, __mmask32 __U, __m512i __D) { - // CHECK-LABEL: @test_mm512_mask_compressstoreu_epi16 - // CHECK: @llvm.masked.compressstore.v32i16(<32 x i16> %{{.*}}, ptr %{{.*}}, <32 x i1> %{{.*}}) + // CHECK-LABEL: test_mm512_mask_compressstoreu_epi16 + // CHECK: call void @llvm.masked.compressstore.v32i16(<32 x i16> %{{.*}}, ptr %{{.*}}, <32 x i1> %{{.*}}) _mm512_mask_compressstoreu_epi16(__P, __U, __D); } void test_mm512_mask_compressstoreu_epi8(void *__P, __mmask64 __U, __m512i __D) { - // CHECK-LABEL: @test_mm512_mask_compressstoreu_epi8 - // CHECK: @llvm.masked.compressstore.v64i8(<64 x i8> %{{.*}}, ptr %{{.*}}, <64 x i1> %{{.*}}) + // CHECK-LABEL: test_mm512_mask_compressstoreu_epi8 + // CHECK: call void @llvm.masked.compressstore.v64i8(<64 x i8> %{{.*}}, ptr %{{.*}}, <64 x i1> %{{.*}}) _mm512_mask_compressstoreu_epi8(__P, __U, __D); } __m512i test_mm512_mask_expand_epi16(__m512i __S, __mmask32 __U, __m512i __D) { - // CHECK-LABEL: @test_mm512_mask_expand_epi16 - // CHECK: @llvm.x86.avx512.mask.expand + // CHECK-LABEL: test_mm512_mask_expand_epi16 + // CHECK: call <32 x i16> @llvm.x86.avx512.mask.expand.v32i16(<32 x i16> %{{.*}}, <32 x i16> %{{.*}}, <32 x i1> %{{.*}}) return _mm512_mask_expand_epi16(__S, __U, __D); } __m512i test_mm512_maskz_expand_epi16(__mmask32 __U, __m512i __D) { - // CHECK-LABEL: @test_mm512_maskz_expand_epi16 - // CHECK: @llvm.x86.avx512.mask.expand + // CHECK-LABEL: test_mm512_maskz_expand_epi16 + // CHECK: call <32 x i16> @llvm.x86.avx512.mask.expand.v32i16(<32 x i16> %{{.*}}, <32 x i16> %{{.*}}, <32 x i1> %{{.*}}) return _mm512_maskz_expand_epi16(__U, __D); } __m512i test_mm512_mask_expand_epi8(__m512i __S, __mmask64 __U, __m512i __D) { - // CHECK-LABEL: @test_mm512_mask_expand_epi8 - // CHECK: @llvm.x86.avx512.mask.expand + // CHECK-LABEL: test_mm512_mask_expand_epi8 + // CHECK: call <64 x i8> @llvm.x86.avx512.mask.expand.v64i8(<64 x i8> %{{.*}}, <64 x i8> %{{.*}}, <64 x i1> %{{.*}}) return _mm512_mask_expand_epi8(__S, __U, __D); } __m512i test_mm512_maskz_expand_epi8(__mmask64 __U, __m512i __D) { - // CHECK-LABEL: @test_mm512_maskz_expand_epi8 - // CHECK: @llvm.x86.avx512.mask.expand + // CHECK-LABEL: test_mm512_maskz_expand_epi8 + // CHECK: call <64 x i8> @llvm.x86.avx512.mask.expand.v64i8(<64 x i8> %{{.*}}, <64 x i8> %{{.*}}, <64 x i1> %{{.*}}) return _mm512_maskz_expand_epi8(__U, __D); } __m512i test_mm512_mask_expandloadu_epi16(__m512i __S, __mmask32 __U, void const* __P) { - // CHECK-LABEL: @test_mm512_mask_expandloadu_epi16 - // CHECK: @llvm.masked.expandload.v32i16(ptr %{{.*}}, <32 x i1> %{{.*}}, <32 x i16> %{{.*}}) + // CHECK-LABEL: test_mm512_mask_expandloadu_epi16 + // CHECK: call <32 x i16> @llvm.masked.expandload.v32i16(ptr %{{.*}}, <32 x i1> %{{.*}}, <32 x i16> %{{.*}}) return _mm512_mask_expandloadu_epi16(__S, __U, __P); } __m512i test_mm512_maskz_expandloadu_epi16(__mmask32 __U, void const* __P) { - // CHECK-LABEL: @test_mm512_maskz_expandloadu_epi16 - // CHECK: @llvm.masked.expandload.v32i16(ptr %{{.*}}, <32 x i1> %{{.*}}, <32 x i16> %{{.*}}) + // CHECK-LABEL: test_mm512_maskz_expandloadu_epi16 + // CHECK: call <32 x i16> @llvm.masked.expandload.v32i16(ptr %{{.*}}, <32 x i1> %{{.*}}, <32 x i16> %{{.*}}) return _mm512_maskz_expandloadu_epi16(__U, __P); } __m512i test_mm512_mask_expandloadu_epi8(__m512i __S, __mmask64 __U, void const* __P) { - // CHECK-LABEL: @test_mm512_mask_expandloadu_epi8 - // CHECK: @llvm.masked.expandload.v64i8(ptr %{{.*}}, <64 x i1> %{{.*}}, <64 x i8> %{{.*}}) + // CHECK-LABEL: test_mm512_mask_expandloadu_epi8 + // CHECK: call <64 x i8> @llvm.masked.expandload.v64i8(ptr %{{.*}}, <64 x i1> %{{.*}}, <64 x i8> %{{.*}}) return _mm512_mask_expandloadu_epi8(__S, __U, __P); } __m512i test_mm512_maskz_expandloadu_epi8(__mmask64 __U, void const* __P) { - // CHECK-LABEL: @test_mm512_maskz_expandloadu_epi8 - // CHECK: @llvm.masked.expandload.v64i8(ptr %{{.*}}, <64 x i1> %{{.*}}, <64 x i8> %{{.*}}) + // CHECK-LABEL: test_mm512_maskz_expandloadu_epi8 + // CHECK: call <64 x i8> @llvm.masked.expandload.v64i8(ptr %{{.*}}, <64 x i1> %{{.*}}, <64 x i8> %{{.*}}) return _mm512_maskz_expandloadu_epi8(__U, __P); } __m512i test_mm512_mask_shldi_epi64(__m512i __S, __mmask8 __U, __m512i __A, __m512i __B) { - // CHECK-LABEL: @test_mm512_mask_shldi_epi64 - // CHECK: @llvm.fshl.v8i64(<8 x i64> %{{.*}}, <8 x i64> %{{.*}}, <8 x i64> splat (i64 47)) + // CHECK-LABEL: test_mm512_mask_shldi_epi64 + // CHECK: call <8 x i64> @llvm.fshl.v8i64(<8 x i64> %{{.*}}, <8 x i64> %{{.*}}, <8 x i64> splat (i64 47)) // CHECK: select <8 x i1> %{{.*}}, <8 x i64> %{{.*}}, <8 x i64> %{{.*}} return _mm512_mask_shldi_epi64(__S, __U, __A, __B, 47); } __m512i test_mm512_maskz_shldi_epi64(__mmask8 __U, __m512i __A, __m512i __B) { - // CHECK-LABEL: @test_mm512_maskz_shldi_epi64 - // CHECK: @llvm.fshl.v8i64(<8 x i64> %{{.*}}, <8 x i64> %{{.*}}, <8 x i64> splat (i64 63)) + // CHECK-LABEL: test_mm512_maskz_shldi_epi64 + // CHECK: call <8 x i64> @llvm.fshl.v8i64(<8 x i64> %{{.*}}, <8 x i64> %{{.*}}, <8 x i64> splat (i64 63)) // CHECK: select <8 x i1> %{{.*}}, <8 x i64> %{{.*}}, <8 x i64> %{{.*}} return _mm512_maskz_shldi_epi64(__U, __A, __B, 63); } __m512i test_mm512_shldi_epi64(__m512i __A, __m512i __B) { - // CHECK-LABEL: @test_mm512_shldi_epi64 - // CHECK: @llvm.fshl.v8i64(<8 x i64> %{{.*}}, <8 x i64> %{{.*}}, <8 x i64> splat (i64 31)) + // CHECK-LABEL: test_mm512_shldi_epi64 + // CHECK: call <8 x i64> @llvm.fshl.v8i64(<8 x i64> %{{.*}}, <8 x i64> %{{.*}}, <8 x i64> splat (i64 31)) return _mm512_shldi_epi64(__A, __B, 31); } __m512i test_mm512_mask_shldi_epi32(__m512i __S, __mmask16 __U, __m512i __A, __m512i __B) { - // CHECK-LABEL: @test_mm512_mask_shldi_epi32 - // CHECK: @llvm.fshl.v16i32(<16 x i32> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> splat (i32 7)) + // CHECK-LABEL: test_mm512_mask_shldi_epi32 + // CHECK: call <16 x i32> @llvm.fshl.v16i32(<16 x i32> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> splat (i32 7)) // CHECK: select <16 x i1> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}} return _mm512_mask_shldi_epi32(__S, __U, __A, __B, 7); } __m512i test_mm512_maskz_shldi_epi32(__mmask16 __U, __m512i __A, __m512i __B) { - // CHECK-LABEL: @test_mm512_maskz_shldi_epi32 - // CHECK: @llvm.fshl.v16i32(<16 x i32> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> splat (i32 15)) + // CHECK-LABEL: test_mm512_maskz_shldi_epi32 + // CHECK: call <16 x i32> @llvm.fshl.v16i32(<16 x i32> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> splat (i32 15)) // CHECK: select <16 x i1> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}} return _mm512_maskz_shldi_epi32(__U, __A, __B, 15); } __m512i test_mm512_shldi_epi32(__m512i __A, __m512i __B) { - // CHECK-LABEL: @test_mm512_shldi_epi32 - // CHECK: @llvm.fshl.v16i32(<16 x i32> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> splat (i32 31)) + // CHECK-LABEL: test_mm512_shldi_epi32 + // CHECK: call <16 x i32> @llvm.fshl.v16i32(<16 x i32> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> splat (i32 31)) return _mm512_shldi_epi32(__A, __B, 31); } __m512i test_mm512_mask_shldi_epi16(__m512i __S, __mmask32 __U, __m512i __A, __m512i __B) { - // CHECK-LABEL: @test_mm512_mask_shldi_epi16 - // CHECK: @llvm.fshl.v32i16(<32 x i16> %{{.*}}, <32 x i16> %{{.*}}, <32 x i16> splat (i16 3)) + // CHECK-LABEL: test_mm512_mask_shldi_epi16 + // CHECK: call <32 x i16> @llvm.fshl.v32i16(<32 x i16> %{{.*}}, <32 x i16> %{{.*}}, <32 x i16> splat (i16 3)) // CHECK: select <32 x i1> %{{.*}}, <32 x i16> %{{.*}}, <32 x i16> %{{.*}} return _mm512_mask_shldi_epi16(__S, __U, __A, __B, 3); } __m512i test_mm512_maskz_shldi_epi16(__mmask32 __U, __m512i __A, __m512i __B) { - // CHECK-LABEL: @test_mm512_maskz_shldi_epi16 - // CHECK: @llvm.fshl.v32i16(<32 x i16> %{{.*}}, <32 x i16> %{{.*}}, <32 x i16> splat (i16 7)) + // CHECK-LABEL: test_mm512_maskz_shldi_epi16 + // CHECK: call <32 x i16> @llvm.fshl.v32i16(<32 x i16> %{{.*}}, <32 x i16> %{{.*}}, <32 x i16> splat (i16 7)) // CHECK: select <32 x i1> %{{.*}}, <32 x i16> %{{.*}}, <32 x i16> %{{.*}} return _mm512_maskz_shldi_epi16(__U, __A, __B, 7); } __m512i test_mm512_shldi_epi16(__m512i __A, __m512i __B) { - // CHECK-LABEL: @test_mm512_shldi_epi16 - // CHECK: @llvm.fshl.v32i16(<32 x i16> %{{.*}}, <32 x i16> %{{.*}}, <32 x i16> splat (i16 15)) + // CHECK-LABEL: test_mm512_shldi_epi16 + // CHECK: call <32 x i16> @llvm.fshl.v32i16(<32 x i16> %{{.*}}, <32 x i16> %{{.*}}, <32 x i16> splat (i16 15)) return _mm512_shldi_epi16(__A, __B, 15); } __m512i test_mm512_mask_shrdi_epi64(__m512i __S, __mmask8 __U, __m512i __A, __m512i __B) { - // CHECK-LABEL: @test_mm512_mask_shrdi_epi64 - // CHECK: @llvm.fshr.v8i64(<8 x i64> %{{.*}}, <8 x i64> %{{.*}}, <8 x i64> splat (i64 47)) + // CHECK-LABEL: test_mm512_mask_shrdi_epi64 + // CHECK: call <8 x i64> @llvm.fshr.v8i64(<8 x i64> %{{.*}}, <8 x i64> %{{.*}}, <8 x i64> splat (i64 47)) // CHECK: select <8 x i1> %{{.*}}, <8 x i64> %{{.*}}, <8 x i64> %{{.*}} return _mm512_mask_shrdi_epi64(__S, __U, __A, __B, 47); } __m512i test_mm512_maskz_shrdi_epi64(__mmask8 __U, __m512i __A, __m512i __B) { - // CHECK-LABEL: @test_mm512_maskz_shrdi_epi64 - // CHECK: @llvm.fshr.v8i64(<8 x i64> %{{.*}}, <8 x i64> %{{.*}}, <8 x i64> splat (i64 63)) + // CHECK-LABEL: test_mm512_maskz_shrdi_epi64 + // CHECK: call <8 x i64> @llvm.fshr.v8i64(<8 x i64> %{{.*}}, <8 x i64> %{{.*}}, <8 x i64> splat (i64 63)) // CHECK: select <8 x i1> %{{.*}}, <8 x i64> %{{.*}}, <8 x i64> %{{.*}} return _mm512_maskz_shrdi_epi64(__U, __A, __B, 63); } __m512i test_mm512_shrdi_epi64(__m512i __A, __m512i __B) { - // CHECK-LABEL: @test_mm512_shrdi_epi64 - // CHECK: @llvm.fshr.v8i64(<8 x i64> %{{.*}}, <8 x i64> %{{.*}}, <8 x i64> splat (i64 31)) + // CHECK-LABEL: test_mm512_shrdi_epi64 + // CHECK: call <8 x i64> @llvm.fshr.v8i64(<8 x i64> %{{.*}}, <8 x i64> %{{.*}}, <8 x i64> splat (i64 31)) return _mm512_shrdi_epi64(__A, __B, 31); } __m512i test_mm512_mask_shrdi_epi32(__m512i __S, __mmask16 __U, __m512i __A, __m512i __B) { - // CHECK-LABEL: @test_mm512_mask_shrdi_epi32 - // CHECK: @llvm.fshr.v16i32(<16 x i32> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> splat (i32 7)) + // CHECK-LABEL: test_mm512_mask_shrdi_epi32 + // CHECK: call <16 x i32> @llvm.fshr.v16i32(<16 x i32> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> splat (i32 7)) // CHECK: select <16 x i1> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}} return _mm512_mask_shrdi_epi32(__S, __U, __A, __B, 7); } __m512i test_mm512_maskz_shrdi_epi32(__mmask16 __U, __m512i __A, __m512i __B) { - // CHECK-LABEL: @test_mm512_maskz_shrdi_epi32 - // CHECK: @llvm.fshr.v16i32(<16 x i32> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> splat (i32 15)) + // CHECK-LABEL: test_mm512_maskz_shrdi_epi32 + // CHECK: call <16 x i32> @llvm.fshr.v16i32(<16 x i32> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> splat (i32 15)) // CHECK: select <16 x i1> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}} return _mm512_maskz_shrdi_epi32(__U, __A, __B, 15); } __m512i test_mm512_shrdi_epi32(__m512i __A, __m512i __B) { - // CHECK-LABEL: @test_mm512_shrdi_epi32 - // CHECK: @llvm.fshr.v16i32(<16 x i32> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> splat (i32 31)) + // CHECK-LABEL: test_mm512_shrdi_epi32 + // CHECK: call <16 x i32> @llvm.fshr.v16i32(<16 x i32> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> splat (i32 31)) return _mm512_shrdi_epi32(__A, __B, 31); } __m512i test_mm512_mask_shrdi_epi16(__m512i __S, __mmask32 __U, __m512i __A, __m512i __B) { - // CHECK-LABEL: @test_mm512_mask_shrdi_epi16 - // CHECK: @llvm.fshr.v32i16(<32 x i16> %{{.*}}, <32 x i16> %{{.*}}, <32 x i16> splat (i16 3)) + // CHECK-LABEL: test_mm512_mask_shrdi_epi16 + // CHECK: call <32 x i16> @llvm.fshr.v32i16(<32 x i16> %{{.*}}, <32 x i16> %{{.*}}, <32 x i16> splat (i16 3)) // CHECK: select <32 x i1> %{{.*}}, <32 x i16> %{{.*}}, <32 x i16> %{{.*}} return _mm512_mask_shrdi_epi16(__S, __U, __A, __B, 3); } __m512i test_mm512_maskz_shrdi_epi16(__mmask32 __U, __m512i __A, __m512i __B) { - // CHECK-LABEL: @test_mm512_maskz_shrdi_epi16 - // CHECK: @llvm.fshr.v32i16(<32 x i16> %{{.*}}, <32 x i16> %{{.*}}, <32 x i16> splat (i16 15)) + // CHECK-LABEL: test_mm512_maskz_shrdi_epi16 + // CHECK: call <32 x i16> @llvm.fshr.v32i16(<32 x i16> %{{.*}}, <32 x i16> %{{.*}}, <32 x i16> splat (i16 15)) // CHECK: select <32 x i1> %{{.*}}, <32 x i16> %{{.*}}, <32 x i16> %{{.*}} return _mm512_maskz_shrdi_epi16(__U, __A, __B, 15); } __m512i test_mm512_shrdi_epi16(__m512i __A, __m512i __B) { - // CHECK-LABEL: @test_mm512_shrdi_epi16 - // CHECK: @llvm.fshr.v32i16(<32 x i16> %{{.*}}, <32 x i16> %{{.*}}, <32 x i16> splat (i16 31)) + // CHECK-LABEL: test_mm512_shrdi_epi16 + // CHECK: call <32 x i16> @llvm.fshr.v32i16(<32 x i16> %{{.*}}, <32 x i16> %{{.*}}, <32 x i16> splat (i16 31)) return _mm512_shrdi_epi16(__A, __B, 31); } __m512i test_mm512_mask_shldv_epi64(__m512i __S, __mmask8 __U, __m512i __A, __m512i __B) { - // CHECK-LABEL: @test_mm512_mask_shldv_epi64 - // CHECK: @llvm.fshl.v8i64(<8 x i64> %{{.*}}, <8 x i64> %{{.*}}, <8 x i64> %{{.*}}) + // CHECK-LABEL: test_mm512_mask_shldv_epi64 + // CHECK: call {{.*}}<8 x i64> @llvm.fshl.v8i64(<8 x i64> %{{.*}}, <8 x i64> %{{.*}}, <8 x i64> %{{.*}}) // CHECK: select <8 x i1> %{{.*}}, <8 x i64> %{{.*}}, <8 x i64> %{{.*}} return _mm512_mask_shldv_epi64(__S, __U, __A, __B); } __m512i test_mm512_maskz_shldv_epi64(__mmask8 __U, __m512i __S, __m512i __A, __m512i __B) { - // CHECK-LABEL: @test_mm512_maskz_shldv_epi64 - // CHECK: @llvm.fshl.v8i64(<8 x i64> %{{.*}}, <8 x i64> %{{.*}}, <8 x i64> %{{.*}}) + // CHECK-LABEL: test_mm512_maskz_shldv_epi64 + // CHECK: call {{.*}}<8 x i64> @llvm.fshl.v8i64(<8 x i64> %{{.*}}, <8 x i64> %{{.*}}, <8 x i64> %{{.*}}) // CHECK: select <8 x i1> %{{.*}}, <8 x i64> %{{.*}}, <8 x i64> %{{.*}} return _mm512_maskz_shldv_epi64(__U, __S, __A, __B); } __m512i test_mm512_shldv_epi64(__m512i __S, __m512i __A, __m512i __B) { - // CHECK-LABEL: @test_mm512_shldv_epi64 - // CHECK: @llvm.fshl.v8i64(<8 x i64> %{{.*}}, <8 x i64> %{{.*}}, <8 x i64> %{{.*}}) + // CHECK-LABEL: test_mm512_shldv_epi64 + // CHECK: call {{.*}}<8 x i64> @llvm.fshl.v8i64(<8 x i64> %{{.*}}, <8 x i64> %{{.*}}, <8 x i64> %{{.*}}) return _mm512_shldv_epi64(__S, __A, __B); } __m512i test_mm512_mask_shldv_epi32(__m512i __S, __mmask16 __U, __m512i __A, __m512i __B) { - // CHECK-LABEL: @test_mm512_mask_shldv_epi32 - // CHECK: @llvm.fshl.v16i32(<16 x i32> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}}) + // CHECK-LABEL: test_mm512_mask_shldv_epi32 + // CHECK: call <16 x i32> @llvm.fshl.v16i32(<16 x i32> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}}) // CHECK: select <16 x i1> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}} return _mm512_mask_shldv_epi32(__S, __U, __A, __B); } __m512i test_mm512_maskz_shldv_epi32(__mmask16 __U, __m512i __S, __m512i __A, __m512i __B) { - // CHECK-LABEL: @test_mm512_maskz_shldv_epi32 - // CHECK: @llvm.fshl.v16i32(<16 x i32> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}}) + // CHECK-LABEL: test_mm512_maskz_shldv_epi32 + // CHECK: call <16 x i32> @llvm.fshl.v16i32(<16 x i32> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}}) // CHECK: select <16 x i1> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}} return _mm512_maskz_shldv_epi32(__U, __S, __A, __B); } __m512i test_mm512_shldv_epi32(__m512i __S, __m512i __A, __m512i __B) { - // CHECK-LABEL: @test_mm512_shldv_epi32 - // CHECK: @llvm.fshl.v16i32(<16 x i32> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}}) + // CHECK-LABEL: test_mm512_shldv_epi32 + // CHECK: call <16 x i32> @llvm.fshl.v16i32(<16 x i32> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}}) return _mm512_shldv_epi32(__S, __A, __B); } __m512i test_mm512_mask_shldv_epi16(__m512i __S, __mmask32 __U, __m512i __A, __m512i __B) { - // CHECK-LABEL: @test_mm512_mask_shldv_epi16 - // CHECK: @llvm.fshl.v32i16(<32 x i16> %{{.*}}, <32 x i16> %{{.*}}, <32 x i16> %{{.*}}) + // CHECK-LABEL: test_mm512_mask_shldv_epi16 + // CHECK: call <32 x i16> @llvm.fshl.v32i16(<32 x i16> %{{.*}}, <32 x i16> %{{.*}}, <32 x i16> %{{.*}}) // CHECK: select <32 x i1> %{{.*}}, <32 x i16> %{{.*}}, <32 x i16> %{{.*}} return _mm512_mask_shldv_epi16(__S, __U, __A, __B); } __m512i test_mm512_maskz_shldv_epi16(__mmask32 __U, __m512i __S, __m512i __A, __m512i __B) { - // CHECK-LABEL: @test_mm512_maskz_shldv_epi16 - // CHECK: @llvm.fshl.v32i16(<32 x i16> %{{.*}}, <32 x i16> %{{.*}}, <32 x i16> %{{.*}}) + // CHECK-LABEL: test_mm512_maskz_shldv_epi16 + // CHECK: call <32 x i16> @llvm.fshl.v32i16(<32 x i16> %{{.*}}, <32 x i16> %{{.*}}, <32 x i16> %{{.*}}) // CHECK: select <32 x i1> %{{.*}}, <32 x i16> %{{.*}}, <32 x i16> %{{.*}} return _mm512_maskz_shldv_epi16(__U, __S, __A, __B); } __m512i test_mm512_shldv_epi16(__m512i __S, __m512i __A, __m512i __B) { - // CHECK-LABEL: @test_mm512_shldv_epi16 - // CHECK: @llvm.fshl.v32i16(<32 x i16> %{{.*}}, <32 x i16> %{{.*}}, <32 x i16> %{{.*}}) + // CHECK-LABEL: test_mm512_shldv_epi16 + // CHECK: call <32 x i16> @llvm.fshl.v32i16(<32 x i16> %{{.*}}, <32 x i16> %{{.*}}, <32 x i16> %{{.*}}) return _mm512_shldv_epi16(__S, __A, __B); } __m512i test_mm512_mask_shrdv_epi64(__m512i __S, __mmask8 __U, __m512i __A, __m512i __B) { - // CHECK-LABEL: @test_mm512_mask_shrdv_epi64 - // CHECK: @llvm.fshr.v8i64(<8 x i64> %{{.*}}, <8 x i64> %{{.*}}, <8 x i64> %{{.*}}) + // CHECK-LABEL: test_mm512_mask_shrdv_epi64 + // CHECK: call {{.*}}<8 x i64> @llvm.fshr.v8i64(<8 x i64> %{{.*}}, <8 x i64> %{{.*}}, <8 x i64> %{{.*}}) // CHECK: select <8 x i1> %{{.*}}, <8 x i64> %{{.*}}, <8 x i64> %{{.*}} return _mm512_mask_shrdv_epi64(__S, __U, __A, __B); } __m512i test_mm512_maskz_shrdv_epi64(__mmask8 __U, __m512i __S, __m512i __A, __m512i __B) { - // CHECK-LABEL: @test_mm512_maskz_shrdv_epi64 - // CHECK: @llvm.fshr.v8i64(<8 x i64> %{{.*}}, <8 x i64> %{{.*}}, <8 x i64> %{{.*}}) + // CHECK-LABEL: test_mm512_maskz_shrdv_epi64 + // CHECK: call {{.*}}<8 x i64> @llvm.fshr.v8i64(<8 x i64> %{{.*}}, <8 x i64> %{{.*}}, <8 x i64> %{{.*}}) // CHECK: select <8 x i1> %{{.*}}, <8 x i64> %{{.*}}, <8 x i64> %{{.*}} return _mm512_maskz_shrdv_epi64(__U, __S, __A, __B); } __m512i test_mm512_shrdv_epi64(__m512i __S, __m512i __A, __m512i __B) { - // CHECK-LABEL: @test_mm512_shrdv_epi64 - // CHECK: @llvm.fshr.v8i64(<8 x i64> %{{.*}}, <8 x i64> %{{.*}}, <8 x i64> %{{.*}}) + // CHECK-LABEL: test_mm512_shrdv_epi64 + // CHECK: call {{.*}}<8 x i64> @llvm.fshr.v8i64(<8 x i64> %{{.*}}, <8 x i64> %{{.*}}, <8 x i64> %{{.*}}) return _mm512_shrdv_epi64(__S, __A, __B); } __m512i test_mm512_mask_shrdv_epi32(__m512i __S, __mmask16 __U, __m512i __A, __m512i __B) { - // CHECK-LABEL: @test_mm512_mask_shrdv_epi32 - // CHECK: @llvm.fshr.v16i32(<16 x i32> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}}) + // CHECK-LABEL: test_mm512_mask_shrdv_epi32 + // CHECK: call <16 x i32> @llvm.fshr.v16i32(<16 x i32> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}}) // CHECK: select <16 x i1> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}} return _mm512_mask_shrdv_epi32(__S, __U, __A, __B); } __m512i test_mm512_maskz_shrdv_epi32(__mmask16 __U, __m512i __S, __m512i __A, __m512i __B) { - // CHECK-LABEL: @test_mm512_maskz_shrdv_epi32 - // CHECK: @llvm.fshr.v16i32(<16 x i32> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}}) + // CHECK-LABEL: test_mm512_maskz_shrdv_epi32 + // CHECK: call <16 x i32> @llvm.fshr.v16i32(<16 x i32> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}}) // CHECK: select <16 x i1> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}} return _mm512_maskz_shrdv_epi32(__U, __S, __A, __B); } __m512i test_mm512_shrdv_epi32(__m512i __S, __m512i __A, __m512i __B) { - // CHECK-LABEL: @test_mm512_shrdv_epi32 - // CHECK: @llvm.fshr.v16i32(<16 x i32> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}}) + // CHECK-LABEL: test_mm512_shrdv_epi32 + // CHECK: call <16 x i32> @llvm.fshr.v16i32(<16 x i32> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}}) return _mm512_shrdv_epi32(__S, __A, __B); } __m512i test_mm512_mask_shrdv_epi16(__m512i __S, __mmask32 __U, __m512i __A, __m512i __B) { - // CHECK-LABEL: @test_mm512_mask_shrdv_epi16 - // CHECK: @llvm.fshr.v32i16(<32 x i16> %{{.*}}, <32 x i16> %{{.*}}, <32 x i16> %{{.*}}) + // CHECK-LABEL: test_mm512_mask_shrdv_epi16 + // CHECK: call <32 x i16> @llvm.fshr.v32i16(<32 x i16> %{{.*}}, <32 x i16> %{{.*}}, <32 x i16> %{{.*}}) // CHECK: select <32 x i1> %{{.*}}, <32 x i16> %{{.*}}, <32 x i16> %{{.*}} return _mm512_mask_shrdv_epi16(__S, __U, __A, __B); } __m512i test_mm512_maskz_shrdv_epi16(__mmask32 __U, __m512i __S, __m512i __A, __m512i __B) { - // CHECK-LABEL: @test_mm512_maskz_shrdv_epi16 - // CHECK: @llvm.fshr.v32i16(<32 x i16> %{{.*}}, <32 x i16> %{{.*}}, <32 x i16> %{{.*}}) + // CHECK-LABEL: test_mm512_maskz_shrdv_epi16 + // CHECK: call <32 x i16> @llvm.fshr.v32i16(<32 x i16> %{{.*}}, <32 x i16> %{{.*}}, <32 x i16> %{{.*}}) // CHECK: select <32 x i1> %{{.*}}, <32 x i16> %{{.*}}, <32 x i16> %{{.*}} return _mm512_maskz_shrdv_epi16(__U, __S, __A, __B); } __m512i test_mm512_shrdv_epi16(__m512i __S, __m512i __A, __m512i __B) { - // CHECK-LABEL: @test_mm512_shrdv_epi16 - // CHECK: @llvm.fshr.v32i16(<32 x i16> %{{.*}}, <32 x i16> %{{.*}}, <32 x i16> %{{.*}}) + // CHECK-LABEL: test_mm512_shrdv_epi16 + // CHECK: call <32 x i16> @llvm.fshr.v32i16(<32 x i16> %{{.*}}, <32 x i16> %{{.*}}, <32 x i16> %{{.*}}) return _mm512_shrdv_epi16(__S, __A, __B); } diff --git a/clang/test/CodeGen/X86/avx512vbmivl-builtin.c b/clang/test/CodeGen/X86/avx512vbmivl-builtin.c index 2562da26..c4d5fc8 100644 --- a/clang/test/CodeGen/X86/avx512vbmivl-builtin.c +++ b/clang/test/CodeGen/X86/avx512vbmivl-builtin.c @@ -1,139 +1,142 @@ -// RUN: %clang_cc1 -flax-vector-conversions=none -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +avx512vbmi -target-feature +avx512vl -target-feature +avx512bw -emit-llvm -o - -Wall -Werror | FileCheck %s +// RUN: %clang_cc1 -x c -flax-vector-conversions=none -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +avx512vbmi -target-feature +avx512vl -target-feature +avx512bw -emit-llvm -o - -Wall -Werror | FileCheck %s +// RUN: %clang_cc1 -x c -flax-vector-conversions=none -ffreestanding %s -triple=i386-apple-darwin -target-feature +avx512vbmi -target-feature +avx512vl -target-feature +avx512bw -emit-llvm -o - -Wall -Werror | FileCheck %s +// RUN: %clang_cc1 -x c++ -flax-vector-conversions=none -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +avx512vbmi -target-feature +avx512vl -target-feature +avx512bw -emit-llvm -o - -Wall -Werror | FileCheck %s +// RUN: %clang_cc1 -x c++ -flax-vector-conversions=none -ffreestanding %s -triple=i386-apple-darwin -target-feature +avx512vbmi -target-feature +avx512vl -target-feature +avx512bw -emit-llvm -o - -Wall -Werror | FileCheck %s #include <immintrin.h> __m128i test_mm_permutexvar_epi8(__m128i __A, __m128i __B) { - // CHECK-LABEL: @test_mm_permutexvar_epi8 - // CHECK: @llvm.x86.avx512.permvar.qi.128 + // CHECK-LABEL: test_mm_permutexvar_epi8 + // CHECK: call <16 x i8> @llvm.x86.avx512.permvar.qi.128(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}) return _mm_permutexvar_epi8(__A, __B); } __m128i test_mm_maskz_permutexvar_epi8(__mmask16 __M, __m128i __A, __m128i __B) { - // CHECK-LABEL: @test_mm_maskz_permutexvar_epi8 - // CHECK: @llvm.x86.avx512.permvar.qi.128 + // CHECK-LABEL: test_mm_maskz_permutexvar_epi8 + // CHECK: call <16 x i8> @llvm.x86.avx512.permvar.qi.128(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}) // CHECK: select <16 x i1> %{{.*}}, <16 x i8> %{{.*}}, <16 x i8> %{{.*}} return _mm_maskz_permutexvar_epi8(__M, __A, __B); } __m128i test_mm_mask_permutexvar_epi8(__m128i __W, __mmask16 __M, __m128i __A, __m128i __B) { - // CHECK-LABEL: @test_mm_mask_permutexvar_epi8 - // CHECK: @llvm.x86.avx512.permvar.qi.128 + // CHECK-LABEL: test_mm_mask_permutexvar_epi8 + // CHECK: call <16 x i8> @llvm.x86.avx512.permvar.qi.128(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}) // CHECK: select <16 x i1> %{{.*}}, <16 x i8> %{{.*}}, <16 x i8> %{{.*}} return _mm_mask_permutexvar_epi8(__W, __M, __A, __B); } __m256i test_mm256_permutexvar_epi8(__m256i __A, __m256i __B) { - // CHECK-LABEL: @test_mm256_permutexvar_epi8 - // CHECK: @llvm.x86.avx512.permvar.qi.256 + // CHECK-LABEL: test_mm256_permutexvar_epi8 + // CHECK: call <32 x i8> @llvm.x86.avx512.permvar.qi.256(<32 x i8> %{{.*}}, <32 x i8> %{{.*}}) return _mm256_permutexvar_epi8(__A, __B); } __m256i test_mm256_maskz_permutexvar_epi8(__mmask32 __M, __m256i __A, __m256i __B) { - // CHECK-LABEL: @test_mm256_maskz_permutexvar_epi8 - // CHECK: @llvm.x86.avx512.permvar.qi.256 + // CHECK-LABEL: test_mm256_maskz_permutexvar_epi8 + // CHECK: call <32 x i8> @llvm.x86.avx512.permvar.qi.256(<32 x i8> %{{.*}}, <32 x i8> %{{.*}}) // CHECK: select <32 x i1> %{{.*}}, <32 x i8> %{{.*}}, <32 x i8> %{{.*}} return _mm256_maskz_permutexvar_epi8(__M, __A, __B); } __m256i test_mm256_mask_permutexvar_epi8(__m256i __W, __mmask32 __M, __m256i __A, __m256i __B) { - // CHECK-LABEL: @test_mm256_mask_permutexvar_epi8 - // CHECK: @llvm.x86.avx512.permvar.qi.256 + // CHECK-LABEL: test_mm256_mask_permutexvar_epi8 + // CHECK: call <32 x i8> @llvm.x86.avx512.permvar.qi.256(<32 x i8> %{{.*}}, <32 x i8> %{{.*}}) // CHECK: select <32 x i1> %{{.*}}, <32 x i8> %{{.*}}, <32 x i8> %{{.*}} return _mm256_mask_permutexvar_epi8(__W, __M, __A, __B); } __m128i test_mm_mask2_permutex2var_epi8(__m128i __A, __m128i __I, __mmask16 __U, __m128i __B) { - // CHECK-LABEL: @test_mm_mask2_permutex2var_epi8 - // CHECK: @llvm.x86.avx512.vpermi2var.qi.128 + // CHECK-LABEL: test_mm_mask2_permutex2var_epi8 + // CHECK: call <16 x i8> @llvm.x86.avx512.vpermi2var.qi.128(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, <16 x i8> %{{.*}}) // CHECK: select <16 x i1> %{{.*}}, <16 x i8> %{{.*}}, <16 x i8> %{{.*}} return _mm_mask2_permutex2var_epi8(__A, __I, __U, __B); } __m256i test_mm256_mask2_permutex2var_epi8(__m256i __A, __m256i __I, __mmask32 __U, __m256i __B) { - // CHECK-LABEL: @test_mm256_mask2_permutex2var_epi8 - // CHECK: @llvm.x86.avx512.vpermi2var.qi.256 + // CHECK-LABEL: test_mm256_mask2_permutex2var_epi8 + // CHECK: call <32 x i8> @llvm.x86.avx512.vpermi2var.qi.256(<32 x i8> %{{.*}}, <32 x i8> %{{.*}}, <32 x i8> %{{.*}}) // CHECK: select <32 x i1> %{{.*}}, <32 x i8> %{{.*}}, <32 x i8> %{{.*}} return _mm256_mask2_permutex2var_epi8(__A, __I, __U, __B); } __m128i test_mm_permutex2var_epi8(__m128i __A, __m128i __I, __m128i __B) { - // CHECK-LABEL: @test_mm_permutex2var_epi8 - // CHECK: @llvm.x86.avx512.vpermi2var.qi.128 + // CHECK-LABEL: test_mm_permutex2var_epi8 + // CHECK: call <16 x i8> @llvm.x86.avx512.vpermi2var.qi.128(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, <16 x i8> %{{.*}}) return _mm_permutex2var_epi8(__A, __I, __B); } __m128i test_mm_mask_permutex2var_epi8(__m128i __A, __mmask16 __U, __m128i __I, __m128i __B) { - // CHECK-LABEL: @test_mm_mask_permutex2var_epi8 - // CHECK: @llvm.x86.avx512.vpermi2var.qi.128 + // CHECK-LABEL: test_mm_mask_permutex2var_epi8 + // CHECK: call <16 x i8> @llvm.x86.avx512.vpermi2var.qi.128(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, <16 x i8> %{{.*}}) // CHECK: select <16 x i1> %{{.*}}, <16 x i8> %{{.*}}, <16 x i8> %{{.*}} return _mm_mask_permutex2var_epi8(__A, __U, __I, __B); } __m128i test_mm_maskz_permutex2var_epi8(__mmask16 __U, __m128i __A, __m128i __I, __m128i __B) { - // CHECK-LABEL: @test_mm_maskz_permutex2var_epi8 - // CHECK: @llvm.x86.avx512.vpermi2var.qi.128 + // CHECK-LABEL: test_mm_maskz_permutex2var_epi8 + // CHECK: call <16 x i8> @llvm.x86.avx512.vpermi2var.qi.128(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, <16 x i8> %{{.*}}) // CHECK: select <16 x i1> %{{.*}}, <16 x i8> %{{.*}}, <16 x i8> %{{.*}} return _mm_maskz_permutex2var_epi8(__U, __A, __I, __B); } __m256i test_mm256_permutex2var_epi8(__m256i __A, __m256i __I, __m256i __B) { - // CHECK-LABEL: @test_mm256_permutex2var_epi8 - // CHECK: @llvm.x86.avx512.vpermi2var.qi.256 + // CHECK-LABEL: test_mm256_permutex2var_epi8 + // CHECK: call <32 x i8> @llvm.x86.avx512.vpermi2var.qi.256(<32 x i8> %{{.*}}, <32 x i8> %{{.*}}, <32 x i8> %{{.*}}) return _mm256_permutex2var_epi8(__A, __I, __B); } __m256i test_mm256_mask_permutex2var_epi8(__m256i __A, __mmask32 __U, __m256i __I, __m256i __B) { - // CHECK-LABEL: @test_mm256_mask_permutex2var_epi8 - // CHECK: @llvm.x86.avx512.vpermi2var.qi.256 + // CHECK-LABEL: test_mm256_mask_permutex2var_epi8 + // CHECK: call <32 x i8> @llvm.x86.avx512.vpermi2var.qi.256(<32 x i8> %{{.*}}, <32 x i8> %{{.*}}, <32 x i8> %{{.*}}) // CHECK: select <32 x i1> %{{.*}}, <32 x i8> %{{.*}}, <32 x i8> %{{.*}} return _mm256_mask_permutex2var_epi8(__A, __U, __I, __B); } __m256i test_mm256_maskz_permutex2var_epi8(__mmask32 __U, __m256i __A, __m256i __I, __m256i __B) { - // CHECK-LABEL: @test_mm256_maskz_permutex2var_epi8 - // CHECK: @llvm.x86.avx512.vpermi2var.qi.256 + // CHECK-LABEL: test_mm256_maskz_permutex2var_epi8 + // CHECK: call <32 x i8> @llvm.x86.avx512.vpermi2var.qi.256(<32 x i8> %{{.*}}, <32 x i8> %{{.*}}, <32 x i8> %{{.*}}) // CHECK: select <32 x i1> %{{.*}}, <32 x i8> %{{.*}}, <32 x i8> %{{.*}} return _mm256_maskz_permutex2var_epi8(__U, __A, __I, __B); } __m128i test_mm_mask_multishift_epi64_epi8(__m128i __W, __mmask16 __M, __m128i __X, __m128i __Y) { - // CHECK-LABEL: @test_mm_mask_multishift_epi64_epi8 - // CHECK: @llvm.x86.avx512.pmultishift.qb.128 + // CHECK-LABEL: test_mm_mask_multishift_epi64_epi8 + // CHECK: call <16 x i8> @llvm.x86.avx512.pmultishift.qb.128(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}) // CHECK: select <16 x i1> %{{.*}}, <16 x i8> %{{.*}}, <16 x i8> %{{.*}} return _mm_mask_multishift_epi64_epi8(__W, __M, __X, __Y); } __m128i test_mm_maskz_multishift_epi64_epi8(__mmask16 __M, __m128i __X, __m128i __Y) { - // CHECK-LABEL: @test_mm_maskz_multishift_epi64_epi8 - // CHECK: @llvm.x86.avx512.pmultishift.qb.128 + // CHECK-LABEL: test_mm_maskz_multishift_epi64_epi8 + // CHECK: call <16 x i8> @llvm.x86.avx512.pmultishift.qb.128(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}) // CHECK: select <16 x i1> %{{.*}}, <16 x i8> %{{.*}}, <16 x i8> %{{.*}} return _mm_maskz_multishift_epi64_epi8(__M, __X, __Y); } __m128i test_mm_multishift_epi64_epi8(__m128i __X, __m128i __Y) { - // CHECK-LABEL: @test_mm_multishift_epi64_epi8 - // CHECK: @llvm.x86.avx512.pmultishift.qb.128 + // CHECK-LABEL: test_mm_multishift_epi64_epi8 + // CHECK: call <16 x i8> @llvm.x86.avx512.pmultishift.qb.128(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}) return _mm_multishift_epi64_epi8(__X, __Y); } __m256i test_mm256_mask_multishift_epi64_epi8(__m256i __W, __mmask32 __M, __m256i __X, __m256i __Y) { - // CHECK-LABEL: @test_mm256_mask_multishift_epi64_epi8 - // CHECK: @llvm.x86.avx512.pmultishift.qb.256 + // CHECK-LABEL: test_mm256_mask_multishift_epi64_epi8 + // CHECK: call <32 x i8> @llvm.x86.avx512.pmultishift.qb.256(<32 x i8> %{{.*}}, <32 x i8> %{{.*}}) // CHECK: select <32 x i1> %{{.*}}, <32 x i8> %{{.*}}, <32 x i8> %{{.*}} return _mm256_mask_multishift_epi64_epi8(__W, __M, __X, __Y); } __m256i test_mm256_maskz_multishift_epi64_epi8(__mmask32 __M, __m256i __X, __m256i __Y) { - // CHECK-LABEL: @test_mm256_maskz_multishift_epi64_epi8 - // CHECK: @llvm.x86.avx512.pmultishift.qb.256 + // CHECK-LABEL: test_mm256_maskz_multishift_epi64_epi8 + // CHECK: call <32 x i8> @llvm.x86.avx512.pmultishift.qb.256(<32 x i8> %{{.*}}, <32 x i8> %{{.*}}) // CHECK: select <32 x i1> %{{.*}}, <32 x i8> %{{.*}}, <32 x i8> %{{.*}} return _mm256_maskz_multishift_epi64_epi8(__M, __X, __Y); } __m256i test_mm256_multishift_epi64_epi8(__m256i __X, __m256i __Y) { - // CHECK-LABEL: @test_mm256_multishift_epi64_epi8 - // CHECK: @llvm.x86.avx512.pmultishift.qb.256 + // CHECK-LABEL: test_mm256_multishift_epi64_epi8 + // CHECK: call <32 x i8> @llvm.x86.avx512.pmultishift.qb.256(<32 x i8> %{{.*}}, <32 x i8> %{{.*}}) return _mm256_multishift_epi64_epi8(__X, __Y); } diff --git a/clang/test/CodeGen/X86/avx512vl-builtins.c b/clang/test/CodeGen/X86/avx512vl-builtins.c index 1c2d467..b8dcabb 100644 --- a/clang/test/CodeGen/X86/avx512vl-builtins.c +++ b/clang/test/CodeGen/X86/avx512vl-builtins.c @@ -1,602 +1,607 @@ -// RUN: %clang_cc1 -flax-vector-conversions=none -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +avx512f -target-feature +avx512vl -emit-llvm -o - -Wall -Werror -Wsign-conversion | FileCheck %s +// RUN: %clang_cc1 -x c -flax-vector-conversions=none -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +avx512f -target-feature +avx512vl -emit-llvm -o - -Wall -Werror -Wsign-conversion | FileCheck %s +// RUN: %clang_cc1 -x c++ -flax-vector-conversions=none -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +avx512f -target-feature +avx512vl -emit-llvm -o - -Wall -Werror -Wsign-conversion | FileCheck %s + +// RUN: %clang_cc1 -x c -flax-vector-conversions=none -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +avx512f -target-feature +avx512vl -emit-llvm -o - -Wall -Werror -Wsign-conversion -fexperimental-new-constant-interpreter | FileCheck %s +// RUN: %clang_cc1 -x c++ -flax-vector-conversions=none -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +avx512f -target-feature +avx512vl -emit-llvm -o - -Wall -Werror -Wsign-conversion -fexperimental-new-constant-interpreter | FileCheck %s #include <immintrin.h> +#include "builtin_test_helpers.h" __mmask8 test_mm_cmpeq_epu32_mask(__m128i __a, __m128i __b) { - // CHECK-LABEL: @test_mm_cmpeq_epu32_mask + // CHECK-LABEL: test_mm_cmpeq_epu32_mask // CHECK: icmp eq <4 x i32> %{{.*}}, %{{.*}} // CHECK: shufflevector <4 x i1> %{{.*}}, <4 x i1> zeroinitializer, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7> return (__mmask8)_mm_cmpeq_epu32_mask(__a, __b); } __mmask8 test_mm_mask_cmpeq_epu32_mask(__mmask8 __u, __m128i __a, __m128i __b) { - // CHECK-LABEL: @test_mm_mask_cmpeq_epu32_mask + // CHECK-LABEL: test_mm_mask_cmpeq_epu32_mask // CHECK: icmp eq <4 x i32> %{{.*}}, %{{.*}} // CHECK: and <4 x i1> %{{.*}}, %{{.*}} return (__mmask8)_mm_mask_cmpeq_epu32_mask(__u, __a, __b); } __mmask8 test_mm_cmpeq_epu64_mask(__m128i __a, __m128i __b) { - // CHECK-LABEL: @test_mm_cmpeq_epu64_mask + // CHECK-LABEL: test_mm_cmpeq_epu64_mask // CHECK: icmp eq <2 x i64> %{{.*}}, %{{.*}} // CHECK: shufflevector <2 x i1> %{{.*}}, <2 x i1> zeroinitializer, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 2, i32 3, i32 2, i32 3> return (__mmask8)_mm_cmpeq_epu64_mask(__a, __b); } __mmask8 test_mm_mask_cmpeq_epu64_mask(__mmask8 __u, __m128i __a, __m128i __b) { - // CHECK-LABEL: @test_mm_mask_cmpeq_epu64_mask + // CHECK-LABEL: test_mm_mask_cmpeq_epu64_mask // CHECK: icmp eq <2 x i64> %{{.*}}, %{{.*}} // CHECK: and <2 x i1> %{{.*}}, %{{.*}} return (__mmask8)_mm_mask_cmpeq_epu64_mask(__u, __a, __b); } __mmask8 test_mm_cmpge_epi32_mask(__m128i __a, __m128i __b) { - // CHECK-LABEL: @test_mm_cmpge_epi32_mask + // CHECK-LABEL: test_mm_cmpge_epi32_mask // CHECK: icmp sge <4 x i32> %{{.*}}, %{{.*}} return (__mmask8)_mm_cmpge_epi32_mask(__a, __b); } __mmask8 test_mm_mask_cmpge_epi32_mask(__mmask8 __u, __m128i __a, __m128i __b) { - // CHECK-LABEL: @test_mm_mask_cmpge_epi32_mask + // CHECK-LABEL: test_mm_mask_cmpge_epi32_mask // CHECK: icmp sge <4 x i32> %{{.*}}, %{{.*}} // CHECK: and <4 x i1> %{{.*}}, %{{.*}} return (__mmask8)_mm_mask_cmpge_epi32_mask(__u, __a, __b); } __mmask8 test_mm_cmpge_epi64_mask(__m128i __a, __m128i __b) { - // CHECK-LABEL: @test_mm_cmpge_epi64_mask + // CHECK-LABEL: test_mm_cmpge_epi64_mask // CHECK: icmp sge <2 x i64> %{{.*}}, %{{.*}} return (__mmask8)_mm_cmpge_epi64_mask(__a, __b); } __mmask8 test_mm_mask_cmpge_epi64_mask(__mmask8 __u, __m128i __a, __m128i __b) { - // CHECK-LABEL: @test_mm_mask_cmpge_epi64_mask + // CHECK-LABEL: test_mm_mask_cmpge_epi64_mask // CHECK: icmp sge <2 x i64> %{{.*}}, %{{.*}} // CHECK: and <2 x i1> %{{.*}}, %{{.*}} return (__mmask8)_mm_mask_cmpge_epi64_mask(__u, __a, __b); } __mmask8 test_mm256_cmpge_epi32_mask(__m256i __a, __m256i __b) { - // CHECK-LABEL: @test_mm256_cmpge_epi32_mask + // CHECK-LABEL: test_mm256_cmpge_epi32_mask // CHECK: icmp sge <8 x i32> %{{.*}}, %{{.*}} return (__mmask8)_mm256_cmpge_epi32_mask(__a, __b); } __mmask8 test_mm256_mask_cmpge_epi32_mask(__mmask8 __u, __m256i __a, __m256i __b) { - // CHECK-LABEL: @test_mm256_mask_cmpge_epi32_mask + // CHECK-LABEL: test_mm256_mask_cmpge_epi32_mask // CHECK: icmp sge <8 x i32> %{{.*}}, %{{.*}} // CHECK: and <8 x i1> %{{.*}}, %{{.*}} return (__mmask8)_mm256_mask_cmpge_epi32_mask(__u, __a, __b); } __mmask8 test_mm256_cmpge_epi64_mask(__m256i __a, __m256i __b) { - // CHECK-LABEL: @test_mm256_cmpge_epi64_mask + // CHECK-LABEL: test_mm256_cmpge_epi64_mask // CHECK: icmp sge <4 x i64> %{{.*}}, %{{.*}} return (__mmask8)_mm256_cmpge_epi64_mask(__a, __b); } __mmask8 test_mm256_mask_cmpge_epi64_mask(__mmask8 __u, __m256i __a, __m256i __b) { - // CHECK-LABEL: @test_mm256_mask_cmpge_epi64_mask + // CHECK-LABEL: test_mm256_mask_cmpge_epi64_mask // CHECK: icmp sge <4 x i64> %{{.*}}, %{{.*}} // CHECK: and <4 x i1> %{{.*}}, %{{.*}} return (__mmask8)_mm256_mask_cmpge_epi64_mask(__u, __a, __b); } __mmask8 test_mm_cmpge_epu32_mask(__m128i __a, __m128i __b) { - // CHECK-LABEL: @test_mm_cmpge_epu32_mask + // CHECK-LABEL: test_mm_cmpge_epu32_mask // CHECK: icmp uge <4 x i32> %{{.*}}, %{{.*}} return (__mmask8)_mm_cmpge_epu32_mask(__a, __b); } __mmask8 test_mm_mask_cmpge_epu32_mask(__mmask8 __u, __m128i __a, __m128i __b) { - // CHECK-LABEL: @test_mm_mask_cmpge_epu32_mask + // CHECK-LABEL: test_mm_mask_cmpge_epu32_mask // CHECK: icmp uge <4 x i32> %{{.*}}, %{{.*}} // CHECK: and <4 x i1> %{{.*}}, %{{.*}} return (__mmask8)_mm_mask_cmpge_epu32_mask(__u, __a, __b); } __mmask8 test_mm_cmpge_epu64_mask(__m128i __a, __m128i __b) { - // CHECK-LABEL: @test_mm_cmpge_epu64_mask + // CHECK-LABEL: test_mm_cmpge_epu64_mask // CHECK: icmp uge <2 x i64> %{{.*}}, %{{.*}} return (__mmask8)_mm_cmpge_epu64_mask(__a, __b); } __mmask8 test_mm_mask_cmpge_epu64_mask(__mmask8 __u, __m128i __a, __m128i __b) { - // CHECK-LABEL: @test_mm_mask_cmpge_epu64_mask + // CHECK-LABEL: test_mm_mask_cmpge_epu64_mask // CHECK: icmp uge <2 x i64> %{{.*}}, %{{.*}} // CHECK: and <2 x i1> %{{.*}}, %{{.*}} return (__mmask8)_mm_mask_cmpge_epu64_mask(__u, __a, __b); } __mmask8 test_mm256_cmpge_epu32_mask(__m256i __a, __m256i __b) { - // CHECK-LABEL: @test_mm256_cmpge_epu32_mask + // CHECK-LABEL: test_mm256_cmpge_epu32_mask // CHECK: icmp uge <8 x i32> %{{.*}}, %{{.*}} return (__mmask8)_mm256_cmpge_epu32_mask(__a, __b); } __mmask8 test_mm256_mask_cmpge_epu32_mask(__mmask8 __u, __m256i __a, __m256i __b) { - // CHECK-LABEL: @test_mm256_mask_cmpge_epu32_mask + // CHECK-LABEL: test_mm256_mask_cmpge_epu32_mask // CHECK: icmp uge <8 x i32> %{{.*}}, %{{.*}} // CHECK: and <8 x i1> %{{.*}}, %{{.*}} return (__mmask8)_mm256_mask_cmpge_epu32_mask(__u, __a, __b); } __mmask8 test_mm256_cmpge_epu64_mask(__m256i __a, __m256i __b) { - // CHECK-LABEL: @test_mm256_cmpge_epu64_mask + // CHECK-LABEL: test_mm256_cmpge_epu64_mask // CHECK: icmp uge <4 x i64> %{{.*}}, %{{.*}} return (__mmask8)_mm256_cmpge_epu64_mask(__a, __b); } __mmask8 test_mm256_mask_cmpge_epu64_mask(__mmask8 __u, __m256i __a, __m256i __b) { - // CHECK-LABEL: @test_mm256_mask_cmpge_epu64_mask + // CHECK-LABEL: test_mm256_mask_cmpge_epu64_mask // CHECK: icmp uge <4 x i64> %{{.*}}, %{{.*}} // CHECK: and <4 x i1> %{{.*}}, %{{.*}} return (__mmask8)_mm256_mask_cmpge_epu64_mask(__u, __a, __b); } __mmask8 test_mm_cmpgt_epu32_mask(__m128i __a, __m128i __b) { - // CHECK-LABEL: @test_mm_cmpgt_epu32_mask + // CHECK-LABEL: test_mm_cmpgt_epu32_mask // CHECK: icmp ugt <4 x i32> %{{.*}}, %{{.*}} return (__mmask8)_mm_cmpgt_epu32_mask(__a, __b); } __mmask8 test_mm_mask_cmpgt_epu32_mask(__mmask8 __u, __m128i __a, __m128i __b) { - // CHECK-LABEL: @test_mm_mask_cmpgt_epu32_mask + // CHECK-LABEL: test_mm_mask_cmpgt_epu32_mask // CHECK: icmp ugt <4 x i32> %{{.*}}, %{{.*}} // CHECK: and <4 x i1> %{{.*}}, %{{.*}} return (__mmask8)_mm_mask_cmpgt_epu32_mask(__u, __a, __b); } __mmask8 test_mm_cmpgt_epu64_mask(__m128i __a, __m128i __b) { - // CHECK-LABEL: @test_mm_cmpgt_epu64_mask + // CHECK-LABEL: test_mm_cmpgt_epu64_mask // CHECK: icmp ugt <2 x i64> %{{.*}}, %{{.*}} return (__mmask8)_mm_cmpgt_epu64_mask(__a, __b); } __mmask8 test_mm_mask_cmpgt_epu64_mask(__mmask8 __u, __m128i __a, __m128i __b) { - // CHECK-LABEL: @test_mm_mask_cmpgt_epu64_mask + // CHECK-LABEL: test_mm_mask_cmpgt_epu64_mask // CHECK: icmp ugt <2 x i64> %{{.*}}, %{{.*}} // CHECK: and <2 x i1> %{{.*}}, %{{.*}} return (__mmask8)_mm_mask_cmpgt_epu64_mask(__u, __a, __b); } __mmask8 test_mm256_cmpgt_epu32_mask(__m256i __a, __m256i __b) { - // CHECK-LABEL: @test_mm256_cmpgt_epu32_mask + // CHECK-LABEL: test_mm256_cmpgt_epu32_mask // CHECK: icmp ugt <8 x i32> %{{.*}}, %{{.*}} return (__mmask8)_mm256_cmpgt_epu32_mask(__a, __b); } __mmask8 test_mm256_mask_cmpgt_epu32_mask(__mmask8 __u, __m256i __a, __m256i __b) { - // CHECK-LABEL: @test_mm256_mask_cmpgt_epu32_mask + // CHECK-LABEL: test_mm256_mask_cmpgt_epu32_mask // CHECK: icmp ugt <8 x i32> %{{.*}}, %{{.*}} // CHECK: and <8 x i1> %{{.*}}, %{{.*}} return (__mmask8)_mm256_mask_cmpgt_epu32_mask(__u, __a, __b); } __mmask8 test_mm256_cmpgt_epu64_mask(__m256i __a, __m256i __b) { - // CHECK-LABEL: @test_mm256_cmpgt_epu64_mask + // CHECK-LABEL: test_mm256_cmpgt_epu64_mask // CHECK: icmp ugt <4 x i64> %{{.*}}, %{{.*}} return (__mmask8)_mm256_cmpgt_epu64_mask(__a, __b); } __mmask8 test_mm256_mask_cmpgt_epu64_mask(__mmask8 __u, __m256i __a, __m256i __b) { - // CHECK-LABEL: @test_mm256_mask_cmpgt_epu64_mask + // CHECK-LABEL: test_mm256_mask_cmpgt_epu64_mask // CHECK: icmp ugt <4 x i64> %{{.*}}, %{{.*}} // CHECK: and <4 x i1> %{{.*}}, %{{.*}} return (__mmask8)_mm256_mask_cmpgt_epu64_mask(__u, __a, __b); } __mmask8 test_mm_cmple_epi32_mask(__m128i __a, __m128i __b) { - // CHECK-LABEL: @test_mm_cmple_epi32_mask + // CHECK-LABEL: test_mm_cmple_epi32_mask // CHECK: icmp sle <4 x i32> %{{.*}}, %{{.*}} return (__mmask8)_mm_cmple_epi32_mask(__a, __b); } __mmask8 test_mm_mask_cmple_epi32_mask(__mmask8 __u, __m128i __a, __m128i __b) { - // CHECK-LABEL: @test_mm_mask_cmple_epi32_mask + // CHECK-LABEL: test_mm_mask_cmple_epi32_mask // CHECK: icmp sle <4 x i32> %{{.*}}, %{{.*}} // CHECK: and <4 x i1> %{{.*}}, %{{.*}} return (__mmask8)_mm_mask_cmple_epi32_mask(__u, __a, __b); } __mmask8 test_mm_cmple_epi64_mask(__m128i __a, __m128i __b) { - // CHECK-LABEL: @test_mm_cmple_epi64_mask + // CHECK-LABEL: test_mm_cmple_epi64_mask // CHECK: icmp sle <2 x i64> %{{.*}}, %{{.*}} return (__mmask8)_mm_cmple_epi64_mask(__a, __b); } __mmask8 test_mm_mask_cmple_epi64_mask(__mmask8 __u, __m128i __a, __m128i __b) { - // CHECK-LABEL: @test_mm_mask_cmple_epi64_mask + // CHECK-LABEL: test_mm_mask_cmple_epi64_mask // CHECK: icmp sle <2 x i64> %{{.*}}, %{{.*}} // CHECK: and <2 x i1> %{{.*}}, %{{.*}} return (__mmask8)_mm_mask_cmple_epi64_mask(__u, __a, __b); } __mmask8 test_mm256_cmple_epi32_mask(__m256i __a, __m256i __b) { - // CHECK-LABEL: @test_mm256_cmple_epi32_mask + // CHECK-LABEL: test_mm256_cmple_epi32_mask // CHECK: icmp sle <8 x i32> %{{.*}}, %{{.*}} return (__mmask8)_mm256_cmple_epi32_mask(__a, __b); } __mmask8 test_mm256_mask_cmple_epi32_mask(__mmask8 __u, __m256i __a, __m256i __b) { - // CHECK-LABEL: @test_mm256_mask_cmple_epi32_mask + // CHECK-LABEL: test_mm256_mask_cmple_epi32_mask // CHECK: icmp sle <8 x i32> %{{.*}}, %{{.*}} // CHECK: and <8 x i1> %{{.*}}, %{{.*}} return (__mmask8)_mm256_mask_cmple_epi32_mask(__u, __a, __b); } __mmask8 test_mm256_cmple_epi64_mask(__m256i __a, __m256i __b) { - // CHECK-LABEL: @test_mm256_cmple_epi64_mask + // CHECK-LABEL: test_mm256_cmple_epi64_mask // CHECK: icmp sle <4 x i64> %{{.*}}, %{{.*}} return (__mmask8)_mm256_cmple_epi64_mask(__a, __b); } __mmask8 test_mm256_mask_cmple_epi64_mask(__mmask8 __u, __m256i __a, __m256i __b) { - // CHECK-LABEL: @test_mm256_mask_cmple_epi64_mask + // CHECK-LABEL: test_mm256_mask_cmple_epi64_mask // CHECK: icmp sle <4 x i64> %{{.*}}, %{{.*}} // CHECK: and <4 x i1> %{{.*}}, %{{.*}} return (__mmask8)_mm256_mask_cmple_epi64_mask(__u, __a, __b); } __mmask8 test_mm_cmple_epu32_mask(__m128i __a, __m128i __b) { - // CHECK-LABEL: @test_mm_cmple_epu32_mask + // CHECK-LABEL: test_mm_cmple_epu32_mask // CHECK: icmp ule <4 x i32> %{{.*}}, %{{.*}} return (__mmask8)_mm_cmple_epu32_mask(__a, __b); } __mmask8 test_mm_mask_cmple_epu32_mask(__mmask8 __u, __m128i __a, __m128i __b) { - // CHECK-LABEL: @test_mm_mask_cmple_epu32_mask + // CHECK-LABEL: test_mm_mask_cmple_epu32_mask // CHECK: icmp ule <4 x i32> %{{.*}}, %{{.*}} // CHECK: and <4 x i1> %{{.*}}, %{{.*}} return (__mmask8)_mm_mask_cmple_epu32_mask(__u, __a, __b); } __mmask8 test_mm_cmple_epu64_mask(__m128i __a, __m128i __b) { - // CHECK-LABEL: @test_mm_cmple_epu64_mask + // CHECK-LABEL: test_mm_cmple_epu64_mask // CHECK: icmp ule <2 x i64> %{{.*}}, %{{.*}} return (__mmask8)_mm_cmple_epu64_mask(__a, __b); } __mmask8 test_mm_mask_cmple_epu64_mask(__mmask8 __u, __m128i __a, __m128i __b) { - // CHECK-LABEL: @test_mm_mask_cmple_epu64_mask + // CHECK-LABEL: test_mm_mask_cmple_epu64_mask // CHECK: icmp ule <2 x i64> %{{.*}}, %{{.*}} // CHECK: and <2 x i1> %{{.*}}, %{{.*}} return (__mmask8)_mm_mask_cmple_epu64_mask(__u, __a, __b); } __mmask8 test_mm256_cmple_epu32_mask(__m256i __a, __m256i __b) { - // CHECK-LABEL: @test_mm256_cmple_epu32_mask + // CHECK-LABEL: test_mm256_cmple_epu32_mask // CHECK: icmp ule <8 x i32> %{{.*}}, %{{.*}} return (__mmask8)_mm256_cmple_epu32_mask(__a, __b); } __mmask8 test_mm256_mask_cmple_epu32_mask(__mmask8 __u, __m256i __a, __m256i __b) { - // CHECK-LABEL: @test_mm256_mask_cmple_epu32_mask + // CHECK-LABEL: test_mm256_mask_cmple_epu32_mask // CHECK: icmp ule <8 x i32> %{{.*}}, %{{.*}} // CHECK: and <8 x i1> %{{.*}}, %{{.*}} return (__mmask8)_mm256_mask_cmple_epu32_mask(__u, __a, __b); } __mmask8 test_mm256_cmple_epu64_mask(__m256i __a, __m256i __b) { - // CHECK-LABEL: @test_mm256_cmple_epu64_mask + // CHECK-LABEL: test_mm256_cmple_epu64_mask // CHECK: icmp ule <4 x i64> %{{.*}}, %{{.*}} return (__mmask8)_mm256_cmple_epu64_mask(__a, __b); } __mmask8 test_mm256_mask_cmple_epu64_mask(__mmask8 __u, __m256i __a, __m256i __b) { - // CHECK-LABEL: @test_mm256_mask_cmple_epu64_mask + // CHECK-LABEL: test_mm256_mask_cmple_epu64_mask // CHECK: icmp ule <4 x i64> %{{.*}}, %{{.*}} // CHECK: and <4 x i1> %{{.*}}, %{{.*}} return (__mmask8)_mm256_mask_cmple_epu64_mask(__u, __a, __b); } __mmask8 test_mm_cmplt_epi32_mask(__m128i __a, __m128i __b) { - // CHECK-LABEL: @test_mm_cmplt_epi32_mask + // CHECK-LABEL: test_mm_cmplt_epi32_mask // CHECK: icmp slt <4 x i32> %{{.*}}, %{{.*}} return (__mmask8)_mm_cmplt_epi32_mask(__a, __b); } __mmask8 test_mm_mask_cmplt_epi32_mask(__mmask8 __u, __m128i __a, __m128i __b) { - // CHECK-LABEL: @test_mm_mask_cmplt_epi32_mask + // CHECK-LABEL: test_mm_mask_cmplt_epi32_mask // CHECK: icmp slt <4 x i32> %{{.*}}, %{{.*}} // CHECK: and <4 x i1> %{{.*}}, %{{.*}} return (__mmask8)_mm_mask_cmplt_epi32_mask(__u, __a, __b); } __mmask8 test_mm_cmplt_epi64_mask(__m128i __a, __m128i __b) { - // CHECK-LABEL: @test_mm_cmplt_epi64_mask + // CHECK-LABEL: test_mm_cmplt_epi64_mask // CHECK: icmp slt <2 x i64> %{{.*}}, %{{.*}} return (__mmask8)_mm_cmplt_epi64_mask(__a, __b); } __mmask8 test_mm_mask_cmplt_epi64_mask(__mmask8 __u, __m128i __a, __m128i __b) { - // CHECK-LABEL: @test_mm_mask_cmplt_epi64_mask + // CHECK-LABEL: test_mm_mask_cmplt_epi64_mask // CHECK: icmp slt <2 x i64> %{{.*}}, %{{.*}} // CHECK: and <2 x i1> %{{.*}}, %{{.*}} return (__mmask8)_mm_mask_cmplt_epi64_mask(__u, __a, __b); } __mmask8 test_mm256_cmplt_epi32_mask(__m256i __a, __m256i __b) { - // CHECK-LABEL: @test_mm256_cmplt_epi32_mask + // CHECK-LABEL: test_mm256_cmplt_epi32_mask // CHECK: icmp slt <8 x i32> %{{.*}}, %{{.*}} return (__mmask8)_mm256_cmplt_epi32_mask(__a, __b); } __mmask8 test_mm256_mask_cmplt_epi32_mask(__mmask8 __u, __m256i __a, __m256i __b) { - // CHECK-LABEL: @test_mm256_mask_cmplt_epi32_mask + // CHECK-LABEL: test_mm256_mask_cmplt_epi32_mask // CHECK: icmp slt <8 x i32> %{{.*}}, %{{.*}} // CHECK: and <8 x i1> %{{.*}}, %{{.*}} return (__mmask8)_mm256_mask_cmplt_epi32_mask(__u, __a, __b); } __mmask8 test_mm256_cmplt_epi64_mask(__m256i __a, __m256i __b) { - // CHECK-LABEL: @test_mm256_cmplt_epi64_mask + // CHECK-LABEL: test_mm256_cmplt_epi64_mask // CHECK: icmp slt <4 x i64> %{{.*}}, %{{.*}} return (__mmask8)_mm256_cmplt_epi64_mask(__a, __b); } __mmask8 test_mm256_mask_cmplt_epi64_mask(__mmask8 __u, __m256i __a, __m256i __b) { - // CHECK-LABEL: @test_mm256_mask_cmplt_epi64_mask + // CHECK-LABEL: test_mm256_mask_cmplt_epi64_mask // CHECK: icmp slt <4 x i64> %{{.*}}, %{{.*}} // CHECK: and <4 x i1> %{{.*}}, %{{.*}} return (__mmask8)_mm256_mask_cmplt_epi64_mask(__u, __a, __b); } __mmask8 test_mm_cmplt_epu32_mask(__m128i __a, __m128i __b) { - // CHECK-LABEL: @test_mm_cmplt_epu32_mask + // CHECK-LABEL: test_mm_cmplt_epu32_mask // CHECK: icmp ult <4 x i32> %{{.*}}, %{{.*}} return (__mmask8)_mm_cmplt_epu32_mask(__a, __b); } __mmask8 test_mm_mask_cmplt_epu32_mask(__mmask8 __u, __m128i __a, __m128i __b) { - // CHECK-LABEL: @test_mm_mask_cmplt_epu32_mask + // CHECK-LABEL: test_mm_mask_cmplt_epu32_mask // CHECK: icmp ult <4 x i32> %{{.*}}, %{{.*}} // CHECK: and <4 x i1> %{{.*}}, %{{.*}} return (__mmask8)_mm_mask_cmplt_epu32_mask(__u, __a, __b); } __mmask8 test_mm_cmplt_epu64_mask(__m128i __a, __m128i __b) { - // CHECK-LABEL: @test_mm_cmplt_epu64_mask + // CHECK-LABEL: test_mm_cmplt_epu64_mask // CHECK: icmp ult <2 x i64> %{{.*}}, %{{.*}} return (__mmask8)_mm_cmplt_epu64_mask(__a, __b); } __mmask8 test_mm_mask_cmplt_epu64_mask(__mmask8 __u, __m128i __a, __m128i __b) { - // CHECK-LABEL: @test_mm_mask_cmplt_epu64_mask + // CHECK-LABEL: test_mm_mask_cmplt_epu64_mask // CHECK: icmp ult <2 x i64> %{{.*}}, %{{.*}} // CHECK: and <2 x i1> %{{.*}}, %{{.*}} return (__mmask8)_mm_mask_cmplt_epu64_mask(__u, __a, __b); } __mmask8 test_mm256_cmplt_epu32_mask(__m256i __a, __m256i __b) { - // CHECK-LABEL: @test_mm256_cmplt_epu32_mask + // CHECK-LABEL: test_mm256_cmplt_epu32_mask // CHECK: icmp ult <8 x i32> %{{.*}}, %{{.*}} return (__mmask8)_mm256_cmplt_epu32_mask(__a, __b); } __mmask8 test_mm256_mask_cmplt_epu32_mask(__mmask8 __u, __m256i __a, __m256i __b) { - // CHECK-LABEL: @test_mm256_mask_cmplt_epu32_mask + // CHECK-LABEL: test_mm256_mask_cmplt_epu32_mask // CHECK: icmp ult <8 x i32> %{{.*}}, %{{.*}} // CHECK: and <8 x i1> %{{.*}}, %{{.*}} return (__mmask8)_mm256_mask_cmplt_epu32_mask(__u, __a, __b); } __mmask8 test_mm256_cmplt_epu64_mask(__m256i __a, __m256i __b) { - // CHECK-LABEL: @test_mm256_cmplt_epu64_mask + // CHECK-LABEL: test_mm256_cmplt_epu64_mask // CHECK: icmp ult <4 x i64> %{{.*}}, %{{.*}} return (__mmask8)_mm256_cmplt_epu64_mask(__a, __b); } __mmask8 test_mm256_mask_cmplt_epu64_mask(__mmask8 __u, __m256i __a, __m256i __b) { - // CHECK-LABEL: @test_mm256_mask_cmplt_epu64_mask + // CHECK-LABEL: test_mm256_mask_cmplt_epu64_mask // CHECK: icmp ult <4 x i64> %{{.*}}, %{{.*}} // CHECK: and <4 x i1> %{{.*}}, %{{.*}} return (__mmask8)_mm256_mask_cmplt_epu64_mask(__u, __a, __b); } __mmask8 test_mm_cmpneq_epi32_mask(__m128i __a, __m128i __b) { - // CHECK-LABEL: @test_mm_cmpneq_epi32_mask + // CHECK-LABEL: test_mm_cmpneq_epi32_mask // CHECK: icmp ne <4 x i32> %{{.*}}, %{{.*}} return (__mmask8)_mm_cmpneq_epi32_mask(__a, __b); } __mmask8 test_mm_mask_cmpneq_epi32_mask(__mmask8 __u, __m128i __a, __m128i __b) { - // CHECK-LABEL: @test_mm_mask_cmpneq_epi32_mask + // CHECK-LABEL: test_mm_mask_cmpneq_epi32_mask // CHECK: icmp ne <4 x i32> %{{.*}}, %{{.*}} // CHECK: and <4 x i1> %{{.*}}, %{{.*}} return (__mmask8)_mm_mask_cmpneq_epi32_mask(__u, __a, __b); } __mmask8 test_mm_cmpneq_epi64_mask(__m128i __a, __m128i __b) { - // CHECK-LABEL: @test_mm_cmpneq_epi64_mask + // CHECK-LABEL: test_mm_cmpneq_epi64_mask // CHECK: icmp ne <2 x i64> %{{.*}}, %{{.*}} return (__mmask8)_mm_cmpneq_epi64_mask(__a, __b); } __mmask8 test_mm_mask_cmpneq_epi64_mask(__mmask8 __u, __m128i __a, __m128i __b) { - // CHECK-LABEL: @test_mm_mask_cmpneq_epi64_mask + // CHECK-LABEL: test_mm_mask_cmpneq_epi64_mask // CHECK: icmp ne <2 x i64> %{{.*}}, %{{.*}} // CHECK: and <2 x i1> %{{.*}}, %{{.*}} return (__mmask8)_mm_mask_cmpneq_epi64_mask(__u, __a, __b); } __mmask8 test_mm256_cmpneq_epi32_mask(__m256i __a, __m256i __b) { - // CHECK-LABEL: @test_mm256_cmpneq_epi32_mask + // CHECK-LABEL: test_mm256_cmpneq_epi32_mask // CHECK: icmp ne <8 x i32> %{{.*}}, %{{.*}} return (__mmask8)_mm256_cmpneq_epi32_mask(__a, __b); } __mmask8 test_mm256_mask_cmpneq_epi32_mask(__mmask8 __u, __m256i __a, __m256i __b) { - // CHECK-LABEL: @test_mm256_mask_cmpneq_epi32_mask + // CHECK-LABEL: test_mm256_mask_cmpneq_epi32_mask // CHECK: icmp ne <8 x i32> %{{.*}}, %{{.*}} // CHECK: and <8 x i1> %{{.*}}, %{{.*}} return (__mmask8)_mm256_mask_cmpneq_epi32_mask(__u, __a, __b); } __mmask8 test_mm256_cmpneq_epi64_mask(__m256i __a, __m256i __b) { - // CHECK-LABEL: @test_mm256_cmpneq_epi64_mask + // CHECK-LABEL: test_mm256_cmpneq_epi64_mask // CHECK: icmp ne <4 x i64> %{{.*}}, %{{.*}} return (__mmask8)_mm256_cmpneq_epi64_mask(__a, __b); } __mmask8 test_mm256_mask_cmpneq_epi64_mask(__mmask8 __u, __m256i __a, __m256i __b) { - // CHECK-LABEL: @test_mm256_mask_cmpneq_epi64_mask + // CHECK-LABEL: test_mm256_mask_cmpneq_epi64_mask // CHECK: icmp ne <4 x i64> %{{.*}}, %{{.*}} // CHECK: and <4 x i1> %{{.*}}, %{{.*}} return (__mmask8)_mm256_mask_cmpneq_epi64_mask(__u, __a, __b); } __mmask8 test_mm_cmpneq_epu32_mask(__m128i __a, __m128i __b) { - // CHECK-LABEL: @test_mm_cmpneq_epu32_mask + // CHECK-LABEL: test_mm_cmpneq_epu32_mask // CHECK: icmp ne <4 x i32> %{{.*}}, %{{.*}} return (__mmask8)_mm_cmpneq_epu32_mask(__a, __b); } __mmask8 test_mm_mask_cmpneq_epu32_mask(__mmask8 __u, __m128i __a, __m128i __b) { - // CHECK-LABEL: @test_mm_mask_cmpneq_epu32_mask + // CHECK-LABEL: test_mm_mask_cmpneq_epu32_mask // CHECK: icmp ne <4 x i32> %{{.*}}, %{{.*}} // CHECK: and <4 x i1> %{{.*}}, %{{.*}} return (__mmask8)_mm_mask_cmpneq_epu32_mask(__u, __a, __b); } __mmask8 test_mm_cmpneq_epu64_mask(__m128i __a, __m128i __b) { - // CHECK-LABEL: @test_mm_cmpneq_epu64_mask + // CHECK-LABEL: test_mm_cmpneq_epu64_mask // CHECK: icmp ne <2 x i64> %{{.*}}, %{{.*}} return (__mmask8)_mm_cmpneq_epu64_mask(__a, __b); } __mmask8 test_mm_mask_cmpneq_epu64_mask(__mmask8 __u, __m128i __a, __m128i __b) { - // CHECK-LABEL: @test_mm_mask_cmpneq_epu64_mask + // CHECK-LABEL: test_mm_mask_cmpneq_epu64_mask // CHECK: icmp ne <2 x i64> %{{.*}}, %{{.*}} // CHECK: and <2 x i1> %{{.*}}, %{{.*}} return (__mmask8)_mm_mask_cmpneq_epu64_mask(__u, __a, __b); } __mmask8 test_mm256_cmpneq_epu32_mask(__m256i __a, __m256i __b) { - // CHECK-LABEL: @test_mm256_cmpneq_epu32_mask + // CHECK-LABEL: test_mm256_cmpneq_epu32_mask // CHECK: icmp ne <8 x i32> %{{.*}}, %{{.*}} return (__mmask8)_mm256_cmpneq_epu32_mask(__a, __b); } __mmask8 test_mm256_mask_cmpneq_epu32_mask(__mmask8 __u, __m256i __a, __m256i __b) { - // CHECK-LABEL: @test_mm256_mask_cmpneq_epu32_mask + // CHECK-LABEL: test_mm256_mask_cmpneq_epu32_mask // CHECK: icmp ne <8 x i32> %{{.*}}, %{{.*}} // CHECK: and <8 x i1> %{{.*}}, %{{.*}} return (__mmask8)_mm256_mask_cmpneq_epu32_mask(__u, __a, __b); } __mmask8 test_mm256_cmpneq_epu64_mask(__m256i __a, __m256i __b) { - // CHECK-LABEL: @test_mm256_cmpneq_epu64_mask + // CHECK-LABEL: test_mm256_cmpneq_epu64_mask // CHECK: icmp ne <4 x i64> %{{.*}}, %{{.*}} return (__mmask8)_mm256_cmpneq_epu64_mask(__a, __b); } __mmask8 test_mm256_mask_cmpneq_epu64_mask(__mmask8 __u, __m256i __a, __m256i __b) { - // CHECK-LABEL: @test_mm256_mask_cmpneq_epu64_mask + // CHECK-LABEL: test_mm256_mask_cmpneq_epu64_mask // CHECK: icmp ne <4 x i64> %{{.*}}, %{{.*}} // CHECK: and <4 x i1> %{{.*}}, %{{.*}} return (__mmask8)_mm256_mask_cmpneq_epu64_mask(__u, __a, __b); } __mmask8 test_mm_cmp_eq_epi32_mask(__m128i __a, __m128i __b) { - // CHECK-LABEL: @test_mm_cmp_eq_epi32_mask + // CHECK-LABEL: test_mm_cmp_eq_epi32_mask // CHECK: icmp eq <4 x i32> %{{.*}}, %{{.*}} return (__mmask8)_mm_cmp_epi32_mask(__a, __b, _MM_CMPINT_EQ); } __mmask8 test_mm_mask_cmp_lt_epi32_mask(__mmask8 __u, __m128i __a, __m128i __b) { - // CHECK-LABEL: @test_mm_mask_cmp_lt_epi32_mask + // CHECK-LABEL: test_mm_mask_cmp_lt_epi32_mask // CHECK: icmp slt <4 x i32> %{{.*}}, %{{.*}} // CHECK: and <4 x i1> %{{.*}}, %{{.*}} return (__mmask8)_mm_mask_cmp_epi32_mask(__u, __a, __b, _MM_CMPINT_LT); } __mmask8 test_mm_cmp_lt_epi64_mask(__m128i __a, __m128i __b) { - // CHECK-LABEL: @test_mm_cmp_lt_epi64_mask + // CHECK-LABEL: test_mm_cmp_lt_epi64_mask // CHECK: icmp slt <2 x i64> %{{.*}}, %{{.*}} return (__mmask8)_mm_cmp_epi64_mask(__a, __b, _MM_CMPINT_LT); } __mmask8 test_mm_mask_cmp_eq_epi64_mask(__mmask8 __u, __m128i __a, __m128i __b) { - // CHECK-LABEL: @test_mm_mask_cmp_eq_epi64_mask + // CHECK-LABEL: test_mm_mask_cmp_eq_epi64_mask // CHECK: icmp eq <2 x i64> %{{.*}}, %{{.*}} // CHECK: and <2 x i1> %{{.*}}, %{{.*}} return (__mmask8)_mm_mask_cmp_epi64_mask(__u, __a, __b, _MM_CMPINT_EQ); } __mmask8 test_mm256_cmp_eq_epi32_mask(__m256i __a, __m256i __b) { - // CHECK-LABEL: @test_mm256_cmp_eq_epi32_mask + // CHECK-LABEL: test_mm256_cmp_eq_epi32_mask // CHECK: icmp eq <8 x i32> %{{.*}}, %{{.*}} return (__mmask8)_mm256_cmp_epi32_mask(__a, __b, _MM_CMPINT_EQ); } __mmask8 test_mm256_mask_cmp_le_epi32_mask(__mmask8 __u, __m256i __a, __m256i __b) { - // CHECK-LABEL: @test_mm256_mask_cmp_le_epi32_mask + // CHECK-LABEL: test_mm256_mask_cmp_le_epi32_mask // CHECK: icmp sle <8 x i32> %{{.*}}, %{{.*}} // CHECK: and <8 x i1> %{{.*}}, %{{.*}} return (__mmask8)_mm256_mask_cmp_epi32_mask(__u, __a, __b, _MM_CMPINT_LE); } __mmask8 test_mm256_cmp_eq_epi64_mask(__m256i __a, __m256i __b) { - // CHECK-LABEL: @test_mm256_cmp_eq_epi64_mask + // CHECK-LABEL: test_mm256_cmp_eq_epi64_mask // CHECK: icmp eq <4 x i64> %{{.*}}, %{{.*}} return (__mmask8)_mm256_cmp_epi64_mask(__a, __b, _MM_CMPINT_EQ); } __mmask8 test_mm256_mask_cmp_eq_epi64_mask(__mmask8 __u, __m256i __a, __m256i __b) { - // CHECK-LABEL: @test_mm256_mask_cmp_eq_epi64_mask + // CHECK-LABEL: test_mm256_mask_cmp_eq_epi64_mask // CHECK: icmp eq <4 x i64> %{{.*}}, %{{.*}} // CHECK: and <4 x i1> %{{.*}}, %{{.*}} return (__mmask8)_mm256_mask_cmp_epi64_mask(__u, __a, __b, _MM_CMPINT_EQ); } __mmask8 test_mm_cmp_epu32_mask(__m128i __a, __m128i __b) { - // CHECK-LABEL: @test_mm_cmp_epu32_mask + // CHECK-LABEL: test_mm_cmp_epu32_mask // CHECK: icmp eq <4 x i32> %{{.*}}, %{{.*}} return (__mmask8)_mm_cmp_epu32_mask(__a, __b, 0); } __mmask8 test_mm_mask_cmp_epu32_mask(__mmask8 __u, __m128i __a, __m128i __b) { - // CHECK-LABEL: @test_mm_mask_cmp_epu32_mask + // CHECK-LABEL: test_mm_mask_cmp_epu32_mask // CHECK: icmp eq <4 x i32> %{{.*}}, %{{.*}} // CHECK: and <4 x i1> %{{.*}}, %{{.*}} return (__mmask8)_mm_mask_cmp_epu32_mask(__u, __a, __b, 0); } __mmask8 test_mm_cmp_epu64_mask(__m128i __a, __m128i __b) { - // CHECK-LABEL: @test_mm_cmp_epu64_mask + // CHECK-LABEL: test_mm_cmp_epu64_mask // CHECK: icmp eq <2 x i64> %{{.*}}, %{{.*}} return (__mmask8)_mm_cmp_epu64_mask(__a, __b, 0); } __mmask8 test_mm_mask_cmp_epu64_mask(__mmask8 __u, __m128i __a, __m128i __b) { - // CHECK-LABEL: @test_mm_mask_cmp_epu64_mask + // CHECK-LABEL: test_mm_mask_cmp_epu64_mask // CHECK: icmp eq <2 x i64> %{{.*}}, %{{.*}} // CHECK: and <2 x i1> %{{.*}}, %{{.*}} return (__mmask8)_mm_mask_cmp_epu64_mask(__u, __a, __b, 0); } __mmask8 test_mm256_cmp_epu32_mask(__m256i __a, __m256i __b) { - // CHECK-LABEL: @test_mm256_cmp_epu32_mask + // CHECK-LABEL: test_mm256_cmp_epu32_mask // CHECK: icmp eq <8 x i32> %{{.*}}, %{{.*}} return (__mmask8)_mm256_cmp_epu32_mask(__a, __b, 0); } __mmask8 test_mm256_mask_cmp_epu32_mask(__mmask8 __u, __m256i __a, __m256i __b) { - // CHECK-LABEL: @test_mm256_mask_cmp_epu32_mask + // CHECK-LABEL: test_mm256_mask_cmp_epu32_mask // CHECK: icmp eq <8 x i32> %{{.*}}, %{{.*}} // CHECK: and <8 x i1> %{{.*}}, %{{.*}} return (__mmask8)_mm256_mask_cmp_epu32_mask(__u, __a, __b, 0); } __mmask8 test_mm256_cmp_epu64_mask(__m256i __a, __m256i __b) { - // CHECK-LABEL: @test_mm256_cmp_epu64_mask + // CHECK-LABEL: test_mm256_cmp_epu64_mask // CHECK: icmp eq <4 x i64> %{{.*}}, %{{.*}} return (__mmask8)_mm256_cmp_epu64_mask(__a, __b, 0); } __mmask8 test_mm256_mask_cmp_epu64_mask(__mmask8 __u, __m256i __a, __m256i __b) { - // CHECK-LABEL: @test_mm256_mask_cmp_epu64_mask + // CHECK-LABEL: test_mm256_mask_cmp_epu64_mask // CHECK: icmp eq <4 x i64> %{{.*}}, %{{.*}} // CHECK: and <4 x i1> %{{.*}}, %{{.*}} return (__mmask8)_mm256_mask_cmp_epu64_mask(__u, __a, __b, 0); @@ -604,14 +609,14 @@ __mmask8 test_mm256_mask_cmp_epu64_mask(__mmask8 __u, __m256i __a, __m256i __b) __m256i test_mm256_mask_add_epi32 (__m256i __W, __mmask8 __U, __m256i __A, __m256i __B) { - //CHECK-LABEL: @test_mm256_mask_add_epi32 + //CHECK-LABEL: test_mm256_mask_add_epi32 //CHECK: add <8 x i32> %{{.*}}, %{{.*}} //CHECK: select <8 x i1> %{{.*}}, <8 x i32> %{{.*}}, <8 x i32> %{{.*}} return _mm256_mask_add_epi32(__W, __U, __A, __B); } __m256i test_mm256_maskz_add_epi32 (__mmask8 __U, __m256i __A, __m256i __B) { - //CHECK-LABEL: @test_mm256_maskz_add_epi32 + //CHECK-LABEL: test_mm256_maskz_add_epi32 //CHECK: add <8 x i32> %{{.*}}, %{{.*}} //CHECK: select <8 x i1> %{{.*}}, <8 x i32> %{{.*}}, <8 x i32> %{{.*}} return _mm256_maskz_add_epi32(__U, __A, __B); @@ -619,14 +624,14 @@ __m256i test_mm256_maskz_add_epi32 (__mmask8 __U, __m256i __A, __m256i __B) { __m256i test_mm256_mask_add_epi64 (__m256i __W, __mmask8 __U, __m256i __A, __m256i __B) { - //CHECK-LABEL: @test_mm256_mask_add_epi64 + //CHECK-LABEL: test_mm256_mask_add_epi64 //CHECK: add <4 x i64> %{{.*}}, %{{.*}} //CHECK: select <4 x i1> %{{.*}}, <4 x i64> %{{.*}}, <4 x i64> %{{.*}} return _mm256_mask_add_epi64(__W,__U,__A,__B); } __m256i test_mm256_maskz_add_epi64 (__mmask8 __U, __m256i __A, __m256i __B) { - //CHECK-LABEL: @test_mm256_maskz_add_epi64 + //CHECK-LABEL: test_mm256_maskz_add_epi64 //CHECK: add <4 x i64> %{{.*}}, %{{.*}} //CHECK: select <4 x i1> %{{.*}}, <4 x i64> %{{.*}}, <4 x i64> %{{.*}} return _mm256_maskz_add_epi64 (__U,__A,__B); @@ -634,14 +639,14 @@ __m256i test_mm256_maskz_add_epi64 (__mmask8 __U, __m256i __A, __m256i __B) { __m256i test_mm256_mask_sub_epi32 (__m256i __W, __mmask8 __U, __m256i __A, __m256i __B) { - //CHECK-LABEL: @test_mm256_mask_sub_epi32 + //CHECK-LABEL: test_mm256_mask_sub_epi32 //CHECK: sub <8 x i32> %{{.*}}, %{{.*}} //CHECK: select <8 x i1> %{{.*}}, <8 x i32> %{{.*}}, <8 x i32> %{{.*}} return _mm256_mask_sub_epi32 (__W,__U,__A,__B); } __m256i test_mm256_maskz_sub_epi32 (__mmask8 __U, __m256i __A, __m256i __B) { - //CHECK-LABEL: @test_mm256_maskz_sub_epi32 + //CHECK-LABEL: test_mm256_maskz_sub_epi32 //CHECK: sub <8 x i32> %{{.*}}, %{{.*}} //CHECK: select <8 x i1> %{{.*}}, <8 x i32> %{{.*}}, <8 x i32> %{{.*}} return _mm256_maskz_sub_epi32 (__U,__A,__B); @@ -649,14 +654,14 @@ __m256i test_mm256_maskz_sub_epi32 (__mmask8 __U, __m256i __A, __m256i __B) { __m256i test_mm256_mask_sub_epi64 (__m256i __W, __mmask8 __U, __m256i __A, __m256i __B) { - //CHECK-LABEL: @test_mm256_mask_sub_epi64 + //CHECK-LABEL: test_mm256_mask_sub_epi64 //CHECK: sub <4 x i64> %{{.*}}, %{{.*}} //CHECK: select <4 x i1> %{{.*}}, <4 x i64> %{{.*}}, <4 x i64> %{{.*}} return _mm256_mask_sub_epi64 (__W,__U,__A,__B); } __m256i test_mm256_maskz_sub_epi64 (__mmask8 __U, __m256i __A, __m256i __B) { - //CHECK-LABEL: @test_mm256_maskz_sub_epi64 + //CHECK-LABEL: test_mm256_maskz_sub_epi64 //CHECK: sub <4 x i64> %{{.*}}, %{{.*}} //CHECK: select <4 x i1> %{{.*}}, <4 x i64> %{{.*}}, <4 x i64> %{{.*}} return _mm256_maskz_sub_epi64 (__U,__A,__B); @@ -664,7 +669,7 @@ __m256i test_mm256_maskz_sub_epi64 (__mmask8 __U, __m256i __A, __m256i __B) { __m128i test_mm_mask_add_epi32 (__m128i __W, __mmask8 __U, __m128i __A, __m128i __B) { - //CHECK-LABEL: @test_mm_mask_add_epi32 + //CHECK-LABEL: test_mm_mask_add_epi32 //CHECK: add <4 x i32> %{{.*}}, %{{.*}} //CHECK: select <4 x i1> %{{.*}}, <4 x i32> %{{.*}}, <4 x i32> %{{.*}} return _mm_mask_add_epi32(__W,__U,__A,__B); @@ -672,7 +677,7 @@ __m128i test_mm_mask_add_epi32 (__m128i __W, __mmask8 __U, __m128i __A, __m128i test_mm_maskz_add_epi32 (__mmask8 __U, __m128i __A, __m128i __B) { - //CHECK-LABEL: @test_mm_maskz_add_epi32 + //CHECK-LABEL: test_mm_maskz_add_epi32 //CHECK: add <4 x i32> %{{.*}}, %{{.*}} //CHECK: select <4 x i1> %{{.*}}, <4 x i32> %{{.*}}, <4 x i32> %{{.*}} return _mm_maskz_add_epi32 (__U,__A,__B); @@ -680,14 +685,14 @@ __m128i test_mm_maskz_add_epi32 (__mmask8 __U, __m128i __A, __m128i __B) { __m128i test_mm_mask_add_epi64 (__m128i __W, __mmask8 __U, __m128i __A, __m128i __B) { - //CHECK-LABEL: @test_mm_mask_add_epi64 + //CHECK-LABEL: test_mm_mask_add_epi64 //CHECK: add <2 x i64> %{{.*}}, %{{.*}} //CHECK: select <2 x i1> %{{.*}}, <2 x i64> %{{.*}}, <2 x i64> %{{.*}} return _mm_mask_add_epi64 (__W,__U,__A,__B); } __m128i test_mm_maskz_add_epi64 (__mmask8 __U, __m128i __A, __m128i __B) { - //CHECK-LABEL: @test_mm_maskz_add_epi64 + //CHECK-LABEL: test_mm_maskz_add_epi64 //CHECK: add <2 x i64> %{{.*}}, %{{.*}} //CHECK: select <2 x i1> %{{.*}}, <2 x i64> %{{.*}}, <2 x i64> %{{.*}} return _mm_maskz_add_epi64 (__U,__A,__B); @@ -695,14 +700,14 @@ __m128i test_mm_maskz_add_epi64 (__mmask8 __U, __m128i __A, __m128i __B) { __m128i test_mm_mask_sub_epi32 (__m128i __W, __mmask8 __U, __m128i __A, __m128i __B) { - //CHECK-LABEL: @test_mm_mask_sub_epi32 + //CHECK-LABEL: test_mm_mask_sub_epi32 //CHECK: sub <4 x i32> %{{.*}}, %{{.*}} //CHECK: select <4 x i1> %{{.*}}, <4 x i32> %{{.*}}, <4 x i32> %{{.*}} return _mm_mask_sub_epi32(__W, __U, __A, __B); } __m128i test_mm_maskz_sub_epi32 (__mmask8 __U, __m128i __A, __m128i __B) { - //CHECK-LABEL: @test_mm_maskz_sub_epi32 + //CHECK-LABEL: test_mm_maskz_sub_epi32 //CHECK: sub <4 x i32> %{{.*}}, %{{.*}} //CHECK: select <4 x i1> %{{.*}}, <4 x i32> %{{.*}}, <4 x i32> %{{.*}} return _mm_maskz_sub_epi32(__U, __A, __B); @@ -710,14 +715,14 @@ __m128i test_mm_maskz_sub_epi32 (__mmask8 __U, __m128i __A, __m128i __B) { __m128i test_mm_mask_sub_epi64 (__m128i __W, __mmask8 __U, __m128i __A, __m128i __B) { - //CHECK-LABEL: @test_mm_mask_sub_epi64 + //CHECK-LABEL: test_mm_mask_sub_epi64 //CHECK: sub <2 x i64> %{{.*}}, %{{.*}} //CHECK: select <2 x i1> %{{.*}}, <2 x i64> %{{.*}}, <2 x i64> %{{.*}} return _mm_mask_sub_epi64 (__W, __U, __A, __B); } __m128i test_mm_maskz_sub_epi64 (__mmask8 __U, __m128i __A, __m128i __B) { - //CHECK-LABEL: @test_mm_maskz_sub_epi64 + //CHECK-LABEL: test_mm_maskz_sub_epi64 //CHECK: sub <2 x i64> %{{.*}}, %{{.*}} //CHECK: select <2 x i1> %{{.*}}, <2 x i64> %{{.*}}, <2 x i64> %{{.*}} return _mm_maskz_sub_epi64 (__U, __A, __B); @@ -725,7 +730,7 @@ __m128i test_mm_maskz_sub_epi64 (__mmask8 __U, __m128i __A, __m128i __B) { __m256i test_mm256_mask_mul_epi32 (__m256i __W, __mmask8 __M, __m256i __X, __m256i __Y) { - //CHECK-LABEL: @test_mm256_mask_mul_epi32 + //CHECK-LABEL: test_mm256_mask_mul_epi32 //CHECK: shl <4 x i64> %{{.*}}, splat (i64 32) //CHECK: ashr <4 x i64> %{{.*}}, splat (i64 32) //CHECK: shl <4 x i64> %{{.*}}, splat (i64 32) @@ -736,7 +741,7 @@ __m256i test_mm256_mask_mul_epi32 (__m256i __W, __mmask8 __M, __m256i __X, } __m256i test_mm256_maskz_mul_epi32 (__mmask8 __M, __m256i __X, __m256i __Y) { - //CHECK-LABEL: @test_mm256_maskz_mul_epi32 + //CHECK-LABEL: test_mm256_maskz_mul_epi32 //CHECK: shl <4 x i64> %{{.*}}, splat (i64 32) //CHECK: ashr <4 x i64> %{{.*}}, splat (i64 32) //CHECK: shl <4 x i64> %{{.*}}, splat (i64 32) @@ -749,7 +754,7 @@ __m256i test_mm256_maskz_mul_epi32 (__mmask8 __M, __m256i __X, __m256i __Y) { __m128i test_mm_mask_mul_epi32 (__m128i __W, __mmask8 __M, __m128i __X, __m128i __Y) { - //CHECK-LABEL: @test_mm_mask_mul_epi32 + //CHECK-LABEL: test_mm_mask_mul_epi32 //CHECK: shl <2 x i64> %{{.*}}, splat (i64 32) //CHECK: ashr <2 x i64> %{{.*}}, splat (i64 32) //CHECK: shl <2 x i64> %{{.*}}, splat (i64 32) @@ -760,7 +765,7 @@ __m128i test_mm_mask_mul_epi32 (__m128i __W, __mmask8 __M, __m128i __X, } __m128i test_mm_maskz_mul_epi32 (__mmask8 __M, __m128i __X, __m128i __Y) { - //CHECK-LABEL: @test_mm_maskz_mul_epi32 + //CHECK-LABEL: test_mm_maskz_mul_epi32 //CHECK: shl <2 x i64> %{{.*}}, splat (i64 32) //CHECK: ashr <2 x i64> %{{.*}}, splat (i64 32) //CHECK: shl <2 x i64> %{{.*}}, splat (i64 32) @@ -772,7 +777,7 @@ __m128i test_mm_maskz_mul_epi32 (__mmask8 __M, __m128i __X, __m128i __Y) { __m256i test_mm256_mask_mul_epu32 (__m256i __W, __mmask8 __M, __m256i __X, __m256i __Y) { - //CHECK-LABEL: @test_mm256_mask_mul_epu32 + //CHECK-LABEL: test_mm256_mask_mul_epu32 //CHECK: and <4 x i64> %{{.*}}, splat (i64 4294967295) //CHECK: and <4 x i64> %{{.*}}, splat (i64 4294967295) //CHECK: mul <4 x i64> %{{.*}}, %{{.*}} @@ -781,7 +786,7 @@ __m256i test_mm256_mask_mul_epu32 (__m256i __W, __mmask8 __M, __m256i __X, } __m256i test_mm256_maskz_mul_epu32 (__mmask8 __M, __m256i __X, __m256i __Y) { - //CHECK-LABEL: @test_mm256_maskz_mul_epu32 + //CHECK-LABEL: test_mm256_maskz_mul_epu32 //CHECK: and <4 x i64> %{{.*}}, splat (i64 4294967295) //CHECK: and <4 x i64> %{{.*}}, splat (i64 4294967295) //CHECK: mul <4 x i64> %{{.*}}, %{{.*}} @@ -791,7 +796,7 @@ __m256i test_mm256_maskz_mul_epu32 (__mmask8 __M, __m256i __X, __m256i __Y) { __m128i test_mm_mask_mul_epu32 (__m128i __W, __mmask8 __M, __m128i __X, __m128i __Y) { - //CHECK-LABEL: @test_mm_mask_mul_epu32 + //CHECK-LABEL: test_mm_mask_mul_epu32 //CHECK: and <2 x i64> %{{.*}}, splat (i64 4294967295) //CHECK: and <2 x i64> %{{.*}}, splat (i64 4294967295) //CHECK: mul <2 x i64> %{{.*}}, %{{.*}} @@ -800,7 +805,7 @@ __m128i test_mm_mask_mul_epu32 (__m128i __W, __mmask8 __M, __m128i __X, } __m128i test_mm_maskz_mul_epu32 (__mmask8 __M, __m128i __X, __m128i __Y) { - //CHECK-LABEL: @test_mm_maskz_mul_epu32 + //CHECK-LABEL: test_mm_maskz_mul_epu32 //CHECK: and <2 x i64> %{{.*}}, splat (i64 4294967295) //CHECK: and <2 x i64> %{{.*}}, splat (i64 4294967295) //CHECK: mul <2 x i64> %{{.*}}, %{{.*}} @@ -809,7 +814,7 @@ __m128i test_mm_maskz_mul_epu32 (__mmask8 __M, __m128i __X, __m128i __Y) { } __m128i test_mm_maskz_mullo_epi32 (__mmask8 __M, __m128i __A, __m128i __B) { - //CHECK-LABEL: @test_mm_maskz_mullo_epi32 + //CHECK-LABEL: test_mm_maskz_mullo_epi32 //CHECK: mul <4 x i32> %{{.*}}, %{{.*}} //CHECK: select <4 x i1> %{{.*}}, <4 x i32> %{{.*}}, <4 x i32> %{{.*}} return _mm_maskz_mullo_epi32(__M, __A, __B); @@ -817,76 +822,80 @@ __m128i test_mm_maskz_mullo_epi32 (__mmask8 __M, __m128i __A, __m128i __B) { __m128i test_mm_mask_mullo_epi32 (__m128i __W, __mmask8 __M, __m128i __A, __m128i __B) { - //CHECK-LABEL: @test_mm_mask_mullo_epi32 + //CHECK-LABEL: test_mm_mask_mullo_epi32 //CHECK: mul <4 x i32> %{{.*}}, %{{.*}} //CHECK: select <4 x i1> %{{.*}}, <4 x i32> %{{.*}}, <4 x i32> %{{.*}} return _mm_mask_mullo_epi32(__W, __M, __A, __B); } __m256i test_mm256_maskz_mullo_epi32 (__mmask8 __M, __m256i __A, __m256i __B) { - //CHECK-LABEL: @test_mm256_maskz_mullo_epi32 + //CHECK-LABEL: test_mm256_maskz_mullo_epi32 //CHECK: mul <8 x i32> %{{.*}}, %{{.*}} //CHECK: select <8 x i1> %{{.*}}, <8 x i32> %{{.*}}, <8 x i32> %{{.*}} return _mm256_maskz_mullo_epi32(__M, __A, __B); } +TEST_CONSTEXPR(match_v8si(_mm256_maskz_mullo_epi32(0x0F, (__m256i)(__v8si){+1, -2, +3, -4, +5, -6, +7, -8}, (__m256i)(__v8si){-2, +3, +4, +5, -6, +7, +8, +9}), -2, -6, +12, -20, 0, 0, 0, 0)); __m256i test_mm256_mask_mullo_epi32 (__m256i __W, __mmask8 __M, __m256i __A, __m256i __B) { - //CHECK-LABEL: @test_mm256_mask_mullo_epi32 + //CHECK-LABEL: test_mm256_mask_mullo_epi32 //CHECK: mul <8 x i32> %{{.*}}, %{{.*}} //CHECK: select <8 x i1> %{{.*}}, <8 x i32> %{{.*}}, <8 x i32> %{{.*}} return _mm256_mask_mullo_epi32(__W, __M, __A, __B); } +TEST_CONSTEXPR(match_v8si(_mm256_mask_mullo_epi32((__m256i)(__v8si){-100, +200, -300, +400, -500, +600, -700, +800}, 0x0F, (__m256i)(__v8si){+1, -2, +3, -4, +5, -6, +7, -8}, (__m256i)(__v8si){-2, +3, +4, +5, -6, +7, +8, +9}), -2, -6, +12, -20, -500, +600, -700, +800)); __m256i test_mm256_and_epi32 (__m256i __A, __m256i __B) { - //CHECK-LABEL: @test_mm256_and_epi32 + //CHECK-LABEL: test_mm256_and_epi32 //CHECK: and <8 x i32> %{{.*}}, %{{.*}} return _mm256_and_epi32(__A, __B); } +TEST_CONSTEXPR(match_v4di(_mm256_and_epi32((__m256i)(__v4di){7, 7, 7, 7}, (__m256i)(__v4di){3, 3, 3, 3}), 3, 3, 3, 3)); __m256i test_mm256_mask_and_epi32 (__m256i __W, __mmask8 __U, __m256i __A, __m256i __B) { - //CHECK-LABEL: @test_mm256_mask_and_epi32 + //CHECK-LABEL: test_mm256_mask_and_epi32 //CHECK: and <8 x i32> %{{.*}}, %{{.*}} //CHECK: select <8 x i1> %{{.*}}, <8 x i32> %{{.*}}, <8 x i32> %{{.*}} return _mm256_mask_and_epi32(__W, __U, __A, __B); } __m256i test_mm256_maskz_and_epi32 (__mmask8 __U, __m256i __A, __m256i __B) { - //CHECK-LABEL: @test_mm256_maskz_and_epi32 + //CHECK-LABEL: test_mm256_maskz_and_epi32 //CHECK: and <8 x i32> %{{.*}}, %{{.*}} //CHECK: select <8 x i1> %{{.*}}, <8 x i32> %{{.*}}, <8 x i32> %{{.*}} return _mm256_maskz_and_epi32(__U, __A, __B); } __m128i test_mm_and_epi32 (__m128i __A, __m128i __B) { - //CHECK-LABEL: @test_mm_and_epi32 + //CHECK-LABEL: test_mm_and_epi32 //CHECK: and <4 x i32> %{{.*}}, %{{.*}} return _mm_and_epi32(__A, __B); } +TEST_CONSTEXPR(match_v2di(_mm_and_epi32((__m128i)(__v2di){7, 7}, (__m128i)(__v2di){3, 3}), 3, 3)); __m128i test_mm_mask_and_epi32 (__m128i __W, __mmask8 __U, __m128i __A, __m128i __B) { - //CHECK-LABEL: @test_mm_mask_and_epi32 + //CHECK-LABEL: test_mm_mask_and_epi32 //CHECK: and <4 x i32> %{{.*}}, %{{.*}} //CHECK: select <4 x i1> %{{.*}}, <4 x i32> %{{.*}}, <4 x i32> %{{.*}} return _mm_mask_and_epi32(__W, __U, __A, __B); } __m128i test_mm_maskz_and_epi32 (__mmask8 __U, __m128i __A, __m128i __B) { - //CHECK-LABEL: @test_mm_maskz_and_epi32 + //CHECK-LABEL: test_mm_maskz_and_epi32 //CHECK: and <4 x i32> %{{.*}}, %{{.*}} //CHECK: select <4 x i1> %{{.*}}, <4 x i32> %{{.*}}, <4 x i32> %{{.*}} return _mm_maskz_and_epi32(__U, __A, __B); } __m256i test_mm256_andnot_epi32 (__m256i __A, __m256i __B) { - //CHECK-LABEL: @test_mm256_andnot_epi32 + //CHECK-LABEL: test_mm256_andnot_epi32 //CHECK: xor <8 x i32> %{{.*}}, splat (i32 -1) //CHECK: and <8 x i32> %{{.*}}, %{{.*}} return _mm256_andnot_epi32(__A, __B); } __m256i test_mm256_mask_andnot_epi32 (__m256i __W, __mmask8 __U, __m256i __A, __m256i __B) { - //CHECK-LABEL: @test_mm256_mask_andnot_epi32 + //CHECK-LABEL: test_mm256_mask_andnot_epi32 //CHECK: xor <8 x i32> %{{.*}}, splat (i32 -1) //CHECK: and <8 x i32> %{{.*}}, %{{.*}} //CHECK: select <8 x i1> %{{.*}}, <8 x i32> %{{.*}}, <8 x i32> %{{.*}} @@ -894,7 +903,7 @@ __m256i test_mm256_mask_andnot_epi32 (__m256i __W, __mmask8 __U, __m256i __A, __ } __m256i test_mm256_maskz_andnot_epi32 (__mmask8 __U, __m256i __A, __m256i __B) { - //CHECK-LABEL: @test_mm256_maskz_andnot_epi32 + //CHECK-LABEL: test_mm256_maskz_andnot_epi32 //CHECK: xor <8 x i32> %{{.*}}, splat (i32 -1) //CHECK: and <8 x i32> %{{.*}}, %{{.*}} //CHECK: select <8 x i1> %{{.*}}, <8 x i32> %{{.*}}, <8 x i32> %{{.*}} @@ -902,14 +911,14 @@ __m256i test_mm256_maskz_andnot_epi32 (__mmask8 __U, __m256i __A, __m256i __B) { } __m128i test_mm_andnot_epi32 (__m128i __A, __m128i __B) { - //CHECK-LABEL: @test_mm_andnot_epi32 + //CHECK-LABEL: test_mm_andnot_epi32 //CHECK: xor <4 x i32> %{{.*}}, splat (i32 -1) //CHECK: and <4 x i32> %{{.*}}, %{{.*}} return _mm_andnot_epi32(__A, __B); } __m128i test_mm_mask_andnot_epi32 (__m128i __W, __mmask8 __U, __m128i __A, __m128i __B) { - //CHECK-LABEL: @test_mm_mask_andnot_epi32 + //CHECK-LABEL: test_mm_mask_andnot_epi32 //CHECK: xor <4 x i32> %{{.*}}, splat (i32 -1) //CHECK: and <4 x i32> %{{.*}}, %{{.*}} //CHECK: select <4 x i1> %{{.*}}, <4 x i32> %{{.*}}, <4 x i32> %{{.*}} @@ -917,7 +926,7 @@ __m128i test_mm_mask_andnot_epi32 (__m128i __W, __mmask8 __U, __m128i __A, __m12 } __m128i test_mm_maskz_andnot_epi32 (__mmask8 __U, __m128i __A, __m128i __B) { - //CHECK-LABEL: @test_mm_maskz_andnot_epi32 + //CHECK-LABEL: test_mm_maskz_andnot_epi32 //CHECK: xor <4 x i32> %{{.*}}, splat (i32 -1) //CHECK: and <4 x i32> %{{.*}}, %{{.*}} //CHECK: select <4 x i1> %{{.*}}, <4 x i32> %{{.*}}, <4 x i32> %{{.*}} @@ -925,134 +934,134 @@ __m128i test_mm_maskz_andnot_epi32 (__mmask8 __U, __m128i __A, __m128i __B) { } __m256i test_mm256_or_epi32 (__m256i __A, __m256i __B) { - //CHECK-LABEL: @test_mm256_or_epi32 + //CHECK-LABEL: test_mm256_or_epi32 //CHECK: or <8 x i32> %{{.*}}, %{{.*}} return _mm256_or_epi32(__A, __B); } __m256i test_mm256_mask_or_epi32 (__m256i __W, __mmask8 __U, __m256i __A, __m256i __B) { - //CHECK-LABEL: @test_mm256_mask_or_epi32 + //CHECK-LABEL: test_mm256_mask_or_epi32 //CHECK: or <8 x i32> %{{.*}}, %{{.*}} //CHECK: select <8 x i1> %{{.*}}, <8 x i32> %{{.*}}, <8 x i32> %{{.*}} return _mm256_mask_or_epi32(__W, __U, __A, __B); } __m256i test_mm256_maskz_or_epi32 (__mmask8 __U, __m256i __A, __m256i __B) { - //CHECK-LABEL: @test_mm256_maskz_or_epi32 + //CHECK-LABEL: test_mm256_maskz_or_epi32 //CHECK: or <8 x i32> %{{.*}}, %{{.*}} //CHECK: select <8 x i1> %{{.*}}, <8 x i32> %{{.*}}, <8 x i32> %{{.*}} return _mm256_maskz_or_epi32(__U, __A, __B); } __m128i test_mm_or_epi32 (__m128i __A, __m128i __B) { - //CHECK-LABEL: @test_mm_or_epi32 + //CHECK-LABEL: test_mm_or_epi32 //CHECK: or <4 x i32> %{{.*}}, %{{.*}} return _mm_or_epi32(__A, __B); } __m128i test_mm_mask_or_epi32 (__m128i __W, __mmask8 __U, __m128i __A, __m128i __B) { - //CHECK-LABEL: @test_mm_mask_or_epi32 + //CHECK-LABEL: test_mm_mask_or_epi32 //CHECK: or <4 x i32> %{{.*}}, %{{.*}} //CHECK: select <4 x i1> %{{.*}}, <4 x i32> %{{.*}}, <4 x i32> %{{.*}} return _mm_mask_or_epi32(__W, __U, __A, __B); } __m128i test_mm_maskz_or_epi32 (__mmask8 __U, __m128i __A, __m128i __B) { - //CHECK-LABEL: @test_mm_maskz_or_epi32 + //CHECK-LABEL: test_mm_maskz_or_epi32 //CHECK: or <4 x i32> %{{.*}}, %{{.*}} //CHECK: select <4 x i1> %{{.*}}, <4 x i32> %{{.*}}, <4 x i32> %{{.*}} return _mm_maskz_or_epi32(__U, __A, __B); } __m256i test_mm256_xor_epi32 (__m256i __A, __m256i __B) { - //CHECK-LABEL: @test_mm256_xor_epi32 + //CHECK-LABEL: test_mm256_xor_epi32 //CHECK: or <8 x i32> %{{.*}}, %{{.*}} return _mm256_xor_epi32(__A, __B); } __m256i test_mm256_mask_xor_epi32 (__m256i __W, __mmask8 __U, __m256i __A, __m256i __B) { - //CHECK-LABEL: @test_mm256_mask_xor_epi32 + //CHECK-LABEL: test_mm256_mask_xor_epi32 //CHECK: xor <8 x i32> %{{.*}}, %{{.*}} //CHECK: select <8 x i1> %{{.*}}, <8 x i32> %{{.*}}, <8 x i32> %{{.*}} return _mm256_mask_xor_epi32(__W, __U, __A, __B); } __m256i test_mm256_maskz_xor_epi32 (__mmask8 __U, __m256i __A, __m256i __B) { - //CHECK-LABEL: @test_mm256_maskz_xor_epi32 + //CHECK-LABEL: test_mm256_maskz_xor_epi32 //CHECK: xor <8 x i32> %{{.*}}, %{{.*}} //CHECK: select <8 x i1> %{{.*}}, <8 x i32> %{{.*}}, <8 x i32> %{{.*}} return _mm256_maskz_xor_epi32(__U, __A, __B); } __m128i test_mm_xor_epi32 (__m128i __A, __m128i __B) { - //CHECK-LABEL: @test_mm_xor_epi32 + //CHECK-LABEL: test_mm_xor_epi32 //CHECK: xor <4 x i32> %{{.*}}, %{{.*}} return _mm_xor_epi32(__A, __B); } __m128i test_mm_mask_xor_epi32 (__m128i __W, __mmask8 __U, __m128i __A, __m128i __B) { - //CHECK-LABEL: @test_mm_mask_xor_epi32 + //CHECK-LABEL: test_mm_mask_xor_epi32 //CHECK: xor <4 x i32> %{{.*}}, %{{.*}} //CHECK: select <4 x i1> %{{.*}}, <4 x i32> %{{.*}}, <4 x i32> %{{.*}} return _mm_mask_xor_epi32(__W, __U, __A, __B); } __m128i test_mm_maskz_xor_epi32 (__mmask8 __U, __m128i __A, __m128i __B) { - //CHECK-LABEL: @test_mm_maskz_xor_epi32 + //CHECK-LABEL: test_mm_maskz_xor_epi32 //CHECK: xor <4 x i32> %{{.*}}, %{{.*}} //CHECK: select <4 x i1> %{{.*}}, <4 x i32> %{{.*}}, <4 x i32> %{{.*}} return _mm_maskz_xor_epi32(__U, __A, __B); } __m256i test_mm256_and_epi64 (__m256i __A, __m256i __B) { - //CHECK-LABEL: @test_mm256_and_epi64 + //CHECK-LABEL: test_mm256_and_epi64 //CHECK: and <4 x i64> %{{.*}}, %{{.*}} return _mm256_and_epi64(__A, __B); } __m256i test_mm256_mask_and_epi64 (__m256i __W, __mmask8 __U, __m256i __A, __m256i __B) { - //CHECK-LABEL: @test_mm256_mask_and_epi64 + //CHECK-LABEL: test_mm256_mask_and_epi64 //CHECK: and <4 x i64> %{{.*}}, %{{.*}} //CHECK: select <4 x i1> %{{.*}}, <4 x i64> %{{.*}}, <4 x i64> %{{.*}} return _mm256_mask_and_epi64(__W, __U, __A, __B); } __m256i test_mm256_maskz_and_epi64 (__mmask8 __U, __m256i __A, __m256i __B) { - //CHECK-LABEL: @test_mm256_maskz_and_epi64 + //CHECK-LABEL: test_mm256_maskz_and_epi64 //CHECK: and <4 x i64> %{{.*}}, %{{.*}} //CHECK: select <4 x i1> %{{.*}}, <4 x i64> %{{.*}}, <4 x i64> %{{.*}} return _mm256_maskz_and_epi64(__U, __A, __B); } __m128i test_mm_and_epi64 (__m128i __A, __m128i __B) { - //CHECK-LABEL: @test_mm_and_epi64 + //CHECK-LABEL: test_mm_and_epi64 //CHECK: and <2 x i64> %{{.*}}, %{{.*}} return _mm_and_epi64(__A, __B); } __m128i test_mm_mask_and_epi64 (__m128i __W, __mmask8 __U, __m128i __A, __m128i __B) { - //CHECK-LABEL: @test_mm_mask_and_epi64 + //CHECK-LABEL: test_mm_mask_and_epi64 //CHECK: and <2 x i64> %{{.*}}, %{{.*}} //CHECK: select <2 x i1> %{{.*}}, <2 x i64> %{{.*}}, <2 x i64> %{{.*}} return _mm_mask_and_epi64(__W,__U, __A, __B); } __m128i test_mm_maskz_and_epi64 (__mmask8 __U, __m128i __A, __m128i __B) { - //CHECK-LABEL: @test_mm_maskz_and_epi64 + //CHECK-LABEL: test_mm_maskz_and_epi64 //CHECK: and <2 x i64> %{{.*}}, %{{.*}} //CHECK: select <2 x i1> %{{.*}}, <2 x i64> %{{.*}}, <2 x i64> %{{.*}} return _mm_maskz_and_epi64(__U, __A, __B); } __m256i test_mm256_andnot_epi64 (__m256i __A, __m256i __B) { - //CHECK-LABEL: @test_mm256_andnot_epi64 + //CHECK-LABEL: test_mm256_andnot_epi64 //CHECK: xor <4 x i64> %{{.*}}, splat (i64 -1) //CHECK: and <4 x i64> %{{.*}}, %{{.*}} return _mm256_andnot_epi64(__A, __B); } __m256i test_mm256_mask_andnot_epi64 (__m256i __W, __mmask8 __U, __m256i __A, __m256i __B) { - //CHECK-LABEL: @test_mm256_mask_andnot_epi64 + //CHECK-LABEL: test_mm256_mask_andnot_epi64 //CHECK: xor <4 x i64> %{{.*}}, splat (i64 -1) //CHECK: and <4 x i64> %{{.*}}, %{{.*}} //CHECK: select <4 x i1> %{{.*}}, <4 x i64> %{{.*}}, <4 x i64> %{{.*}} @@ -1060,7 +1069,7 @@ __m256i test_mm256_mask_andnot_epi64 (__m256i __W, __mmask8 __U, __m256i __A, __ } __m256i test_mm256_maskz_andnot_epi64 (__mmask8 __U, __m256i __A, __m256i __B) { - //CHECK-LABEL: @test_mm256_maskz_andnot_epi64 + //CHECK-LABEL: test_mm256_maskz_andnot_epi64 //CHECK: xor <4 x i64> %{{.*}}, splat (i64 -1) //CHECK: and <4 x i64> %{{.*}}, %{{.*}} //CHECK: select <4 x i1> %{{.*}}, <4 x i64> %{{.*}}, <4 x i64> %{{.*}} @@ -1068,14 +1077,14 @@ __m256i test_mm256_maskz_andnot_epi64 (__mmask8 __U, __m256i __A, __m256i __B) { } __m128i test_mm_andnot_epi64 (__m128i __A, __m128i __B) { - //CHECK-LABEL: @test_mm_andnot_epi64 + //CHECK-LABEL: test_mm_andnot_epi64 //CHECK: xor <2 x i64> %{{.*}}, splat (i64 -1) //CHECK: and <2 x i64> %{{.*}}, %{{.*}} return _mm_andnot_epi64(__A, __B); } __m128i test_mm_mask_andnot_epi64 (__m128i __W, __mmask8 __U, __m128i __A, __m128i __B) { - //CHECK-LABEL: @test_mm_mask_andnot_epi64 + //CHECK-LABEL: test_mm_mask_andnot_epi64 //CHECK: xor <2 x i64> %{{.*}}, splat (i64 -1) //CHECK: and <2 x i64> %{{.*}}, %{{.*}} //CHECK: select <2 x i1> %{{.*}}, <2 x i64> %{{.*}}, <2 x i64> %{{.*}} @@ -1083,7 +1092,7 @@ __m128i test_mm_mask_andnot_epi64 (__m128i __W, __mmask8 __U, __m128i __A, __m12 } __m128i test_mm_maskz_andnot_epi64 (__mmask8 __U, __m128i __A, __m128i __B) { - //CHECK-LABEL: @test_mm_maskz_andnot_epi64 + //CHECK-LABEL: test_mm_maskz_andnot_epi64 //CHECK: xor <2 x i64> %{{.*}}, splat (i64 -1) //CHECK: and <2 x i64> %{{.*}}, %{{.*}} //CHECK: select <2 x i1> %{{.*}}, <2 x i64> %{{.*}}, <2 x i64> %{{.*}} @@ -1091,87 +1100,87 @@ __m128i test_mm_maskz_andnot_epi64 (__mmask8 __U, __m128i __A, __m128i __B) { } __m256i test_mm256_or_epi64 (__m256i __A, __m256i __B) { - //CHECK-LABEL: @test_mm256_or_epi64 + //CHECK-LABEL: test_mm256_or_epi64 //CHECK: or <4 x i64> %{{.*}}, %{{.*}} return _mm256_or_epi64(__A, __B); } __m256i test_mm256_mask_or_epi64 (__m256i __W, __mmask8 __U, __m256i __A, __m256i __B) { - //CHECK-LABEL: @test_mm256_mask_or_epi64 + //CHECK-LABEL: test_mm256_mask_or_epi64 //CHECK: or <4 x i64> %{{.*}}, %{{.*}} //CHECK: select <4 x i1> %{{.*}}, <4 x i64> %{{.*}}, <4 x i64> %{{.*}} return _mm256_mask_or_epi64(__W,__U, __A, __B); } __m256i test_mm256_maskz_or_epi64 (__mmask8 __U, __m256i __A, __m256i __B) { - //CHECK-LABEL: @test_mm256_maskz_or_epi64 + //CHECK-LABEL: test_mm256_maskz_or_epi64 //CHECK: or <4 x i64> %{{.*}}, %{{.*}} //CHECK: select <4 x i1> %{{.*}}, <4 x i64> %{{.*}}, <4 x i64> %{{.*}} return _mm256_maskz_or_epi64(__U, __A, __B); } __m128i test_mm_or_epi64 (__m128i __A, __m128i __B) { - //CHECK-LABEL: @test_mm_or_epi64 + //CHECK-LABEL: test_mm_or_epi64 //CHECK: or <2 x i64> %{{.*}}, %{{.*}} return _mm_or_epi64(__A, __B); } __m128i test_mm_mask_or_epi64 (__m128i __W, __mmask8 __U, __m128i __A, __m128i __B) { - //CHECK-LABEL: @test_mm_mask_or_epi64 + //CHECK-LABEL: test_mm_mask_or_epi64 //CHECK: or <2 x i64> %{{.*}}, %{{.*}} //CHECK: select <2 x i1> %{{.*}}, <2 x i64> %{{.*}}, <2 x i64> %{{.*}} return _mm_mask_or_epi64(__W, __U, __A, __B); } __m128i test_mm_maskz_or_epi64 (__mmask8 __U, __m128i __A, __m128i __B) { - //CHECK-LABEL: @test_mm_maskz_or_epi64 + //CHECK-LABEL: test_mm_maskz_or_epi64 //CHECK: or <2 x i64> %{{.*}}, %{{.*}} //CHECK: select <2 x i1> %{{.*}}, <2 x i64> %{{.*}}, <2 x i64> %{{.*}} return _mm_maskz_or_epi64( __U, __A, __B); } __m256i test_mm256_xor_epi64 (__m256i __A, __m256i __B) { - //CHECK-LABEL: @test_mm256_xor_epi64 + //CHECK-LABEL: test_mm256_xor_epi64 //CHECK: xor <4 x i64> %{{.*}}, %{{.*}} return _mm256_xor_epi64(__A, __B); } __m256i test_mm256_mask_xor_epi64 (__m256i __W, __mmask8 __U, __m256i __A, __m256i __B) { - //CHECK-LABEL: @test_mm256_mask_xor_epi64 + //CHECK-LABEL: test_mm256_mask_xor_epi64 //CHECK: xor <4 x i64> %{{.*}}, %{{.*}} //CHECK: select <4 x i1> %{{.*}}, <4 x i64> %{{.*}}, <4 x i64> %{{.*}} return _mm256_mask_xor_epi64(__W,__U, __A, __B); } __m256i test_mm256_maskz_xor_epi64 (__mmask8 __U, __m256i __A, __m256i __B) { - //CHECK-LABEL: @test_mm256_maskz_xor_epi64 + //CHECK-LABEL: test_mm256_maskz_xor_epi64 //CHECK: xor <4 x i64> %{{.*}}, %{{.*}} //CHECK: select <4 x i1> %{{.*}}, <4 x i64> %{{.*}}, <4 x i64> %{{.*}} return _mm256_maskz_xor_epi64(__U, __A, __B); } __m128i test_mm_xor_epi64 (__m128i __A, __m128i __B) { - //CHECK-LABEL: @test_mm_xor_epi64 + //CHECK-LABEL: test_mm_xor_epi64 //CHECK: xor <2 x i64> %{{.*}}, %{{.*}} return _mm_xor_epi64(__A, __B); } __m128i test_mm_mask_xor_epi64 (__m128i __W, __mmask8 __U, __m128i __A, __m128i __B) { - //CHECK-LABEL: @test_mm_mask_xor_epi64 + //CHECK-LABEL: test_mm_mask_xor_epi64 //CHECK: xor <2 x i64> %{{.*}}, %{{.*}} //CHECK: select <2 x i1> %{{.*}}, <2 x i64> %{{.*}}, <2 x i64> %{{.*}} return _mm_mask_xor_epi64(__W, __U, __A, __B); } __m128i test_mm_maskz_xor_epi64 (__mmask8 __U, __m128i __A, __m128i __B) { - //CHECK-LABEL: @test_mm_maskz_xor_epi64 + //CHECK-LABEL: test_mm_maskz_xor_epi64 //CHECK: xor <2 x i64> %{{.*}}, %{{.*}} //CHECK: select <2 x i1> %{{.*}}, <2 x i64> %{{.*}}, <2 x i64> %{{.*}} return _mm_maskz_xor_epi64( __U, __A, __B); } __mmask8 test_mm256_cmp_ps_mask_eq_oq(__m256 a, __m256 b) { - // CHECK-LABEL: @test_mm256_cmp_ps_mask_eq_oq + // CHECK-LABEL: test_mm256_cmp_ps_mask_eq_oq // CHECK: fcmp oeq <8 x float> %{{.*}}, %{{.*}} return _mm256_cmp_ps_mask(a, b, _CMP_EQ_OQ); } @@ -1363,7 +1372,7 @@ __mmask8 test_mm256_cmp_ps_mask_true_us(__m256 a, __m256 b) { } __mmask8 test_mm256_mask_cmp_ps_mask_eq_oq(__mmask8 m, __m256 a, __m256 b) { - // CHECK-LABEL: @test_mm256_mask_cmp_ps_mask_eq_oq + // CHECK-LABEL: test_mm256_mask_cmp_ps_mask_eq_oq // CHECK: [[CMP:%.*]] = fcmp oeq <8 x float> %{{.*}}, %{{.*}} // CHECK: and <8 x i1> [[CMP]], {{.*}} return _mm256_mask_cmp_ps_mask(m, a, b, _CMP_EQ_OQ); @@ -1587,7 +1596,7 @@ __mmask8 test_mm256_mask_cmp_ps_mask_true_us(__mmask8 m, __m256 a, __m256 b) { } __mmask8 test_mm256_cmp_pd_mask_eq_oq(__m256d a, __m256d b) { - // CHECK-LABEL: @test_mm256_cmp_pd_mask_eq_oq + // CHECK-LABEL: test_mm256_cmp_pd_mask_eq_oq // CHECK: fcmp oeq <4 x double> %{{.*}}, %{{.*}} return _mm256_cmp_pd_mask(a, b, _CMP_EQ_OQ); } @@ -1779,7 +1788,7 @@ __mmask8 test_mm256_cmp_pd_mask_true_us(__m256d a, __m256d b) { } __mmask8 test_mm256_mask_cmp_pd_mask_eq_oq(__mmask8 m, __m256d a, __m256d b) { - // CHECK-LABEL: @test_mm256_mask_cmp_pd_mask_eq_oq + // CHECK-LABEL: test_mm256_mask_cmp_pd_mask_eq_oq // CHECK: [[CMP:%.*]] = fcmp oeq <4 x double> %{{.*}}, %{{.*}} // CHECK: and <4 x i1> [[CMP]], {{.*}} return _mm256_mask_cmp_pd_mask(m, a, b, _CMP_EQ_OQ); @@ -2003,7 +2012,7 @@ __mmask8 test_mm256_mask_cmp_pd_mask_true_us(__mmask8 m, __m256d a, __m256d b) { } __mmask8 test_mm_cmp_ps_mask_eq_oq(__m128 a, __m128 b) { - // CHECK-LABEL: @test_mm_cmp_ps_mask_eq_oq + // CHECK-LABEL: test_mm_cmp_ps_mask_eq_oq // CHECK: fcmp oeq <4 x float> %{{.*}}, %{{.*}} return _mm_cmp_ps_mask(a, b, _CMP_EQ_OQ); } @@ -2195,7 +2204,7 @@ __mmask8 test_mm_cmp_ps_mask_true_us(__m128 a, __m128 b) { } __mmask8 test_mm_mask_cmp_ps_mask_eq_oq(__mmask8 m, __m128 a, __m128 b) { - // CHECK-LABEL: @test_mm_mask_cmp_ps_mask_eq_oq + // CHECK-LABEL: test_mm_mask_cmp_ps_mask_eq_oq // CHECK: [[CMP:%.*]] = fcmp oeq <4 x float> %{{.*}}, %{{.*}} // CHECK: and <4 x i1> [[CMP]], {{.*}} return _mm_mask_cmp_ps_mask(m, a, b, _CMP_EQ_OQ); @@ -2419,7 +2428,7 @@ __mmask8 test_mm_mask_cmp_ps_mask_true_us(__mmask8 m, __m128 a, __m128 b) { } __mmask8 test_mm_cmp_pd_mask_eq_oq(__m128d a, __m128d b) { - // CHECK-LABEL: @test_mm_cmp_pd_mask_eq_oq + // CHECK-LABEL: test_mm_cmp_pd_mask_eq_oq // CHECK: fcmp oeq <2 x double> %{{.*}}, %{{.*}} return _mm_cmp_pd_mask(a, b, _CMP_EQ_OQ); } @@ -2611,7 +2620,7 @@ __mmask8 test_mm_cmp_pd_mask_true_us(__m128d a, __m128d b) { } __mmask8 test_mm_mask_cmp_pd_mask_eq_oq(__mmask8 m, __m128d a, __m128d b) { - // CHECK-LABEL: @test_mm_mask_cmp_pd_mask_eq_oq + // CHECK-LABEL: test_mm_mask_cmp_pd_mask_eq_oq // CHECK: [[CMP:%.*]] = fcmp oeq <2 x double> %{{.*}}, %{{.*}} // CHECK: and <2 x i1> [[CMP]], {{.*}} return _mm_mask_cmp_pd_mask(m, a, b, _CMP_EQ_OQ); @@ -2835,7 +2844,7 @@ __mmask8 test_mm_mask_cmp_pd_mask_true_us(__mmask8 m, __m128d a, __m128d b) { } __m128d test_mm_mask_fmadd_pd(__m128d __A, __mmask8 __U, __m128d __B, __m128d __C) { - // CHECK-LABEL: @test_mm_mask_fmadd_pd + // CHECK-LABEL: test_mm_mask_fmadd_pd // CHECK: call <2 x double> @llvm.fma.v2f64(<2 x double> %{{.*}}, <2 x double> %{{.*}}, <2 x double> %{{.*}}) // CHECK: shufflevector <8 x i1> %{{.*}}, <8 x i1> %{{.*}}, <2 x i32> <i32 0, i32 1> // CHECK: select <2 x i1> %{{.*}}, <2 x double> %{{.*}}, <2 x double> %{{.*}} @@ -2843,7 +2852,7 @@ __m128d test_mm_mask_fmadd_pd(__m128d __A, __mmask8 __U, __m128d __B, __m128d __ } __m128d test_mm_mask_fmsub_pd(__m128d __A, __mmask8 __U, __m128d __B, __m128d __C) { - // CHECK-LABEL: @test_mm_mask_fmsub_pd + // CHECK-LABEL: test_mm_mask_fmsub_pd // CHECK: fneg <2 x double> %{{.*}} // CHECK: call <2 x double> @llvm.fma.v2f64(<2 x double> %{{.*}}, <2 x double> %{{.*}}, <2 x double> %{{.*}}) // CHECK: shufflevector <8 x i1> %{{.*}}, <8 x i1> %{{.*}}, <2 x i32> <i32 0, i32 1> @@ -2852,7 +2861,7 @@ __m128d test_mm_mask_fmsub_pd(__m128d __A, __mmask8 __U, __m128d __B, __m128d __ } __m128d test_mm_mask3_fmadd_pd(__m128d __A, __m128d __B, __m128d __C, __mmask8 __U) { - // CHECK-LABEL: @test_mm_mask3_fmadd_pd + // CHECK-LABEL: test_mm_mask3_fmadd_pd // CHECK: call <2 x double> @llvm.fma.v2f64(<2 x double> %{{.*}}, <2 x double> %{{.*}}, <2 x double> %{{.*}}) // CHECK: shufflevector <8 x i1> %{{.*}}, <8 x i1> %{{.*}}, <2 x i32> <i32 0, i32 1> // CHECK: select <2 x i1> %{{.*}}, <2 x double> %{{.*}}, <2 x double> %{{.*}} @@ -2860,7 +2869,7 @@ __m128d test_mm_mask3_fmadd_pd(__m128d __A, __m128d __B, __m128d __C, __mmask8 _ } __m128d test_mm_mask3_fnmadd_pd(__m128d __A, __m128d __B, __m128d __C, __mmask8 __U) { - // CHECK-LABEL: @test_mm_mask3_fnmadd_pd + // CHECK-LABEL: test_mm_mask3_fnmadd_pd // CHECK: fneg <2 x double> %{{.*}} // CHECK: call <2 x double> @llvm.fma.v2f64(<2 x double> %{{.*}}, <2 x double> %{{.*}}, <2 x double> %{{.*}}) // CHECK: shufflevector <8 x i1> %{{.*}}, <8 x i1> %{{.*}}, <2 x i32> <i32 0, i32 1> @@ -2869,7 +2878,7 @@ __m128d test_mm_mask3_fnmadd_pd(__m128d __A, __m128d __B, __m128d __C, __mmask8 } __m128d test_mm_maskz_fmadd_pd(__mmask8 __U, __m128d __A, __m128d __B, __m128d __C) { - // CHECK-LABEL: @test_mm_maskz_fmadd_pd + // CHECK-LABEL: test_mm_maskz_fmadd_pd // CHECK: call <2 x double> @llvm.fma.v2f64(<2 x double> %{{.*}}, <2 x double> %{{.*}}, <2 x double> %{{.*}}) // CHECK: shufflevector <8 x i1> %{{.*}}, <8 x i1> %{{.*}}, <2 x i32> <i32 0, i32 1> // CHECK: select <2 x i1> %{{.*}}, <2 x double> %{{.*}}, <2 x double> %{{.*}} @@ -2877,7 +2886,7 @@ __m128d test_mm_maskz_fmadd_pd(__mmask8 __U, __m128d __A, __m128d __B, __m128d _ } __m128d test_mm_maskz_fmsub_pd(__mmask8 __U, __m128d __A, __m128d __B, __m128d __C) { - // CHECK-LABEL: @test_mm_maskz_fmsub_pd + // CHECK-LABEL: test_mm_maskz_fmsub_pd // CHECK: fneg <2 x double> %{{.*}} // CHECK: call <2 x double> @llvm.fma.v2f64(<2 x double> %{{.*}}, <2 x double> %{{.*}}, <2 x double> %{{.*}}) // CHECK: shufflevector <8 x i1> %{{.*}}, <8 x i1> %{{.*}}, <2 x i32> <i32 0, i32 1> @@ -2886,7 +2895,7 @@ __m128d test_mm_maskz_fmsub_pd(__mmask8 __U, __m128d __A, __m128d __B, __m128d _ } __m128d test_mm_maskz_fnmadd_pd(__mmask8 __U, __m128d __A, __m128d __B, __m128d __C) { - // CHECK-LABEL: @test_mm_maskz_fnmadd_pd + // CHECK-LABEL: test_mm_maskz_fnmadd_pd // CHECK: fneg <2 x double> %{{.*}} // CHECK: call <2 x double> @llvm.fma.v2f64(<2 x double> %{{.*}}, <2 x double> %{{.*}}, <2 x double> %{{.*}}) // CHECK: shufflevector <8 x i1> %{{.*}}, <8 x i1> %{{.*}}, <2 x i32> <i32 0, i32 1> @@ -2895,7 +2904,7 @@ __m128d test_mm_maskz_fnmadd_pd(__mmask8 __U, __m128d __A, __m128d __B, __m128d } __m128d test_mm_maskz_fnmsub_pd(__mmask8 __U, __m128d __A, __m128d __B, __m128d __C) { - // CHECK-LABEL: @test_mm_maskz_fnmsub_pd + // CHECK-LABEL: test_mm_maskz_fnmsub_pd // CHECK: fneg <2 x double> %{{.*}} // CHECK: fneg <2 x double> %{{.*}} // CHECK: call <2 x double> @llvm.fma.v2f64(<2 x double> %{{.*}}, <2 x double> %{{.*}}, <2 x double> %{{.*}}) @@ -2905,7 +2914,7 @@ __m128d test_mm_maskz_fnmsub_pd(__mmask8 __U, __m128d __A, __m128d __B, __m128d } __m256d test_mm256_mask_fmadd_pd(__m256d __A, __mmask8 __U, __m256d __B, __m256d __C) { - // CHECK-LABEL: @test_mm256_mask_fmadd_pd + // CHECK-LABEL: test_mm256_mask_fmadd_pd // CHECK: call <4 x double> @llvm.fma.v4f64(<4 x double> %{{.*}}, <4 x double> %{{.*}}, <4 x double> %{{.*}}) // CHECK: shufflevector <8 x i1> %{{.*}}, <8 x i1> %{{.*}}, <4 x i32> <i32 0, i32 1, i32 2, i32 3> // CHECK: select <4 x i1> %{{.*}}, <4 x double> %{{.*}}, <4 x double> %{{.*}} @@ -2913,7 +2922,7 @@ __m256d test_mm256_mask_fmadd_pd(__m256d __A, __mmask8 __U, __m256d __B, __m256d } __m256d test_mm256_mask_fmsub_pd(__m256d __A, __mmask8 __U, __m256d __B, __m256d __C) { - // CHECK-LABEL: @test_mm256_mask_fmsub_pd + // CHECK-LABEL: test_mm256_mask_fmsub_pd // CHECK: fneg <4 x double> %{{.*}} // CHECK: call <4 x double> @llvm.fma.v4f64(<4 x double> %{{.*}}, <4 x double> %{{.*}}, <4 x double> %{{.*}}) // CHECK: shufflevector <8 x i1> %{{.*}}, <8 x i1> %{{.*}}, <4 x i32> <i32 0, i32 1, i32 2, i32 3> @@ -2922,7 +2931,7 @@ __m256d test_mm256_mask_fmsub_pd(__m256d __A, __mmask8 __U, __m256d __B, __m256d } __m256d test_mm256_mask3_fmadd_pd(__m256d __A, __m256d __B, __m256d __C, __mmask8 __U) { - // CHECK-LABEL: @test_mm256_mask3_fmadd_pd + // CHECK-LABEL: test_mm256_mask3_fmadd_pd // CHECK: call <4 x double> @llvm.fma.v4f64(<4 x double> %{{.*}}, <4 x double> %{{.*}}, <4 x double> %{{.*}}) // CHECK: shufflevector <8 x i1> %{{.*}}, <8 x i1> %{{.*}}, <4 x i32> <i32 0, i32 1, i32 2, i32 3> // CHECK: select <4 x i1> %{{.*}}, <4 x double> %{{.*}}, <4 x double> %{{.*}} @@ -2930,7 +2939,7 @@ __m256d test_mm256_mask3_fmadd_pd(__m256d __A, __m256d __B, __m256d __C, __mmask } __m256d test_mm256_mask3_fnmadd_pd(__m256d __A, __m256d __B, __m256d __C, __mmask8 __U) { - // CHECK-LABEL: @test_mm256_mask3_fnmadd_pd + // CHECK-LABEL: test_mm256_mask3_fnmadd_pd // CHECK: fneg <4 x double> %{{.*}} // CHECK: call <4 x double> @llvm.fma.v4f64(<4 x double> %{{.*}}, <4 x double> %{{.*}}, <4 x double> %{{.*}}) // CHECK: shufflevector <8 x i1> %{{.*}}, <8 x i1> %{{.*}}, <4 x i32> <i32 0, i32 1, i32 2, i32 3> @@ -2939,7 +2948,7 @@ __m256d test_mm256_mask3_fnmadd_pd(__m256d __A, __m256d __B, __m256d __C, __mmas } __m256d test_mm256_maskz_fmadd_pd(__mmask8 __U, __m256d __A, __m256d __B, __m256d __C) { - // CHECK-LABEL: @test_mm256_maskz_fmadd_pd + // CHECK-LABEL: test_mm256_maskz_fmadd_pd // CHECK: call <4 x double> @llvm.fma.v4f64(<4 x double> %{{.*}}, <4 x double> %{{.*}}, <4 x double> %{{.*}}) // CHECK: shufflevector <8 x i1> %{{.*}}, <8 x i1> %{{.*}}, <4 x i32> <i32 0, i32 1, i32 2, i32 3> // CHECK: select <4 x i1> %{{.*}}, <4 x double> %{{.*}}, <4 x double> %{{.*}} @@ -2947,7 +2956,7 @@ __m256d test_mm256_maskz_fmadd_pd(__mmask8 __U, __m256d __A, __m256d __B, __m256 } __m256d test_mm256_maskz_fmsub_pd(__mmask8 __U, __m256d __A, __m256d __B, __m256d __C) { - // CHECK-LABEL: @test_mm256_maskz_fmsub_pd + // CHECK-LABEL: test_mm256_maskz_fmsub_pd // CHECK: fneg <4 x double> %{{.*}} // CHECK: call <4 x double> @llvm.fma.v4f64(<4 x double> %{{.*}}, <4 x double> %{{.*}}, <4 x double> %{{.*}}) // CHECK: shufflevector <8 x i1> %{{.*}}, <8 x i1> %{{.*}}, <4 x i32> <i32 0, i32 1, i32 2, i32 3> @@ -2956,7 +2965,7 @@ __m256d test_mm256_maskz_fmsub_pd(__mmask8 __U, __m256d __A, __m256d __B, __m256 } __m256d test_mm256_maskz_fnmadd_pd(__mmask8 __U, __m256d __A, __m256d __B, __m256d __C) { - // CHECK-LABEL: @test_mm256_maskz_fnmadd_pd + // CHECK-LABEL: test_mm256_maskz_fnmadd_pd // CHECK: fneg <4 x double> %{{.*}} // CHECK: call <4 x double> @llvm.fma.v4f64(<4 x double> %{{.*}}, <4 x double> %{{.*}}, <4 x double> %{{.*}}) // CHECK: shufflevector <8 x i1> %{{.*}}, <8 x i1> %{{.*}}, <4 x i32> <i32 0, i32 1, i32 2, i32 3> @@ -2965,7 +2974,7 @@ __m256d test_mm256_maskz_fnmadd_pd(__mmask8 __U, __m256d __A, __m256d __B, __m25 } __m256d test_mm256_maskz_fnmsub_pd(__mmask8 __U, __m256d __A, __m256d __B, __m256d __C) { - // CHECK-LABEL: @test_mm256_maskz_fnmsub_pd + // CHECK-LABEL: test_mm256_maskz_fnmsub_pd // CHECK: fneg <4 x double> %{{.*}} // CHECK: fneg <4 x double> %{{.*}} // CHECK: call <4 x double> @llvm.fma.v4f64(<4 x double> %{{.*}}, <4 x double> %{{.*}}, <4 x double> %{{.*}}) @@ -2975,7 +2984,7 @@ __m256d test_mm256_maskz_fnmsub_pd(__mmask8 __U, __m256d __A, __m256d __B, __m25 } __m128 test_mm_mask_fmadd_ps(__m128 __A, __mmask8 __U, __m128 __B, __m128 __C) { - // CHECK-LABEL: @test_mm_mask_fmadd_ps + // CHECK-LABEL: test_mm_mask_fmadd_ps // CHECK: call <4 x float> @llvm.fma.v4f32(<4 x float> %{{.*}}, <4 x float> %{{.*}}, <4 x float> %{{.*}}) // CHECK: shufflevector <8 x i1> %{{.*}}, <8 x i1> %{{.*}}, <4 x i32> <i32 0, i32 1, i32 2, i32 3> // CHECK: select <4 x i1> %{{.*}}, <4 x float> %{{.*}}, <4 x float> %{{.*}} @@ -2983,7 +2992,7 @@ __m128 test_mm_mask_fmadd_ps(__m128 __A, __mmask8 __U, __m128 __B, __m128 __C) { } __m128 test_mm_mask_fmsub_ps(__m128 __A, __mmask8 __U, __m128 __B, __m128 __C) { - // CHECK-LABEL: @test_mm_mask_fmsub_ps + // CHECK-LABEL: test_mm_mask_fmsub_ps // CHECK: fneg <4 x float> %{{.*}} // CHECK: call <4 x float> @llvm.fma.v4f32(<4 x float> %{{.*}}, <4 x float> %{{.*}}, <4 x float> %{{.*}}) // CHECK: shufflevector <8 x i1> %{{.*}}, <8 x i1> %{{.*}}, <4 x i32> <i32 0, i32 1, i32 2, i32 3> @@ -2992,7 +3001,7 @@ __m128 test_mm_mask_fmsub_ps(__m128 __A, __mmask8 __U, __m128 __B, __m128 __C) { } __m128 test_mm_mask3_fmadd_ps(__m128 __A, __m128 __B, __m128 __C, __mmask8 __U) { - // CHECK-LABEL: @test_mm_mask3_fmadd_ps + // CHECK-LABEL: test_mm_mask3_fmadd_ps // CHECK: call <4 x float> @llvm.fma.v4f32(<4 x float> %{{.*}}, <4 x float> %{{.*}}, <4 x float> %{{.*}}) // CHECK: shufflevector <8 x i1> %{{.*}}, <8 x i1> %{{.*}}, <4 x i32> <i32 0, i32 1, i32 2, i32 3> // CHECK: select <4 x i1> %{{.*}}, <4 x float> %{{.*}}, <4 x float> %{{.*}} @@ -3000,7 +3009,7 @@ __m128 test_mm_mask3_fmadd_ps(__m128 __A, __m128 __B, __m128 __C, __mmask8 __U) } __m128 test_mm_mask3_fnmadd_ps(__m128 __A, __m128 __B, __m128 __C, __mmask8 __U) { - // CHECK-LABEL: @test_mm_mask3_fnmadd_ps + // CHECK-LABEL: test_mm_mask3_fnmadd_ps // CHECK: fneg <4 x float> %{{.*}} // CHECK: call <4 x float> @llvm.fma.v4f32(<4 x float> %{{.*}}, <4 x float> %{{.*}}, <4 x float> %{{.*}}) // CHECK: shufflevector <8 x i1> %{{.*}}, <8 x i1> %{{.*}}, <4 x i32> <i32 0, i32 1, i32 2, i32 3> @@ -3009,7 +3018,7 @@ __m128 test_mm_mask3_fnmadd_ps(__m128 __A, __m128 __B, __m128 __C, __mmask8 __U) } __m128 test_mm_maskz_fmadd_ps(__mmask8 __U, __m128 __A, __m128 __B, __m128 __C) { - // CHECK-LABEL: @test_mm_maskz_fmadd_ps + // CHECK-LABEL: test_mm_maskz_fmadd_ps // CHECK: call <4 x float> @llvm.fma.v4f32(<4 x float> %{{.*}}, <4 x float> %{{.*}}, <4 x float> %{{.*}}) // CHECK: shufflevector <8 x i1> %{{.*}}, <8 x i1> %{{.*}}, <4 x i32> <i32 0, i32 1, i32 2, i32 3> // CHECK: select <4 x i1> %{{.*}}, <4 x float> %{{.*}}, <4 x float> %{{.*}} @@ -3017,7 +3026,7 @@ __m128 test_mm_maskz_fmadd_ps(__mmask8 __U, __m128 __A, __m128 __B, __m128 __C) } __m128 test_mm_maskz_fmsub_ps(__mmask8 __U, __m128 __A, __m128 __B, __m128 __C) { - // CHECK-LABEL: @test_mm_maskz_fmsub_ps + // CHECK-LABEL: test_mm_maskz_fmsub_ps // CHECK: fneg <4 x float> %{{.*}} // CHECK: call <4 x float> @llvm.fma.v4f32(<4 x float> %{{.*}}, <4 x float> %{{.*}}, <4 x float> %{{.*}}) // CHECK: shufflevector <8 x i1> %{{.*}}, <8 x i1> %{{.*}}, <4 x i32> <i32 0, i32 1, i32 2, i32 3> @@ -3026,7 +3035,7 @@ __m128 test_mm_maskz_fmsub_ps(__mmask8 __U, __m128 __A, __m128 __B, __m128 __C) } __m128 test_mm_maskz_fnmadd_ps(__mmask8 __U, __m128 __A, __m128 __B, __m128 __C) { - // CHECK-LABEL: @test_mm_maskz_fnmadd_ps + // CHECK-LABEL: test_mm_maskz_fnmadd_ps // CHECK: fneg <4 x float> %{{.*}} // CHECK: call <4 x float> @llvm.fma.v4f32(<4 x float> %{{.*}}, <4 x float> %{{.*}}, <4 x float> %{{.*}}) // CHECK: shufflevector <8 x i1> %{{.*}}, <8 x i1> %{{.*}}, <4 x i32> <i32 0, i32 1, i32 2, i32 3> @@ -3035,7 +3044,7 @@ __m128 test_mm_maskz_fnmadd_ps(__mmask8 __U, __m128 __A, __m128 __B, __m128 __C) } __m128 test_mm_maskz_fnmsub_ps(__mmask8 __U, __m128 __A, __m128 __B, __m128 __C) { - // CHECK-LABEL: @test_mm_maskz_fnmsub_ps + // CHECK-LABEL: test_mm_maskz_fnmsub_ps // CHECK: fneg <4 x float> %{{.*}} // CHECK: fneg <4 x float> %{{.*}} // CHECK: call <4 x float> @llvm.fma.v4f32(<4 x float> %{{.*}}, <4 x float> %{{.*}}, <4 x float> %{{.*}}) @@ -3045,14 +3054,14 @@ __m128 test_mm_maskz_fnmsub_ps(__mmask8 __U, __m128 __A, __m128 __B, __m128 __C) } __m256 test_mm256_mask_fmadd_ps(__m256 __A, __mmask8 __U, __m256 __B, __m256 __C) { - // CHECK-LABEL: @test_mm256_mask_fmadd_ps + // CHECK-LABEL: test_mm256_mask_fmadd_ps // CHECK: call <8 x float> @llvm.fma.v8f32(<8 x float> %{{.*}}, <8 x float> %{{.*}}, <8 x float> %{{.*}}) // CHECK: select <8 x i1> %{{.*}}, <8 x float> %{{.*}}, <8 x float> %{{.*}} return _mm256_mask_fmadd_ps(__A, __U, __B, __C); } __m256 test_mm256_mask_fmsub_ps(__m256 __A, __mmask8 __U, __m256 __B, __m256 __C) { - // CHECK-LABEL: @test_mm256_mask_fmsub_ps + // CHECK-LABEL: test_mm256_mask_fmsub_ps // CHECK: fneg <8 x float> %{{.*}} // CHECK: call <8 x float> @llvm.fma.v8f32(<8 x float> %{{.*}}, <8 x float> %{{.*}}, <8 x float> %{{.*}}) // CHECK: select <8 x i1> %{{.*}}, <8 x float> %{{.*}}, <8 x float> %{{.*}} @@ -3060,14 +3069,14 @@ __m256 test_mm256_mask_fmsub_ps(__m256 __A, __mmask8 __U, __m256 __B, __m256 __C } __m256 test_mm256_mask3_fmadd_ps(__m256 __A, __m256 __B, __m256 __C, __mmask8 __U) { - // CHECK-LABEL: @test_mm256_mask3_fmadd_ps + // CHECK-LABEL: test_mm256_mask3_fmadd_ps // CHECK: call <8 x float> @llvm.fma.v8f32(<8 x float> %{{.*}}, <8 x float> %{{.*}}, <8 x float> %{{.*}}) // CHECK: select <8 x i1> %{{.*}}, <8 x float> %{{.*}}, <8 x float> %{{.*}} return _mm256_mask3_fmadd_ps(__A, __B, __C, __U); } __m256 test_mm256_mask3_fnmadd_ps(__m256 __A, __m256 __B, __m256 __C, __mmask8 __U) { - // CHECK-LABEL: @test_mm256_mask3_fnmadd_ps + // CHECK-LABEL: test_mm256_mask3_fnmadd_ps // CHECK: fneg <8 x float> %{{.*}} // CHECK: call <8 x float> @llvm.fma.v8f32(<8 x float> %{{.*}}, <8 x float> %{{.*}}, <8 x float> %{{.*}}) // CHECK: select <8 x i1> %{{.*}}, <8 x float> %{{.*}}, <8 x float> %{{.*}} @@ -3075,14 +3084,14 @@ __m256 test_mm256_mask3_fnmadd_ps(__m256 __A, __m256 __B, __m256 __C, __mmask8 _ } __m256 test_mm256_maskz_fmadd_ps(__mmask8 __U, __m256 __A, __m256 __B, __m256 __C) { - // CHECK-LABEL: @test_mm256_maskz_fmadd_ps + // CHECK-LABEL: test_mm256_maskz_fmadd_ps // CHECK: call <8 x float> @llvm.fma.v8f32(<8 x float> %{{.*}}, <8 x float> %{{.*}}, <8 x float> %{{.*}}) // CHECK: select <8 x i1> %{{.*}}, <8 x float> %{{.*}}, <8 x float> %{{.*}} return _mm256_maskz_fmadd_ps(__U, __A, __B, __C); } __m256 test_mm256_maskz_fmsub_ps(__mmask8 __U, __m256 __A, __m256 __B, __m256 __C) { - // CHECK-LABEL: @test_mm256_maskz_fmsub_ps + // CHECK-LABEL: test_mm256_maskz_fmsub_ps // CHECK: fneg <8 x float> %{{.*}} // CHECK: call <8 x float> @llvm.fma.v8f32(<8 x float> %{{.*}}, <8 x float> %{{.*}}, <8 x float> %{{.*}}) // CHECK: select <8 x i1> %{{.*}}, <8 x float> %{{.*}}, <8 x float> %{{.*}} @@ -3090,7 +3099,7 @@ __m256 test_mm256_maskz_fmsub_ps(__mmask8 __U, __m256 __A, __m256 __B, __m256 __ } __m256 test_mm256_maskz_fnmadd_ps(__mmask8 __U, __m256 __A, __m256 __B, __m256 __C) { - // CHECK-LABEL: @test_mm256_maskz_fnmadd_ps + // CHECK-LABEL: test_mm256_maskz_fnmadd_ps // CHECK: fneg <8 x float> %{{.*}} // CHECK: call <8 x float> @llvm.fma.v8f32(<8 x float> %{{.*}}, <8 x float> %{{.*}}, <8 x float> %{{.*}}) // CHECK: select <8 x i1> %{{.*}}, <8 x float> %{{.*}}, <8 x float> %{{.*}} @@ -3098,7 +3107,7 @@ __m256 test_mm256_maskz_fnmadd_ps(__mmask8 __U, __m256 __A, __m256 __B, __m256 _ } __m256 test_mm256_maskz_fnmsub_ps(__mmask8 __U, __m256 __A, __m256 __B, __m256 __C) { - // CHECK-LABEL: @test_mm256_maskz_fnmsub_ps + // CHECK-LABEL: test_mm256_maskz_fnmsub_ps // CHECK: fneg <8 x float> %{{.*}} // CHECK: fneg <8 x float> %{{.*}} // CHECK: call <8 x float> @llvm.fma.v8f32(<8 x float> %{{.*}}, <8 x float> %{{.*}}, <8 x float> %{{.*}}) @@ -3107,7 +3116,7 @@ __m256 test_mm256_maskz_fnmsub_ps(__mmask8 __U, __m256 __A, __m256 __B, __m256 _ } __m128d test_mm_mask_fmaddsub_pd(__m128d __A, __mmask8 __U, __m128d __B, __m128d __C) { - // CHECK-LABEL: @test_mm_mask_fmaddsub_pd + // CHECK-LABEL: test_mm_mask_fmaddsub_pd // CHECK-NOT: fneg // CHECK: call <2 x double> @llvm.x86.fma.vfmaddsub.pd(<2 x double> %{{.*}}, <2 x double> %{{.*}}, <2 x double> %{{.*}}) // CHECK: shufflevector <8 x i1> %{{.*}}, <8 x i1> %{{.*}}, <2 x i32> <i32 0, i32 1> @@ -3116,7 +3125,7 @@ __m128d test_mm_mask_fmaddsub_pd(__m128d __A, __mmask8 __U, __m128d __B, __m128d } __m128d test_mm_mask_fmsubadd_pd(__m128d __A, __mmask8 __U, __m128d __B, __m128d __C) { - // CHECK-LABEL: @test_mm_mask_fmsubadd_pd + // CHECK-LABEL: test_mm_mask_fmsubadd_pd // CHECK: [[NEG:%.+]] = fneg <2 x double> %{{.*}} // CHECK: call <2 x double> @llvm.x86.fma.vfmaddsub.pd(<2 x double> %{{.*}}, <2 x double> %{{.*}}, <2 x double> [[NEG]]) // CHECK: shufflevector <8 x i1> %{{.*}}, <8 x i1> %{{.*}}, <2 x i32> <i32 0, i32 1> @@ -3125,7 +3134,7 @@ __m128d test_mm_mask_fmsubadd_pd(__m128d __A, __mmask8 __U, __m128d __B, __m128d } __m128d test_mm_mask3_fmaddsub_pd(__m128d __A, __m128d __B, __m128d __C, __mmask8 __U) { - // CHECK-LABEL: @test_mm_mask3_fmaddsub_pd + // CHECK-LABEL: test_mm_mask3_fmaddsub_pd // CHECK-NOT: fneg // CHECK: call <2 x double> @llvm.x86.fma.vfmaddsub.pd(<2 x double> %{{.*}}, <2 x double> %{{.*}}, <2 x double> %{{.*}}) // CHECK: shufflevector <8 x i1> %{{.*}}, <8 x i1> %{{.*}}, <2 x i32> <i32 0, i32 1> @@ -3134,7 +3143,7 @@ __m128d test_mm_mask3_fmaddsub_pd(__m128d __A, __m128d __B, __m128d __C, __mmask } __m128d test_mm_maskz_fmaddsub_pd(__mmask8 __U, __m128d __A, __m128d __B, __m128d __C) { - // CHECK-LABEL: @test_mm_maskz_fmaddsub_pd + // CHECK-LABEL: test_mm_maskz_fmaddsub_pd // CHECK-NOT: fneg // CHECK: call <2 x double> @llvm.x86.fma.vfmaddsub.pd(<2 x double> %{{.*}}, <2 x double> %{{.*}}, <2 x double> %{{.*}}) // CHECK: shufflevector <8 x i1> %{{.*}}, <8 x i1> %{{.*}}, <2 x i32> <i32 0, i32 1> @@ -3143,7 +3152,7 @@ __m128d test_mm_maskz_fmaddsub_pd(__mmask8 __U, __m128d __A, __m128d __B, __m128 } __m128d test_mm_maskz_fmsubadd_pd(__mmask8 __U, __m128d __A, __m128d __B, __m128d __C) { - // CHECK-LABEL: @test_mm_maskz_fmsubadd_pd + // CHECK-LABEL: test_mm_maskz_fmsubadd_pd // CHECK: [[NEG:%.+]] = fneg <2 x double> %{{.*}} // CHECK: call <2 x double> @llvm.x86.fma.vfmaddsub.pd(<2 x double> %{{.*}}, <2 x double> %{{.*}}, <2 x double> [[NEG]]) // CHECK: shufflevector <8 x i1> %{{.*}}, <8 x i1> %{{.*}}, <2 x i32> <i32 0, i32 1> @@ -3152,7 +3161,7 @@ __m128d test_mm_maskz_fmsubadd_pd(__mmask8 __U, __m128d __A, __m128d __B, __m128 } __m256d test_mm256_mask_fmaddsub_pd(__m256d __A, __mmask8 __U, __m256d __B, __m256d __C) { - // CHECK-LABEL: @test_mm256_mask_fmaddsub_pd + // CHECK-LABEL: test_mm256_mask_fmaddsub_pd // CHECK-NOT: fneg // CHECK: call <4 x double> @llvm.x86.fma.vfmaddsub.pd.256(<4 x double> %{{.*}}, <4 x double> %{{.*}}, <4 x double> %{{.*}}) // CHECK: shufflevector <8 x i1> %{{.*}}, <8 x i1> %{{.*}}, <4 x i32> <i32 0, i32 1, i32 2, i32 3> @@ -3161,7 +3170,7 @@ __m256d test_mm256_mask_fmaddsub_pd(__m256d __A, __mmask8 __U, __m256d __B, __m2 } __m256d test_mm256_mask_fmsubadd_pd(__m256d __A, __mmask8 __U, __m256d __B, __m256d __C) { - // CHECK-LABEL: @test_mm256_mask_fmsubadd_pd + // CHECK-LABEL: test_mm256_mask_fmsubadd_pd // CHECK: [[NEG:%.+]] = fneg <4 x double> %{{.*}} // CHECK: call <4 x double> @llvm.x86.fma.vfmaddsub.pd.256(<4 x double> %{{.*}}, <4 x double> %{{.*}}, <4 x double> [[NEG]]) // CHECK: shufflevector <8 x i1> %{{.*}}, <8 x i1> %{{.*}}, <4 x i32> <i32 0, i32 1, i32 2, i32 3> @@ -3170,7 +3179,7 @@ __m256d test_mm256_mask_fmsubadd_pd(__m256d __A, __mmask8 __U, __m256d __B, __m2 } __m256d test_mm256_mask3_fmaddsub_pd(__m256d __A, __m256d __B, __m256d __C, __mmask8 __U) { - // CHECK-LABEL: @test_mm256_mask3_fmaddsub_pd + // CHECK-LABEL: test_mm256_mask3_fmaddsub_pd // CHECK-NOT: fneg // CHECK: call <4 x double> @llvm.x86.fma.vfmaddsub.pd.256(<4 x double> %{{.*}}, <4 x double> %{{.*}}, <4 x double> %{{.*}}) // CHECK: shufflevector <8 x i1> %{{.*}}, <8 x i1> %{{.*}}, <4 x i32> <i32 0, i32 1, i32 2, i32 3> @@ -3179,7 +3188,7 @@ __m256d test_mm256_mask3_fmaddsub_pd(__m256d __A, __m256d __B, __m256d __C, __mm } __m256d test_mm256_maskz_fmaddsub_pd(__mmask8 __U, __m256d __A, __m256d __B, __m256d __C) { - // CHECK-LABEL: @test_mm256_maskz_fmaddsub_pd + // CHECK-LABEL: test_mm256_maskz_fmaddsub_pd // CHECK-NOT: fneg // CHECK: call <4 x double> @llvm.x86.fma.vfmaddsub.pd.256(<4 x double> %{{.*}}, <4 x double> %{{.*}}, <4 x double> %{{.*}}) // CHECK: shufflevector <8 x i1> %{{.*}}, <8 x i1> %{{.*}}, <4 x i32> <i32 0, i32 1, i32 2, i32 3> @@ -3188,7 +3197,7 @@ __m256d test_mm256_maskz_fmaddsub_pd(__mmask8 __U, __m256d __A, __m256d __B, __m } __m256d test_mm256_maskz_fmsubadd_pd(__mmask8 __U, __m256d __A, __m256d __B, __m256d __C) { - // CHECK-LABEL: @test_mm256_maskz_fmsubadd_pd + // CHECK-LABEL: test_mm256_maskz_fmsubadd_pd // CHECK: [[NEG:%.+]] = fneg <4 x double> %{{.*}} // CHECK: call <4 x double> @llvm.x86.fma.vfmaddsub.pd.256(<4 x double> %{{.*}}, <4 x double> %{{.*}}, <4 x double> [[NEG]]) // CHECK: shufflevector <8 x i1> %{{.*}}, <8 x i1> %{{.*}}, <4 x i32> <i32 0, i32 1, i32 2, i32 3> @@ -3197,7 +3206,7 @@ __m256d test_mm256_maskz_fmsubadd_pd(__mmask8 __U, __m256d __A, __m256d __B, __m } __m128 test_mm_mask_fmaddsub_ps(__m128 __A, __mmask8 __U, __m128 __B, __m128 __C) { - // CHECK-LABEL: @test_mm_mask_fmaddsub_ps + // CHECK-LABEL: test_mm_mask_fmaddsub_ps // CHECK-NOT: fneg // CHECK: call <4 x float> @llvm.x86.fma.vfmaddsub.ps(<4 x float> %{{.*}}, <4 x float> %{{.*}}, <4 x float> %{{.*}}) // CHECK: shufflevector <8 x i1> %{{.*}}, <8 x i1> %{{.*}}, <4 x i32> <i32 0, i32 1, i32 2, i32 3> @@ -3206,7 +3215,7 @@ __m128 test_mm_mask_fmaddsub_ps(__m128 __A, __mmask8 __U, __m128 __B, __m128 __C } __m128 test_mm_mask_fmsubadd_ps(__m128 __A, __mmask8 __U, __m128 __B, __m128 __C) { - // CHECK-LABEL: @test_mm_mask_fmsubadd_ps + // CHECK-LABEL: test_mm_mask_fmsubadd_ps // CHECK: [[NEG:%.+]] = fneg <4 x float> %{{.*}} // CHECK: call <4 x float> @llvm.x86.fma.vfmaddsub.ps(<4 x float> %{{.*}}, <4 x float> %{{.*}}, <4 x float> [[NEG]]) // CHECK: shufflevector <8 x i1> %{{.*}}, <8 x i1> %{{.*}}, <4 x i32> <i32 0, i32 1, i32 2, i32 3> @@ -3215,7 +3224,7 @@ __m128 test_mm_mask_fmsubadd_ps(__m128 __A, __mmask8 __U, __m128 __B, __m128 __C } __m128 test_mm_mask3_fmaddsub_ps(__m128 __A, __m128 __B, __m128 __C, __mmask8 __U) { - // CHECK-LABEL: @test_mm_mask3_fmaddsub_ps + // CHECK-LABEL: test_mm_mask3_fmaddsub_ps // CHECK-NOT: fneg // CHECK: call <4 x float> @llvm.x86.fma.vfmaddsub.ps(<4 x float> %{{.*}}, <4 x float> %{{.*}}, <4 x float> %{{.*}}) // CHECK: shufflevector <8 x i1> %{{.*}}, <8 x i1> %{{.*}}, <4 x i32> <i32 0, i32 1, i32 2, i32 3> @@ -3224,7 +3233,7 @@ __m128 test_mm_mask3_fmaddsub_ps(__m128 __A, __m128 __B, __m128 __C, __mmask8 __ } __m128 test_mm_maskz_fmaddsub_ps(__mmask8 __U, __m128 __A, __m128 __B, __m128 __C) { - // CHECK-LABEL: @test_mm_maskz_fmaddsub_ps + // CHECK-LABEL: test_mm_maskz_fmaddsub_ps // CHECK-NOT: fneg // CHECK: call <4 x float> @llvm.x86.fma.vfmaddsub.ps(<4 x float> %{{.*}}, <4 x float> %{{.*}}, <4 x float> %{{.*}}) // CHECK: shufflevector <8 x i1> %{{.*}}, <8 x i1> %{{.*}}, <4 x i32> <i32 0, i32 1, i32 2, i32 3> @@ -3233,7 +3242,7 @@ __m128 test_mm_maskz_fmaddsub_ps(__mmask8 __U, __m128 __A, __m128 __B, __m128 __ } __m128 test_mm_maskz_fmsubadd_ps(__mmask8 __U, __m128 __A, __m128 __B, __m128 __C) { - // CHECK-LABEL: @test_mm_maskz_fmsubadd_ps + // CHECK-LABEL: test_mm_maskz_fmsubadd_ps // CHECK: [[NEG:%.+]] = fneg <4 x float> %{{.*}} // CHECK: call <4 x float> @llvm.x86.fma.vfmaddsub.ps(<4 x float> %{{.*}}, <4 x float> %{{.*}}, <4 x float> [[NEG]]) // CHECK: shufflevector <8 x i1> %{{.*}}, <8 x i1> %{{.*}}, <4 x i32> <i32 0, i32 1, i32 2, i32 3> @@ -3242,7 +3251,7 @@ __m128 test_mm_maskz_fmsubadd_ps(__mmask8 __U, __m128 __A, __m128 __B, __m128 __ } __m256 test_mm256_mask_fmaddsub_ps(__m256 __A, __mmask8 __U, __m256 __B, __m256 __C) { - // CHECK-LABEL: @test_mm256_mask_fmaddsub_ps + // CHECK-LABEL: test_mm256_mask_fmaddsub_ps // CHECK-NOT: fneg // CHECK: call <8 x float> @llvm.x86.fma.vfmaddsub.ps.256(<8 x float> %{{.*}}, <8 x float> %{{.*}}, <8 x float> %{{.*}}) // CHECK: select <8 x i1> %{{.*}}, <8 x float> %{{.*}}, <8 x float> %{{.*}} @@ -3250,7 +3259,7 @@ __m256 test_mm256_mask_fmaddsub_ps(__m256 __A, __mmask8 __U, __m256 __B, __m256 } __m256 test_mm256_mask_fmsubadd_ps(__m256 __A, __mmask8 __U, __m256 __B, __m256 __C) { - // CHECK-LABEL: @test_mm256_mask_fmsubadd_ps + // CHECK-LABEL: test_mm256_mask_fmsubadd_ps // CHECK: [[NEG:%.+]] = fneg <8 x float> %{{.*}} // CHECK: call <8 x float> @llvm.x86.fma.vfmaddsub.ps.256(<8 x float> %{{.*}}, <8 x float> %{{.*}}, <8 x float> [[NEG]]) // CHECK: select <8 x i1> %{{.*}}, <8 x float> %{{.*}}, <8 x float> %{{.*}} @@ -3258,7 +3267,7 @@ __m256 test_mm256_mask_fmsubadd_ps(__m256 __A, __mmask8 __U, __m256 __B, __m256 } __m256 test_mm256_mask3_fmaddsub_ps(__m256 __A, __m256 __B, __m256 __C, __mmask8 __U) { - // CHECK-LABEL: @test_mm256_mask3_fmaddsub_ps + // CHECK-LABEL: test_mm256_mask3_fmaddsub_ps // CHECK-NOT: fneg // CHECK: call <8 x float> @llvm.x86.fma.vfmaddsub.ps.256(<8 x float> %{{.*}}, <8 x float> %{{.*}}, <8 x float> %{{.*}}) // CHECK: select <8 x i1> %{{.*}}, <8 x float> %{{.*}}, <8 x float> %{{.*}} @@ -3266,7 +3275,7 @@ __m256 test_mm256_mask3_fmaddsub_ps(__m256 __A, __m256 __B, __m256 __C, __mmask8 } __m256 test_mm256_maskz_fmaddsub_ps(__mmask8 __U, __m256 __A, __m256 __B, __m256 __C) { - // CHECK-LABEL: @test_mm256_maskz_fmaddsub_ps + // CHECK-LABEL: test_mm256_maskz_fmaddsub_ps // CHECK-NOT: fneg // CHECK: call <8 x float> @llvm.x86.fma.vfmaddsub.ps.256(<8 x float> %{{.*}}, <8 x float> %{{.*}}, <8 x float> %{{.*}}) // CHECK: select <8 x i1> %{{.*}}, <8 x float> %{{.*}}, <8 x float> %{{.*}} @@ -3274,7 +3283,7 @@ __m256 test_mm256_maskz_fmaddsub_ps(__mmask8 __U, __m256 __A, __m256 __B, __m256 } __m256 test_mm256_maskz_fmsubadd_ps(__mmask8 __U, __m256 __A, __m256 __B, __m256 __C) { - // CHECK-LABEL: @test_mm256_maskz_fmsubadd_ps + // CHECK-LABEL: test_mm256_maskz_fmsubadd_ps // CHECK: [[NEG:%.+]] = fneg <8 x float> %{{.*}} // CHECK: call <8 x float> @llvm.x86.fma.vfmaddsub.ps.256(<8 x float> %{{.*}}, <8 x float> %{{.*}}, <8 x float> [[NEG]]) // CHECK: select <8 x i1> %{{.*}}, <8 x float> %{{.*}}, <8 x float> %{{.*}} @@ -3282,7 +3291,7 @@ __m256 test_mm256_maskz_fmsubadd_ps(__mmask8 __U, __m256 __A, __m256 __B, __m256 } __m128d test_mm_mask3_fmsub_pd(__m128d __A, __m128d __B, __m128d __C, __mmask8 __U) { - // CHECK-LABEL: @test_mm_mask3_fmsub_pd + // CHECK-LABEL: test_mm_mask3_fmsub_pd // CHECK: fneg <2 x double> %{{.*}} // CHECK: call <2 x double> @llvm.fma.v2f64(<2 x double> %{{.*}}, <2 x double> %{{.*}}, <2 x double> %{{.*}}) // CHECK: shufflevector <8 x i1> %{{.*}}, <8 x i1> %{{.*}}, <2 x i32> <i32 0, i32 1> @@ -3291,7 +3300,7 @@ __m128d test_mm_mask3_fmsub_pd(__m128d __A, __m128d __B, __m128d __C, __mmask8 _ } __m256d test_mm256_mask3_fmsub_pd(__m256d __A, __m256d __B, __m256d __C, __mmask8 __U) { - // CHECK-LABEL: @test_mm256_mask3_fmsub_pd + // CHECK-LABEL: test_mm256_mask3_fmsub_pd // CHECK: fneg <4 x double> %{{.*}} // CHECK: call <4 x double> @llvm.fma.v4f64(<4 x double> %{{.*}}, <4 x double> %{{.*}}, <4 x double> %{{.*}}) // CHECK: shufflevector <8 x i1> %{{.*}}, <8 x i1> %{{.*}}, <4 x i32> <i32 0, i32 1, i32 2, i32 3> @@ -3300,7 +3309,7 @@ __m256d test_mm256_mask3_fmsub_pd(__m256d __A, __m256d __B, __m256d __C, __mmask } __m128 test_mm_mask3_fmsub_ps(__m128 __A, __m128 __B, __m128 __C, __mmask8 __U) { - // CHECK-LABEL: @test_mm_mask3_fmsub_ps + // CHECK-LABEL: test_mm_mask3_fmsub_ps // CHECK: fneg <4 x float> %{{.*}} // CHECK: call <4 x float> @llvm.fma.v4f32(<4 x float> %{{.*}}, <4 x float> %{{.*}}, <4 x float> %{{.*}}) // CHECK: shufflevector <8 x i1> %{{.*}}, <8 x i1> %{{.*}}, <4 x i32> <i32 0, i32 1, i32 2, i32 3> @@ -3309,7 +3318,7 @@ __m128 test_mm_mask3_fmsub_ps(__m128 __A, __m128 __B, __m128 __C, __mmask8 __U) } __m256 test_mm256_mask3_fmsub_ps(__m256 __A, __m256 __B, __m256 __C, __mmask8 __U) { - // CHECK-LABEL: @test_mm256_mask3_fmsub_ps + // CHECK-LABEL: test_mm256_mask3_fmsub_ps // CHECK: fneg <8 x float> %{{.*}} // CHECK: call <8 x float> @llvm.fma.v8f32(<8 x float> %{{.*}}, <8 x float> %{{.*}}, <8 x float> %{{.*}}) // CHECK: select <8 x i1> %{{.*}}, <8 x float> %{{.*}}, <8 x float> %{{.*}} @@ -3317,7 +3326,7 @@ __m256 test_mm256_mask3_fmsub_ps(__m256 __A, __m256 __B, __m256 __C, __mmask8 __ } __m128d test_mm_mask3_fmsubadd_pd(__m128d __A, __m128d __B, __m128d __C, __mmask8 __U) { - // CHECK-LABEL: @test_mm_mask3_fmsubadd_pd + // CHECK-LABEL: test_mm_mask3_fmsubadd_pd // CHECK: [[NEG:%.+]] = fneg <2 x double> %{{.+}} // CHECK: call <2 x double> @llvm.x86.fma.vfmaddsub.pd(<2 x double> %{{.*}}, <2 x double> %{{.*}}, <2 x double> [[NEG]]) // CHECK: shufflevector <8 x i1> %{{.*}}, <8 x i1> %{{.*}}, <2 x i32> <i32 0, i32 1> @@ -3326,7 +3335,7 @@ __m128d test_mm_mask3_fmsubadd_pd(__m128d __A, __m128d __B, __m128d __C, __mmask } __m256d test_mm256_mask3_fmsubadd_pd(__m256d __A, __m256d __B, __m256d __C, __mmask8 __U) { - // CHECK-LABEL: @test_mm256_mask3_fmsubadd_pd + // CHECK-LABEL: test_mm256_mask3_fmsubadd_pd // CHECK: [[NEG:%.+]] = fneg <4 x double> %{{.+}} // CHECK: call <4 x double> @llvm.x86.fma.vfmaddsub.pd.256(<4 x double> %{{.*}}, <4 x double> %{{.*}}, <4 x double> [[NEG]]) // CHECK: shufflevector <8 x i1> %{{.*}}, <8 x i1> %{{.*}}, <4 x i32> <i32 0, i32 1, i32 2, i32 3> @@ -3335,7 +3344,7 @@ __m256d test_mm256_mask3_fmsubadd_pd(__m256d __A, __m256d __B, __m256d __C, __mm } __m128 test_mm_mask3_fmsubadd_ps(__m128 __A, __m128 __B, __m128 __C, __mmask8 __U) { - // CHECK-LABEL: @test_mm_mask3_fmsubadd_ps + // CHECK-LABEL: test_mm_mask3_fmsubadd_ps // CHECK: [[NEG:%.+]] = fneg <4 x float> %{{.+}} // CHECK: call <4 x float> @llvm.x86.fma.vfmaddsub.ps(<4 x float> %{{.*}}, <4 x float> %{{.*}}, <4 x float> [[NEG]]) // CHECK: shufflevector <8 x i1> %{{.*}}, <8 x i1> %{{.*}}, <4 x i32> <i32 0, i32 1, i32 2, i32 3> @@ -3344,7 +3353,7 @@ __m128 test_mm_mask3_fmsubadd_ps(__m128 __A, __m128 __B, __m128 __C, __mmask8 __ } __m256 test_mm256_mask3_fmsubadd_ps(__m256 __A, __m256 __B, __m256 __C, __mmask8 __U) { - // CHECK-LABEL: @test_mm256_mask3_fmsubadd_ps + // CHECK-LABEL: test_mm256_mask3_fmsubadd_ps // CHECK: [[NEG:%.+]] = fneg <8 x float> %{{.*}} // CHECK: call <8 x float> @llvm.x86.fma.vfmaddsub.ps.256(<8 x float> %{{.*}}, <8 x float> %{{.*}}, <8 x float> [[NEG]]) // CHECK: select <8 x i1> %{{.*}}, <8 x float> %{{.*}}, <8 x float> %{{.*}} @@ -3352,7 +3361,7 @@ __m256 test_mm256_mask3_fmsubadd_ps(__m256 __A, __m256 __B, __m256 __C, __mmask8 } __m128d test_mm_mask_fnmadd_pd(__m128d __A, __mmask8 __U, __m128d __B, __m128d __C) { - // CHECK-LABEL: @test_mm_mask_fnmadd_pd + // CHECK-LABEL: test_mm_mask_fnmadd_pd // CHECK: fneg <2 x double> %{{.*}} // CHECK: call <2 x double> @llvm.fma.v2f64(<2 x double> %{{.*}}, <2 x double> %{{.*}}, <2 x double> %{{.*}}) // CHECK: shufflevector <8 x i1> %{{.*}}, <8 x i1> %{{.*}}, <2 x i32> <i32 0, i32 1> @@ -3361,7 +3370,7 @@ __m128d test_mm_mask_fnmadd_pd(__m128d __A, __mmask8 __U, __m128d __B, __m128d _ } __m256d test_mm256_mask_fnmadd_pd(__m256d __A, __mmask8 __U, __m256d __B, __m256d __C) { - // CHECK-LABEL: @test_mm256_mask_fnmadd_pd + // CHECK-LABEL: test_mm256_mask_fnmadd_pd // CHECK: fneg <4 x double> %{{.*}} // CHECK: call <4 x double> @llvm.fma.v4f64(<4 x double> %{{.*}}, <4 x double> %{{.*}}, <4 x double> %{{.*}}) // CHECK: shufflevector <8 x i1> %{{.*}}, <8 x i1> %{{.*}}, <4 x i32> <i32 0, i32 1, i32 2, i32 3> @@ -3370,7 +3379,7 @@ __m256d test_mm256_mask_fnmadd_pd(__m256d __A, __mmask8 __U, __m256d __B, __m256 } __m128 test_mm_mask_fnmadd_ps(__m128 __A, __mmask8 __U, __m128 __B, __m128 __C) { - // CHECK-LABEL: @test_mm_mask_fnmadd_ps + // CHECK-LABEL: test_mm_mask_fnmadd_ps // CHECK: fneg <4 x float> %{{.*}} // CHECK: call <4 x float> @llvm.fma.v4f32(<4 x float> %{{.*}}, <4 x float> %{{.*}}, <4 x float> %{{.*}}) // CHECK: shufflevector <8 x i1> %{{.*}}, <8 x i1> %{{.*}}, <4 x i32> <i32 0, i32 1, i32 2, i32 3> @@ -3379,7 +3388,7 @@ __m128 test_mm_mask_fnmadd_ps(__m128 __A, __mmask8 __U, __m128 __B, __m128 __C) } __m256 test_mm256_mask_fnmadd_ps(__m256 __A, __mmask8 __U, __m256 __B, __m256 __C) { - // CHECK-LABEL: @test_mm256_mask_fnmadd_ps + // CHECK-LABEL: test_mm256_mask_fnmadd_ps // CHECK: fneg <8 x float> %{{.*}} // CHECK: call <8 x float> @llvm.fma.v8f32(<8 x float> %{{.*}}, <8 x float> %{{.*}}, <8 x float> %{{.*}}) // CHECK: select <8 x i1> %{{.*}}, <8 x float> %{{.*}}, <8 x float> %{{.*}} @@ -3387,7 +3396,7 @@ __m256 test_mm256_mask_fnmadd_ps(__m256 __A, __mmask8 __U, __m256 __B, __m256 __ } __m128d test_mm_mask_fnmsub_pd(__m128d __A, __mmask8 __U, __m128d __B, __m128d __C) { - // CHECK-LABEL: @test_mm_mask_fnmsub_pd + // CHECK-LABEL: test_mm_mask_fnmsub_pd // CHECK: fneg <2 x double> %{{.*}} // CHECK: fneg <2 x double> %{{.*}} // CHECK: call <2 x double> @llvm.fma.v2f64(<2 x double> %{{.*}}, <2 x double> %{{.*}}, <2 x double> %{{.*}}) @@ -3397,7 +3406,7 @@ __m128d test_mm_mask_fnmsub_pd(__m128d __A, __mmask8 __U, __m128d __B, __m128d _ } __m128d test_mm_mask3_fnmsub_pd(__m128d __A, __m128d __B, __m128d __C, __mmask8 __U) { - // CHECK-LABEL: @test_mm_mask3_fnmsub_pd + // CHECK-LABEL: test_mm_mask3_fnmsub_pd // CHECK: fneg <2 x double> %{{.*}} // CHECK: fneg <2 x double> %{{.*}} // CHECK: call <2 x double> @llvm.fma.v2f64(<2 x double> %{{.*}}, <2 x double> %{{.*}}, <2 x double> %{{.*}}) @@ -3407,7 +3416,7 @@ __m128d test_mm_mask3_fnmsub_pd(__m128d __A, __m128d __B, __m128d __C, __mmask8 } __m256d test_mm256_mask_fnmsub_pd(__m256d __A, __mmask8 __U, __m256d __B, __m256d __C) { - // CHECK-LABEL: @test_mm256_mask_fnmsub_pd + // CHECK-LABEL: test_mm256_mask_fnmsub_pd // CHECK: fneg <4 x double> %{{.*}} // CHECK: fneg <4 x double> %{{.*}} // CHECK: call <4 x double> @llvm.fma.v4f64(<4 x double> %{{.*}}, <4 x double> %{{.*}}, <4 x double> %{{.*}}) @@ -3417,7 +3426,7 @@ __m256d test_mm256_mask_fnmsub_pd(__m256d __A, __mmask8 __U, __m256d __B, __m256 } __m256d test_mm256_mask3_fnmsub_pd(__m256d __A, __m256d __B, __m256d __C, __mmask8 __U) { - // CHECK-LABEL: @test_mm256_mask3_fnmsub_pd + // CHECK-LABEL: test_mm256_mask3_fnmsub_pd // CHECK: fneg <4 x double> %{{.*}} // CHECK: fneg <4 x double> %{{.*}} // CHECK: call <4 x double> @llvm.fma.v4f64(<4 x double> %{{.*}}, <4 x double> %{{.*}}, <4 x double> %{{.*}}) @@ -3427,7 +3436,7 @@ __m256d test_mm256_mask3_fnmsub_pd(__m256d __A, __m256d __B, __m256d __C, __mmas } __m128 test_mm_mask_fnmsub_ps(__m128 __A, __mmask8 __U, __m128 __B, __m128 __C) { - // CHECK-LABEL: @test_mm_mask_fnmsub_ps + // CHECK-LABEL: test_mm_mask_fnmsub_ps // CHECK: fneg <4 x float> %{{.*}} // CHECK: fneg <4 x float> %{{.*}} // CHECK: call <4 x float> @llvm.fma.v4f32(<4 x float> %{{.*}}, <4 x float> %{{.*}}, <4 x float> %{{.*}}) @@ -3437,7 +3446,7 @@ __m128 test_mm_mask_fnmsub_ps(__m128 __A, __mmask8 __U, __m128 __B, __m128 __C) } __m128 test_mm_mask3_fnmsub_ps(__m128 __A, __m128 __B, __m128 __C, __mmask8 __U) { - // CHECK-LABEL: @test_mm_mask3_fnmsub_ps + // CHECK-LABEL: test_mm_mask3_fnmsub_ps // CHECK: fneg <4 x float> %{{.*}} // CHECK: fneg <4 x float> %{{.*}} // CHECK: call <4 x float> @llvm.fma.v4f32(<4 x float> %{{.*}}, <4 x float> %{{.*}}, <4 x float> %{{.*}}) @@ -3447,7 +3456,7 @@ __m128 test_mm_mask3_fnmsub_ps(__m128 __A, __m128 __B, __m128 __C, __mmask8 __U) } __m256 test_mm256_mask_fnmsub_ps(__m256 __A, __mmask8 __U, __m256 __B, __m256 __C) { - // CHECK-LABEL: @test_mm256_mask_fnmsub_ps + // CHECK-LABEL: test_mm256_mask_fnmsub_ps // CHECK: fneg <8 x float> %{{.*}} // CHECK: fneg <8 x float> %{{.*}} // CHECK: call <8 x float> @llvm.fma.v8f32(<8 x float> %{{.*}}, <8 x float> %{{.*}}, <8 x float> %{{.*}}) @@ -3456,7 +3465,7 @@ __m256 test_mm256_mask_fnmsub_ps(__m256 __A, __mmask8 __U, __m256 __B, __m256 __ } __m256 test_mm256_mask3_fnmsub_ps(__m256 __A, __m256 __B, __m256 __C, __mmask8 __U) { - // CHECK-LABEL: @test_mm256_mask3_fnmsub_ps + // CHECK-LABEL: test_mm256_mask3_fnmsub_ps // CHECK: fneg <8 x float> %{{.*}} // CHECK: fneg <8 x float> %{{.*}} // CHECK: call <8 x float> @llvm.fma.v8f32(<8 x float> %{{.*}}, <8 x float> %{{.*}}, <8 x float> %{{.*}}) @@ -3465,1072 +3474,1092 @@ __m256 test_mm256_mask3_fnmsub_ps(__m256 __A, __m256 __B, __m256 __C, __mmask8 _ } __m128d test_mm_mask_add_pd(__m128d __W, __mmask8 __U, __m128d __A, __m128d __B) { - // CHECK-LABEL: @test_mm_mask_add_pd + // CHECK-LABEL: test_mm_mask_add_pd // CHECK: fadd <2 x double> %{{.*}}, %{{.*}} // CHECK: select <2 x i1> %{{.*}}, <2 x double> %{{.*}}, <2 x double> %{{.*}} return _mm_mask_add_pd(__W,__U,__A,__B); } __m128d test_mm_maskz_add_pd(__mmask8 __U, __m128d __A, __m128d __B) { - // CHECK-LABEL: @test_mm_maskz_add_pd + // CHECK-LABEL: test_mm_maskz_add_pd // CHECK: fadd <2 x double> %{{.*}}, %{{.*}} // CHECK: select <2 x i1> %{{.*}}, <2 x double> %{{.*}}, <2 x double> %{{.*}} return _mm_maskz_add_pd(__U,__A,__B); } __m256d test_mm256_mask_add_pd(__m256d __W, __mmask8 __U, __m256d __A, __m256d __B) { - // CHECK-LABEL: @test_mm256_mask_add_pd + // CHECK-LABEL: test_mm256_mask_add_pd // CHECK: fadd <4 x double> %{{.*}}, %{{.*}} // CHECK: select <4 x i1> %{{.*}}, <4 x double> %{{.*}}, <4 x double> %{{.*}} return _mm256_mask_add_pd(__W,__U,__A,__B); } __m256d test_mm256_maskz_add_pd(__mmask8 __U, __m256d __A, __m256d __B) { - // CHECK-LABEL: @test_mm256_maskz_add_pd + // CHECK-LABEL: test_mm256_maskz_add_pd // CHECK: fadd <4 x double> %{{.*}}, %{{.*}} // CHECK: select <4 x i1> %{{.*}}, <4 x double> %{{.*}}, <4 x double> %{{.*}} return _mm256_maskz_add_pd(__U,__A,__B); } __m128 test_mm_mask_add_ps(__m128 __W, __mmask8 __U, __m128 __A, __m128 __B) { - // CHECK-LABEL: @test_mm_mask_add_ps + // CHECK-LABEL: test_mm_mask_add_ps // CHECK: fadd <4 x float> %{{.*}}, %{{.*}} // CHECK: select <4 x i1> %{{.*}}, <4 x float> %{{.*}}, <4 x float> %{{.*}} return _mm_mask_add_ps(__W,__U,__A,__B); } __m128 test_mm_maskz_add_ps(__mmask8 __U, __m128 __A, __m128 __B) { - // CHECK-LABEL: @test_mm_maskz_add_ps + // CHECK-LABEL: test_mm_maskz_add_ps // CHECK: fadd <4 x float> %{{.*}}, %{{.*}} // CHECK: select <4 x i1> %{{.*}}, <4 x float> %{{.*}}, <4 x float> %{{.*}} return _mm_maskz_add_ps(__U,__A,__B); } __m256 test_mm256_mask_add_ps(__m256 __W, __mmask8 __U, __m256 __A, __m256 __B) { - // CHECK-LABEL: @test_mm256_mask_add_ps + // CHECK-LABEL: test_mm256_mask_add_ps // CHECK: fadd <8 x float> %{{.*}}, %{{.*}} // CHECK: select <8 x i1> %{{.*}}, <8 x float> %{{.*}}, <8 x float> %{{.*}} return _mm256_mask_add_ps(__W,__U,__A,__B); } __m256 test_mm256_maskz_add_ps(__mmask8 __U, __m256 __A, __m256 __B) { - // CHECK-LABEL: @test_mm256_maskz_add_ps + // CHECK-LABEL: test_mm256_maskz_add_ps // CHECK: fadd <8 x float> %{{.*}}, %{{.*}} // CHECK: select <8 x i1> %{{.*}}, <8 x float> %{{.*}}, <8 x float> %{{.*}} return _mm256_maskz_add_ps(__U,__A,__B); } __m128i test_mm_mask_blend_epi32(__mmask8 __U, __m128i __A, __m128i __W) { - // CHECK-LABEL: @test_mm_mask_blend_epi32 + // CHECK-LABEL: test_mm_mask_blend_epi32 // CHECK: select <4 x i1> %{{.*}}, <4 x i32> %{{.*}}, <4 x i32> %{{.*}} return _mm_mask_blend_epi32(__U,__A,__W); } __m256i test_mm256_mask_blend_epi32(__mmask8 __U, __m256i __A, __m256i __W) { - // CHECK-LABEL: @test_mm256_mask_blend_epi32 + // CHECK-LABEL: test_mm256_mask_blend_epi32 // CHECK: select <8 x i1> %{{.*}}, <8 x i32> %{{.*}}, <8 x i32> %{{.*}} return _mm256_mask_blend_epi32(__U,__A,__W); } __m128d test_mm_mask_blend_pd(__mmask8 __U, __m128d __A, __m128d __W) { - // CHECK-LABEL: @test_mm_mask_blend_pd + // CHECK-LABEL: test_mm_mask_blend_pd // CHECK: select <2 x i1> %{{.*}}, <2 x double> %{{.*}}, <2 x double> %{{.*}} return _mm_mask_blend_pd(__U,__A,__W); } __m256d test_mm256_mask_blend_pd(__mmask8 __U, __m256d __A, __m256d __W) { - // CHECK-LABEL: @test_mm256_mask_blend_pd + // CHECK-LABEL: test_mm256_mask_blend_pd // CHECK: select <4 x i1> %{{.*}}, <4 x double> %{{.*}}, <4 x double> %{{.*}} return _mm256_mask_blend_pd(__U,__A,__W); } __m128 test_mm_mask_blend_ps(__mmask8 __U, __m128 __A, __m128 __W) { - // CHECK-LABEL: @test_mm_mask_blend_ps + // CHECK-LABEL: test_mm_mask_blend_ps // CHECK: select <4 x i1> %{{.*}}, <4 x float> %{{.*}}, <4 x float> %{{.*}} return _mm_mask_blend_ps(__U,__A,__W); } __m256 test_mm256_mask_blend_ps(__mmask8 __U, __m256 __A, __m256 __W) { - // CHECK-LABEL: @test_mm256_mask_blend_ps + // CHECK-LABEL: test_mm256_mask_blend_ps // CHECK: select <8 x i1> %{{.*}}, <8 x float> %{{.*}}, <8 x float> %{{.*}} return _mm256_mask_blend_ps(__U,__A,__W); } __m128i test_mm_mask_blend_epi64(__mmask8 __U, __m128i __A, __m128i __W) { - // CHECK-LABEL: @test_mm_mask_blend_epi64 + // CHECK-LABEL: test_mm_mask_blend_epi64 // CHECK: select <2 x i1> %{{.*}}, <2 x i64> %{{.*}}, <2 x i64> %{{.*}} return _mm_mask_blend_epi64(__U,__A,__W); } __m256i test_mm256_mask_blend_epi64(__mmask8 __U, __m256i __A, __m256i __W) { - // CHECK-LABEL: @test_mm256_mask_blend_epi64 + // CHECK-LABEL: test_mm256_mask_blend_epi64 // CHECK: select <4 x i1> %{{.*}}, <4 x i64> %{{.*}}, <4 x i64> %{{.*}} return _mm256_mask_blend_epi64(__U,__A,__W); } __m128d test_mm_mask_compress_pd(__m128d __W, __mmask8 __U, __m128d __A) { - // CHECK-LABEL: @test_mm_mask_compress_pd + // CHECK-LABEL: test_mm_mask_compress_pd // CHECK: @llvm.x86.avx512.mask.compress return _mm_mask_compress_pd(__W,__U,__A); } __m128d test_mm_maskz_compress_pd(__mmask8 __U, __m128d __A) { - // CHECK-LABEL: @test_mm_maskz_compress_pd + // CHECK-LABEL: test_mm_maskz_compress_pd // CHECK: @llvm.x86.avx512.mask.compress return _mm_maskz_compress_pd(__U,__A); } __m256d test_mm256_mask_compress_pd(__m256d __W, __mmask8 __U, __m256d __A) { - // CHECK-LABEL: @test_mm256_mask_compress_pd + // CHECK-LABEL: test_mm256_mask_compress_pd // CHECK: @llvm.x86.avx512.mask.compress return _mm256_mask_compress_pd(__W,__U,__A); } __m256d test_mm256_maskz_compress_pd(__mmask8 __U, __m256d __A) { - // CHECK-LABEL: @test_mm256_maskz_compress_pd + // CHECK-LABEL: test_mm256_maskz_compress_pd // CHECK: @llvm.x86.avx512.mask.compress return _mm256_maskz_compress_pd(__U,__A); } __m128i test_mm_mask_compress_epi64(__m128i __W, __mmask8 __U, __m128i __A) { - // CHECK-LABEL: @test_mm_mask_compress_epi64 + // CHECK-LABEL: test_mm_mask_compress_epi64 // CHECK: @llvm.x86.avx512.mask.compress return _mm_mask_compress_epi64(__W,__U,__A); } __m128i test_mm_maskz_compress_epi64(__mmask8 __U, __m128i __A) { - // CHECK-LABEL: @test_mm_maskz_compress_epi64 + // CHECK-LABEL: test_mm_maskz_compress_epi64 // CHECK: @llvm.x86.avx512.mask.compress return _mm_maskz_compress_epi64(__U,__A); } __m256i test_mm256_mask_compress_epi64(__m256i __W, __mmask8 __U, __m256i __A) { - // CHECK-LABEL: @test_mm256_mask_compress_epi64 + // CHECK-LABEL: test_mm256_mask_compress_epi64 // CHECK: @llvm.x86.avx512.mask.compress return _mm256_mask_compress_epi64(__W,__U,__A); } __m256i test_mm256_maskz_compress_epi64(__mmask8 __U, __m256i __A) { - // CHECK-LABEL: @test_mm256_maskz_compress_epi64 + // CHECK-LABEL: test_mm256_maskz_compress_epi64 // CHECK: @llvm.x86.avx512.mask.compress return _mm256_maskz_compress_epi64(__U,__A); } __m128 test_mm_mask_compress_ps(__m128 __W, __mmask8 __U, __m128 __A) { - // CHECK-LABEL: @test_mm_mask_compress_ps + // CHECK-LABEL: test_mm_mask_compress_ps // CHECK: @llvm.x86.avx512.mask.compress return _mm_mask_compress_ps(__W,__U,__A); } __m128 test_mm_maskz_compress_ps(__mmask8 __U, __m128 __A) { - // CHECK-LABEL: @test_mm_maskz_compress_ps + // CHECK-LABEL: test_mm_maskz_compress_ps // CHECK: @llvm.x86.avx512.mask.compress return _mm_maskz_compress_ps(__U,__A); } __m256 test_mm256_mask_compress_ps(__m256 __W, __mmask8 __U, __m256 __A) { - // CHECK-LABEL: @test_mm256_mask_compress_ps + // CHECK-LABEL: test_mm256_mask_compress_ps // CHECK: @llvm.x86.avx512.mask.compress return _mm256_mask_compress_ps(__W,__U,__A); } __m256 test_mm256_maskz_compress_ps(__mmask8 __U, __m256 __A) { - // CHECK-LABEL: @test_mm256_maskz_compress_ps + // CHECK-LABEL: test_mm256_maskz_compress_ps // CHECK: @llvm.x86.avx512.mask.compress return _mm256_maskz_compress_ps(__U,__A); } __m128i test_mm_mask_compress_epi32(__m128i __W, __mmask8 __U, __m128i __A) { - // CHECK-LABEL: @test_mm_mask_compress_epi32 + // CHECK-LABEL: test_mm_mask_compress_epi32 // CHECK: @llvm.x86.avx512.mask.compress return _mm_mask_compress_epi32(__W,__U,__A); } __m128i test_mm_maskz_compress_epi32(__mmask8 __U, __m128i __A) { - // CHECK-LABEL: @test_mm_maskz_compress_epi32 + // CHECK-LABEL: test_mm_maskz_compress_epi32 // CHECK: @llvm.x86.avx512.mask.compress return _mm_maskz_compress_epi32(__U,__A); } __m256i test_mm256_mask_compress_epi32(__m256i __W, __mmask8 __U, __m256i __A) { - // CHECK-LABEL: @test_mm256_mask_compress_epi32 + // CHECK-LABEL: test_mm256_mask_compress_epi32 // CHECK: @llvm.x86.avx512.mask.compress return _mm256_mask_compress_epi32(__W,__U,__A); } __m256i test_mm256_maskz_compress_epi32(__mmask8 __U, __m256i __A) { - // CHECK-LABEL: @test_mm256_maskz_compress_epi32 + // CHECK-LABEL: test_mm256_maskz_compress_epi32 // CHECK: @llvm.x86.avx512.mask.compress return _mm256_maskz_compress_epi32(__U,__A); } void test_mm_mask_compressstoreu_pd(void *__P, __mmask8 __U, __m128d __A) { - // CHECK-LABEL: @test_mm_mask_compressstoreu_pd + // CHECK-LABEL: test_mm_mask_compressstoreu_pd // CHECK: @llvm.masked.compressstore.v2f64(<2 x double> %{{.*}}, ptr %{{.*}}, <2 x i1> %{{.*}}) return _mm_mask_compressstoreu_pd(__P,__U,__A); } void test_mm256_mask_compressstoreu_pd(void *__P, __mmask8 __U, __m256d __A) { - // CHECK-LABEL: @test_mm256_mask_compressstoreu_pd + // CHECK-LABEL: test_mm256_mask_compressstoreu_pd // CHECK: @llvm.masked.compressstore.v4f64(<4 x double> %{{.*}}, ptr %{{.*}}, <4 x i1> %{{.*}}) return _mm256_mask_compressstoreu_pd(__P,__U,__A); } void test_mm_mask_compressstoreu_epi64(void *__P, __mmask8 __U, __m128i __A) { - // CHECK-LABEL: @test_mm_mask_compressstoreu_epi64 + // CHECK-LABEL: test_mm_mask_compressstoreu_epi64 // CHECK: @llvm.masked.compressstore.v2i64(<2 x i64> %{{.*}}, ptr %{{.*}}, <2 x i1> %{{.*}}) return _mm_mask_compressstoreu_epi64(__P,__U,__A); } void test_mm256_mask_compressstoreu_epi64(void *__P, __mmask8 __U, __m256i __A) { - // CHECK-LABEL: @test_mm256_mask_compressstoreu_epi64 + // CHECK-LABEL: test_mm256_mask_compressstoreu_epi64 // CHECK: @llvm.masked.compressstore.v4i64(<4 x i64> %{{.*}}, ptr %{{.*}}, <4 x i1> %{{.*}}) return _mm256_mask_compressstoreu_epi64(__P,__U,__A); } void test_mm_mask_compressstoreu_ps(void *__P, __mmask8 __U, __m128 __A) { - // CHECK-LABEL: @test_mm_mask_compressstoreu_ps + // CHECK-LABEL: test_mm_mask_compressstoreu_ps // CHECK: @llvm.masked.compressstore.v4f32(<4 x float> %{{.*}}, ptr %{{.*}}, <4 x i1> %{{.*}}) return _mm_mask_compressstoreu_ps(__P,__U,__A); } void test_mm256_mask_compressstoreu_ps(void *__P, __mmask8 __U, __m256 __A) { - // CHECK-LABEL: @test_mm256_mask_compressstoreu_ps + // CHECK-LABEL: test_mm256_mask_compressstoreu_ps // CHECK: @llvm.masked.compressstore.v8f32(<8 x float> %{{.*}}, ptr %{{.*}}, <8 x i1> %{{.*}}) return _mm256_mask_compressstoreu_ps(__P,__U,__A); } void test_mm_mask_compressstoreu_epi32(void *__P, __mmask8 __U, __m128i __A) { - // CHECK-LABEL: @test_mm_mask_compressstoreu_epi32 + // CHECK-LABEL: test_mm_mask_compressstoreu_epi32 // CHECK: @llvm.masked.compressstore.v4i32(<4 x i32> %{{.*}}, ptr %{{.*}}, <4 x i1> %{{.*}}) return _mm_mask_compressstoreu_epi32(__P,__U,__A); } void test_mm256_mask_compressstoreu_epi32(void *__P, __mmask8 __U, __m256i __A) { - // CHECK-LABEL: @test_mm256_mask_compressstoreu_epi32 + // CHECK-LABEL: test_mm256_mask_compressstoreu_epi32 // CHECK: @llvm.masked.compressstore.v8i32(<8 x i32> %{{.*}}, ptr %{{.*}}, <8 x i1> %{{.*}}) return _mm256_mask_compressstoreu_epi32(__P,__U,__A); } __m128d test_mm_mask_cvtepi32_pd(__m128d __W, __mmask8 __U, __m128i __A) { - // CHECK-LABEL: @test_mm_mask_cvtepi32_pd + // CHECK-LABEL: test_mm_mask_cvtepi32_pd // CHECK: shufflevector <4 x i32> %{{.*}}, <4 x i32> %{{.*}}, <2 x i32> <i32 0, i32 1> // CHECK: sitofp <2 x i32> %{{.*}} to <2 x double> // CHECK: select <2 x i1> {{.*}}, <2 x double> {{.*}}, <2 x double> {{.*}} return _mm_mask_cvtepi32_pd(__W,__U,__A); } __m128d test_mm_maskz_cvtepi32_pd(__mmask8 __U, __m128i __A) { - // CHECK-LABEL: @test_mm_maskz_cvtepi32_pd + // CHECK-LABEL: test_mm_maskz_cvtepi32_pd // CHECK: shufflevector <4 x i32> %{{.*}}, <4 x i32> %{{.*}}, <2 x i32> <i32 0, i32 1> // CHECK: sitofp <2 x i32> %{{.*}} to <2 x double> // CHECK: select <2 x i1> {{.*}}, <2 x double> {{.*}}, <2 x double> {{.*}} return _mm_maskz_cvtepi32_pd(__U,__A); } __m256d test_mm256_mask_cvtepi32_pd(__m256d __W, __mmask8 __U, __m128i __A) { - // CHECK-LABEL: @test_mm256_mask_cvtepi32_pd + // CHECK-LABEL: test_mm256_mask_cvtepi32_pd // CHECK: sitofp <4 x i32> %{{.*}} to <4 x double> // CHECK: select <4 x i1> {{.*}}, <4 x double> {{.*}}, <4 x double> {{.*}} return _mm256_mask_cvtepi32_pd(__W,__U,__A); } __m256d test_mm256_maskz_cvtepi32_pd(__mmask8 __U, __m128i __A) { - // CHECK-LABEL: @test_mm256_maskz_cvtepi32_pd + // CHECK-LABEL: test_mm256_maskz_cvtepi32_pd // CHECK: sitofp <4 x i32> %{{.*}} to <4 x double> // CHECK: select <4 x i1> {{.*}}, <4 x double> {{.*}}, <4 x double> {{.*}} return _mm256_maskz_cvtepi32_pd(__U,__A); } __m128 test_mm_mask_cvtepi32_ps(__m128 __W, __mmask8 __U, __m128i __A) { - // CHECK-LABEL: @test_mm_mask_cvtepi32_ps + // CHECK-LABEL: test_mm_mask_cvtepi32_ps // CHECK: sitofp <4 x i32> %{{.*}} to <4 x float> // CHECK: select <4 x i1> {{.*}}, <4 x float> {{.*}}, <4 x float> {{.*}} return _mm_mask_cvtepi32_ps(__W,__U,__A); } __m128 test_mm_maskz_cvtepi32_ps(__mmask8 __U, __m128i __A) { - // CHECK-LABEL: @test_mm_maskz_cvtepi32_ps + // CHECK-LABEL: test_mm_maskz_cvtepi32_ps // CHECK: sitofp <4 x i32> %{{.*}} to <4 x float> // CHECK: select <4 x i1> {{.*}}, <4 x float> {{.*}}, <4 x float> {{.*}} return _mm_maskz_cvtepi32_ps(__U,__A); } __m256 test_mm256_mask_cvtepi32_ps(__m256 __W, __mmask8 __U, __m256i __A) { - // CHECK-LABEL: @test_mm256_mask_cvtepi32_ps + // CHECK-LABEL: test_mm256_mask_cvtepi32_ps // CHECK: sitofp <8 x i32> %{{.*}} to <8 x float> // CHECK: select <8 x i1> {{.*}}, <8 x float> {{.*}}, <8 x float> {{.*}} return _mm256_mask_cvtepi32_ps(__W,__U,__A); } __m256 test_mm256_maskz_cvtepi32_ps(__mmask8 __U, __m256i __A) { - // CHECK-LABEL: @test_mm256_maskz_cvtepi32_ps + // CHECK-LABEL: test_mm256_maskz_cvtepi32_ps // CHECK: sitofp <8 x i32> %{{.*}} to <8 x float> // CHECK: select <8 x i1> {{.*}}, <8 x float> {{.*}}, <8 x float> {{.*}} return _mm256_maskz_cvtepi32_ps(__U,__A); } __m128i test_mm_mask_cvtpd_epi32(__m128i __W, __mmask8 __U, __m128d __A) { - // CHECK-LABEL: @test_mm_mask_cvtpd_epi32 + // CHECK-LABEL: test_mm_mask_cvtpd_epi32 // CHECK: @llvm.x86.avx512.mask.cvtpd2dq.128 return _mm_mask_cvtpd_epi32(__W,__U,__A); } __m128i test_mm_maskz_cvtpd_epi32(__mmask8 __U, __m128d __A) { - // CHECK-LABEL: @test_mm_maskz_cvtpd_epi32 + // CHECK-LABEL: test_mm_maskz_cvtpd_epi32 // CHECK: @llvm.x86.avx512.mask.cvtpd2dq.128 return _mm_maskz_cvtpd_epi32(__U,__A); } __m128i test_mm256_mask_cvtpd_epi32(__m128i __W, __mmask8 __U, __m256d __A) { - // CHECK-LABEL: @test_mm256_mask_cvtpd_epi32 + // CHECK-LABEL: test_mm256_mask_cvtpd_epi32 // CHECK: @llvm.x86.avx.cvt.pd2dq.256 // CHECK: select <4 x i1> {{.*}}, <4 x i32> {{.*}}, <4 x i32> {{.*}} return _mm256_mask_cvtpd_epi32(__W,__U,__A); } __m128i test_mm256_maskz_cvtpd_epi32(__mmask8 __U, __m256d __A) { - // CHECK-LABEL: @test_mm256_maskz_cvtpd_epi32 + // CHECK-LABEL: test_mm256_maskz_cvtpd_epi32 // CHECK: @llvm.x86.avx.cvt.pd2dq.256 // CHECK: select <4 x i1> {{.*}}, <4 x i32> {{.*}}, <4 x i32> {{.*}} return _mm256_maskz_cvtpd_epi32(__U,__A); } __m128 test_mm_mask_cvtpd_ps(__m128 __W, __mmask8 __U, __m128d __A) { - // CHECK-LABEL: @test_mm_mask_cvtpd_ps + // CHECK-LABEL: test_mm_mask_cvtpd_ps // CHECK: @llvm.x86.avx512.mask.cvtpd2ps return _mm_mask_cvtpd_ps(__W,__U,__A); } __m128 test_mm_maskz_cvtpd_ps(__mmask8 __U, __m128d __A) { - // CHECK-LABEL: @test_mm_maskz_cvtpd_ps + // CHECK-LABEL: test_mm_maskz_cvtpd_ps // CHECK: @llvm.x86.avx512.mask.cvtpd2ps return _mm_maskz_cvtpd_ps(__U,__A); } __m128 test_mm256_mask_cvtpd_ps(__m128 __W, __mmask8 __U, __m256d __A) { - // CHECK-LABEL: @test_mm256_mask_cvtpd_ps + // CHECK-LABEL: test_mm256_mask_cvtpd_ps // CHECK: @llvm.x86.avx.cvt.pd2.ps.256 // CHECK: select <4 x i1> {{.*}}, <4 x float> {{.*}}, <4 x float> {{.*}} return _mm256_mask_cvtpd_ps(__W,__U,__A); } __m128 test_mm256_maskz_cvtpd_ps(__mmask8 __U, __m256d __A) { - // CHECK-LABEL: @test_mm256_maskz_cvtpd_ps + // CHECK-LABEL: test_mm256_maskz_cvtpd_ps // CHECK: @llvm.x86.avx.cvt.pd2.ps.256 // CHECK: select <4 x i1> {{.*}}, <4 x float> {{.*}}, <4 x float> {{.*}} return _mm256_maskz_cvtpd_ps(__U,__A); } __m128i test_mm_cvtpd_epu32(__m128d __A) { - // CHECK-LABEL: @test_mm_cvtpd_epu32 + // CHECK-LABEL: test_mm_cvtpd_epu32 // CHECK: @llvm.x86.avx512.mask.cvtpd2udq.128 return _mm_cvtpd_epu32(__A); } __m128i test_mm_mask_cvtpd_epu32(__m128i __W, __mmask8 __U, __m128d __A) { - // CHECK-LABEL: @test_mm_mask_cvtpd_epu32 + // CHECK-LABEL: test_mm_mask_cvtpd_epu32 // CHECK: @llvm.x86.avx512.mask.cvtpd2udq.128 return _mm_mask_cvtpd_epu32(__W,__U,__A); } __m128i test_mm_maskz_cvtpd_epu32(__mmask8 __U, __m128d __A) { - // CHECK-LABEL: @test_mm_maskz_cvtpd_epu32 + // CHECK-LABEL: test_mm_maskz_cvtpd_epu32 // CHECK: @llvm.x86.avx512.mask.cvtpd2udq.128 return _mm_maskz_cvtpd_epu32(__U,__A); } __m128i test_mm256_cvtpd_epu32(__m256d __A) { - // CHECK-LABEL: @test_mm256_cvtpd_epu32 + // CHECK-LABEL: test_mm256_cvtpd_epu32 // CHECK: @llvm.x86.avx512.mask.cvtpd2udq.256 return _mm256_cvtpd_epu32(__A); } __m128i test_mm256_mask_cvtpd_epu32(__m128i __W, __mmask8 __U, __m256d __A) { - // CHECK-LABEL: @test_mm256_mask_cvtpd_epu32 + // CHECK-LABEL: test_mm256_mask_cvtpd_epu32 // CHECK: @llvm.x86.avx512.mask.cvtpd2udq.256 return _mm256_mask_cvtpd_epu32(__W,__U,__A); } __m128i test_mm256_maskz_cvtpd_epu32(__mmask8 __U, __m256d __A) { - // CHECK-LABEL: @test_mm256_maskz_cvtpd_epu32 + // CHECK-LABEL: test_mm256_maskz_cvtpd_epu32 // CHECK: @llvm.x86.avx512.mask.cvtpd2udq.256 return _mm256_maskz_cvtpd_epu32(__U,__A); } __m128i test_mm_mask_cvtps_epi32(__m128i __W, __mmask8 __U, __m128 __A) { - // CHECK-LABEL: @test_mm_mask_cvtps_epi32 + // CHECK-LABEL: test_mm_mask_cvtps_epi32 // CHECK: @llvm.x86.sse2.cvtps2dq // CHECK: select <4 x i1> {{.*}}, <4 x i32> {{.*}}, <4 x i32> {{.*}} return _mm_mask_cvtps_epi32(__W,__U,__A); } __m128i test_mm_maskz_cvtps_epi32(__mmask8 __U, __m128 __A) { - // CHECK-LABEL: @test_mm_maskz_cvtps_epi32 + // CHECK-LABEL: test_mm_maskz_cvtps_epi32 // CHECK: @llvm.x86.sse2.cvtps2dq // CHECK: select <4 x i1> {{.*}}, <4 x i32> {{.*}}, <4 x i32> {{.*}} return _mm_maskz_cvtps_epi32(__U,__A); } __m256i test_mm256_mask_cvtps_epi32(__m256i __W, __mmask8 __U, __m256 __A) { - // CHECK-LABEL: @test_mm256_mask_cvtps_epi32 + // CHECK-LABEL: test_mm256_mask_cvtps_epi32 // CHECK: @llvm.x86.avx.cvt.ps2dq.256 // CHECK: select <8 x i1> {{.*}}, <8 x i32> {{.*}}, <8 x i32> {{.*}} return _mm256_mask_cvtps_epi32(__W,__U,__A); } __m256i test_mm256_maskz_cvtps_epi32(__mmask8 __U, __m256 __A) { - // CHECK-LABEL: @test_mm256_maskz_cvtps_epi32 + // CHECK-LABEL: test_mm256_maskz_cvtps_epi32 // CHECK: @llvm.x86.avx.cvt.ps2dq.256 // CHECK: select <8 x i1> {{.*}}, <8 x i32> {{.*}}, <8 x i32> {{.*}} return _mm256_maskz_cvtps_epi32(__U,__A); } __m128d test_mm_mask_cvtps_pd(__m128d __W, __mmask8 __U, __m128 __A) { - // CHECK-LABEL: @test_mm_mask_cvtps_pd + // CHECK-LABEL: test_mm_mask_cvtps_pd // CHECK: fpext <2 x float> %{{.*}} to <2 x double> // CHECK: select <2 x i1> {{.*}}, <2 x double> {{.*}}, <2 x double> {{.*}} return _mm_mask_cvtps_pd(__W,__U,__A); } __m128d test_mm_maskz_cvtps_pd(__mmask8 __U, __m128 __A) { - // CHECK-LABEL: @test_mm_maskz_cvtps_pd + // CHECK-LABEL: test_mm_maskz_cvtps_pd // CHECK: fpext <2 x float> %{{.*}} to <2 x double> // CHECK: select <2 x i1> {{.*}}, <2 x double> {{.*}}, <2 x double> {{.*}} return _mm_maskz_cvtps_pd(__U,__A); } __m256d test_mm256_mask_cvtps_pd(__m256d __W, __mmask8 __U, __m128 __A) { - // CHECK-LABEL: @test_mm256_mask_cvtps_pd + // CHECK-LABEL: test_mm256_mask_cvtps_pd // CHECK: fpext <4 x float> %{{.*}} to <4 x double> // CHECK: select <4 x i1> {{.*}}, <4 x double> {{.*}}, <4 x double> {{.*}} return _mm256_mask_cvtps_pd(__W,__U,__A); } __m256d test_mm256_maskz_cvtps_pd(__mmask8 __U, __m128 __A) { - // CHECK-LABEL: @test_mm256_maskz_cvtps_pd + // CHECK-LABEL: test_mm256_maskz_cvtps_pd // CHECK: fpext <4 x float> %{{.*}} to <4 x double> // CHECK: select <4 x i1> {{.*}}, <4 x double> {{.*}}, <4 x double> {{.*}} return _mm256_maskz_cvtps_pd(__U,__A); } __m128i test_mm_cvtps_epu32(__m128 __A) { - // CHECK-LABEL: @test_mm_cvtps_epu32 + // CHECK-LABEL: test_mm_cvtps_epu32 // CHECK: @llvm.x86.avx512.mask.cvtps2udq.128 return _mm_cvtps_epu32(__A); } __m128i test_mm_mask_cvtps_epu32(__m128i __W, __mmask8 __U, __m128 __A) { - // CHECK-LABEL: @test_mm_mask_cvtps_epu32 + // CHECK-LABEL: test_mm_mask_cvtps_epu32 // CHECK: @llvm.x86.avx512.mask.cvtps2udq.128 return _mm_mask_cvtps_epu32(__W,__U,__A); } __m128i test_mm_maskz_cvtps_epu32(__mmask8 __U, __m128 __A) { - // CHECK-LABEL: @test_mm_maskz_cvtps_epu32 + // CHECK-LABEL: test_mm_maskz_cvtps_epu32 // CHECK: @llvm.x86.avx512.mask.cvtps2udq.128 return _mm_maskz_cvtps_epu32(__U,__A); } __m256i test_mm256_cvtps_epu32(__m256 __A) { - // CHECK-LABEL: @test_mm256_cvtps_epu32 + // CHECK-LABEL: test_mm256_cvtps_epu32 // CHECK: @llvm.x86.avx512.mask.cvtps2udq.256 return _mm256_cvtps_epu32(__A); } __m256i test_mm256_mask_cvtps_epu32(__m256i __W, __mmask8 __U, __m256 __A) { - // CHECK-LABEL: @test_mm256_mask_cvtps_epu32 + // CHECK-LABEL: test_mm256_mask_cvtps_epu32 // CHECK: @llvm.x86.avx512.mask.cvtps2udq.256 return _mm256_mask_cvtps_epu32(__W,__U,__A); } __m256i test_mm256_maskz_cvtps_epu32(__mmask8 __U, __m256 __A) { - // CHECK-LABEL: @test_mm256_maskz_cvtps_epu32 + // CHECK-LABEL: test_mm256_maskz_cvtps_epu32 // CHECK: @llvm.x86.avx512.mask.cvtps2udq.256 return _mm256_maskz_cvtps_epu32(__U,__A); } __m128i test_mm_mask_cvttpd_epi32(__m128i __W, __mmask8 __U, __m128d __A) { - // CHECK-LABEL: @test_mm_mask_cvttpd_epi32 + // CHECK-LABEL: test_mm_mask_cvttpd_epi32 // CHECK: @llvm.x86.avx512.mask.cvttpd2dq.128 return _mm_mask_cvttpd_epi32(__W,__U,__A); } __m128i test_mm_maskz_cvttpd_epi32(__mmask8 __U, __m128d __A) { - // CHECK-LABEL: @test_mm_maskz_cvttpd_epi32 + // CHECK-LABEL: test_mm_maskz_cvttpd_epi32 // CHECK: @llvm.x86.avx512.mask.cvttpd2dq.128 return _mm_maskz_cvttpd_epi32(__U,__A); } __m128i test_mm256_mask_cvttpd_epi32(__m128i __W, __mmask8 __U, __m256d __A) { - // CHECK-LABEL: @test_mm256_mask_cvttpd_epi32 + // CHECK-LABEL: test_mm256_mask_cvttpd_epi32 // CHECK: @llvm.x86.avx.cvtt.pd2dq.256 // CHECK: select <4 x i1> {{.*}}, <4 x i32> {{.*}}, <4 x i32> {{.*}} return _mm256_mask_cvttpd_epi32(__W,__U,__A); } __m128i test_mm256_maskz_cvttpd_epi32(__mmask8 __U, __m256d __A) { - // CHECK-LABEL: @test_mm256_maskz_cvttpd_epi32 + // CHECK-LABEL: test_mm256_maskz_cvttpd_epi32 // CHECK: @llvm.x86.avx.cvtt.pd2dq.256 // CHECK: select <4 x i1> {{.*}}, <4 x i32> {{.*}}, <4 x i32> {{.*}} return _mm256_maskz_cvttpd_epi32(__U,__A); } __m128i test_mm_cvttpd_epu32(__m128d __A) { - // CHECK-LABEL: @test_mm_cvttpd_epu32 + // CHECK-LABEL: test_mm_cvttpd_epu32 // CHECK: @llvm.x86.avx512.mask.cvttpd2udq.128 return _mm_cvttpd_epu32(__A); } __m128i test_mm_mask_cvttpd_epu32(__m128i __W, __mmask8 __U, __m128d __A) { - // CHECK-LABEL: @test_mm_mask_cvttpd_epu32 + // CHECK-LABEL: test_mm_mask_cvttpd_epu32 // CHECK: @llvm.x86.avx512.mask.cvttpd2udq.128 return _mm_mask_cvttpd_epu32(__W,__U,__A); } __m128i test_mm_maskz_cvttpd_epu32(__mmask8 __U, __m128d __A) { - // CHECK-LABEL: @test_mm_maskz_cvttpd_epu32 + // CHECK-LABEL: test_mm_maskz_cvttpd_epu32 // CHECK: @llvm.x86.avx512.mask.cvttpd2udq.128 return _mm_maskz_cvttpd_epu32(__U,__A); } __m128i test_mm256_cvttpd_epu32(__m256d __A) { - // CHECK-LABEL: @test_mm256_cvttpd_epu32 + // CHECK-LABEL: test_mm256_cvttpd_epu32 // CHECK: @llvm.x86.avx512.mask.cvttpd2udq.256 return _mm256_cvttpd_epu32(__A); } __m128i test_mm256_mask_cvttpd_epu32(__m128i __W, __mmask8 __U, __m256d __A) { - // CHECK-LABEL: @test_mm256_mask_cvttpd_epu32 + // CHECK-LABEL: test_mm256_mask_cvttpd_epu32 // CHECK: @llvm.x86.avx512.mask.cvttpd2udq.256 return _mm256_mask_cvttpd_epu32(__W,__U,__A); } __m128i test_mm256_maskz_cvttpd_epu32(__mmask8 __U, __m256d __A) { - // CHECK-LABEL: @test_mm256_maskz_cvttpd_epu32 + // CHECK-LABEL: test_mm256_maskz_cvttpd_epu32 // CHECK: @llvm.x86.avx512.mask.cvttpd2udq.256 return _mm256_maskz_cvttpd_epu32(__U,__A); } __m128i test_mm_mask_cvttps_epi32(__m128i __W, __mmask8 __U, __m128 __A) { - // CHECK-LABEL: @test_mm_mask_cvttps_epi32 + // CHECK-LABEL: test_mm_mask_cvttps_epi32 // CHECK: @llvm.x86.sse2.cvttps2dq // CHECK: select <4 x i1> {{.*}}, <4 x i32> {{.*}}, <4 x i32> {{.*}} return _mm_mask_cvttps_epi32(__W,__U,__A); } __m128i test_mm_maskz_cvttps_epi32(__mmask8 __U, __m128 __A) { - // CHECK-LABEL: @test_mm_maskz_cvttps_epi32 + // CHECK-LABEL: test_mm_maskz_cvttps_epi32 // CHECK: @llvm.x86.sse2.cvttps2dq // CHECK: select <4 x i1> {{.*}}, <4 x i32> {{.*}}, <4 x i32> {{.*}} return _mm_maskz_cvttps_epi32(__U,__A); } __m256i test_mm256_mask_cvttps_epi32(__m256i __W, __mmask8 __U, __m256 __A) { - // CHECK-LABEL: @test_mm256_mask_cvttps_epi32 + // CHECK-LABEL: test_mm256_mask_cvttps_epi32 // CHECK: @llvm.x86.avx.cvtt.ps2dq.256 // CHECK: select <8 x i1> {{.*}}, <8 x i32> {{.*}}, <8 x i32> {{.*}} return _mm256_mask_cvttps_epi32(__W,__U,__A); } __m256i test_mm256_maskz_cvttps_epi32(__mmask8 __U, __m256 __A) { - // CHECK-LABEL: @test_mm256_maskz_cvttps_epi32 + // CHECK-LABEL: test_mm256_maskz_cvttps_epi32 // CHECK: @llvm.x86.avx.cvtt.ps2dq.256 // CHECK: select <8 x i1> {{.*}}, <8 x i32> {{.*}}, <8 x i32> {{.*}} return _mm256_maskz_cvttps_epi32(__U,__A); } __m128i test_mm_cvttps_epu32(__m128 __A) { - // CHECK-LABEL: @test_mm_cvttps_epu32 + // CHECK-LABEL: test_mm_cvttps_epu32 // CHECK: @llvm.x86.avx512.mask.cvttps2udq.128 return _mm_cvttps_epu32(__A); } __m128i test_mm_mask_cvttps_epu32(__m128i __W, __mmask8 __U, __m128 __A) { - // CHECK-LABEL: @test_mm_mask_cvttps_epu32 + // CHECK-LABEL: test_mm_mask_cvttps_epu32 // CHECK: @llvm.x86.avx512.mask.cvttps2udq.128 return _mm_mask_cvttps_epu32(__W,__U,__A); } __m128i test_mm_maskz_cvttps_epu32(__mmask8 __U, __m128 __A) { - // CHECK-LABEL: @test_mm_maskz_cvttps_epu32 + // CHECK-LABEL: test_mm_maskz_cvttps_epu32 // CHECK: @llvm.x86.avx512.mask.cvttps2udq.128 return _mm_maskz_cvttps_epu32(__U,__A); } __m256i test_mm256_cvttps_epu32(__m256 __A) { - // CHECK-LABEL: @test_mm256_cvttps_epu32 + // CHECK-LABEL: test_mm256_cvttps_epu32 // CHECK: @llvm.x86.avx512.mask.cvttps2udq.256 return _mm256_cvttps_epu32(__A); } __m256i test_mm256_mask_cvttps_epu32(__m256i __W, __mmask8 __U, __m256 __A) { - // CHECK-LABEL: @test_mm256_mask_cvttps_epu32 + // CHECK-LABEL: test_mm256_mask_cvttps_epu32 // CHECK: @llvm.x86.avx512.mask.cvttps2udq.256 return _mm256_mask_cvttps_epu32(__W,__U,__A); } __m256i test_mm256_maskz_cvttps_epu32(__mmask8 __U, __m256 __A) { - // CHECK-LABEL: @test_mm256_maskz_cvttps_epu32 + // CHECK-LABEL: test_mm256_maskz_cvttps_epu32 // CHECK: @llvm.x86.avx512.mask.cvttps2udq.256 return _mm256_maskz_cvttps_epu32(__U,__A); } __m128d test_mm_cvtepu32_pd(__m128i __A) { - // CHECK-LABEL: @test_mm_cvtepu32_pd + // CHECK-LABEL: test_mm_cvtepu32_pd // CHECK: shufflevector <4 x i32> %{{.*}}, <4 x i32> %{{.*}}, <2 x i32> <i32 0, i32 1> // CHECK: uitofp <2 x i32> %{{.*}} to <2 x double> return _mm_cvtepu32_pd(__A); } __m128d test_mm_mask_cvtepu32_pd(__m128d __W, __mmask8 __U, __m128i __A) { - // CHECK-LABEL: @test_mm_mask_cvtepu32_pd + // CHECK-LABEL: test_mm_mask_cvtepu32_pd // CHECK: shufflevector <4 x i32> %{{.*}}, <4 x i32> %{{.*}}, <2 x i32> <i32 0, i32 1> // CHECK: uitofp <2 x i32> %{{.*}} to <2 x double> // CHECK: select <2 x i1> {{.*}}, <2 x double> {{.*}}, <2 x double> {{.*}} return _mm_mask_cvtepu32_pd(__W,__U,__A); } __m128d test_mm_maskz_cvtepu32_pd(__mmask8 __U, __m128i __A) { - // CHECK-LABEL: @test_mm_maskz_cvtepu32_pd + // CHECK-LABEL: test_mm_maskz_cvtepu32_pd // CHECK: shufflevector <4 x i32> %{{.*}}, <4 x i32> %{{.*}}, <2 x i32> <i32 0, i32 1> // CHECK: uitofp <2 x i32> %{{.*}} to <2 x double> // CHECK: select <2 x i1> {{.*}}, <2 x double> {{.*}}, <2 x double> {{.*}} return _mm_maskz_cvtepu32_pd(__U,__A); } __m256d test_mm256_cvtepu32_pd(__m128i __A) { - // CHECK-LABEL: @test_mm256_cvtepu32_pd + // CHECK-LABEL: test_mm256_cvtepu32_pd // CHECK: uitofp <4 x i32> %{{.*}} to <4 x double> return _mm256_cvtepu32_pd(__A); } __m256d test_mm256_mask_cvtepu32_pd(__m256d __W, __mmask8 __U, __m128i __A) { - // CHECK-LABEL: @test_mm256_mask_cvtepu32_pd + // CHECK-LABEL: test_mm256_mask_cvtepu32_pd // CHECK: uitofp <4 x i32> %{{.*}} to <4 x double> // CHECK: select <4 x i1> {{.*}}, <4 x double> {{.*}}, <4 x double> {{.*}} return _mm256_mask_cvtepu32_pd(__W,__U,__A); } __m256d test_mm256_maskz_cvtepu32_pd(__mmask8 __U, __m128i __A) { - // CHECK-LABEL: @test_mm256_maskz_cvtepu32_pd + // CHECK-LABEL: test_mm256_maskz_cvtepu32_pd // CHECK: uitofp <4 x i32> %{{.*}} to <4 x double> // CHECK: select <4 x i1> {{.*}}, <4 x double> {{.*}}, <4 x double> {{.*}} return _mm256_maskz_cvtepu32_pd(__U,__A); } __m128 test_mm_cvtepu32_ps(__m128i __A) { - // CHECK-LABEL: @test_mm_cvtepu32_ps + // CHECK-LABEL: test_mm_cvtepu32_ps // CHECK: uitofp <4 x i32> %{{.*}} to <4 x float> return _mm_cvtepu32_ps(__A); } __m128 test_mm_mask_cvtepu32_ps(__m128 __W, __mmask8 __U, __m128i __A) { - // CHECK-LABEL: @test_mm_mask_cvtepu32_ps + // CHECK-LABEL: test_mm_mask_cvtepu32_ps // CHECK: uitofp <4 x i32> %{{.*}} to <4 x float> // CHECK: select <4 x i1> %{{.*}}, <4 x float> %{{.*}}, <4 x float> %{{.*}} return _mm_mask_cvtepu32_ps(__W,__U,__A); } __m128 test_mm_maskz_cvtepu32_ps(__mmask8 __U, __m128i __A) { - // CHECK-LABEL: @test_mm_maskz_cvtepu32_ps + // CHECK-LABEL: test_mm_maskz_cvtepu32_ps // CHECK: uitofp <4 x i32> %{{.*}} to <4 x float> // CHECK: select <4 x i1> %{{.*}}, <4 x float> %{{.*}}, <4 x float> %{{.*}} return _mm_maskz_cvtepu32_ps(__U,__A); } __m256 test_mm256_cvtepu32_ps(__m256i __A) { - // CHECK-LABEL: @test_mm256_cvtepu32_ps + // CHECK-LABEL: test_mm256_cvtepu32_ps // CHECK: uitofp <8 x i32> %{{.*}} to <8 x float> return _mm256_cvtepu32_ps(__A); } __m256 test_mm256_mask_cvtepu32_ps(__m256 __W, __mmask8 __U, __m256i __A) { - // CHECK-LABEL: @test_mm256_mask_cvtepu32_ps + // CHECK-LABEL: test_mm256_mask_cvtepu32_ps // CHECK: uitofp <8 x i32> %{{.*}} to <8 x float> // CHECK: select <8 x i1> %{{.*}}, <8 x float> %{{.*}}, <8 x float> %{{.*}} return _mm256_mask_cvtepu32_ps(__W,__U,__A); } __m256 test_mm256_maskz_cvtepu32_ps(__mmask8 __U, __m256i __A) { - // CHECK-LABEL: @test_mm256_maskz_cvtepu32_ps + // CHECK-LABEL: test_mm256_maskz_cvtepu32_ps // CHECK: uitofp <8 x i32> %{{.*}} to <8 x float> // CHECK: select <8 x i1> %{{.*}}, <8 x float> %{{.*}}, <8 x float> %{{.*}} return _mm256_maskz_cvtepu32_ps(__U,__A); } __m128d test_mm_mask_div_pd(__m128d __W, __mmask8 __U, __m128d __A, __m128d __B) { - // CHECK-LABEL: @test_mm_mask_div_pd + // CHECK-LABEL: test_mm_mask_div_pd // CHECK: fdiv <2 x double> %{{.*}}, %{{.*}} // CHECK: select <2 x i1> %{{.*}}, <2 x double> %{{.*}}, <2 x double> %{{.*}} return _mm_mask_div_pd(__W,__U,__A,__B); } __m128d test_mm_maskz_div_pd(__mmask8 __U, __m128d __A, __m128d __B) { - // CHECK-LABEL: @test_mm_maskz_div_pd + // CHECK-LABEL: test_mm_maskz_div_pd // CHECK: fdiv <2 x double> %{{.*}}, %{{.*}} // CHECK: select <2 x i1> %{{.*}}, <2 x double> %{{.*}}, <2 x double> %{{.*}} return _mm_maskz_div_pd(__U,__A,__B); } __m256d test_mm256_mask_div_pd(__m256d __W, __mmask8 __U, __m256d __A, __m256d __B) { - // CHECK-LABEL: @test_mm256_mask_div_pd + // CHECK-LABEL: test_mm256_mask_div_pd // CHECK: fdiv <4 x double> %{{.*}}, %{{.*}} // CHECK: select <4 x i1> %{{.*}}, <4 x double> %{{.*}}, <4 x double> %{{.*}} return _mm256_mask_div_pd(__W,__U,__A,__B); } __m256d test_mm256_maskz_div_pd(__mmask8 __U, __m256d __A, __m256d __B) { - // CHECK-LABEL: @test_mm256_maskz_div_pd + // CHECK-LABEL: test_mm256_maskz_div_pd // CHECK: fdiv <4 x double> %{{.*}}, %{{.*}} // CHECK: select <4 x i1> %{{.*}}, <4 x double> %{{.*}}, <4 x double> %{{.*}} return _mm256_maskz_div_pd(__U,__A,__B); } __m128 test_mm_mask_div_ps(__m128 __W, __mmask8 __U, __m128 __A, __m128 __B) { - // CHECK-LABEL: @test_mm_mask_div_ps + // CHECK-LABEL: test_mm_mask_div_ps // CHECK: fdiv <4 x float> %{{.*}}, %{{.*}} // CHECK: select <4 x i1> %{{.*}}, <4 x float> %{{.*}}, <4 x float> %{{.*}} return _mm_mask_div_ps(__W,__U,__A,__B); } __m128 test_mm_maskz_div_ps(__mmask8 __U, __m128 __A, __m128 __B) { - // CHECK-LABEL: @test_mm_maskz_div_ps + // CHECK-LABEL: test_mm_maskz_div_ps // CHECK: fdiv <4 x float> %{{.*}}, %{{.*}} // CHECK: select <4 x i1> %{{.*}}, <4 x float> %{{.*}}, <4 x float> %{{.*}} return _mm_maskz_div_ps(__U,__A,__B); } __m256 test_mm256_mask_div_ps(__m256 __W, __mmask8 __U, __m256 __A, __m256 __B) { - // CHECK-LABEL: @test_mm256_mask_div_ps + // CHECK-LABEL: test_mm256_mask_div_ps // CHECK: fdiv <8 x float> %{{.*}}, %{{.*}} // CHECK: select <8 x i1> %{{.*}}, <8 x float> %{{.*}}, <8 x float> %{{.*}} return _mm256_mask_div_ps(__W,__U,__A,__B); } __m256 test_mm256_maskz_div_ps(__mmask8 __U, __m256 __A, __m256 __B) { - // CHECK-LABEL: @test_mm256_maskz_div_ps + // CHECK-LABEL: test_mm256_maskz_div_ps // CHECK: fdiv <8 x float> %{{.*}}, %{{.*}} // CHECK: select <8 x i1> %{{.*}}, <8 x float> %{{.*}}, <8 x float> %{{.*}} return _mm256_maskz_div_ps(__U,__A,__B); } __m128d test_mm_mask_expand_pd(__m128d __W, __mmask8 __U, __m128d __A) { - // CHECK-LABEL: @test_mm_mask_expand_pd + // CHECK-LABEL: test_mm_mask_expand_pd // CHECK: @llvm.x86.avx512.mask.expand return _mm_mask_expand_pd(__W,__U,__A); } __m128d test_mm_maskz_expand_pd(__mmask8 __U, __m128d __A) { - // CHECK-LABEL: @test_mm_maskz_expand_pd + // CHECK-LABEL: test_mm_maskz_expand_pd // CHECK: @llvm.x86.avx512.mask.expand return _mm_maskz_expand_pd(__U,__A); } __m256d test_mm256_mask_expand_pd(__m256d __W, __mmask8 __U, __m256d __A) { - // CHECK-LABEL: @test_mm256_mask_expand_pd + // CHECK-LABEL: test_mm256_mask_expand_pd // CHECK: @llvm.x86.avx512.mask.expand return _mm256_mask_expand_pd(__W,__U,__A); } __m256d test_mm256_maskz_expand_pd(__mmask8 __U, __m256d __A) { - // CHECK-LABEL: @test_mm256_maskz_expand_pd + // CHECK-LABEL: test_mm256_maskz_expand_pd // CHECK: @llvm.x86.avx512.mask.expand return _mm256_maskz_expand_pd(__U,__A); } __m128i test_mm_mask_expand_epi64(__m128i __W, __mmask8 __U, __m128i __A) { - // CHECK-LABEL: @test_mm_mask_expand_epi64 + // CHECK-LABEL: test_mm_mask_expand_epi64 // CHECK: @llvm.x86.avx512.mask.expand return _mm_mask_expand_epi64(__W,__U,__A); } __m128i test_mm_maskz_expand_epi64(__mmask8 __U, __m128i __A) { - // CHECK-LABEL: @test_mm_maskz_expand_epi64 + // CHECK-LABEL: test_mm_maskz_expand_epi64 // CHECK: @llvm.x86.avx512.mask.expand return _mm_maskz_expand_epi64(__U,__A); } __m256i test_mm256_mask_expand_epi64(__m256i __W, __mmask8 __U, __m256i __A) { - // CHECK-LABEL: @test_mm256_mask_expand_epi64 + // CHECK-LABEL: test_mm256_mask_expand_epi64 // CHECK: @llvm.x86.avx512.mask.expand return _mm256_mask_expand_epi64(__W,__U,__A); } __m256i test_mm256_maskz_expand_epi64(__mmask8 __U, __m256i __A) { - // CHECK-LABEL: @test_mm256_maskz_expand_epi64 + // CHECK-LABEL: test_mm256_maskz_expand_epi64 // CHECK: @llvm.x86.avx512.mask.expand return _mm256_maskz_expand_epi64(__U,__A); } __m128d test_mm_mask_expandloadu_pd(__m128d __W, __mmask8 __U, void const *__P) { - // CHECK-LABEL: @test_mm_mask_expandloadu_pd + // CHECK-LABEL: test_mm_mask_expandloadu_pd // CHECK: @llvm.masked.expandload.v2f64(ptr %{{.*}}, <2 x i1> %{{.*}}, <2 x double> %{{.*}}) return _mm_mask_expandloadu_pd(__W,__U,__P); } __m128d test_mm_maskz_expandloadu_pd(__mmask8 __U, void const *__P) { - // CHECK-LABEL: @test_mm_maskz_expandloadu_pd + // CHECK-LABEL: test_mm_maskz_expandloadu_pd // CHECK: @llvm.masked.expandload.v2f64(ptr %{{.*}}, <2 x i1> %{{.*}}, <2 x double> %{{.*}}) return _mm_maskz_expandloadu_pd(__U,__P); } __m256d test_mm256_mask_expandloadu_pd(__m256d __W, __mmask8 __U, void const *__P) { - // CHECK-LABEL: @test_mm256_mask_expandloadu_pd + // CHECK-LABEL: test_mm256_mask_expandloadu_pd // CHECK: @llvm.masked.expandload.v4f64(ptr %{{.*}}, <4 x i1> %{{.*}}, <4 x double> %{{.*}}) return _mm256_mask_expandloadu_pd(__W,__U,__P); } __m256d test_mm256_maskz_expandloadu_pd(__mmask8 __U, void const *__P) { - // CHECK-LABEL: @test_mm256_maskz_expandloadu_pd + // CHECK-LABEL: test_mm256_maskz_expandloadu_pd // CHECK: @llvm.masked.expandload.v4f64(ptr %{{.*}}, <4 x i1> %{{.*}}, <4 x double> %{{.*}}) return _mm256_maskz_expandloadu_pd(__U,__P); } __m128i test_mm_mask_expandloadu_epi64(__m128i __W, __mmask8 __U, void const *__P) { - // CHECK-LABEL: @test_mm_mask_expandloadu_epi64 + // CHECK-LABEL: test_mm_mask_expandloadu_epi64 // CHECK: @llvm.masked.expandload.v2i64(ptr %{{.*}}, <2 x i1> %{{.*}}, <2 x i64> %{{.*}}) return _mm_mask_expandloadu_epi64(__W,__U,__P); } __m128i test_mm_maskz_expandloadu_epi64(__mmask8 __U, void const *__P) { - // CHECK-LABEL: @test_mm_maskz_expandloadu_epi64 + // CHECK-LABEL: test_mm_maskz_expandloadu_epi64 // CHECK: @llvm.masked.expandload.v2i64(ptr %{{.*}}, <2 x i1> %{{.*}}, <2 x i64> %{{.*}}) return _mm_maskz_expandloadu_epi64(__U,__P); } __m256i test_mm256_mask_expandloadu_epi64(__m256i __W, __mmask8 __U, void const *__P) { - // CHECK-LABEL: @test_mm256_mask_expandloadu_epi64 + // CHECK-LABEL: test_mm256_mask_expandloadu_epi64 // CHECK: @llvm.masked.expandload.v4i64(ptr %{{.*}}, <4 x i1> %{{.*}}, <4 x i64> %{{.*}}) return _mm256_mask_expandloadu_epi64(__W,__U,__P); } __m256i test_mm256_maskz_expandloadu_epi64(__mmask8 __U, void const *__P) { - // CHECK-LABEL: @test_mm256_maskz_expandloadu_epi64 + // CHECK-LABEL: test_mm256_maskz_expandloadu_epi64 // CHECK: @llvm.masked.expandload.v4i64(ptr %{{.*}}, <4 x i1> %{{.*}}, <4 x i64> %{{.*}}) return _mm256_maskz_expandloadu_epi64(__U,__P); } __m128 test_mm_mask_expandloadu_ps(__m128 __W, __mmask8 __U, void const *__P) { - // CHECK-LABEL: @test_mm_mask_expandloadu_ps + // CHECK-LABEL: test_mm_mask_expandloadu_ps // CHECK: @llvm.masked.expandload.v4f32(ptr %{{.*}}, <4 x i1> %{{.*}}, <4 x float> %{{.*}}) return _mm_mask_expandloadu_ps(__W,__U,__P); } __m128 test_mm_maskz_expandloadu_ps(__mmask8 __U, void const *__P) { - // CHECK-LABEL: @test_mm_maskz_expandloadu_ps + // CHECK-LABEL: test_mm_maskz_expandloadu_ps // CHECK: @llvm.masked.expandload.v4f32(ptr %{{.*}}, <4 x i1> %{{.*}}, <4 x float> %{{.*}}) return _mm_maskz_expandloadu_ps(__U,__P); } __m256 test_mm256_mask_expandloadu_ps(__m256 __W, __mmask8 __U, void const *__P) { - // CHECK-LABEL: @test_mm256_mask_expandloadu_ps + // CHECK-LABEL: test_mm256_mask_expandloadu_ps // CHECK: @llvm.masked.expandload.v8f32(ptr %{{.*}}, <8 x i1> %{{.*}}, <8 x float> %{{.*}}) return _mm256_mask_expandloadu_ps(__W,__U,__P); } __m256 test_mm256_maskz_expandloadu_ps(__mmask8 __U, void const *__P) { - // CHECK-LABEL: @test_mm256_maskz_expandloadu_ps + // CHECK-LABEL: test_mm256_maskz_expandloadu_ps // CHECK: @llvm.masked.expandload.v8f32(ptr %{{.*}}, <8 x i1> %{{.*}}, <8 x float> %{{.*}}) return _mm256_maskz_expandloadu_ps(__U,__P); } __m128i test_mm_mask_expandloadu_epi32(__m128i __W, __mmask8 __U, void const *__P) { - // CHECK-LABEL: @test_mm_mask_expandloadu_epi32 + // CHECK-LABEL: test_mm_mask_expandloadu_epi32 // CHECK: @llvm.masked.expandload.v4i32(ptr %{{.*}}, <4 x i1> %{{.*}}, <4 x i32> %{{.*}}) return _mm_mask_expandloadu_epi32(__W,__U,__P); } __m128i test_mm_maskz_expandloadu_epi32(__mmask8 __U, void const *__P) { - // CHECK-LABEL: @test_mm_maskz_expandloadu_epi32 + // CHECK-LABEL: test_mm_maskz_expandloadu_epi32 // CHECK: @llvm.masked.expandload.v4i32(ptr %{{.*}}, <4 x i1> %{{.*}}, <4 x i32> %{{.*}}) return _mm_maskz_expandloadu_epi32(__U,__P); } __m256i test_mm256_mask_expandloadu_epi32(__m256i __W, __mmask8 __U, void const *__P) { - // CHECK-LABEL: @test_mm256_mask_expandloadu_epi32 + // CHECK-LABEL: test_mm256_mask_expandloadu_epi32 // CHECK: @llvm.masked.expandload.v8i32(ptr %{{.*}}, <8 x i1> %{{.*}}, <8 x i32> %{{.*}}) return _mm256_mask_expandloadu_epi32(__W,__U,__P); } __m256i test_mm256_maskz_expandloadu_epi32(__mmask8 __U, void const *__P) { - // CHECK-LABEL: @test_mm256_maskz_expandloadu_epi32 + // CHECK-LABEL: test_mm256_maskz_expandloadu_epi32 // CHECK: @llvm.masked.expandload.v8i32(ptr %{{.*}}, <8 x i1> %{{.*}}, <8 x i32> %{{.*}}) return _mm256_maskz_expandloadu_epi32(__U,__P); } __m128 test_mm_mask_expand_ps(__m128 __W, __mmask8 __U, __m128 __A) { - // CHECK-LABEL: @test_mm_mask_expand_ps + // CHECK-LABEL: test_mm_mask_expand_ps // CHECK: @llvm.x86.avx512.mask.expand return _mm_mask_expand_ps(__W,__U,__A); } __m128 test_mm_maskz_expand_ps(__mmask8 __U, __m128 __A) { - // CHECK-LABEL: @test_mm_maskz_expand_ps + // CHECK-LABEL: test_mm_maskz_expand_ps // CHECK: @llvm.x86.avx512.mask.expand return _mm_maskz_expand_ps(__U,__A); } __m256 test_mm256_mask_expand_ps(__m256 __W, __mmask8 __U, __m256 __A) { - // CHECK-LABEL: @test_mm256_mask_expand_ps + // CHECK-LABEL: test_mm256_mask_expand_ps // CHECK: @llvm.x86.avx512.mask.expand return _mm256_mask_expand_ps(__W,__U,__A); } __m256 test_mm256_maskz_expand_ps(__mmask8 __U, __m256 __A) { - // CHECK-LABEL: @test_mm256_maskz_expand_ps + // CHECK-LABEL: test_mm256_maskz_expand_ps // CHECK: @llvm.x86.avx512.mask.expand return _mm256_maskz_expand_ps(__U,__A); } __m128i test_mm_mask_expand_epi32(__m128i __W, __mmask8 __U, __m128i __A) { - // CHECK-LABEL: @test_mm_mask_expand_epi32 + // CHECK-LABEL: test_mm_mask_expand_epi32 // CHECK: @llvm.x86.avx512.mask.expand return _mm_mask_expand_epi32(__W,__U,__A); } __m128i test_mm_maskz_expand_epi32(__mmask8 __U, __m128i __A) { - // CHECK-LABEL: @test_mm_maskz_expand_epi32 + // CHECK-LABEL: test_mm_maskz_expand_epi32 // CHECK: @llvm.x86.avx512.mask.expand return _mm_maskz_expand_epi32(__U,__A); } __m256i test_mm256_mask_expand_epi32(__m256i __W, __mmask8 __U, __m256i __A) { - // CHECK-LABEL: @test_mm256_mask_expand_epi32 + // CHECK-LABEL: test_mm256_mask_expand_epi32 // CHECK: @llvm.x86.avx512.mask.expand return _mm256_mask_expand_epi32(__W,__U,__A); } __m256i test_mm256_maskz_expand_epi32(__mmask8 __U, __m256i __A) { - // CHECK-LABEL: @test_mm256_maskz_expand_epi32 + // CHECK-LABEL: test_mm256_maskz_expand_epi32 // CHECK: @llvm.x86.avx512.mask.expand return _mm256_maskz_expand_epi32(__U,__A); } __m128d test_mm_getexp_pd(__m128d __A) { - // CHECK-LABEL: @test_mm_getexp_pd + // CHECK-LABEL: test_mm_getexp_pd // CHECK: @llvm.x86.avx512.mask.getexp.pd.128 return _mm_getexp_pd(__A); } __m128d test_mm_mask_getexp_pd(__m128d __W, __mmask8 __U, __m128d __A) { - // CHECK-LABEL: @test_mm_mask_getexp_pd + // CHECK-LABEL: test_mm_mask_getexp_pd // CHECK: @llvm.x86.avx512.mask.getexp.pd.128 return _mm_mask_getexp_pd(__W,__U,__A); } __m128d test_mm_maskz_getexp_pd(__mmask8 __U, __m128d __A) { - // CHECK-LABEL: @test_mm_maskz_getexp_pd + // CHECK-LABEL: test_mm_maskz_getexp_pd // CHECK: @llvm.x86.avx512.mask.getexp.pd.128 return _mm_maskz_getexp_pd(__U,__A); } __m256d test_mm256_getexp_pd(__m256d __A) { - // CHECK-LABEL: @test_mm256_getexp_pd + // CHECK-LABEL: test_mm256_getexp_pd // CHECK: @llvm.x86.avx512.mask.getexp.pd.256 return _mm256_getexp_pd(__A); } __m256d test_mm256_mask_getexp_pd(__m256d __W, __mmask8 __U, __m256d __A) { - // CHECK-LABEL: @test_mm256_mask_getexp_pd + // CHECK-LABEL: test_mm256_mask_getexp_pd // CHECK: @llvm.x86.avx512.mask.getexp.pd.256 return _mm256_mask_getexp_pd(__W,__U,__A); } __m256d test_mm256_maskz_getexp_pd(__mmask8 __U, __m256d __A) { - // CHECK-LABEL: @test_mm256_maskz_getexp_pd + // CHECK-LABEL: test_mm256_maskz_getexp_pd // CHECK: @llvm.x86.avx512.mask.getexp.pd.256 return _mm256_maskz_getexp_pd(__U,__A); } __m128 test_mm_getexp_ps(__m128 __A) { - // CHECK-LABEL: @test_mm_getexp_ps + // CHECK-LABEL: test_mm_getexp_ps // CHECK: @llvm.x86.avx512.mask.getexp.ps.128 return _mm_getexp_ps(__A); } __m128 test_mm_mask_getexp_ps(__m128 __W, __mmask8 __U, __m128 __A) { - // CHECK-LABEL: @test_mm_mask_getexp_ps + // CHECK-LABEL: test_mm_mask_getexp_ps // CHECK: @llvm.x86.avx512.mask.getexp.ps.128 return _mm_mask_getexp_ps(__W,__U,__A); } __m128 test_mm_maskz_getexp_ps(__mmask8 __U, __m128 __A) { - // CHECK-LABEL: @test_mm_maskz_getexp_ps + // CHECK-LABEL: test_mm_maskz_getexp_ps // CHECK: @llvm.x86.avx512.mask.getexp.ps.128 return _mm_maskz_getexp_ps(__U,__A); } __m256 test_mm256_getexp_ps(__m256 __A) { - // CHECK-LABEL: @test_mm256_getexp_ps + // CHECK-LABEL: test_mm256_getexp_ps // CHECK: @llvm.x86.avx512.mask.getexp.ps.256 return _mm256_getexp_ps(__A); } __m256 test_mm256_mask_getexp_ps(__m256 __W, __mmask8 __U, __m256 __A) { - // CHECK-LABEL: @test_mm256_mask_getexp_ps + // CHECK-LABEL: test_mm256_mask_getexp_ps // CHECK: @llvm.x86.avx512.mask.getexp.ps.256 return _mm256_mask_getexp_ps(__W,__U,__A); } __m256 test_mm256_maskz_getexp_ps(__mmask8 __U, __m256 __A) { - // CHECK-LABEL: @test_mm256_maskz_getexp_ps + // CHECK-LABEL: test_mm256_maskz_getexp_ps // CHECK: @llvm.x86.avx512.mask.getexp.ps.256 return _mm256_maskz_getexp_ps(__U,__A); } __m128d test_mm_mask_max_pd(__m128d __W, __mmask8 __U, __m128d __A, __m128d __B) { - // CHECK-LABEL: @test_mm_mask_max_pd + // CHECK-LABEL: test_mm_mask_max_pd // CHECK: @llvm.x86.sse2.max.pd // CHECK: select <2 x i1> %{{.*}}, <2 x double> %{{.*}}, <2 x double> %{{.*}} return _mm_mask_max_pd(__W,__U,__A,__B); } __m128d test_mm_maskz_max_pd(__mmask8 __U, __m128d __A, __m128d __B) { - // CHECK-LABEL: @test_mm_maskz_max_pd + // CHECK-LABEL: test_mm_maskz_max_pd // CHECK: @llvm.x86.sse2.max.pd // CHECK: select <2 x i1> %{{.*}}, <2 x double> %{{.*}}, <2 x double> %{{.*}} return _mm_maskz_max_pd(__U,__A,__B); } __m256d test_mm256_mask_max_pd(__m256d __W, __mmask8 __U, __m256d __A, __m256d __B) { - // CHECK-LABEL: @test_mm256_mask_max_pd + // CHECK-LABEL: test_mm256_mask_max_pd // CHECK: @llvm.x86.avx.max.pd.256 // CHECK: select <4 x i1> %{{.*}}, <4 x double> %{{.*}}, <4 x double> %{{.*}} return _mm256_mask_max_pd(__W,__U,__A,__B); } __m256d test_mm256_maskz_max_pd(__mmask8 __U, __m256d __A, __m256d __B) { - // CHECK-LABEL: @test_mm256_maskz_max_pd + // CHECK-LABEL: test_mm256_maskz_max_pd // CHECK: @llvm.x86.avx.max.pd.256 // CHECK: select <4 x i1> %{{.*}}, <4 x double> %{{.*}}, <4 x double> %{{.*}} return _mm256_maskz_max_pd(__U,__A,__B); } __m128 test_mm_mask_max_ps(__m128 __W, __mmask8 __U, __m128 __A, __m128 __B) { - // CHECK-LABEL: @test_mm_mask_max_ps + // CHECK-LABEL: test_mm_mask_max_ps // CHECK: @llvm.x86.sse.max.ps // CHECK: select <4 x i1> %{{.*}}, <4 x float> %{{.*}}, <4 x float> %{{.*}} return _mm_mask_max_ps(__W,__U,__A,__B); } __m128 test_mm_maskz_max_ps(__mmask8 __U, __m128 __A, __m128 __B) { - // CHECK-LABEL: @test_mm_maskz_max_ps + // CHECK-LABEL: test_mm_maskz_max_ps // CHECK: @llvm.x86.sse.max.ps // CHECK: select <4 x i1> %{{.*}}, <4 x float> %{{.*}}, <4 x float> %{{.*}} return _mm_maskz_max_ps(__U,__A,__B); } __m256 test_mm256_mask_max_ps(__m256 __W, __mmask8 __U, __m256 __A, __m256 __B) { - // CHECK-LABEL: @test_mm256_mask_max_ps + // CHECK-LABEL: test_mm256_mask_max_ps // CHECK: @llvm.x86.avx.max.ps.256 // CHECK: select <8 x i1> %{{.*}}, <8 x float> %{{.*}}, <8 x float> %{{.*}} return _mm256_mask_max_ps(__W,__U,__A,__B); } __m256 test_mm256_maskz_max_ps(__mmask8 __U, __m256 __A, __m256 __B) { - // CHECK-LABEL: @test_mm256_maskz_max_ps + // CHECK-LABEL: test_mm256_maskz_max_ps // CHECK: @llvm.x86.avx.max.ps.256 // CHECK: select <8 x i1> %{{.*}}, <8 x float> %{{.*}}, <8 x float> %{{.*}} return _mm256_maskz_max_ps(__U,__A,__B); } __m128d test_mm_mask_min_pd(__m128d __W, __mmask8 __U, __m128d __A, __m128d __B) { - // CHECK-LABEL: @test_mm_mask_min_pd + // CHECK-LABEL: test_mm_mask_min_pd // CHECK: @llvm.x86.sse2.min.pd // CHECK: select <2 x i1> %{{.*}}, <2 x double> %{{.*}}, <2 x double> %{{.*}} return _mm_mask_min_pd(__W,__U,__A,__B); } __m128d test_mm_maskz_min_pd(__mmask8 __U, __m128d __A, __m128d __B) { - // CHECK-LABEL: @test_mm_maskz_min_pd + // CHECK-LABEL: test_mm_maskz_min_pd // CHECK: @llvm.x86.sse2.min.pd // CHECK: select <2 x i1> %{{.*}}, <2 x double> %{{.*}}, <2 x double> %{{.*}} return _mm_maskz_min_pd(__U,__A,__B); } __m256d test_mm256_mask_min_pd(__m256d __W, __mmask8 __U, __m256d __A, __m256d __B) { - // CHECK-LABEL: @test_mm256_mask_min_pd + // CHECK-LABEL: test_mm256_mask_min_pd // CHECK: @llvm.x86.avx.min.pd.256 // CHECK: select <4 x i1> %{{.*}}, <4 x double> %{{.*}}, <4 x double> %{{.*}} return _mm256_mask_min_pd(__W,__U,__A,__B); } __m256d test_mm256_maskz_min_pd(__mmask8 __U, __m256d __A, __m256d __B) { - // CHECK-LABEL: @test_mm256_maskz_min_pd + // CHECK-LABEL: test_mm256_maskz_min_pd // CHECK: @llvm.x86.avx.min.pd.256 // CHECK: select <4 x i1> %{{.*}}, <4 x double> %{{.*}}, <4 x double> %{{.*}} return _mm256_maskz_min_pd(__U,__A,__B); } __m128 test_mm_mask_min_ps(__m128 __W, __mmask8 __U, __m128 __A, __m128 __B) { - // CHECK-LABEL: @test_mm_mask_min_ps + // CHECK-LABEL: test_mm_mask_min_ps // CHECK: @llvm.x86.sse.min.ps // CHECK: select <4 x i1> %{{.*}}, <4 x float> %{{.*}}, <4 x float> %{{.*}} return _mm_mask_min_ps(__W,__U,__A,__B); } __m128 test_mm_maskz_min_ps(__mmask8 __U, __m128 __A, __m128 __B) { - // CHECK-LABEL: @test_mm_maskz_min_ps + // CHECK-LABEL: test_mm_maskz_min_ps // CHECK: @llvm.x86.sse.min.ps // CHECK: select <4 x i1> %{{.*}}, <4 x float> %{{.*}}, <4 x float> %{{.*}} return _mm_maskz_min_ps(__U,__A,__B); } __m256 test_mm256_mask_min_ps(__m256 __W, __mmask8 __U, __m256 __A, __m256 __B) { - // CHECK-LABEL: @test_mm256_mask_min_ps + // CHECK-LABEL: test_mm256_mask_min_ps // CHECK: @llvm.x86.avx.min.ps.256 // CHECK: select <8 x i1> %{{.*}}, <8 x float> %{{.*}}, <8 x float> %{{.*}} return _mm256_mask_min_ps(__W,__U,__A,__B); } __m256 test_mm256_maskz_min_ps(__mmask8 __U, __m256 __A, __m256 __B) { - // CHECK-LABEL: @test_mm256_maskz_min_ps + // CHECK-LABEL: test_mm256_maskz_min_ps // CHECK: @llvm.x86.avx.min.ps.256 // CHECK: select <8 x i1> %{{.*}}, <8 x float> %{{.*}}, <8 x float> %{{.*}} return _mm256_maskz_min_ps(__U,__A,__B); } __m128d test_mm_mask_mul_pd(__m128d __W, __mmask8 __U, __m128d __A, __m128d __B) { - // CHECK-LABEL: @test_mm_mask_mul_pd + // CHECK-LABEL: test_mm_mask_mul_pd // CHECK: fmul <2 x double> %{{.*}}, %{{.*}} // CHECK: select <2 x i1> %{{.*}}, <2 x double> %{{.*}}, <2 x double> %{{.*}} return _mm_mask_mul_pd(__W,__U,__A,__B); } __m128d test_mm_maskz_mul_pd(__mmask8 __U, __m128d __A, __m128d __B) { - // CHECK-LABEL: @test_mm_maskz_mul_pd + // CHECK-LABEL: test_mm_maskz_mul_pd // CHECK: fmul <2 x double> %{{.*}}, %{{.*}} // CHECK: select <2 x i1> %{{.*}}, <2 x double> %{{.*}}, <2 x double> %{{.*}} return _mm_maskz_mul_pd(__U,__A,__B); } __m256d test_mm256_mask_mul_pd(__m256d __W, __mmask8 __U, __m256d __A, __m256d __B) { - // CHECK-LABEL: @test_mm256_mask_mul_pd + // CHECK-LABEL: test_mm256_mask_mul_pd // CHECK: fmul <4 x double> %{{.*}}, %{{.*}} // CHECK: select <4 x i1> %{{.*}}, <4 x double> %{{.*}}, <4 x double> %{{.*}} return _mm256_mask_mul_pd(__W,__U,__A,__B); } __m256d test_mm256_maskz_mul_pd(__mmask8 __U, __m256d __A, __m256d __B) { - // CHECK-LABEL: @test_mm256_maskz_mul_pd + // CHECK-LABEL: test_mm256_maskz_mul_pd // CHECK: fmul <4 x double> %{{.*}}, %{{.*}} // CHECK: select <4 x i1> %{{.*}}, <4 x double> %{{.*}}, <4 x double> %{{.*}} return _mm256_maskz_mul_pd(__U,__A,__B); } __m128 test_mm_mask_mul_ps(__m128 __W, __mmask8 __U, __m128 __A, __m128 __B) { - // CHECK-LABEL: @test_mm_mask_mul_ps + // CHECK-LABEL: test_mm_mask_mul_ps // CHECK: fmul <4 x float> %{{.*}}, %{{.*}} // CHECK: select <4 x i1> %{{.*}}, <4 x float> %{{.*}}, <4 x float> %{{.*}} return _mm_mask_mul_ps(__W,__U,__A,__B); } __m128 test_mm_maskz_mul_ps(__mmask8 __U, __m128 __A, __m128 __B) { - // CHECK-LABEL: @test_mm_maskz_mul_ps + // CHECK-LABEL: test_mm_maskz_mul_ps // CHECK: fmul <4 x float> %{{.*}}, %{{.*}} // CHECK: select <4 x i1> %{{.*}}, <4 x float> %{{.*}}, <4 x float> %{{.*}} return _mm_maskz_mul_ps(__U,__A,__B); } __m256 test_mm256_mask_mul_ps(__m256 __W, __mmask8 __U, __m256 __A, __m256 __B) { - // CHECK-LABEL: @test_mm256_mask_mul_ps + // CHECK-LABEL: test_mm256_mask_mul_ps // CHECK: fmul <8 x float> %{{.*}}, %{{.*}} // CHECK: select <8 x i1> %{{.*}}, <8 x float> %{{.*}}, <8 x float> %{{.*}} return _mm256_mask_mul_ps(__W,__U,__A,__B); } __m256 test_mm256_maskz_mul_ps(__mmask8 __U, __m256 __A, __m256 __B) { - // CHECK-LABEL: @test_mm256_maskz_mul_ps + // CHECK-LABEL: test_mm256_maskz_mul_ps // CHECK: fmul <8 x float> %{{.*}}, %{{.*}} // CHECK: select <8 x i1> %{{.*}}, <8 x float> %{{.*}}, <8 x float> %{{.*}} return _mm256_maskz_mul_ps(__U,__A,__B); } __m128i test_mm_mask_abs_epi32(__m128i __W, __mmask8 __U, __m128i __A) { - // CHECK-LABEL: @test_mm_mask_abs_epi32 + // CHECK-LABEL: test_mm_mask_abs_epi32 // CHECK: [[ABS:%.*]] = call <4 x i32> @llvm.abs.v4i32(<4 x i32> %{{.*}}, i1 false) // CHECK: [[TMP:%.*]] = bitcast <4 x i32> [[ABS]] to <2 x i64> // CHECK: [[ABS:%.*]] = bitcast <2 x i64> [[TMP]] to <4 x i32> // CHECK: select <4 x i1> %{{.*}}, <4 x i32> [[ABS]], <4 x i32> %{{.*}} return _mm_mask_abs_epi32(__W,__U,__A); } +TEST_CONSTEXPR(match_v4si(_mm_mask_abs_epi32((__m128i)(__v4si){99, 99, 99, 99}, (__mmask8)0x01, (__m128i)(__v4si){-1, 2, 2, 2}), 1, 99, 99, 99)); + __m128i test_mm_maskz_abs_epi32(__mmask8 __U, __m128i __A) { - // CHECK-LABEL: @test_mm_maskz_abs_epi32 + // CHECK-LABEL: test_mm_maskz_abs_epi32 // CHECK: [[ABS:%.*]] = call <4 x i32> @llvm.abs.v4i32(<4 x i32> %{{.*}}, i1 false) // CHECK: [[TMP:%.*]] = bitcast <4 x i32> [[ABS]] to <2 x i64> // CHECK: [[ABS:%.*]] = bitcast <2 x i64> [[TMP]] to <4 x i32> // CHECK: select <4 x i1> %{{.*}}, <4 x i32> [[ABS]], <4 x i32> %{{.*}} return _mm_maskz_abs_epi32(__U,__A); } +TEST_CONSTEXPR(match_v4si(_mm_maskz_abs_epi32((__mmask8)0x05, (__m128i)(__v4si){-1, 2, -3, 4}), 1, 0, 3, 0)); + __m256i test_mm256_mask_abs_epi32(__m256i __W, __mmask8 __U, __m256i __A) { - // CHECK-LABEL: @test_mm256_mask_abs_epi32 + // CHECK-LABEL: test_mm256_mask_abs_epi32 // CHECK: [[ABS:%.*]] = call <8 x i32> @llvm.abs.v8i32(<8 x i32> %{{.*}}, i1 false) // CHECK: [[TMP:%.*]] = bitcast <8 x i32> [[ABS]] to <4 x i64> // CHECK: [[ABS:%.*]] = bitcast <4 x i64> [[TMP]] to <8 x i32> // CHECK: select <8 x i1> %{{.*}}, <8 x i32> [[ABS]], <8 x i32> %{{.*}} return _mm256_mask_abs_epi32(__W,__U,__A); } +TEST_CONSTEXPR(match_v8si(_mm256_mask_abs_epi32((__m256i)(__v8si){99, 99, 99, 99, 99, 99, 99, 99}, (__mmask8)0x01, (__m256i)(__v8si){-1, 2, 2, 2, 2, 2, 2, 2}), 1, 99, 99, 99, 99, 99, 99, 99)); + __m256i test_mm256_maskz_abs_epi32(__mmask8 __U, __m256i __A) { - // CHECK-LABEL: @test_mm256_maskz_abs_epi32 + // CHECK-LABEL: test_mm256_maskz_abs_epi32 // CHECK: [[ABS:%.*]] = call <8 x i32> @llvm.abs.v8i32(<8 x i32> %{{.*}}, i1 false) // CHECK: [[TMP:%.*]] = bitcast <8 x i32> [[ABS]] to <4 x i64> // CHECK: [[ABS:%.*]] = bitcast <4 x i64> [[TMP]] to <8 x i32> // CHECK: select <8 x i1> %{{.*}}, <8 x i32> [[ABS]], <8 x i32> %{{.*}} return _mm256_maskz_abs_epi32(__U,__A); } +TEST_CONSTEXPR(match_v8si(_mm256_maskz_abs_epi32((__mmask8)0x01, (__m256i)(__v8si){-1, 2, 2, 2, 2, 2, 2, 2}), 1, 0, 0, 0, 0, 0, 0, 0)); + __m128i test_mm_abs_epi64(__m128i __A) { - // CHECK-LABEL: @test_mm_abs_epi64 - // CHECK: [[ABS:%.*]] = call <2 x i64> @llvm.abs.v2i64(<2 x i64> %{{.*}}, i1 false) + // CHECK-LABEL: test_mm_abs_epi64 + // CHECK: [[ABS:%.*]] = call {{.*}}<2 x i64> @llvm.abs.v2i64(<2 x i64> %{{.*}}, i1 false) return _mm_abs_epi64(__A); } +TEST_CONSTEXPR(match_v2di(_mm_abs_epi64((__m128i)(__v2di){+5, -3}), 5, 3)); + __m128i test_mm_mask_abs_epi64(__m128i __W, __mmask8 __U, __m128i __A) { - // CHECK-LABEL: @test_mm_mask_abs_epi64 - // CHECK: [[ABS:%.*]] = call <2 x i64> @llvm.abs.v2i64(<2 x i64> %{{.*}}, i1 false) + // CHECK-LABEL: test_mm_mask_abs_epi64 + // CHECK: [[ABS:%.*]] = call {{.*}}<2 x i64> @llvm.abs.v2i64(<2 x i64> %{{.*}}, i1 false) // CHECK: select <2 x i1> %{{.*}}, <2 x i64> [[ABS]], <2 x i64> %{{.*}} return _mm_mask_abs_epi64(__W,__U,__A); } +TEST_CONSTEXPR(match_v2di(_mm_mask_abs_epi64((__m128i)(__v2di){99, 99}, (__mmask8)0x01, (__m128i)(__v2di){-1, 2}), 1, 99)); + __m128i test_mm_maskz_abs_epi64(__mmask8 __U, __m128i __A) { - // CHECK-LABEL: @test_mm_maskz_abs_epi64 - // CHECK: [[ABS:%.*]] = call <2 x i64> @llvm.abs.v2i64(<2 x i64> %{{.*}}, i1 false) + // CHECK-LABEL: test_mm_maskz_abs_epi64 + // CHECK: [[ABS:%.*]] = call {{.*}}<2 x i64> @llvm.abs.v2i64(<2 x i64> %{{.*}}, i1 false) // CHECK: select <2 x i1> %{{.*}}, <2 x i64> [[ABS]], <2 x i64> %{{.*}} return _mm_maskz_abs_epi64(__U,__A); } +TEST_CONSTEXPR(match_v2di(_mm_maskz_abs_epi64((__mmask8)0x01, (__m128i)(__v2di){-1, 2}), 1, 0)); + __m256i test_mm256_abs_epi64(__m256i __A) { - // CHECK-LABEL: @test_mm256_abs_epi64 - // CHECK: [[ABS:%.*]] = call <4 x i64> @llvm.abs.v4i64(<4 x i64> %{{.*}}, i1 false) + // CHECK-LABEL: test_mm256_abs_epi64 + // CHECK: [[ABS:%.*]] = call {{.*}}<4 x i64> @llvm.abs.v4i64(<4 x i64> %{{.*}}, i1 false) return _mm256_abs_epi64(__A); } +TEST_CONSTEXPR(match_v4di(_mm256_abs_epi64((__m256i)(__v4di){+5, -3, -1000, 1000}), 5, 3, 1000, 1000)); + __m256i test_mm256_mask_abs_epi64(__m256i __W, __mmask8 __U, __m256i __A) { - // CHECK-LABEL: @test_mm256_mask_abs_epi64 - // CHECK: [[ABS:%.*]] = call <4 x i64> @llvm.abs.v4i64(<4 x i64> %{{.*}}, i1 false) + // CHECK-LABEL: test_mm256_mask_abs_epi64 + // CHECK: [[ABS:%.*]] = call {{.*}}<4 x i64> @llvm.abs.v4i64(<4 x i64> %{{.*}}, i1 false) // CHECK: select <4 x i1> %{{.*}}, <4 x i64> [[ABS]], <4 x i64> %{{.*}} return _mm256_mask_abs_epi64(__W,__U,__A); } +TEST_CONSTEXPR(match_v4di(_mm256_mask_abs_epi64((__m256i)(__v4di){99, 99, 99, 99}, (__mmask8)0x01, (__m256i)(__v4di){-1, 2, 2, 2}), 1, 99, 99, 99)); + __m256i test_mm256_maskz_abs_epi64(__mmask8 __U, __m256i __A) { - // CHECK-LABEL: @test_mm256_maskz_abs_epi64 - // CHECK: [[ABS:%.*]] = call <4 x i64> @llvm.abs.v4i64(<4 x i64> %{{.*}}, i1 false) + // CHECK-LABEL: test_mm256_maskz_abs_epi64 + // CHECK: [[ABS:%.*]] = call {{.*}}<4 x i64> @llvm.abs.v4i64(<4 x i64> %{{.*}}, i1 false) // CHECK: select <4 x i1> %{{.*}}, <4 x i64> [[ABS]], <4 x i64> %{{.*}} return _mm256_maskz_abs_epi64(__U,__A); } +TEST_CONSTEXPR(match_v4di(_mm256_maskz_abs_epi64((__mmask8)0x01, (__m256i)(__v4di){-1, 2, 2, 2}), 1, 0, 0, 0)); + __m128i test_mm_maskz_max_epi32(__mmask8 __M, __m128i __A, __m128i __B) { - // CHECK-LABEL: @test_mm_maskz_max_epi32 + // CHECK-LABEL: test_mm_maskz_max_epi32 // CHECK: [[RES:%.*]] = call <4 x i32> @llvm.smax.v4i32(<4 x i32> %{{.*}}, <4 x i32> %{{.*}}) // CHECK: [[TMP:%.*]] = bitcast <4 x i32> [[RES]] to <2 x i64> // CHECK: [[RES:%.*]] = bitcast <2 x i64> [[TMP]] to <4 x i32> @@ -4538,7 +4567,7 @@ __m128i test_mm_maskz_max_epi32(__mmask8 __M, __m128i __A, __m128i __B) { return _mm_maskz_max_epi32(__M,__A,__B); } __m128i test_mm_mask_max_epi32(__m128i __W, __mmask8 __M, __m128i __A, __m128i __B) { - // CHECK-LABEL: @test_mm_mask_max_epi32 + // CHECK-LABEL: test_mm_mask_max_epi32 // CHECK: [[RES:%.*]] = call <4 x i32> @llvm.smax.v4i32(<4 x i32> %{{.*}}, <4 x i32> %{{.*}}) // CHECK: [[TMP:%.*]] = bitcast <4 x i32> [[RES]] to <2 x i64> // CHECK: [[RES:%.*]] = bitcast <2 x i64> [[TMP]] to <4 x i32> @@ -4546,7 +4575,7 @@ __m128i test_mm_mask_max_epi32(__m128i __W, __mmask8 __M, __m128i __A, __m128i _ return _mm_mask_max_epi32(__W,__M,__A,__B); } __m256i test_mm256_maskz_max_epi32(__mmask8 __M, __m256i __A, __m256i __B) { - // CHECK-LABEL: @test_mm256_maskz_max_epi32 + // CHECK-LABEL: test_mm256_maskz_max_epi32 // CHECK: [[RES:%.*]] = call <8 x i32> @llvm.smax.v8i32(<8 x i32> %{{.*}}, <8 x i32> %{{.*}}) // CHECK: [[TMP:%.*]] = bitcast <8 x i32> [[RES]] to <4 x i64> // CHECK: [[RES:%.*]] = bitcast <4 x i64> [[TMP]] to <8 x i32> @@ -4554,7 +4583,7 @@ __m256i test_mm256_maskz_max_epi32(__mmask8 __M, __m256i __A, __m256i __B) { return _mm256_maskz_max_epi32(__M,__A,__B); } __m256i test_mm256_mask_max_epi32(__m256i __W, __mmask8 __M, __m256i __A, __m256i __B) { - // CHECK-LABEL: @test_mm256_mask_max_epi32 + // CHECK-LABEL: test_mm256_mask_max_epi32 // CHECK: [[RES:%.*]] = call <8 x i32> @llvm.smax.v8i32(<8 x i32> %{{.*}}, <8 x i32> %{{.*}}) // CHECK: [[TMP:%.*]] = bitcast <8 x i32> [[RES]] to <4 x i64> // CHECK: [[RES:%.*]] = bitcast <4 x i64> [[TMP]] to <8 x i32> @@ -4562,41 +4591,41 @@ __m256i test_mm256_mask_max_epi32(__m256i __W, __mmask8 __M, __m256i __A, __m256 return _mm256_mask_max_epi32(__W,__M,__A,__B); } __m128i test_mm_maskz_max_epi64(__mmask8 __M, __m128i __A, __m128i __B) { - // CHECK-LABEL: @test_mm_maskz_max_epi64 - // CHECK: [[RES:%.*]] = call <2 x i64> @llvm.smax.v2i64(<2 x i64> %{{.*}}, <2 x i64> %{{.*}}) + // CHECK-LABEL: test_mm_maskz_max_epi64 + // CHECK: [[RES:%.*]] = call {{.*}}<2 x i64> @llvm.smax.v2i64(<2 x i64> %{{.*}}, <2 x i64> %{{.*}}) // CHECK: select <2 x i1> {{.*}}, <2 x i64> [[RES]], <2 x i64> {{.*}} return _mm_maskz_max_epi64(__M,__A,__B); } __m128i test_mm_mask_max_epi64(__m128i __W, __mmask8 __M, __m128i __A, __m128i __B) { - // CHECK-LABEL: @test_mm_mask_max_epi64 - // CHECK: [[RES:%.*]] = call <2 x i64> @llvm.smax.v2i64(<2 x i64> %{{.*}}, <2 x i64> %{{.*}}) + // CHECK-LABEL: test_mm_mask_max_epi64 + // CHECK: [[RES:%.*]] = call {{.*}}<2 x i64> @llvm.smax.v2i64(<2 x i64> %{{.*}}, <2 x i64> %{{.*}}) // CHECK: select <2 x i1> {{.*}}, <2 x i64> [[RES]], <2 x i64> {{.*}} return _mm_mask_max_epi64(__W,__M,__A,__B); } __m128i test_mm_max_epi64(__m128i __A, __m128i __B) { - // CHECK-LABEL: @test_mm_max_epi64 - // CHECK: [[RES:%.*]] = call <2 x i64> @llvm.smax.v2i64(<2 x i64> %{{.*}}, <2 x i64> %{{.*}}) + // CHECK-LABEL: test_mm_max_epi64 + // CHECK: [[RES:%.*]] = call {{.*}}<2 x i64> @llvm.smax.v2i64(<2 x i64> %{{.*}}, <2 x i64> %{{.*}}) return _mm_max_epi64(__A,__B); } __m256i test_mm256_maskz_max_epi64(__mmask8 __M, __m256i __A, __m256i __B) { - // CHECK-LABEL: @test_mm256_maskz_max_epi64 - // CHECK: [[RES:%.*]] = call <4 x i64> @llvm.smax.v4i64(<4 x i64> %{{.*}}, <4 x i64> %{{.*}}) + // CHECK-LABEL: test_mm256_maskz_max_epi64 + // CHECK: [[RES:%.*]] = call {{.*}}<4 x i64> @llvm.smax.v4i64(<4 x i64> %{{.*}}, <4 x i64> %{{.*}}) // CHECK: select <4 x i1> {{.*}}, <4 x i64> [[RES]], <4 x i64> {{.*}} return _mm256_maskz_max_epi64(__M,__A,__B); } __m256i test_mm256_mask_max_epi64(__m256i __W, __mmask8 __M, __m256i __A, __m256i __B) { - // CHECK-LABEL: @test_mm256_mask_max_epi64 - // CHECK: [[RES:%.*]] = call <4 x i64> @llvm.smax.v4i64(<4 x i64> %{{.*}}, <4 x i64> %{{.*}}) + // CHECK-LABEL: test_mm256_mask_max_epi64 + // CHECK: [[RES:%.*]] = call {{.*}}<4 x i64> @llvm.smax.v4i64(<4 x i64> %{{.*}}, <4 x i64> %{{.*}}) // CHECK: select <4 x i1> {{.*}}, <4 x i64> [[RES]], <4 x i64> {{.*}} return _mm256_mask_max_epi64(__W,__M,__A,__B); } __m256i test_mm256_max_epi64(__m256i __A, __m256i __B) { - // CHECK-LABEL: @test_mm256_max_epi64 - // CHECK: [[RES:%.*]] = call <4 x i64> @llvm.smax.v4i64(<4 x i64> %{{.*}}, <4 x i64> %{{.*}}) + // CHECK-LABEL: test_mm256_max_epi64 + // CHECK: [[RES:%.*]] = call {{.*}}<4 x i64> @llvm.smax.v4i64(<4 x i64> %{{.*}}, <4 x i64> %{{.*}}) return _mm256_max_epi64(__A,__B); } __m128i test_mm_maskz_max_epu32(__mmask8 __M, __m128i __A, __m128i __B) { - // CHECK-LABEL: @test_mm_maskz_max_epu32 + // CHECK-LABEL: test_mm_maskz_max_epu32 // CHECK: [[RES:%.*]] = call <4 x i32> @llvm.umax.v4i32(<4 x i32> %{{.*}}, <4 x i32> %{{.*}}) // CHECK: [[TMP:%.*]] = bitcast <4 x i32> [[RES]] to <2 x i64> // CHECK: [[RES:%.*]] = bitcast <2 x i64> [[TMP]] to <4 x i32> @@ -4604,7 +4633,7 @@ __m128i test_mm_maskz_max_epu32(__mmask8 __M, __m128i __A, __m128i __B) { return _mm_maskz_max_epu32(__M,__A,__B); } __m128i test_mm_mask_max_epu32(__m128i __W, __mmask8 __M, __m128i __A, __m128i __B) { - // CHECK-LABEL: @test_mm_mask_max_epu32 + // CHECK-LABEL: test_mm_mask_max_epu32 // CHECK: [[RES:%.*]] = call <4 x i32> @llvm.umax.v4i32(<4 x i32> %{{.*}}, <4 x i32> %{{.*}}) // CHECK: [[TMP:%.*]] = bitcast <4 x i32> [[RES]] to <2 x i64> // CHECK: [[RES:%.*]] = bitcast <2 x i64> [[TMP]] to <4 x i32> @@ -4612,7 +4641,7 @@ __m128i test_mm_mask_max_epu32(__m128i __W, __mmask8 __M, __m128i __A, __m128i _ return _mm_mask_max_epu32(__W,__M,__A,__B); } __m256i test_mm256_maskz_max_epu32(__mmask8 __M, __m256i __A, __m256i __B) { - // CHECK-LABEL: @test_mm256_maskz_max_epu32 + // CHECK-LABEL: test_mm256_maskz_max_epu32 // CHECK: [[RES:%.*]] = call <8 x i32> @llvm.umax.v8i32(<8 x i32> %{{.*}}, <8 x i32> %{{.*}}) // CHECK: [[TMP:%.*]] = bitcast <8 x i32> [[RES]] to <4 x i64> // CHECK: [[RES:%.*]] = bitcast <4 x i64> [[TMP]] to <8 x i32> @@ -4620,7 +4649,7 @@ __m256i test_mm256_maskz_max_epu32(__mmask8 __M, __m256i __A, __m256i __B) { return _mm256_maskz_max_epu32(__M,__A,__B); } __m256i test_mm256_mask_max_epu32(__m256i __W, __mmask8 __M, __m256i __A, __m256i __B) { - // CHECK-LABEL: @test_mm256_mask_max_epu32 + // CHECK-LABEL: test_mm256_mask_max_epu32 // CHECK: [[RES:%.*]] = call <8 x i32> @llvm.umax.v8i32(<8 x i32> %{{.*}}, <8 x i32> %{{.*}}) // CHECK: [[TMP:%.*]] = bitcast <8 x i32> [[RES]] to <4 x i64> // CHECK: [[RES:%.*]] = bitcast <4 x i64> [[TMP]] to <8 x i32> @@ -4628,41 +4657,41 @@ __m256i test_mm256_mask_max_epu32(__m256i __W, __mmask8 __M, __m256i __A, __m256 return _mm256_mask_max_epu32(__W,__M,__A,__B); } __m128i test_mm_maskz_max_epu64(__mmask8 __M, __m128i __A, __m128i __B) { - // CHECK-LABEL: @test_mm_maskz_max_epu64 - // CHECK: [[RES:%.*]] = call <2 x i64> @llvm.umax.v2i64(<2 x i64> %{{.*}}, <2 x i64> %{{.*}}) + // CHECK-LABEL: test_mm_maskz_max_epu64 + // CHECK: [[RES:%.*]] = call {{.*}}<2 x i64> @llvm.umax.v2i64(<2 x i64> %{{.*}}, <2 x i64> %{{.*}}) // CHECK: select <2 x i1> {{.*}}, <2 x i64> [[RES]], <2 x i64> {{.*}} return _mm_maskz_max_epu64(__M,__A,__B); } __m128i test_mm_max_epu64(__m128i __A, __m128i __B) { - // CHECK-LABEL: @test_mm_max_epu64 - // CHECK: [[RES:%.*]] = call <2 x i64> @llvm.umax.v2i64(<2 x i64> %{{.*}}, <2 x i64> %{{.*}}) + // CHECK-LABEL: test_mm_max_epu64 + // CHECK: [[RES:%.*]] = call {{.*}}<2 x i64> @llvm.umax.v2i64(<2 x i64> %{{.*}}, <2 x i64> %{{.*}}) return _mm_max_epu64(__A,__B); } __m128i test_mm_mask_max_epu64(__m128i __W, __mmask8 __M, __m128i __A, __m128i __B) { - // CHECK-LABEL: @test_mm_mask_max_epu64 - // CHECK: [[RES:%.*]] = call <2 x i64> @llvm.umax.v2i64(<2 x i64> %{{.*}}, <2 x i64> %{{.*}}) + // CHECK-LABEL: test_mm_mask_max_epu64 + // CHECK: [[RES:%.*]] = call {{.*}}<2 x i64> @llvm.umax.v2i64(<2 x i64> %{{.*}}, <2 x i64> %{{.*}}) // CHECK: select <2 x i1> {{.*}}, <2 x i64> [[RES]], <2 x i64> {{.*}} return _mm_mask_max_epu64(__W,__M,__A,__B); } __m256i test_mm256_maskz_max_epu64(__mmask8 __M, __m256i __A, __m256i __B) { - // CHECK-LABEL: @test_mm256_maskz_max_epu64 - // CHECK: [[RES:%.*]] = call <4 x i64> @llvm.umax.v4i64(<4 x i64> %{{.*}}, <4 x i64> %{{.*}}) + // CHECK-LABEL: test_mm256_maskz_max_epu64 + // CHECK: [[RES:%.*]] = call {{.*}}<4 x i64> @llvm.umax.v4i64(<4 x i64> %{{.*}}, <4 x i64> %{{.*}}) // CHECK: select <4 x i1> {{.*}}, <4 x i64> [[RES]], <4 x i64> {{.*}} return _mm256_maskz_max_epu64(__M,__A,__B); } __m256i test_mm256_max_epu64(__m256i __A, __m256i __B) { - // CHECK-LABEL: @test_mm256_max_epu64 - // CHECK: [[RES:%.*]] = call <4 x i64> @llvm.umax.v4i64(<4 x i64> %{{.*}}, <4 x i64> %{{.*}}) + // CHECK-LABEL: test_mm256_max_epu64 + // CHECK: [[RES:%.*]] = call {{.*}}<4 x i64> @llvm.umax.v4i64(<4 x i64> %{{.*}}, <4 x i64> %{{.*}}) return _mm256_max_epu64(__A,__B); } __m256i test_mm256_mask_max_epu64(__m256i __W, __mmask8 __M, __m256i __A, __m256i __B) { - // CHECK-LABEL: @test_mm256_mask_max_epu64 - // CHECK: [[RES:%.*]] = call <4 x i64> @llvm.umax.v4i64(<4 x i64> %{{.*}}, <4 x i64> %{{.*}}) + // CHECK-LABEL: test_mm256_mask_max_epu64 + // CHECK: [[RES:%.*]] = call {{.*}}<4 x i64> @llvm.umax.v4i64(<4 x i64> %{{.*}}, <4 x i64> %{{.*}}) // CHECK: select <4 x i1> {{.*}}, <4 x i64> [[RES]], <4 x i64> {{.*}} return _mm256_mask_max_epu64(__W,__M,__A,__B); } __m128i test_mm_maskz_min_epi32(__mmask8 __M, __m128i __A, __m128i __B) { - // CHECK-LABEL: @test_mm_maskz_min_epi32 + // CHECK-LABEL: test_mm_maskz_min_epi32 // CHECK: [[RES:%.*]] = call <4 x i32> @llvm.smin.v4i32(<4 x i32> %{{.*}}, <4 x i32> %{{.*}}) // CHECK: [[TMP:%.*]] = bitcast <4 x i32> [[RES]] to <2 x i64> // CHECK: [[RES:%.*]] = bitcast <2 x i64> [[TMP]] to <4 x i32> @@ -4670,7 +4699,7 @@ __m128i test_mm_maskz_min_epi32(__mmask8 __M, __m128i __A, __m128i __B) { return _mm_maskz_min_epi32(__M,__A,__B); } __m128i test_mm_mask_min_epi32(__m128i __W, __mmask8 __M, __m128i __A, __m128i __B) { - // CHECK-LABEL: @test_mm_mask_min_epi32 + // CHECK-LABEL: test_mm_mask_min_epi32 // CHECK: [[RES:%.*]] = call <4 x i32> @llvm.smin.v4i32(<4 x i32> %{{.*}}, <4 x i32> %{{.*}}) // CHECK: [[TMP:%.*]] = bitcast <4 x i32> [[RES]] to <2 x i64> // CHECK: [[RES:%.*]] = bitcast <2 x i64> [[TMP]] to <4 x i32> @@ -4678,7 +4707,7 @@ __m128i test_mm_mask_min_epi32(__m128i __W, __mmask8 __M, __m128i __A, __m128i _ return _mm_mask_min_epi32(__W,__M,__A,__B); } __m256i test_mm256_maskz_min_epi32(__mmask8 __M, __m256i __A, __m256i __B) { - // CHECK-LABEL: @test_mm256_maskz_min_epi32 + // CHECK-LABEL: test_mm256_maskz_min_epi32 // CHECK: [[RES:%.*]] = call <8 x i32> @llvm.smin.v8i32(<8 x i32> %{{.*}}, <8 x i32> %{{.*}}) // CHECK: [[TMP:%.*]] = bitcast <8 x i32> [[RES]] to <4 x i64> // CHECK: [[RES:%.*]] = bitcast <4 x i64> [[TMP]] to <8 x i32> @@ -4686,7 +4715,7 @@ __m256i test_mm256_maskz_min_epi32(__mmask8 __M, __m256i __A, __m256i __B) { return _mm256_maskz_min_epi32(__M,__A,__B); } __m256i test_mm256_mask_min_epi32(__m256i __W, __mmask8 __M, __m256i __A, __m256i __B) { - // CHECK-LABEL: @test_mm256_mask_min_epi32 + // CHECK-LABEL: test_mm256_mask_min_epi32 // CHECK: [[RES:%.*]] = call <8 x i32> @llvm.smin.v8i32(<8 x i32> %{{.*}}, <8 x i32> %{{.*}}) // CHECK: [[TMP:%.*]] = bitcast <8 x i32> [[RES]] to <4 x i64> // CHECK: [[RES:%.*]] = bitcast <4 x i64> [[TMP]] to <8 x i32> @@ -4694,41 +4723,41 @@ __m256i test_mm256_mask_min_epi32(__m256i __W, __mmask8 __M, __m256i __A, __m256 return _mm256_mask_min_epi32(__W,__M,__A,__B); } __m128i test_mm_min_epi64(__m128i __A, __m128i __B) { - // CHECK-LABEL: @test_mm_min_epi64 - // CHECK: [[RES:%.*]] = call <2 x i64> @llvm.smin.v2i64(<2 x i64> %{{.*}}, <2 x i64> %{{.*}}) + // CHECK-LABEL: test_mm_min_epi64 + // CHECK: [[RES:%.*]] = call {{.*}}<2 x i64> @llvm.smin.v2i64(<2 x i64> %{{.*}}, <2 x i64> %{{.*}}) return _mm_min_epi64(__A,__B); } __m128i test_mm_mask_min_epi64(__m128i __W, __mmask8 __M, __m128i __A, __m128i __B) { - // CHECK-LABEL: @test_mm_mask_min_epi64 - // CHECK: [[RES:%.*]] = call <2 x i64> @llvm.smin.v2i64(<2 x i64> %{{.*}}, <2 x i64> %{{.*}}) + // CHECK-LABEL: test_mm_mask_min_epi64 + // CHECK: [[RES:%.*]] = call {{.*}}<2 x i64> @llvm.smin.v2i64(<2 x i64> %{{.*}}, <2 x i64> %{{.*}}) // CHECK: select <2 x i1> {{.*}}, <2 x i64> [[RES]], <2 x i64> {{.*}} return _mm_mask_min_epi64(__W,__M,__A,__B); } __m128i test_mm_maskz_min_epi64(__mmask8 __M, __m128i __A, __m128i __B) { - // CHECK-LABEL: @test_mm_maskz_min_epi64 - // CHECK: [[RES:%.*]] = call <2 x i64> @llvm.smin.v2i64(<2 x i64> %{{.*}}, <2 x i64> %{{.*}}) + // CHECK-LABEL: test_mm_maskz_min_epi64 + // CHECK: [[RES:%.*]] = call {{.*}}<2 x i64> @llvm.smin.v2i64(<2 x i64> %{{.*}}, <2 x i64> %{{.*}}) // CHECK: select <2 x i1> {{.*}}, <2 x i64> [[RES]], <2 x i64> {{.*}} return _mm_maskz_min_epi64(__M,__A,__B); } __m256i test_mm256_min_epi64(__m256i __A, __m256i __B) { - // CHECK-LABEL: @test_mm256_min_epi64 - // CHECK: [[RES:%.*]] = call <4 x i64> @llvm.smin.v4i64(<4 x i64> %{{.*}}, <4 x i64> %{{.*}}) + // CHECK-LABEL: test_mm256_min_epi64 + // CHECK: [[RES:%.*]] = call {{.*}}<4 x i64> @llvm.smin.v4i64(<4 x i64> %{{.*}}, <4 x i64> %{{.*}}) return _mm256_min_epi64(__A,__B); } __m256i test_mm256_mask_min_epi64(__m256i __W, __mmask8 __M, __m256i __A, __m256i __B) { - // CHECK-LABEL: @test_mm256_mask_min_epi64 - // CHECK: [[RES:%.*]] = call <4 x i64> @llvm.smin.v4i64(<4 x i64> %{{.*}}, <4 x i64> %{{.*}}) + // CHECK-LABEL: test_mm256_mask_min_epi64 + // CHECK: [[RES:%.*]] = call {{.*}}<4 x i64> @llvm.smin.v4i64(<4 x i64> %{{.*}}, <4 x i64> %{{.*}}) // CHECK: select <4 x i1> {{.*}}, <4 x i64> [[RES]], <4 x i64> {{.*}} return _mm256_mask_min_epi64(__W,__M,__A,__B); } __m256i test_mm256_maskz_min_epi64(__mmask8 __M, __m256i __A, __m256i __B) { - // CHECK-LABEL: @test_mm256_maskz_min_epi64 - // CHECK: [[RES:%.*]] = call <4 x i64> @llvm.smin.v4i64(<4 x i64> %{{.*}}, <4 x i64> %{{.*}}) + // CHECK-LABEL: test_mm256_maskz_min_epi64 + // CHECK: [[RES:%.*]] = call {{.*}}<4 x i64> @llvm.smin.v4i64(<4 x i64> %{{.*}}, <4 x i64> %{{.*}}) // CHECK: select <4 x i1> {{.*}}, <4 x i64> [[RES]], <4 x i64> {{.*}} return _mm256_maskz_min_epi64(__M,__A,__B); } __m128i test_mm_maskz_min_epu32(__mmask8 __M, __m128i __A, __m128i __B) { - // CHECK-LABEL: @test_mm_maskz_min_epu32 + // CHECK-LABEL: test_mm_maskz_min_epu32 // CHECK: [[RES:%.*]] = call <4 x i32> @llvm.umin.v4i32(<4 x i32> %{{.*}}, <4 x i32> %{{.*}}) // CHECK: [[TMP:%.*]] = bitcast <4 x i32> [[RES]] to <2 x i64> // CHECK: [[RES:%.*]] = bitcast <2 x i64> [[TMP]] to <4 x i32> @@ -4736,7 +4765,7 @@ __m128i test_mm_maskz_min_epu32(__mmask8 __M, __m128i __A, __m128i __B) { return _mm_maskz_min_epu32(__M,__A,__B); } __m128i test_mm_mask_min_epu32(__m128i __W, __mmask8 __M, __m128i __A, __m128i __B) { - // CHECK-LABEL: @test_mm_mask_min_epu32 + // CHECK-LABEL: test_mm_mask_min_epu32 // CHECK: [[RES:%.*]] = call <4 x i32> @llvm.umin.v4i32(<4 x i32> %{{.*}}, <4 x i32> %{{.*}}) // CHECK: [[TMP:%.*]] = bitcast <4 x i32> [[RES]] to <2 x i64> // CHECK: [[RES:%.*]] = bitcast <2 x i64> [[TMP]] to <4 x i32> @@ -4744,7 +4773,7 @@ __m128i test_mm_mask_min_epu32(__m128i __W, __mmask8 __M, __m128i __A, __m128i _ return _mm_mask_min_epu32(__W,__M,__A,__B); } __m256i test_mm256_maskz_min_epu32(__mmask8 __M, __m256i __A, __m256i __B) { - // CHECK-LABEL: @test_mm256_maskz_min_epu32 + // CHECK-LABEL: test_mm256_maskz_min_epu32 // CHECK: [[RES:%.*]] = call <8 x i32> @llvm.umin.v8i32(<8 x i32> %{{.*}}, <8 x i32> %{{.*}}) // CHECK: [[TMP:%.*]] = bitcast <8 x i32> [[RES]] to <4 x i64> // CHECK: [[RES:%.*]] = bitcast <4 x i64> [[TMP]] to <8 x i32> @@ -4752,7 +4781,7 @@ __m256i test_mm256_maskz_min_epu32(__mmask8 __M, __m256i __A, __m256i __B) { return _mm256_maskz_min_epu32(__M,__A,__B); } __m256i test_mm256_mask_min_epu32(__m256i __W, __mmask8 __M, __m256i __A, __m256i __B) { - // CHECK-LABEL: @test_mm256_mask_min_epu32 + // CHECK-LABEL: test_mm256_mask_min_epu32 // CHECK: [[RES:%.*]] = call <8 x i32> @llvm.umin.v8i32(<8 x i32> %{{.*}}, <8 x i32> %{{.*}}) // CHECK: [[TMP:%.*]] = bitcast <8 x i32> [[RES]] to <4 x i64> // CHECK: [[RES:%.*]] = bitcast <4 x i64> [[TMP]] to <8 x i32> @@ -4760,1914 +4789,1973 @@ __m256i test_mm256_mask_min_epu32(__m256i __W, __mmask8 __M, __m256i __A, __m256 return _mm256_mask_min_epu32(__W,__M,__A,__B); } __m128i test_mm_min_epu64(__m128i __A, __m128i __B) { - // CHECK-LABEL: @test_mm_min_epu64 - // CHECK: [[RES:%.*]] = call <2 x i64> @llvm.umin.v2i64(<2 x i64> %{{.*}}, <2 x i64> %{{.*}}) + // CHECK-LABEL: test_mm_min_epu64 + // CHECK: [[RES:%.*]] = call {{.*}}<2 x i64> @llvm.umin.v2i64(<2 x i64> %{{.*}}, <2 x i64> %{{.*}}) return _mm_min_epu64(__A,__B); } __m128i test_mm_mask_min_epu64(__m128i __W, __mmask8 __M, __m128i __A, __m128i __B) { - // CHECK-LABEL: @test_mm_mask_min_epu64 - // CHECK: [[RES:%.*]] = call <2 x i64> @llvm.umin.v2i64(<2 x i64> %{{.*}}, <2 x i64> %{{.*}}) + // CHECK-LABEL: test_mm_mask_min_epu64 + // CHECK: [[RES:%.*]] = call {{.*}}<2 x i64> @llvm.umin.v2i64(<2 x i64> %{{.*}}, <2 x i64> %{{.*}}) // CHECK: select <2 x i1> {{.*}}, <2 x i64> [[RES]], <2 x i64> {{.*}} return _mm_mask_min_epu64(__W,__M,__A,__B); } __m128i test_mm_maskz_min_epu64(__mmask8 __M, __m128i __A, __m128i __B) { - // CHECK-LABEL: @test_mm_maskz_min_epu64 - // CHECK: [[RES:%.*]] = call <2 x i64> @llvm.umin.v2i64(<2 x i64> %{{.*}}, <2 x i64> %{{.*}}) + // CHECK-LABEL: test_mm_maskz_min_epu64 + // CHECK: [[RES:%.*]] = call {{.*}}<2 x i64> @llvm.umin.v2i64(<2 x i64> %{{.*}}, <2 x i64> %{{.*}}) // CHECK: select <2 x i1> {{.*}}, <2 x i64> [[RES]], <2 x i64> {{.*}} return _mm_maskz_min_epu64(__M,__A,__B); } __m256i test_mm256_min_epu64(__m256i __A, __m256i __B) { - // CHECK-LABEL: @test_mm256_min_epu64 - // CHECK: [[RES:%.*]] = call <4 x i64> @llvm.umin.v4i64(<4 x i64> %{{.*}}, <4 x i64> %{{.*}}) + // CHECK-LABEL: test_mm256_min_epu64 + // CHECK: [[RES:%.*]] = call {{.*}}<4 x i64> @llvm.umin.v4i64(<4 x i64> %{{.*}}, <4 x i64> %{{.*}}) return _mm256_min_epu64(__A,__B); } __m256i test_mm256_mask_min_epu64(__m256i __W, __mmask8 __M, __m256i __A, __m256i __B) { - // CHECK-LABEL: @test_mm256_mask_min_epu64 - // CHECK: [[RES:%.*]] = call <4 x i64> @llvm.umin.v4i64(<4 x i64> %{{.*}}, <4 x i64> %{{.*}}) + // CHECK-LABEL: test_mm256_mask_min_epu64 + // CHECK: [[RES:%.*]] = call {{.*}}<4 x i64> @llvm.umin.v4i64(<4 x i64> %{{.*}}, <4 x i64> %{{.*}}) // CHECK: select <4 x i1> {{.*}}, <4 x i64> [[RES]], <4 x i64> {{.*}} return _mm256_mask_min_epu64(__W,__M,__A,__B); } __m256i test_mm256_maskz_min_epu64(__mmask8 __M, __m256i __A, __m256i __B) { - // CHECK-LABEL: @test_mm256_maskz_min_epu64 - // CHECK: [[RES:%.*]] = call <4 x i64> @llvm.umin.v4i64(<4 x i64> %{{.*}}, <4 x i64> %{{.*}}) + // CHECK-LABEL: test_mm256_maskz_min_epu64 + // CHECK: [[RES:%.*]] = call {{.*}}<4 x i64> @llvm.umin.v4i64(<4 x i64> %{{.*}}, <4 x i64> %{{.*}}) // CHECK: select <4 x i1> {{.*}}, <4 x i64> [[RES]], <4 x i64> {{.*}} return _mm256_maskz_min_epu64(__M,__A,__B); } __m128d test_mm_roundscale_pd(__m128d __A) { - // CHECK-LABEL: @test_mm_roundscale_pd + // CHECK-LABEL: test_mm_roundscale_pd // CHECK: @llvm.x86.avx512.mask.rndscale.pd.128 return _mm_roundscale_pd(__A,4); } __m128d test_mm_mask_roundscale_pd(__m128d __W, __mmask8 __U, __m128d __A) { - // CHECK-LABEL: @test_mm_mask_roundscale_pd + // CHECK-LABEL: test_mm_mask_roundscale_pd // CHECK: @llvm.x86.avx512.mask.rndscale.pd.128 return _mm_mask_roundscale_pd(__W,__U,__A,4); } __m128d test_mm_maskz_roundscale_pd(__mmask8 __U, __m128d __A) { - // CHECK-LABEL: @test_mm_maskz_roundscale_pd + // CHECK-LABEL: test_mm_maskz_roundscale_pd // CHECK: @llvm.x86.avx512.mask.rndscale.pd.128 return _mm_maskz_roundscale_pd(__U,__A,4); } __m256d test_mm256_roundscale_pd(__m256d __A) { - // CHECK-LABEL: @test_mm256_roundscale_pd + // CHECK-LABEL: test_mm256_roundscale_pd // CHECK: @llvm.x86.avx512.mask.rndscale.pd.256 return _mm256_roundscale_pd(__A,4); } __m256d test_mm256_mask_roundscale_pd(__m256d __W, __mmask8 __U, __m256d __A) { - // CHECK-LABEL: @test_mm256_mask_roundscale_pd + // CHECK-LABEL: test_mm256_mask_roundscale_pd // CHECK: @llvm.x86.avx512.mask.rndscale.pd.256 return _mm256_mask_roundscale_pd(__W,__U,__A,4); } __m256d test_mm256_maskz_roundscale_pd(__mmask8 __U, __m256d __A) { - // CHECK-LABEL: @test_mm256_maskz_roundscale_pd + // CHECK-LABEL: test_mm256_maskz_roundscale_pd // CHECK: @llvm.x86.avx512.mask.rndscale.pd.256 return _mm256_maskz_roundscale_pd(__U,__A,4); } __m128 test_mm_roundscale_ps(__m128 __A) { - // CHECK-LABEL: @test_mm_roundscale_ps + // CHECK-LABEL: test_mm_roundscale_ps // CHECK: @llvm.x86.avx512.mask.rndscale.ps.128 return _mm_roundscale_ps(__A,4); } __m128 test_mm_mask_roundscale_ps(__m128 __W, __mmask8 __U, __m128 __A) { - // CHECK-LABEL: @test_mm_mask_roundscale_ps + // CHECK-LABEL: test_mm_mask_roundscale_ps // CHECK: @llvm.x86.avx512.mask.rndscale.ps.128 return _mm_mask_roundscale_ps(__W,__U,__A,4); } __m128 test_mm_maskz_roundscale_ps(__mmask8 __U, __m128 __A) { - // CHECK-LABEL: @test_mm_maskz_roundscale_ps + // CHECK-LABEL: test_mm_maskz_roundscale_ps // CHECK: @llvm.x86.avx512.mask.rndscale.ps.128 return _mm_maskz_roundscale_ps(__U,__A, 4); } __m256 test_mm256_roundscale_ps(__m256 __A) { - // CHECK-LABEL: @test_mm256_roundscale_ps + // CHECK-LABEL: test_mm256_roundscale_ps // CHECK: @llvm.x86.avx512.mask.rndscale.ps.256 return _mm256_roundscale_ps(__A,4); } __m256 test_mm256_mask_roundscale_ps(__m256 __W, __mmask8 __U, __m256 __A) { - // CHECK-LABEL: @test_mm256_mask_roundscale_ps + // CHECK-LABEL: test_mm256_mask_roundscale_ps // CHECK: @llvm.x86.avx512.mask.rndscale.ps.256 return _mm256_mask_roundscale_ps(__W,__U,__A,4); } __m256 test_mm256_maskz_roundscale_ps(__mmask8 __U, __m256 __A) { - // CHECK-LABEL: @test_mm256_maskz_roundscale_ps + // CHECK-LABEL: test_mm256_maskz_roundscale_ps // CHECK: @llvm.x86.avx512.mask.rndscale.ps.256 return _mm256_maskz_roundscale_ps(__U,__A,4); } __m128d test_mm_scalef_pd(__m128d __A, __m128d __B) { - // CHECK-LABEL: @test_mm_scalef_pd + // CHECK-LABEL: test_mm_scalef_pd // CHECK: @llvm.x86.avx512.mask.scalef.pd.128 return _mm_scalef_pd(__A,__B); } __m128d test_mm_mask_scalef_pd(__m128d __W, __mmask8 __U, __m128d __A, __m128d __B) { - // CHECK-LABEL: @test_mm_mask_scalef_pd + // CHECK-LABEL: test_mm_mask_scalef_pd // CHECK: @llvm.x86.avx512.mask.scalef.pd.128 return _mm_mask_scalef_pd(__W,__U,__A,__B); } __m128d test_mm_maskz_scalef_pd(__mmask8 __U, __m128d __A, __m128d __B) { - // CHECK-LABEL: @test_mm_maskz_scalef_pd + // CHECK-LABEL: test_mm_maskz_scalef_pd // CHECK: @llvm.x86.avx512.mask.scalef.pd.128 return _mm_maskz_scalef_pd(__U,__A,__B); } __m256d test_mm256_scalef_pd(__m256d __A, __m256d __B) { - // CHECK-LABEL: @test_mm256_scalef_pd + // CHECK-LABEL: test_mm256_scalef_pd // CHECK: @llvm.x86.avx512.mask.scalef.pd.256 return _mm256_scalef_pd(__A,__B); } __m256d test_mm256_mask_scalef_pd(__m256d __W, __mmask8 __U, __m256d __A, __m256d __B) { - // CHECK-LABEL: @test_mm256_mask_scalef_pd + // CHECK-LABEL: test_mm256_mask_scalef_pd // CHECK: @llvm.x86.avx512.mask.scalef.pd.256 return _mm256_mask_scalef_pd(__W,__U,__A,__B); } __m256d test_mm256_maskz_scalef_pd(__mmask8 __U, __m256d __A, __m256d __B) { - // CHECK-LABEL: @test_mm256_maskz_scalef_pd + // CHECK-LABEL: test_mm256_maskz_scalef_pd // CHECK: @llvm.x86.avx512.mask.scalef.pd.256 return _mm256_maskz_scalef_pd(__U,__A,__B); } __m128 test_mm_scalef_ps(__m128 __A, __m128 __B) { - // CHECK-LABEL: @test_mm_scalef_ps + // CHECK-LABEL: test_mm_scalef_ps // CHECK: @llvm.x86.avx512.mask.scalef.ps.128 return _mm_scalef_ps(__A,__B); } __m128 test_mm_mask_scalef_ps(__m128 __W, __mmask8 __U, __m128 __A, __m128 __B) { - // CHECK-LABEL: @test_mm_mask_scalef_ps + // CHECK-LABEL: test_mm_mask_scalef_ps // CHECK: @llvm.x86.avx512.mask.scalef.ps.128 return _mm_mask_scalef_ps(__W,__U,__A,__B); } __m128 test_mm_maskz_scalef_ps(__mmask8 __U, __m128 __A, __m128 __B) { - // CHECK-LABEL: @test_mm_maskz_scalef_ps + // CHECK-LABEL: test_mm_maskz_scalef_ps // CHECK: @llvm.x86.avx512.mask.scalef.ps.128 return _mm_maskz_scalef_ps(__U,__A,__B); } __m256 test_mm256_scalef_ps(__m256 __A, __m256 __B) { - // CHECK-LABEL: @test_mm256_scalef_ps + // CHECK-LABEL: test_mm256_scalef_ps // CHECK: @llvm.x86.avx512.mask.scalef.ps.256 return _mm256_scalef_ps(__A,__B); } __m256 test_mm256_mask_scalef_ps(__m256 __W, __mmask8 __U, __m256 __A, __m256 __B) { - // CHECK-LABEL: @test_mm256_mask_scalef_ps + // CHECK-LABEL: test_mm256_mask_scalef_ps // CHECK: @llvm.x86.avx512.mask.scalef.ps.256 return _mm256_mask_scalef_ps(__W,__U,__A,__B); } __m256 test_mm256_maskz_scalef_ps(__mmask8 __U, __m256 __A, __m256 __B) { - // CHECK-LABEL: @test_mm256_maskz_scalef_ps + // CHECK-LABEL: test_mm256_maskz_scalef_ps // CHECK: @llvm.x86.avx512.mask.scalef.ps.256 return _mm256_maskz_scalef_ps(__U,__A,__B); } void test_mm_i64scatter_pd(double *__addr, __m128i __index, __m128d __v1) { - // CHECK-LABEL: @test_mm_i64scatter_pd + // CHECK-LABEL: test_mm_i64scatter_pd // CHECK: @llvm.x86.avx512.mask.scatterdiv2.df return _mm_i64scatter_pd(__addr,__index,__v1,2); } void test_mm_mask_i64scatter_pd(double *__addr, __mmask8 __mask, __m128i __index, __m128d __v1) { - // CHECK-LABEL: @test_mm_mask_i64scatter_pd + // CHECK-LABEL: test_mm_mask_i64scatter_pd // CHECK: @llvm.x86.avx512.mask.scatterdiv2.df return _mm_mask_i64scatter_pd(__addr,__mask,__index,__v1,2); } void test_mm_i64scatter_epi64(long long *__addr, __m128i __index, __m128i __v1) { - // CHECK-LABEL: @test_mm_i64scatter_epi64 + // CHECK-LABEL: test_mm_i64scatter_epi64 // CHECK: @llvm.x86.avx512.mask.scatterdiv2.di return _mm_i64scatter_epi64(__addr,__index,__v1,2); } void test_mm_mask_i64scatter_epi64(long long *__addr, __mmask8 __mask, __m128i __index, __m128i __v1) { - // CHECK-LABEL: @test_mm_mask_i64scatter_epi64 + // CHECK-LABEL: test_mm_mask_i64scatter_epi64 // CHECK: @llvm.x86.avx512.mask.scatterdiv2.di return _mm_mask_i64scatter_epi64(__addr,__mask,__index,__v1,2); } void test_mm256_i64scatter_pd(double *__addr, __m256i __index, __m256d __v1) { - // CHECK-LABEL: @test_mm256_i64scatter_pd + // CHECK-LABEL: test_mm256_i64scatter_pd // CHECK: @llvm.x86.avx512.mask.scatterdiv4.df return _mm256_i64scatter_pd(__addr,__index,__v1,2); } void test_mm256_mask_i64scatter_pd(double *__addr, __mmask8 __mask, __m256i __index, __m256d __v1) { - // CHECK-LABEL: @test_mm256_mask_i64scatter_pd + // CHECK-LABEL: test_mm256_mask_i64scatter_pd // CHECK: @llvm.x86.avx512.mask.scatterdiv4.df return _mm256_mask_i64scatter_pd(__addr,__mask,__index,__v1,2); } void test_mm256_i64scatter_epi64(long long *__addr, __m256i __index, __m256i __v1) { - // CHECK-LABEL: @test_mm256_i64scatter_epi64 + // CHECK-LABEL: test_mm256_i64scatter_epi64 // CHECK: @llvm.x86.avx512.mask.scatterdiv4.di return _mm256_i64scatter_epi64(__addr,__index,__v1,2); } void test_mm256_mask_i64scatter_epi64(long long *__addr, __mmask8 __mask, __m256i __index, __m256i __v1) { - // CHECK-LABEL: @test_mm256_mask_i64scatter_epi64 + // CHECK-LABEL: test_mm256_mask_i64scatter_epi64 // CHECK: @llvm.x86.avx512.mask.scatterdiv4.di return _mm256_mask_i64scatter_epi64(__addr,__mask,__index,__v1,2); } void test_mm_i64scatter_ps(float *__addr, __m128i __index, __m128 __v1) { - // CHECK-LABEL: @test_mm_i64scatter_ps + // CHECK-LABEL: test_mm_i64scatter_ps // CHECK: @llvm.x86.avx512.mask.scatterdiv4.sf return _mm_i64scatter_ps(__addr,__index,__v1,2); } void test_mm_mask_i64scatter_ps(float *__addr, __mmask8 __mask, __m128i __index, __m128 __v1) { - // CHECK-LABEL: @test_mm_mask_i64scatter_ps + // CHECK-LABEL: test_mm_mask_i64scatter_ps // CHECK: @llvm.x86.avx512.mask.scatterdiv4.sf return _mm_mask_i64scatter_ps(__addr,__mask,__index,__v1,2); } void test_mm_i64scatter_epi32(int *__addr, __m128i __index, __m128i __v1) { - // CHECK-LABEL: @test_mm_i64scatter_epi32 + // CHECK-LABEL: test_mm_i64scatter_epi32 // CHECK: @llvm.x86.avx512.mask.scatterdiv4.si return _mm_i64scatter_epi32(__addr,__index,__v1,2); } void test_mm_mask_i64scatter_epi32(int *__addr, __mmask8 __mask, __m128i __index, __m128i __v1) { - // CHECK-LABEL: @test_mm_mask_i64scatter_epi32 + // CHECK-LABEL: test_mm_mask_i64scatter_epi32 // CHECK: @llvm.x86.avx512.mask.scatterdiv4.si return _mm_mask_i64scatter_epi32(__addr,__mask,__index,__v1,2); } void test_mm256_i64scatter_ps(float *__addr, __m256i __index, __m128 __v1) { - // CHECK-LABEL: @test_mm256_i64scatter_ps + // CHECK-LABEL: test_mm256_i64scatter_ps // CHECK: @llvm.x86.avx512.mask.scatterdiv8.sf return _mm256_i64scatter_ps(__addr,__index,__v1,2); } void test_mm256_mask_i64scatter_ps(float *__addr, __mmask8 __mask, __m256i __index, __m128 __v1) { - // CHECK-LABEL: @test_mm256_mask_i64scatter_ps + // CHECK-LABEL: test_mm256_mask_i64scatter_ps // CHECK: @llvm.x86.avx512.mask.scatterdiv8.sf return _mm256_mask_i64scatter_ps(__addr,__mask,__index,__v1,2); } void test_mm256_i64scatter_epi32(int *__addr, __m256i __index, __m128i __v1) { - // CHECK-LABEL: @test_mm256_i64scatter_epi32 + // CHECK-LABEL: test_mm256_i64scatter_epi32 // CHECK: @llvm.x86.avx512.mask.scatterdiv8.si return _mm256_i64scatter_epi32(__addr,__index,__v1,2); } void test_mm256_mask_i64scatter_epi32(int *__addr, __mmask8 __mask, __m256i __index, __m128i __v1) { - // CHECK-LABEL: @test_mm256_mask_i64scatter_epi32 + // CHECK-LABEL: test_mm256_mask_i64scatter_epi32 // CHECK: @llvm.x86.avx512.mask.scatterdiv8.si return _mm256_mask_i64scatter_epi32(__addr,__mask,__index,__v1,2); } void test_mm_i32scatter_pd(double *__addr, __m128i __index, __m128d __v1) { - // CHECK-LABEL: @test_mm_i32scatter_pd + // CHECK-LABEL: test_mm_i32scatter_pd // CHECK: @llvm.x86.avx512.mask.scattersiv2.df return _mm_i32scatter_pd(__addr,__index,__v1,2); } void test_mm_mask_i32scatter_pd(double *__addr, __mmask8 __mask, __m128i __index, __m128d __v1) { - // CHECK-LABEL: @test_mm_mask_i32scatter_pd + // CHECK-LABEL: test_mm_mask_i32scatter_pd // CHECK: @llvm.x86.avx512.mask.scattersiv2.df return _mm_mask_i32scatter_pd(__addr,__mask,__index,__v1,2); } void test_mm_i32scatter_epi64(long long *__addr, __m128i __index, __m128i __v1) { - // CHECK-LABEL: @test_mm_i32scatter_epi64 + // CHECK-LABEL: test_mm_i32scatter_epi64 // CHECK: @llvm.x86.avx512.mask.scattersiv2.di return _mm_i32scatter_epi64(__addr,__index,__v1,2); } void test_mm_mask_i32scatter_epi64(long long *__addr, __mmask8 __mask, __m128i __index, __m128i __v1) { - // CHECK-LABEL: @test_mm_mask_i32scatter_epi64 + // CHECK-LABEL: test_mm_mask_i32scatter_epi64 // CHECK: @llvm.x86.avx512.mask.scattersiv2.di return _mm_mask_i32scatter_epi64(__addr,__mask,__index,__v1,2); } void test_mm256_i32scatter_pd(double *__addr, __m128i __index, __m256d __v1) { - // CHECK-LABEL: @test_mm256_i32scatter_pd + // CHECK-LABEL: test_mm256_i32scatter_pd // CHECK: @llvm.x86.avx512.mask.scattersiv4.df return _mm256_i32scatter_pd(__addr,__index,__v1,2); } void test_mm256_mask_i32scatter_pd(double *__addr, __mmask8 __mask, __m128i __index, __m256d __v1) { - // CHECK-LABEL: @test_mm256_mask_i32scatter_pd + // CHECK-LABEL: test_mm256_mask_i32scatter_pd // CHECK: @llvm.x86.avx512.mask.scattersiv4.df return _mm256_mask_i32scatter_pd(__addr,__mask,__index,__v1,2); } void test_mm256_i32scatter_epi64(long long *__addr, __m128i __index, __m256i __v1) { - // CHECK-LABEL: @test_mm256_i32scatter_epi64 + // CHECK-LABEL: test_mm256_i32scatter_epi64 // CHECK: @llvm.x86.avx512.mask.scattersiv4.di return _mm256_i32scatter_epi64(__addr,__index,__v1,2); } void test_mm256_mask_i32scatter_epi64(long long *__addr, __mmask8 __mask, __m128i __index, __m256i __v1) { - // CHECK-LABEL: @test_mm256_mask_i32scatter_epi64 + // CHECK-LABEL: test_mm256_mask_i32scatter_epi64 // CHECK: @llvm.x86.avx512.mask.scattersiv4.di return _mm256_mask_i32scatter_epi64(__addr,__mask,__index,__v1,2); } void test_mm_i32scatter_ps(float *__addr, __m128i __index, __m128 __v1) { - // CHECK-LABEL: @test_mm_i32scatter_ps + // CHECK-LABEL: test_mm_i32scatter_ps // CHECK: @llvm.x86.avx512.mask.scattersiv4.sf return _mm_i32scatter_ps(__addr,__index,__v1,2); } void test_mm_mask_i32scatter_ps(float *__addr, __mmask8 __mask, __m128i __index, __m128 __v1) { - // CHECK-LABEL: @test_mm_mask_i32scatter_ps + // CHECK-LABEL: test_mm_mask_i32scatter_ps // CHECK: @llvm.x86.avx512.mask.scattersiv4.sf return _mm_mask_i32scatter_ps(__addr,__mask,__index,__v1,2); } void test_mm_i32scatter_epi32(int *__addr, __m128i __index, __m128i __v1) { - // CHECK-LABEL: @test_mm_i32scatter_epi32 + // CHECK-LABEL: test_mm_i32scatter_epi32 // CHECK: @llvm.x86.avx512.mask.scattersiv4.si return _mm_i32scatter_epi32(__addr,__index,__v1,2); } void test_mm_mask_i32scatter_epi32(int *__addr, __mmask8 __mask, __m128i __index, __m128i __v1) { - // CHECK-LABEL: @test_mm_mask_i32scatter_epi32 + // CHECK-LABEL: test_mm_mask_i32scatter_epi32 // CHECK: @llvm.x86.avx512.mask.scattersiv4.si return _mm_mask_i32scatter_epi32(__addr,__mask,__index,__v1,2); } void test_mm256_i32scatter_ps(float *__addr, __m256i __index, __m256 __v1) { - // CHECK-LABEL: @test_mm256_i32scatter_ps + // CHECK-LABEL: test_mm256_i32scatter_ps // CHECK: @llvm.x86.avx512.mask.scattersiv8.sf return _mm256_i32scatter_ps(__addr,__index,__v1,2); } void test_mm256_mask_i32scatter_ps(float *__addr, __mmask8 __mask, __m256i __index, __m256 __v1) { - // CHECK-LABEL: @test_mm256_mask_i32scatter_ps + // CHECK-LABEL: test_mm256_mask_i32scatter_ps // CHECK: @llvm.x86.avx512.mask.scattersiv8.sf return _mm256_mask_i32scatter_ps(__addr,__mask,__index,__v1,2); } void test_mm256_i32scatter_epi32(int *__addr, __m256i __index, __m256i __v1) { - // CHECK-LABEL: @test_mm256_i32scatter_epi32 + // CHECK-LABEL: test_mm256_i32scatter_epi32 // CHECK: @llvm.x86.avx512.mask.scattersiv8.si return _mm256_i32scatter_epi32(__addr,__index,__v1,2); } void test_mm256_mask_i32scatter_epi32(int *__addr, __mmask8 __mask, __m256i __index, __m256i __v1) { - // CHECK-LABEL: @test_mm256_mask_i32scatter_epi32 + // CHECK-LABEL: test_mm256_mask_i32scatter_epi32 // CHECK: @llvm.x86.avx512.mask.scattersiv8.si return _mm256_mask_i32scatter_epi32(__addr,__mask,__index,__v1,2); } __m128d test_mm_mask_sqrt_pd(__m128d __W, __mmask8 __U, __m128d __A) { - // CHECK-LABEL: @test_mm_mask_sqrt_pd + // CHECK-LABEL: test_mm_mask_sqrt_pd // CHECK: @llvm.sqrt.v2f64 // CHECK: select <2 x i1> %{{.*}}, <2 x double> %{{.*}}, <2 x double> %{{.*}} return _mm_mask_sqrt_pd(__W,__U,__A); } __m128d test_mm_maskz_sqrt_pd(__mmask8 __U, __m128d __A) { - // CHECK-LABEL: @test_mm_maskz_sqrt_pd + // CHECK-LABEL: test_mm_maskz_sqrt_pd // CHECK: @llvm.sqrt.v2f64 // CHECK: select <2 x i1> %{{.*}}, <2 x double> %{{.*}}, <2 x double> %{{.*}} return _mm_maskz_sqrt_pd(__U,__A); } __m256d test_mm256_mask_sqrt_pd(__m256d __W, __mmask8 __U, __m256d __A) { - // CHECK-LABEL: @test_mm256_mask_sqrt_pd + // CHECK-LABEL: test_mm256_mask_sqrt_pd // CHECK: @llvm.sqrt.v4f64 // CHECK: select <4 x i1> %{{.*}}, <4 x double> %{{.*}}, <4 x double> %{{.*}} return _mm256_mask_sqrt_pd(__W,__U,__A); } __m256d test_mm256_maskz_sqrt_pd(__mmask8 __U, __m256d __A) { - // CHECK-LABEL: @test_mm256_maskz_sqrt_pd + // CHECK-LABEL: test_mm256_maskz_sqrt_pd // CHECK: @llvm.sqrt.v4f64 // CHECK: select <4 x i1> %{{.*}}, <4 x double> %{{.*}}, <4 x double> %{{.*}} return _mm256_maskz_sqrt_pd(__U,__A); } __m128 test_mm_mask_sqrt_ps(__m128 __W, __mmask8 __U, __m128 __A) { - // CHECK-LABEL: @test_mm_mask_sqrt_ps + // CHECK-LABEL: test_mm_mask_sqrt_ps // CHECK: @llvm.sqrt.v4f32 // CHECK: select <4 x i1> %{{.*}}, <4 x float> %{{.*}}, <4 x float> %{{.*}} return _mm_mask_sqrt_ps(__W,__U,__A); } __m128 test_mm_maskz_sqrt_ps(__mmask8 __U, __m128 __A) { - // CHECK-LABEL: @test_mm_maskz_sqrt_ps + // CHECK-LABEL: test_mm_maskz_sqrt_ps // CHECK: @llvm.sqrt.v4f32 // CHECK: select <4 x i1> %{{.*}}, <4 x float> %{{.*}}, <4 x float> %{{.*}} return _mm_maskz_sqrt_ps(__U,__A); } __m256 test_mm256_mask_sqrt_ps(__m256 __W, __mmask8 __U, __m256 __A) { - // CHECK-LABEL: @test_mm256_mask_sqrt_ps + // CHECK-LABEL: test_mm256_mask_sqrt_ps // CHECK: @llvm.sqrt.v8f32 // CHECK: select <8 x i1> %{{.*}}, <8 x float> %{{.*}}, <8 x float> %{{.*}} return _mm256_mask_sqrt_ps(__W,__U,__A); } __m256 test_mm256_maskz_sqrt_ps(__mmask8 __U, __m256 __A) { - // CHECK-LABEL: @test_mm256_maskz_sqrt_ps + // CHECK-LABEL: test_mm256_maskz_sqrt_ps // CHECK: @llvm.sqrt.v8f32 // CHECK: select <8 x i1> %{{.*}}, <8 x float> %{{.*}}, <8 x float> %{{.*}} return _mm256_maskz_sqrt_ps(__U,__A); } __m128d test_mm_mask_sub_pd(__m128d __W, __mmask8 __U, __m128d __A, __m128d __B) { - // CHECK-LABEL: @test_mm_mask_sub_pd + // CHECK-LABEL: test_mm_mask_sub_pd // CHECK: fsub <2 x double> %{{.*}}, %{{.*}} // CHECK: select <2 x i1> %{{.*}}, <2 x double> %{{.*}}, <2 x double> %{{.*}} return _mm_mask_sub_pd(__W,__U,__A,__B); } __m128d test_mm_maskz_sub_pd(__mmask8 __U, __m128d __A, __m128d __B) { - // CHECK-LABEL: @test_mm_maskz_sub_pd + // CHECK-LABEL: test_mm_maskz_sub_pd // CHECK: fsub <2 x double> %{{.*}}, %{{.*}} // CHECK: select <2 x i1> %{{.*}}, <2 x double> %{{.*}}, <2 x double> %{{.*}} return _mm_maskz_sub_pd(__U,__A,__B); } __m256d test_mm256_mask_sub_pd(__m256d __W, __mmask8 __U, __m256d __A, __m256d __B) { - // CHECK-LABEL: @test_mm256_mask_sub_pd + // CHECK-LABEL: test_mm256_mask_sub_pd // CHECK: fsub <4 x double> %{{.*}}, %{{.*}} // CHECK: select <4 x i1> %{{.*}}, <4 x double> %{{.*}}, <4 x double> %{{.*}} return _mm256_mask_sub_pd(__W,__U,__A,__B); } __m256d test_mm256_maskz_sub_pd(__mmask8 __U, __m256d __A, __m256d __B) { - // CHECK-LABEL: @test_mm256_maskz_sub_pd + // CHECK-LABEL: test_mm256_maskz_sub_pd // CHECK: fsub <4 x double> %{{.*}}, %{{.*}} // CHECK: select <4 x i1> %{{.*}}, <4 x double> %{{.*}}, <4 x double> %{{.*}} return _mm256_maskz_sub_pd(__U,__A,__B); } __m128 test_mm_mask_sub_ps(__m128 __W, __mmask8 __U, __m128 __A, __m128 __B) { - // CHECK-LABEL: @test_mm_mask_sub_ps + // CHECK-LABEL: test_mm_mask_sub_ps // CHECK: fsub <4 x float> %{{.*}}, %{{.*}} // CHECK: select <4 x i1> %{{.*}}, <4 x float> %{{.*}}, <4 x float> %{{.*}} return _mm_mask_sub_ps(__W,__U,__A,__B); } __m128 test_mm_maskz_sub_ps(__mmask8 __U, __m128 __A, __m128 __B) { - // CHECK-LABEL: @test_mm_maskz_sub_ps + // CHECK-LABEL: test_mm_maskz_sub_ps // CHECK: fsub <4 x float> %{{.*}}, %{{.*}} // CHECK: select <4 x i1> %{{.*}}, <4 x float> %{{.*}}, <4 x float> %{{.*}} return _mm_maskz_sub_ps(__U,__A,__B); } __m256 test_mm256_mask_sub_ps(__m256 __W, __mmask8 __U, __m256 __A, __m256 __B) { - // CHECK-LABEL: @test_mm256_mask_sub_ps + // CHECK-LABEL: test_mm256_mask_sub_ps // CHECK: fsub <8 x float> %{{.*}}, %{{.*}} // CHECK: select <8 x i1> %{{.*}}, <8 x float> %{{.*}}, <8 x float> %{{.*}} return _mm256_mask_sub_ps(__W,__U,__A,__B); } __m256 test_mm256_maskz_sub_ps(__mmask8 __U, __m256 __A, __m256 __B) { - // CHECK-LABEL: @test_mm256_maskz_sub_ps + // CHECK-LABEL: test_mm256_maskz_sub_ps // CHECK: fsub <8 x float> %{{.*}}, %{{.*}} // CHECK: select <8 x i1> %{{.*}}, <8 x float> %{{.*}}, <8 x float> %{{.*}} return _mm256_maskz_sub_ps(__U,__A,__B); } __m128i test_mm_mask2_permutex2var_epi32(__m128i __A, __m128i __I, __mmask8 __U, __m128i __B) { - // CHECK-LABEL: @test_mm_mask2_permutex2var_epi32 + // CHECK-LABEL: test_mm_mask2_permutex2var_epi32 // CHECK: @llvm.x86.avx512.vpermi2var.d.128 // CHECK: select <4 x i1> %{{.*}}, <4 x i32> %{{.*}}, <4 x i32> %{{.*}} return _mm_mask2_permutex2var_epi32(__A,__I,__U,__B); } __m256i test_mm256_mask2_permutex2var_epi32(__m256i __A, __m256i __I, __mmask8 __U, __m256i __B) { - // CHECK-LABEL: @test_mm256_mask2_permutex2var_epi32 + // CHECK-LABEL: test_mm256_mask2_permutex2var_epi32 // CHECK: @llvm.x86.avx512.vpermi2var.d.256 // CHECK: select <8 x i1> %{{.*}}, <8 x i32> %{{.*}}, <8 x i32> %{{.*}} return _mm256_mask2_permutex2var_epi32(__A,__I,__U,__B); } __m128d test_mm_mask2_permutex2var_pd(__m128d __A, __m128i __I, __mmask8 __U, __m128d __B) { - // CHECK-LABEL: @test_mm_mask2_permutex2var_pd + // CHECK-LABEL: test_mm_mask2_permutex2var_pd // CHECK: @llvm.x86.avx512.vpermi2var.pd.128 // CHECK: select <2 x i1> %{{.*}}, <2 x double> %{{.*}}, <2 x double> %{{.*}} return _mm_mask2_permutex2var_pd(__A,__I,__U,__B); } __m256d test_mm256_mask2_permutex2var_pd(__m256d __A, __m256i __I, __mmask8 __U, __m256d __B) { - // CHECK-LABEL: @test_mm256_mask2_permutex2var_pd + // CHECK-LABEL: test_mm256_mask2_permutex2var_pd // CHECK: @llvm.x86.avx512.vpermi2var.pd.256 // CHECK: select <4 x i1> %{{.*}}, <4 x double> %{{.*}}, <4 x double> %{{.*}} return _mm256_mask2_permutex2var_pd(__A,__I,__U,__B); } __m128 test_mm_mask2_permutex2var_ps(__m128 __A, __m128i __I, __mmask8 __U, __m128 __B) { - // CHECK-LABEL: @test_mm_mask2_permutex2var_ps + // CHECK-LABEL: test_mm_mask2_permutex2var_ps // CHECK: @llvm.x86.avx512.vpermi2var.ps.128 // CHECK: select <4 x i1> %{{.*}}, <4 x float> %{{.*}}, <4 x float> %{{.*}} return _mm_mask2_permutex2var_ps(__A,__I,__U,__B); } __m256 test_mm256_mask2_permutex2var_ps(__m256 __A, __m256i __I, __mmask8 __U, __m256 __B) { - // CHECK-LABEL: @test_mm256_mask2_permutex2var_ps + // CHECK-LABEL: test_mm256_mask2_permutex2var_ps // CHECK: @llvm.x86.avx512.vpermi2var.ps.256 // CHECK: select <8 x i1> %{{.*}}, <8 x float> %{{.*}}, <8 x float> %{{.*}} return _mm256_mask2_permutex2var_ps(__A,__I,__U,__B); } __m128i test_mm_mask2_permutex2var_epi64(__m128i __A, __m128i __I, __mmask8 __U, __m128i __B) { - // CHECK-LABEL: @test_mm_mask2_permutex2var_epi64 + // CHECK-LABEL: test_mm_mask2_permutex2var_epi64 // CHECK: @llvm.x86.avx512.vpermi2var.q.128 // CHECK: select <2 x i1> %{{.*}}, <2 x i64> %{{.*}}, <2 x i64> %{{.*}} return _mm_mask2_permutex2var_epi64(__A,__I,__U,__B); } __m256i test_mm256_mask2_permutex2var_epi64(__m256i __A, __m256i __I, __mmask8 __U, __m256i __B) { - // CHECK-LABEL: @test_mm256_mask2_permutex2var_epi64 + // CHECK-LABEL: test_mm256_mask2_permutex2var_epi64 // CHECK: @llvm.x86.avx512.vpermi2var.q.256 // CHECK: select <4 x i1> %{{.*}}, <4 x i64> %{{.*}}, <4 x i64> %{{.*}} return _mm256_mask2_permutex2var_epi64(__A,__I,__U,__B); } __m128i test_mm_permutex2var_epi32(__m128i __A, __m128i __I, __m128i __B) { - // CHECK-LABEL: @test_mm_permutex2var_epi32 + // CHECK-LABEL: test_mm_permutex2var_epi32 // CHECK: @llvm.x86.avx512.vpermi2var.d.128 return _mm_permutex2var_epi32(__A,__I,__B); } __m128i test_mm_mask_permutex2var_epi32(__m128i __A, __mmask8 __U, __m128i __I, __m128i __B) { - // CHECK-LABEL: @test_mm_mask_permutex2var_epi32 + // CHECK-LABEL: test_mm_mask_permutex2var_epi32 // CHECK: @llvm.x86.avx512.vpermi2var.d.128 // CHECK: select <4 x i1> %{{.*}}, <4 x i32> %{{.*}}, <4 x i32> %{{.*}} return _mm_mask_permutex2var_epi32(__A,__U,__I,__B); } __m128i test_mm_maskz_permutex2var_epi32(__mmask8 __U, __m128i __A, __m128i __I, __m128i __B) { - // CHECK-LABEL: @test_mm_maskz_permutex2var_epi32 + // CHECK-LABEL: test_mm_maskz_permutex2var_epi32 // CHECK: @llvm.x86.avx512.vpermi2var.d.128 // CHECK: select <4 x i1> %{{.*}}, <4 x i32> %{{.*}}, <4 x i32> %{{.*}} return _mm_maskz_permutex2var_epi32(__U,__A,__I,__B); } __m256i test_mm256_permutex2var_epi32(__m256i __A, __m256i __I, __m256i __B) { - // CHECK-LABEL: @test_mm256_permutex2var_epi32 + // CHECK-LABEL: test_mm256_permutex2var_epi32 // CHECK: @llvm.x86.avx512.vpermi2var.d.256 return _mm256_permutex2var_epi32(__A,__I,__B); } __m256i test_mm256_mask_permutex2var_epi32(__m256i __A, __mmask8 __U, __m256i __I, __m256i __B) { - // CHECK-LABEL: @test_mm256_mask_permutex2var_epi32 + // CHECK-LABEL: test_mm256_mask_permutex2var_epi32 // CHECK: @llvm.x86.avx512.vpermi2var.d.256 // CHECK: select <8 x i1> %{{.*}}, <8 x i32> %{{.*}}, <8 x i32> %{{.*}} return _mm256_mask_permutex2var_epi32(__A,__U,__I,__B); } __m256i test_mm256_maskz_permutex2var_epi32(__mmask8 __U, __m256i __A, __m256i __I, __m256i __B) { - // CHECK-LABEL: @test_mm256_maskz_permutex2var_epi32 + // CHECK-LABEL: test_mm256_maskz_permutex2var_epi32 // CHECK: @llvm.x86.avx512.vpermi2var.d.256 // CHECK: select <8 x i1> %{{.*}}, <8 x i32> %{{.*}}, <8 x i32> %{{.*}} return _mm256_maskz_permutex2var_epi32(__U,__A,__I,__B); } __m128d test_mm_permutex2var_pd(__m128d __A, __m128i __I, __m128d __B) { - // CHECK-LABEL: @test_mm_permutex2var_pd + // CHECK-LABEL: test_mm_permutex2var_pd // CHECK: @llvm.x86.avx512.vpermi2var.pd.128 return _mm_permutex2var_pd(__A,__I,__B); } __m128d test_mm_mask_permutex2var_pd(__m128d __A, __mmask8 __U, __m128i __I, __m128d __B) { - // CHECK-LABEL: @test_mm_mask_permutex2var_pd + // CHECK-LABEL: test_mm_mask_permutex2var_pd // CHECK: @llvm.x86.avx512.vpermi2var.pd.128 // CHECK: select <2 x i1> %{{.*}}, <2 x double> %{{.*}}, <2 x double> %{{.*}} return _mm_mask_permutex2var_pd(__A,__U,__I,__B); } __m128d test_mm_maskz_permutex2var_pd(__mmask8 __U, __m128d __A, __m128i __I, __m128d __B) { - // CHECK-LABEL: @test_mm_maskz_permutex2var_pd + // CHECK-LABEL: test_mm_maskz_permutex2var_pd // CHECK: @llvm.x86.avx512.vpermi2var.pd.128 // CHECK: select <2 x i1> %{{.*}}, <2 x double> %{{.*}}, <2 x double> %{{.*}} return _mm_maskz_permutex2var_pd(__U,__A,__I,__B); } __m256d test_mm256_permutex2var_pd(__m256d __A, __m256i __I, __m256d __B) { - // CHECK-LABEL: @test_mm256_permutex2var_pd + // CHECK-LABEL: test_mm256_permutex2var_pd // CHECK: @llvm.x86.avx512.vpermi2var.pd.256 return _mm256_permutex2var_pd(__A,__I,__B); } __m256d test_mm256_mask_permutex2var_pd(__m256d __A, __mmask8 __U, __m256i __I, __m256d __B) { - // CHECK-LABEL: @test_mm256_mask_permutex2var_pd + // CHECK-LABEL: test_mm256_mask_permutex2var_pd // CHECK: @llvm.x86.avx512.vpermi2var.pd.256 // CHECK: select <4 x i1> %{{.*}}, <4 x double> %{{.*}}, <4 x double> %{{.*}} return _mm256_mask_permutex2var_pd(__A,__U,__I,__B); } __m256d test_mm256_maskz_permutex2var_pd(__mmask8 __U, __m256d __A, __m256i __I, __m256d __B) { - // CHECK-LABEL: @test_mm256_maskz_permutex2var_pd + // CHECK-LABEL: test_mm256_maskz_permutex2var_pd // CHECK: @llvm.x86.avx512.vpermi2var.pd.256 // CHECK: select <4 x i1> %{{.*}}, <4 x double> %{{.*}}, <4 x double> %{{.*}} return _mm256_maskz_permutex2var_pd(__U,__A,__I,__B); } __m128 test_mm_permutex2var_ps(__m128 __A, __m128i __I, __m128 __B) { - // CHECK-LABEL: @test_mm_permutex2var_ps + // CHECK-LABEL: test_mm_permutex2var_ps // CHECK: @llvm.x86.avx512.vpermi2var.ps.128 return _mm_permutex2var_ps(__A,__I,__B); } __m128 test_mm_mask_permutex2var_ps(__m128 __A, __mmask8 __U, __m128i __I, __m128 __B) { - // CHECK-LABEL: @test_mm_mask_permutex2var_ps + // CHECK-LABEL: test_mm_mask_permutex2var_ps // CHECK: @llvm.x86.avx512.vpermi2var.ps.128 // CHECK: select <4 x i1> %{{.*}}, <4 x float> %{{.*}}, <4 x float> %{{.*}} return _mm_mask_permutex2var_ps(__A,__U,__I,__B); } __m128 test_mm_maskz_permutex2var_ps(__mmask8 __U, __m128 __A, __m128i __I, __m128 __B) { - // CHECK-LABEL: @test_mm_maskz_permutex2var_ps + // CHECK-LABEL: test_mm_maskz_permutex2var_ps // CHECK: @llvm.x86.avx512.vpermi2var.ps.128 // CHECK: select <4 x i1> %{{.*}}, <4 x float> %{{.*}}, <4 x float> %{{.*}} return _mm_maskz_permutex2var_ps(__U,__A,__I,__B); } __m256 test_mm256_permutex2var_ps(__m256 __A, __m256i __I, __m256 __B) { - // CHECK-LABEL: @test_mm256_permutex2var_ps + // CHECK-LABEL: test_mm256_permutex2var_ps // CHECK: @llvm.x86.avx512.vpermi2var.ps.256 return _mm256_permutex2var_ps(__A,__I,__B); } __m256 test_mm256_mask_permutex2var_ps(__m256 __A, __mmask8 __U, __m256i __I, __m256 __B) { - // CHECK-LABEL: @test_mm256_mask_permutex2var_ps + // CHECK-LABEL: test_mm256_mask_permutex2var_ps // CHECK: @llvm.x86.avx512.vpermi2var.ps.256 // CHECK: select <8 x i1> %{{.*}}, <8 x float> %{{.*}}, <8 x float> %{{.*}} return _mm256_mask_permutex2var_ps(__A,__U,__I,__B); } __m256 test_mm256_maskz_permutex2var_ps(__mmask8 __U, __m256 __A, __m256i __I, __m256 __B) { - // CHECK-LABEL: @test_mm256_maskz_permutex2var_ps + // CHECK-LABEL: test_mm256_maskz_permutex2var_ps // CHECK: @llvm.x86.avx512.vpermi2var.ps.256 // CHECK: select <8 x i1> %{{.*}}, <8 x float> %{{.*}}, <8 x float> %{{.*}} return _mm256_maskz_permutex2var_ps(__U,__A,__I,__B); } __m128i test_mm_permutex2var_epi64(__m128i __A, __m128i __I, __m128i __B) { - // CHECK-LABEL: @test_mm_permutex2var_epi64 + // CHECK-LABEL: test_mm_permutex2var_epi64 // CHECK: @llvm.x86.avx512.vpermi2var.q.128 return _mm_permutex2var_epi64(__A,__I,__B); } __m128i test_mm_mask_permutex2var_epi64(__m128i __A, __mmask8 __U, __m128i __I, __m128i __B) { - // CHECK-LABEL: @test_mm_mask_permutex2var_epi64 + // CHECK-LABEL: test_mm_mask_permutex2var_epi64 // CHECK: @llvm.x86.avx512.vpermi2var.q.128 // CHECK: select <2 x i1> %{{.*}}, <2 x i64> %{{.*}}, <2 x i64> %{{.*}} return _mm_mask_permutex2var_epi64(__A,__U,__I,__B); } __m128i test_mm_maskz_permutex2var_epi64(__mmask8 __U, __m128i __A, __m128i __I, __m128i __B) { - // CHECK-LABEL: @test_mm_maskz_permutex2var_epi64 + // CHECK-LABEL: test_mm_maskz_permutex2var_epi64 // CHECK: @llvm.x86.avx512.vpermi2var.q.128 // CHECK: select <2 x i1> %{{.*}}, <2 x i64> %{{.*}}, <2 x i64> %{{.*}} return _mm_maskz_permutex2var_epi64(__U,__A,__I,__B); } __m256i test_mm256_permutex2var_epi64(__m256i __A, __m256i __I, __m256i __B) { - // CHECK-LABEL: @test_mm256_permutex2var_epi64 + // CHECK-LABEL: test_mm256_permutex2var_epi64 // CHECK: @llvm.x86.avx512.vpermi2var.q.256 return _mm256_permutex2var_epi64(__A,__I,__B); } __m256i test_mm256_mask_permutex2var_epi64(__m256i __A, __mmask8 __U, __m256i __I, __m256i __B) { - // CHECK-LABEL: @test_mm256_mask_permutex2var_epi64 + // CHECK-LABEL: test_mm256_mask_permutex2var_epi64 // CHECK: @llvm.x86.avx512.vpermi2var.q.256 // CHECK: select <4 x i1> %{{.*}}, <4 x i64> %{{.*}}, <4 x i64> %{{.*}} return _mm256_mask_permutex2var_epi64(__A,__U,__I,__B); } __m256i test_mm256_maskz_permutex2var_epi64(__mmask8 __U, __m256i __A, __m256i __I, __m256i __B) { - // CHECK-LABEL: @test_mm256_maskz_permutex2var_epi64 + // CHECK-LABEL: test_mm256_maskz_permutex2var_epi64 // CHECK: @llvm.x86.avx512.vpermi2var.q.256 // CHECK: select <4 x i1> %{{.*}}, <4 x i64> %{{.*}}, <4 x i64> %{{.*}} return _mm256_maskz_permutex2var_epi64(__U,__A,__I,__B); } __m128i test_mm_mask_cvtepi8_epi32(__m128i __W, __mmask8 __U, __m128i __A) { - // CHECK-LABEL: @test_mm_mask_cvtepi8_epi32 + // CHECK-LABEL: test_mm_mask_cvtepi8_epi32 // CHECK: sext <4 x i8> %{{.*}} to <4 x i32> // CHECK: select <4 x i1> %{{.*}}, <4 x i32> %{{.*}}, <4 x i32> %{{.*}} return _mm_mask_cvtepi8_epi32(__W, __U, __A); } __m128i test_mm_maskz_cvtepi8_epi32(__mmask8 __U, __m128i __A) { - // CHECK-LABEL: @test_mm_maskz_cvtepi8_epi32 + // CHECK-LABEL: test_mm_maskz_cvtepi8_epi32 // CHECK: sext <4 x i8> %{{.*}} to <4 x i32> // CHECK: select <4 x i1> %{{.*}}, <4 x i32> %{{.*}}, <4 x i32> %{{.*}} return _mm_maskz_cvtepi8_epi32(__U, __A); } __m256i test_mm256_mask_cvtepi8_epi32(__m256i __W, __mmask8 __U, __m128i __A) { - // CHECK-LABEL: @test_mm256_mask_cvtepi8_epi32 + // CHECK-LABEL: test_mm256_mask_cvtepi8_epi32 // CHECK: sext <8 x i8> %{{.*}} to <8 x i32> // CHECK: select <8 x i1> %{{.*}}, <8 x i32> %{{.*}}, <8 x i32> %{{.*}} return _mm256_mask_cvtepi8_epi32(__W, __U, __A); } __m256i test_mm256_maskz_cvtepi8_epi32(__mmask8 __U, __m128i __A) { - // CHECK-LABEL: @test_mm256_maskz_cvtepi8_epi32 + // CHECK-LABEL: test_mm256_maskz_cvtepi8_epi32 // CHECK: sext <8 x i8> %{{.*}} to <8 x i32> // CHECK: select <8 x i1> %{{.*}}, <8 x i32> %{{.*}}, <8 x i32> %{{.*}} return _mm256_maskz_cvtepi8_epi32(__U, __A); } __m128i test_mm_mask_cvtepi8_epi64(__m128i __W, __mmask8 __U, __m128i __A) { - // CHECK-LABEL: @test_mm_mask_cvtepi8_epi64 + // CHECK-LABEL: test_mm_mask_cvtepi8_epi64 // CHECK: sext <2 x i8> %{{.*}} to <2 x i64> // CHECK: select <2 x i1> %{{.*}}, <2 x i64> %{{.*}}, <2 x i64> %{{.*}} return _mm_mask_cvtepi8_epi64(__W, __U, __A); } __m128i test_mm_maskz_cvtepi8_epi64(__mmask8 __U, __m128i __A) { - // CHECK-LABEL: @test_mm_maskz_cvtepi8_epi64 + // CHECK-LABEL: test_mm_maskz_cvtepi8_epi64 // CHECK: sext <2 x i8> %{{.*}} to <2 x i64> // CHECK: select <2 x i1> %{{.*}}, <2 x i64> %{{.*}}, <2 x i64> %{{.*}} return _mm_maskz_cvtepi8_epi64(__U, __A); } __m256i test_mm256_mask_cvtepi8_epi64(__m256i __W, __mmask8 __U, __m128i __A) { - // CHECK-LABEL: @test_mm256_mask_cvtepi8_epi64 + // CHECK-LABEL: test_mm256_mask_cvtepi8_epi64 // CHECK: sext <4 x i8> %{{.*}} to <4 x i64> // CHECK: select <4 x i1> %{{.*}}, <4 x i64> %{{.*}}, <4 x i64> %{{.*}} return _mm256_mask_cvtepi8_epi64(__W, __U, __A); } __m256i test_mm256_maskz_cvtepi8_epi64(__mmask8 __U, __m128i __A) { - // CHECK-LABEL: @test_mm256_maskz_cvtepi8_epi64 + // CHECK-LABEL: test_mm256_maskz_cvtepi8_epi64 // CHECK: sext <4 x i8> %{{.*}} to <4 x i64> // CHECK: select <4 x i1> %{{.*}}, <4 x i64> %{{.*}}, <4 x i64> %{{.*}} return _mm256_maskz_cvtepi8_epi64(__U, __A); } __m128i test_mm_mask_cvtepi32_epi64(__m128i __W, __mmask8 __U, __m128i __X) { - // CHECK-LABEL: @test_mm_mask_cvtepi32_epi64 + // CHECK-LABEL: test_mm_mask_cvtepi32_epi64 // CHECK: sext <2 x i32> %{{.*}} to <2 x i64> // CHECK: select <2 x i1> %{{.*}}, <2 x i64> %{{.*}}, <2 x i64> %{{.*}} return _mm_mask_cvtepi32_epi64(__W, __U, __X); } __m128i test_mm_maskz_cvtepi32_epi64(__mmask8 __U, __m128i __X) { - // CHECK-LABEL: @test_mm_maskz_cvtepi32_epi64 + // CHECK-LABEL: test_mm_maskz_cvtepi32_epi64 // CHECK: sext <2 x i32> %{{.*}} to <2 x i64> // CHECK: select <2 x i1> %{{.*}}, <2 x i64> %{{.*}}, <2 x i64> %{{.*}} return _mm_maskz_cvtepi32_epi64(__U, __X); } __m256i test_mm256_mask_cvtepi32_epi64(__m256i __W, __mmask8 __U, __m128i __X) { - // CHECK-LABEL: @test_mm256_mask_cvtepi32_epi64 + // CHECK-LABEL: test_mm256_mask_cvtepi32_epi64 // CHECK: sext <4 x i32> %{{.*}} to <4 x i64> // CHECK: select <4 x i1> %{{.*}}, <4 x i64> %{{.*}}, <4 x i64> %{{.*}} return _mm256_mask_cvtepi32_epi64(__W, __U, __X); } __m256i test_mm256_maskz_cvtepi32_epi64(__mmask8 __U, __m128i __X) { - // CHECK-LABEL: @test_mm256_maskz_cvtepi32_epi64 + // CHECK-LABEL: test_mm256_maskz_cvtepi32_epi64 // CHECK: sext <4 x i32> %{{.*}} to <4 x i64> // CHECK: select <4 x i1> %{{.*}}, <4 x i64> %{{.*}}, <4 x i64> %{{.*}} return _mm256_maskz_cvtepi32_epi64(__U, __X); } __m128i test_mm_mask_cvtepi16_epi32(__m128i __W, __mmask8 __U, __m128i __A) { - // CHECK-LABEL: @test_mm_mask_cvtepi16_epi32 + // CHECK-LABEL: test_mm_mask_cvtepi16_epi32 // CHECK: sext <4 x i16> %{{.*}} to <4 x i32> // CHECK: select <4 x i1> %{{.*}}, <4 x i32> %{{.*}}, <4 x i32> %{{.*}} return _mm_mask_cvtepi16_epi32(__W, __U, __A); } __m128i test_mm_maskz_cvtepi16_epi32(__mmask8 __U, __m128i __A) { - // CHECK-LABEL: @test_mm_maskz_cvtepi16_epi32 + // CHECK-LABEL: test_mm_maskz_cvtepi16_epi32 // CHECK: sext <4 x i16> %{{.*}} to <4 x i32> // CHECK: select <4 x i1> %{{.*}}, <4 x i32> %{{.*}}, <4 x i32> %{{.*}} return _mm_maskz_cvtepi16_epi32(__U, __A); } __m256i test_mm256_mask_cvtepi16_epi32(__m256i __W, __mmask8 __U, __m128i __A) { - // CHECK-LABEL: @test_mm256_mask_cvtepi16_epi32 + // CHECK-LABEL: test_mm256_mask_cvtepi16_epi32 // CHECK: sext <8 x i16> %{{.*}} to <8 x i32> // CHECK: select <8 x i1> %{{.*}}, <8 x i32> %{{.*}}, <8 x i32> %{{.*}} return _mm256_mask_cvtepi16_epi32(__W, __U, __A); } __m256i test_mm256_maskz_cvtepi16_epi32(__mmask8 __U, __m128i __A) { - // CHECK-LABEL: @test_mm256_maskz_cvtepi16_epi32 + // CHECK-LABEL: test_mm256_maskz_cvtepi16_epi32 // CHECK: sext <8 x i16> %{{.*}} to <8 x i32> // CHECK: select <8 x i1> %{{.*}}, <8 x i32> %{{.*}}, <8 x i32> %{{.*}} return _mm256_maskz_cvtepi16_epi32(__U, __A); } __m128i test_mm_mask_cvtepi16_epi64(__m128i __W, __mmask8 __U, __m128i __A) { - // CHECK-LABEL: @test_mm_mask_cvtepi16_epi64 + // CHECK-LABEL: test_mm_mask_cvtepi16_epi64 // CHECK: sext <2 x i16> %{{.*}} to <2 x i64> // CHECK: select <2 x i1> %{{.*}}, <2 x i64> %{{.*}}, <2 x i64> %{{.*}} return _mm_mask_cvtepi16_epi64(__W, __U, __A); } __m128i test_mm_maskz_cvtepi16_epi64(__mmask8 __U, __m128i __A) { - // CHECK-LABEL: @test_mm_maskz_cvtepi16_epi64 + // CHECK-LABEL: test_mm_maskz_cvtepi16_epi64 // CHECK: sext <2 x i16> %{{.*}} to <2 x i64> // CHECK: select <2 x i1> %{{.*}}, <2 x i64> %{{.*}}, <2 x i64> %{{.*}} return _mm_maskz_cvtepi16_epi64(__U, __A); } __m256i test_mm256_mask_cvtepi16_epi64(__m256i __W, __mmask8 __U, __m128i __A) { - // CHECK-LABEL: @test_mm256_mask_cvtepi16_epi64 + // CHECK-LABEL: test_mm256_mask_cvtepi16_epi64 // CHECK: sext <4 x i16> %{{.*}} to <4 x i64> // CHECK: select <4 x i1> %{{.*}}, <4 x i64> %{{.*}}, <4 x i64> %{{.*}} return _mm256_mask_cvtepi16_epi64(__W, __U, __A); } __m256i test_mm256_maskz_cvtepi16_epi64(__mmask8 __U, __m128i __A) { - // CHECK-LABEL: @test_mm256_maskz_cvtepi16_epi64 + // CHECK-LABEL: test_mm256_maskz_cvtepi16_epi64 // CHECK: sext <4 x i16> %{{.*}} to <4 x i64> // CHECK: select <4 x i1> %{{.*}}, <4 x i64> %{{.*}}, <4 x i64> %{{.*}} return _mm256_maskz_cvtepi16_epi64(__U, __A); } __m128i test_mm_mask_cvtepu8_epi32(__m128i __W, __mmask8 __U, __m128i __A) { - // CHECK-LABEL: @test_mm_mask_cvtepu8_epi32 + // CHECK-LABEL: test_mm_mask_cvtepu8_epi32 // CHECK: zext <4 x i8> %{{.*}} to <4 x i32> // CHECK: select <4 x i1> %{{.*}}, <4 x i32> %{{.*}}, <4 x i32> %{{.*}} return _mm_mask_cvtepu8_epi32(__W, __U, __A); } __m128i test_mm_maskz_cvtepu8_epi32(__mmask8 __U, __m128i __A) { - // CHECK-LABEL: @test_mm_maskz_cvtepu8_epi32 + // CHECK-LABEL: test_mm_maskz_cvtepu8_epi32 // CHECK: zext <4 x i8> %{{.*}} to <4 x i32> // CHECK: select <4 x i1> %{{.*}}, <4 x i32> %{{.*}}, <4 x i32> %{{.*}} return _mm_maskz_cvtepu8_epi32(__U, __A); } __m256i test_mm256_mask_cvtepu8_epi32(__m256i __W, __mmask8 __U, __m128i __A) { - // CHECK-LABEL: @test_mm256_mask_cvtepu8_epi32 + // CHECK-LABEL: test_mm256_mask_cvtepu8_epi32 // CHECK: zext <8 x i8> %{{.*}} to <8 x i32> // CHECK: select <8 x i1> %{{.*}}, <8 x i32> %{{.*}}, <8 x i32> %{{.*}} return _mm256_mask_cvtepu8_epi32(__W, __U, __A); } __m256i test_mm256_maskz_cvtepu8_epi32(__mmask8 __U, __m128i __A) { - // CHECK-LABEL: @test_mm256_maskz_cvtepu8_epi32 + // CHECK-LABEL: test_mm256_maskz_cvtepu8_epi32 // CHECK: zext <8 x i8> %{{.*}} to <8 x i32> // CHECK: select <8 x i1> %{{.*}}, <8 x i32> %{{.*}}, <8 x i32> %{{.*}} return _mm256_maskz_cvtepu8_epi32(__U, __A); } __m128i test_mm_mask_cvtepu8_epi64(__m128i __W, __mmask8 __U, __m128i __A) { - // CHECK-LABEL: @test_mm_mask_cvtepu8_epi64 + // CHECK-LABEL: test_mm_mask_cvtepu8_epi64 // CHECK: zext <2 x i8> %{{.*}} to <2 x i64> // CHECK: select <2 x i1> %{{.*}}, <2 x i64> %{{.*}}, <2 x i64> %{{.*}} return _mm_mask_cvtepu8_epi64(__W, __U, __A); } __m128i test_mm_maskz_cvtepu8_epi64(__mmask8 __U, __m128i __A) { - // CHECK-LABEL: @test_mm_maskz_cvtepu8_epi64 + // CHECK-LABEL: test_mm_maskz_cvtepu8_epi64 // CHECK: zext <2 x i8> %{{.*}} to <2 x i64> // CHECK: select <2 x i1> %{{.*}}, <2 x i64> %{{.*}}, <2 x i64> %{{.*}} return _mm_maskz_cvtepu8_epi64(__U, __A); } __m256i test_mm256_mask_cvtepu8_epi64(__m256i __W, __mmask8 __U, __m128i __A) { - // CHECK-LABEL: @test_mm256_mask_cvtepu8_epi64 + // CHECK-LABEL: test_mm256_mask_cvtepu8_epi64 // CHECK: zext <4 x i8> %{{.*}} to <4 x i64> // CHECK: select <4 x i1> %{{.*}}, <4 x i64> %{{.*}}, <4 x i64> %{{.*}} return _mm256_mask_cvtepu8_epi64(__W, __U, __A); } __m256i test_mm256_maskz_cvtepu8_epi64(__mmask8 __U, __m128i __A) { - // CHECK-LABEL: @test_mm256_maskz_cvtepu8_epi64 + // CHECK-LABEL: test_mm256_maskz_cvtepu8_epi64 // CHECK: zext <4 x i8> %{{.*}} to <4 x i64> // CHECK: select <4 x i1> %{{.*}}, <4 x i64> %{{.*}}, <4 x i64> %{{.*}} return _mm256_maskz_cvtepu8_epi64(__U, __A); } __m128i test_mm_mask_cvtepu32_epi64(__m128i __W, __mmask8 __U, __m128i __X) { - // CHECK-LABEL: @test_mm_mask_cvtepu32_epi64 + // CHECK-LABEL: test_mm_mask_cvtepu32_epi64 // CHECK: zext <2 x i32> %{{.*}} to <2 x i64> // CHECK: select <2 x i1> %{{.*}}, <2 x i64> %{{.*}}, <2 x i64> %{{.*}} return _mm_mask_cvtepu32_epi64(__W, __U, __X); } __m128i test_mm_maskz_cvtepu32_epi64(__mmask8 __U, __m128i __X) { - // CHECK-LABEL: @test_mm_maskz_cvtepu32_epi64 + // CHECK-LABEL: test_mm_maskz_cvtepu32_epi64 // CHECK: zext <2 x i32> %{{.*}} to <2 x i64> // CHECK: select <2 x i1> %{{.*}}, <2 x i64> %{{.*}}, <2 x i64> %{{.*}} return _mm_maskz_cvtepu32_epi64(__U, __X); } __m256i test_mm256_mask_cvtepu32_epi64(__m256i __W, __mmask8 __U, __m128i __X) { - // CHECK-LABEL: @test_mm256_mask_cvtepu32_epi64 + // CHECK-LABEL: test_mm256_mask_cvtepu32_epi64 // CHECK: zext <4 x i32> %{{.*}} to <4 x i64> // CHECK: select <4 x i1> %{{.*}}, <4 x i64> %{{.*}}, <4 x i64> %{{.*}} return _mm256_mask_cvtepu32_epi64(__W, __U, __X); } __m256i test_mm256_maskz_cvtepu32_epi64(__mmask8 __U, __m128i __X) { - // CHECK-LABEL: @test_mm256_maskz_cvtepu32_epi64 + // CHECK-LABEL: test_mm256_maskz_cvtepu32_epi64 // CHECK: zext <4 x i32> %{{.*}} to <4 x i64> // CHECK: select <4 x i1> %{{.*}}, <4 x i64> %{{.*}}, <4 x i64> %{{.*}} return _mm256_maskz_cvtepu32_epi64(__U, __X); } __m128i test_mm_mask_cvtepu16_epi32(__m128i __W, __mmask8 __U, __m128i __A) { - // CHECK-LABEL: @test_mm_mask_cvtepu16_epi32 + // CHECK-LABEL: test_mm_mask_cvtepu16_epi32 // CHECK: zext <4 x i16> %{{.*}} to <4 x i32> // CHECK: select <4 x i1> %{{.*}}, <4 x i32> %{{.*}}, <4 x i32> %{{.*}} return _mm_mask_cvtepu16_epi32(__W, __U, __A); } __m128i test_mm_maskz_cvtepu16_epi32(__mmask8 __U, __m128i __A) { - // CHECK-LABEL: @test_mm_maskz_cvtepu16_epi32 + // CHECK-LABEL: test_mm_maskz_cvtepu16_epi32 // CHECK: zext <4 x i16> %{{.*}} to <4 x i32> // CHECK: select <4 x i1> %{{.*}}, <4 x i32> %{{.*}}, <4 x i32> %{{.*}} return _mm_maskz_cvtepu16_epi32(__U, __A); } __m256i test_mm256_mask_cvtepu16_epi32(__m256i __W, __mmask8 __U, __m128i __A) { - // CHECK-LABEL: @test_mm256_mask_cvtepu16_epi32 + // CHECK-LABEL: test_mm256_mask_cvtepu16_epi32 // CHECK: zext <8 x i16> %{{.*}} to <8 x i32> // CHECK: select <8 x i1> %{{.*}}, <8 x i32> %{{.*}}, <8 x i32> %{{.*}} return _mm256_mask_cvtepu16_epi32(__W, __U, __A); } __m256i test_mm256_maskz_cvtepu16_epi32(__mmask8 __U, __m128i __A) { - // CHECK-LABEL: @test_mm256_maskz_cvtepu16_epi32 + // CHECK-LABEL: test_mm256_maskz_cvtepu16_epi32 // CHECK: zext <8 x i16> %{{.*}} to <8 x i32> // CHECK: select <8 x i1> %{{.*}}, <8 x i32> %{{.*}}, <8 x i32> %{{.*}} return _mm256_maskz_cvtepu16_epi32(__U, __A); } __m128i test_mm_mask_cvtepu16_epi64(__m128i __W, __mmask8 __U, __m128i __A) { - // CHECK-LABEL: @test_mm_mask_cvtepu16_epi64 + // CHECK-LABEL: test_mm_mask_cvtepu16_epi64 // CHECK: zext <2 x i16> %{{.*}} to <2 x i64> // CHECK: select <2 x i1> %{{.*}}, <2 x i64> %{{.*}}, <2 x i64> %{{.*}} return _mm_mask_cvtepu16_epi64(__W, __U, __A); } __m128i test_mm_maskz_cvtepu16_epi64(__mmask8 __U, __m128i __A) { - // CHECK-LABEL: @test_mm_maskz_cvtepu16_epi64 + // CHECK-LABEL: test_mm_maskz_cvtepu16_epi64 // CHECK: zext <2 x i16> %{{.*}} to <2 x i64> // CHECK: select <2 x i1> %{{.*}}, <2 x i64> %{{.*}}, <2 x i64> %{{.*}} return _mm_maskz_cvtepu16_epi64(__U, __A); } __m256i test_mm256_mask_cvtepu16_epi64(__m256i __W, __mmask8 __U, __m128i __A) { - // CHECK-LABEL: @test_mm256_mask_cvtepu16_epi64 + // CHECK-LABEL: test_mm256_mask_cvtepu16_epi64 // CHECK: zext <4 x i16> %{{.*}} to <4 x i64> // CHECK: select <4 x i1> %{{.*}}, <4 x i64> %{{.*}}, <4 x i64> %{{.*}} return _mm256_mask_cvtepu16_epi64(__W, __U, __A); } __m256i test_mm256_maskz_cvtepu16_epi64(__mmask8 __U, __m128i __A) { - // CHECK-LABEL: @test_mm256_maskz_cvtepu16_epi64 + // CHECK-LABEL: test_mm256_maskz_cvtepu16_epi64 // CHECK: zext <4 x i16> %{{.*}} to <4 x i64> // CHECK: select <4 x i1> %{{.*}}, <4 x i64> %{{.*}}, <4 x i64> %{{.*}} return _mm256_maskz_cvtepu16_epi64(__U, __A); } __m128i test_mm_rol_epi32(__m128i __A) { - // CHECK-LABEL: @test_mm_rol_epi32 + // CHECK-LABEL: test_mm_rol_epi32 // CHECK: @llvm.fshl.v4i32 return _mm_rol_epi32(__A, 5); } +TEST_CONSTEXPR(match_v4si(_mm_rol_epi32(((__m128i)(__v4si){1, -2, 3, -4}), 5), 32, -33, 96, -97)); __m128i test_mm_mask_rol_epi32(__m128i __W, __mmask8 __U, __m128i __A) { - // CHECK-LABEL: @test_mm_mask_rol_epi32 + // CHECK-LABEL: test_mm_mask_rol_epi32 // CHECK: @llvm.fshl.v4i32 // CHECK: select <4 x i1> %{{.*}}, <4 x i32> %{{.*}}, <4 x i32> %{{.*}} return _mm_mask_rol_epi32(__W, __U, __A, 5); } +TEST_CONSTEXPR(match_v4si(_mm_mask_rol_epi32(((__m128i)(__v4si){99, 99, 99, 99}), 0x3, ((__m128i)(__v4si){1, -2, 3, -4}), 5), 32, -33, 99, 99)); __m128i test_mm_maskz_rol_epi32(__mmask8 __U, __m128i __A) { - // CHECK-LABEL: @test_mm_maskz_rol_epi32 + // CHECK-LABEL: test_mm_maskz_rol_epi32 // CHECK: @llvm.fshl.v4i32 // CHECK: select <4 x i1> %{{.*}}, <4 x i32> %{{.*}}, <4 x i32> %{{.*}} return _mm_maskz_rol_epi32(__U, __A, 5); } +TEST_CONSTEXPR(match_v4si(_mm_maskz_rol_epi32(0x9, ((__m128i)(__v4si){1, -2, 3, -4}), 5), 32, 0, 0, -97)); __m256i test_mm256_rol_epi32(__m256i __A) { - // CHECK-LABEL: @test_mm256_rol_epi32 + // CHECK-LABEL: test_mm256_rol_epi32 // CHECK: @llvm.fshl.v8i32 return _mm256_rol_epi32(__A, 5); } +TEST_CONSTEXPR(match_v8si(_mm256_rol_epi32(((__m256i)(__v8si){1, -2, 3, -4, -5, 6, -7, 8}), 5), 32, -33, 96, -97, -129, 192, -193, 256)); __m256i test_mm256_mask_rol_epi32(__m256i __W, __mmask8 __U, __m256i __A) { - // CHECK-LABEL: @test_mm256_mask_rol_epi32 + // CHECK-LABEL: test_mm256_mask_rol_epi32 // CHECK: @llvm.fshl.v8i32 // CHECK: select <8 x i1> %{{.*}}, <8 x i32> %{{.*}}, <8 x i32> %{{.*}} return _mm256_mask_rol_epi32(__W, __U, __A, 5); } +TEST_CONSTEXPR(match_v8si(_mm256_mask_rol_epi32(((__m256i)(__v8si){99, 99, 99, 99, 99, 99, 99, 99}), 0x73, ((__m256i)(__v8si){1, -2, 3, -4, -5, 6, -7, 8}), 5), 32, -33, 99, 99, -129, 192, -193, 99)); __m256i test_mm256_maskz_rol_epi32(__mmask8 __U, __m256i __A) { - // CHECK-LABEL: @test_mm256_maskz_rol_epi32 + // CHECK-LABEL: test_mm256_maskz_rol_epi32 // CHECK: @llvm.fshl.v8i32 // CHECK: select <8 x i1> %{{.*}}, <8 x i32> %{{.*}}, <8 x i32> %{{.*}} return _mm256_maskz_rol_epi32(__U, __A, 5); } +TEST_CONSTEXPR(match_v8si(_mm256_maskz_rol_epi32(0x37, ((__m256i)(__v8si){1, -2, 3, -4, -5, 6, -7, 8}), 5), 32, -33, 96, 0, -129, 192, 0, 0)); __m128i test_mm_rol_epi64(__m128i __A) { - // CHECK-LABEL: @test_mm_rol_epi64 + // CHECK-LABEL: test_mm_rol_epi64 // CHECK: @llvm.fshl.v2i64 return _mm_rol_epi64(__A, 5); } +TEST_CONSTEXPR(match_v2di(_mm_rol_epi64(((__m128i)(__v2di){10, -11}), 19), 5242880, -5242881)); __m128i test_mm_mask_rol_epi64(__m128i __W, __mmask8 __U, __m128i __A) { - // CHECK-LABEL: @test_mm_mask_rol_epi64 + // CHECK-LABEL: test_mm_mask_rol_epi64 // CHECK: @llvm.fshl.v2i64 // CHECK: select <2 x i1> %{{.*}}, <2 x i64> %{{.*}}, <2 x i64> %{{.*}} return _mm_mask_rol_epi64(__W, __U, __A, 5); } +TEST_CONSTEXPR(match_v2di(_mm_mask_rol_epi64(((__m128i)(__v2di){99, 99}), 0x1, ((__m128i)(__v2di){10, -11}), 19), 5242880, 99)); __m128i test_mm_maskz_rol_epi64(__mmask8 __U, __m128i __A) { - // CHECK-LABEL: @test_mm_maskz_rol_epi64 + // CHECK-LABEL: test_mm_maskz_rol_epi64 // CHECK: @llvm.fshl.v2i64 // CHECK: select <2 x i1> %{{.*}}, <2 x i64> %{{.*}}, <2 x i64> %{{.*}} return _mm_maskz_rol_epi64(__U, __A, 5); } +TEST_CONSTEXPR(match_v2di(_mm_maskz_rol_epi64(0x2, ((__m128i)(__v2di){10, -11}), 19), 0, -5242881)); __m256i test_mm256_rol_epi64(__m256i __A) { - // CHECK-LABEL: @test_mm256_rol_epi64 + // CHECK-LABEL: test_mm256_rol_epi64 // CHECK: @llvm.fshl.v4i64 return _mm256_rol_epi64(__A, 5); } +TEST_CONSTEXPR(match_v4di(_mm256_rol_epi64(((__m256i)(__v4di){10, -11, -12, 13}), 19), 5242880, -5242881, -5767169, 6815744)); __m256i test_mm256_mask_rol_epi64(__m256i __W, __mmask8 __U, __m256i __A) { - // CHECK-LABEL: @test_mm256_mask_rol_epi64 + // CHECK-LABEL: test_mm256_mask_rol_epi64 // CHECK: @llvm.fshl.v4i64 // CHECK: select <4 x i1> %{{.*}}, <4 x i64> %{{.*}}, <4 x i64> %{{.*}} return _mm256_mask_rol_epi64(__W, __U, __A, 5); } +TEST_CONSTEXPR(match_v4di(_mm256_mask_rol_epi64(((__m256i)(__v4di){99, 99, 99, 99}), 0x9, ((__m256i)(__v4di){10, -11, -12, 13}), 19), 5242880, 99, 99, 6815744)); __m256i test_mm256_maskz_rol_epi64(__mmask8 __U, __m256i __A) { - // CHECK-LABEL: @test_mm256_maskz_rol_epi64 + // CHECK-LABEL: test_mm256_maskz_rol_epi64 // CHECK: @llvm.fshl.v4i64 // CHECK: select <4 x i1> %{{.*}}, <4 x i64> %{{.*}}, <4 x i64> %{{.*}} return _mm256_maskz_rol_epi64(__U, __A, 5); } +TEST_CONSTEXPR(match_v4di(_mm256_maskz_rol_epi64(0xC, ((__m256i)(__v4di){10, -11, -12, 13}), 19), 0, 0, -5767169, 6815744)); __m128i test_mm_rolv_epi32(__m128i __A, __m128i __B) { - // CHECK-LABEL: @test_mm_rolv_epi32 + // CHECK-LABEL: test_mm_rolv_epi32 // CHECK: llvm.fshl.v4i32 return _mm_rolv_epi32(__A, __B); } __m128i test_mm_mask_rolv_epi32(__m128i __W, __mmask8 __U, __m128i __A, __m128i __B) { - // CHECK-LABEL: @test_mm_mask_rolv_epi32 + // CHECK-LABEL: test_mm_mask_rolv_epi32 // CHECK: llvm.fshl.v4i32 // CHECK: select <4 x i1> %{{.*}}, <4 x i32> %{{.*}}, <4 x i32> %{{.*}} return _mm_mask_rolv_epi32(__W, __U, __A, __B); } __m128i test_mm_maskz_rolv_epi32(__mmask8 __U, __m128i __A, __m128i __B) { - // CHECK-LABEL: @test_mm_maskz_rolv_epi32 + // CHECK-LABEL: test_mm_maskz_rolv_epi32 // CHECK: llvm.fshl.v4i32 // CHECK: select <4 x i1> %{{.*}}, <4 x i32> %{{.*}}, <4 x i32> %{{.*}} return _mm_maskz_rolv_epi32(__U, __A, __B); } __m256i test_mm256_rolv_epi32(__m256i __A, __m256i __B) { - // CHECK-LABEL: @test_mm256_rolv_epi32 + // CHECK-LABEL: test_mm256_rolv_epi32 // CHECK: @llvm.fshl.v8i32 return _mm256_rolv_epi32(__A, __B); } __m256i test_mm256_mask_rolv_epi32(__m256i __W, __mmask8 __U, __m256i __A, __m256i __B) { - // CHECK-LABEL: @test_mm256_mask_rolv_epi32 + // CHECK-LABEL: test_mm256_mask_rolv_epi32 // CHECK: @llvm.fshl.v8i32 // CHECK: select <8 x i1> %{{.*}}, <8 x i32> %{{.*}}, <8 x i32> %{{.*}} return _mm256_mask_rolv_epi32(__W, __U, __A, __B); } __m256i test_mm256_maskz_rolv_epi32(__mmask8 __U, __m256i __A, __m256i __B) { - // CHECK-LABEL: @test_mm256_maskz_rolv_epi32 + // CHECK-LABEL: test_mm256_maskz_rolv_epi32 // CHECK: @llvm.fshl.v8i32 // CHECK: select <8 x i1> %{{.*}}, <8 x i32> %{{.*}}, <8 x i32> %{{.*}} return _mm256_maskz_rolv_epi32(__U, __A, __B); } __m128i test_mm_rolv_epi64(__m128i __A, __m128i __B) { - // CHECK-LABEL: @test_mm_rolv_epi64 + // CHECK-LABEL: test_mm_rolv_epi64 // CHECK: @llvm.fshl.v2i64 return _mm_rolv_epi64(__A, __B); } __m128i test_mm_mask_rolv_epi64(__m128i __W, __mmask8 __U, __m128i __A, __m128i __B) { - // CHECK-LABEL: @test_mm_mask_rolv_epi64 + // CHECK-LABEL: test_mm_mask_rolv_epi64 // CHECK: @llvm.fshl.v2i64 // CHECK: select <2 x i1> %{{.*}}, <2 x i64> %{{.*}}, <2 x i64> %{{.*}} return _mm_mask_rolv_epi64(__W, __U, __A, __B); } __m128i test_mm_maskz_rolv_epi64(__mmask8 __U, __m128i __A, __m128i __B) { - // CHECK-LABEL: @test_mm_maskz_rolv_epi64 + // CHECK-LABEL: test_mm_maskz_rolv_epi64 // CHECK: @llvm.fshl.v2i64 // CHECK: select <2 x i1> %{{.*}}, <2 x i64> %{{.*}}, <2 x i64> %{{.*}} return _mm_maskz_rolv_epi64(__U, __A, __B); } __m256i test_mm256_rolv_epi64(__m256i __A, __m256i __B) { - // CHECK-LABEL: @test_mm256_rolv_epi64 + // CHECK-LABEL: test_mm256_rolv_epi64 // CHECK: @llvm.fshl.v4i64 return _mm256_rolv_epi64(__A, __B); } __m256i test_mm256_mask_rolv_epi64(__m256i __W, __mmask8 __U, __m256i __A, __m256i __B) { - // CHECK-LABEL: @test_mm256_mask_rolv_epi64 + // CHECK-LABEL: test_mm256_mask_rolv_epi64 // CHECK: @llvm.fshl.v4i64 // CHECK: select <4 x i1> %{{.*}}, <4 x i64> %{{.*}}, <4 x i64> %{{.*}} return _mm256_mask_rolv_epi64(__W, __U, __A, __B); } __m256i test_mm256_maskz_rolv_epi64(__mmask8 __U, __m256i __A, __m256i __B) { - // CHECK-LABEL: @test_mm256_maskz_rolv_epi64 + // CHECK-LABEL: test_mm256_maskz_rolv_epi64 // CHECK: @llvm.fshl.v4i64 // CHECK: select <4 x i1> %{{.*}}, <4 x i64> %{{.*}}, <4 x i64> %{{.*}} return _mm256_maskz_rolv_epi64(__U, __A, __B); } __m128i test_mm_ror_epi32(__m128i __A) { - // CHECK-LABEL: @test_mm_ror_epi32 + // CHECK-LABEL: test_mm_ror_epi32 // CHECK: @llvm.fshr.v4i32 return _mm_ror_epi32(__A, 5); } +TEST_CONSTEXPR(match_v4si(_mm_ror_epi32(((__m128i)(__v4si){1, -2, 3, -4}), 5), 134217728, -134217729, 402653184, -402653185)); __m128i test_mm_mask_ror_epi32(__m128i __W, __mmask8 __U, __m128i __A) { - // CHECK-LABEL: @test_mm_mask_ror_epi32 + // CHECK-LABEL: test_mm_mask_ror_epi32 // CHECK: @llvm.fshr.v4i32 // CHECK: select <4 x i1> %{{.*}}, <4 x i32> %{{.*}}, <4 x i32> %{{.*}} return _mm_mask_ror_epi32(__W, __U, __A, 5); } +TEST_CONSTEXPR(match_v4si(_mm_mask_ror_epi32(((__m128i)(__v4si){99, 99, 99, 99}), 0x3, ((__m128i)(__v4si){1, -2, 3, -4}), 5), 134217728, -134217729, 99, 99)); __m128i test_mm_maskz_ror_epi32(__mmask8 __U, __m128i __A) { - // CHECK-LABEL: @test_mm_maskz_ror_epi32 + // CHECK-LABEL: test_mm_maskz_ror_epi32 // CHECK: @llvm.fshr.v4i32 // CHECK: select <4 x i1> %{{.*}}, <4 x i32> %{{.*}}, <4 x i32> %{{.*}} return _mm_maskz_ror_epi32(__U, __A, 5); } +TEST_CONSTEXPR(match_v4si(_mm_maskz_ror_epi32(0x9, ((__m128i)(__v4si){1, -2, 3, -4}), 5), 134217728, 0, 0, -402653185)); __m256i test_mm256_ror_epi32(__m256i __A) { - // CHECK-LABEL: @test_mm256_ror_epi32 + // CHECK-LABEL: test_mm256_ror_epi32 // CHECK: @llvm.fshr.v8i32 return _mm256_ror_epi32(__A, 5); } +TEST_CONSTEXPR(match_v8si(_mm256_ror_epi32(((__m256i)(__v8si){1, -2, 3, -4, -5, 6, -7, 8}), 5), 134217728, -134217729, 402653184, -402653185, -536870913, 805306368, -805306369, 1073741824)); __m256i test_mm256_mask_ror_epi32(__m256i __W, __mmask8 __U, __m256i __A) { - // CHECK-LABEL: @test_mm256_mask_ror_epi32 + // CHECK-LABEL: test_mm256_mask_ror_epi32 // CHECK: @llvm.fshr.v8i32 // CHECK: select <8 x i1> %{{.*}}, <8 x i32> %{{.*}}, <8 x i32> %{{.*}} return _mm256_mask_ror_epi32(__W, __U, __A, 5); } +TEST_CONSTEXPR(match_v8si(_mm256_mask_ror_epi32(((__m256i)(__v8si){99, 99, 99, 99, 99, 99, 99, 99}), 0x73, ((__m256i)(__v8si){1, -2, 3, -4, -5, 6, -7, 8}), 5), 134217728, -134217729, 99, 99, -536870913, 805306368, -805306369, 99)); __m256i test_mm256_maskz_ror_epi32(__mmask8 __U, __m256i __A) { - // CHECK-LABEL: @test_mm256_maskz_ror_epi32 + // CHECK-LABEL: test_mm256_maskz_ror_epi32 // CHECK: @llvm.fshr.v8i32 // CHECK: select <8 x i1> %{{.*}}, <8 x i32> %{{.*}}, <8 x i32> %{{.*}} return _mm256_maskz_ror_epi32(__U, __A, 5); } +TEST_CONSTEXPR(match_v8si(_mm256_maskz_ror_epi32(0x37, ((__m256i)(__v8si){1, -2, 3, -4, -5, 6, -7, 8}), 5), 134217728, -134217729, 402653184, 0, -536870913, 805306368, 0, 0)); __m128i test_mm_ror_epi64(__m128i __A) { - // CHECK-LABEL: @test_mm_ror_epi64 + // CHECK-LABEL: test_mm_ror_epi64 // CHECK: @llvm.fshr.v2i64 return _mm_ror_epi64(__A, 5); } +TEST_CONSTEXPR(match_v2di(_mm_ror_epi64(((__m128i)(__v2di){10, -11}), 19), 351843720888320LL, -351843720888321LL)); __m128i test_mm_mask_ror_epi64(__m128i __W, __mmask8 __U, __m128i __A) { - // CHECK-LABEL: @test_mm_mask_ror_epi64 + // CHECK-LABEL: test_mm_mask_ror_epi64 // CHECK: @llvm.fshr.v2i64 // CHECK: select <2 x i1> %{{.*}}, <2 x i64> %{{.*}}, <2 x i64> %{{.*}} return _mm_mask_ror_epi64(__W, __U, __A, 5); } +TEST_CONSTEXPR(match_v2di(_mm_mask_ror_epi64(((__m128i)(__v2di){99, 99}), 0x1, ((__m128i)(__v2di){10, -11}), 19), 351843720888320LL, 99)); __m128i test_mm_maskz_ror_epi64(__mmask8 __U, __m128i __A) { - // CHECK-LABEL: @test_mm_maskz_ror_epi64 + // CHECK-LABEL: test_mm_maskz_ror_epi64 // CHECK: @llvm.fshr.v2i64 // CHECK: select <2 x i1> %{{.*}}, <2 x i64> %{{.*}}, <2 x i64> %{{.*}} return _mm_maskz_ror_epi64(__U, __A, 5); } +TEST_CONSTEXPR(match_v2di(_mm_maskz_ror_epi64(0x2, ((__m128i)(__v2di){10, -11}), 19), 0, -351843720888321LL)); __m256i test_mm256_ror_epi64(__m256i __A) { - // CHECK-LABEL: @test_mm256_ror_epi64 + // CHECK-LABEL: test_mm256_ror_epi64 // CHECK: @llvm.fshr.v4i64 return _mm256_ror_epi64(__A, 5); } +TEST_CONSTEXPR(match_v4di(_mm256_ror_epi64(((__m256i)(__v4di){10, -11, -12, 13}), 19), 351843720888320LL, -351843720888321LL, -387028092977153LL, 457396837154816LL)); __m256i test_mm256_mask_ror_epi64(__m256i __W, __mmask8 __U, __m256i __A) { - // CHECK-LABEL: @test_mm256_mask_ror_epi64 + // CHECK-LABEL: test_mm256_mask_ror_epi64 // CHECK: @llvm.fshr.v4i64 // CHECK: select <4 x i1> %{{.*}}, <4 x i64> %{{.*}}, <4 x i64> %{{.*}} return _mm256_mask_ror_epi64(__W, __U, __A,5); } +TEST_CONSTEXPR(match_v4di(_mm256_mask_ror_epi64(((__m256i)(__v4di){99, 99, 99, 99}), 0x9, ((__m256i)(__v4di){10, -11, -12, 13}), 19), 351843720888320LL, 99, 99, 457396837154816LL)); __m256i test_mm256_maskz_ror_epi64(__mmask8 __U, __m256i __A) { - // CHECK-LABEL: @test_mm256_maskz_ror_epi64 + // CHECK-LABEL: test_mm256_maskz_ror_epi64 // CHECK: @llvm.fshr.v4i64 // CHECK: select <4 x i1> %{{.*}}, <4 x i64> %{{.*}}, <4 x i64> %{{.*}} return _mm256_maskz_ror_epi64(__U, __A, 5); } - +TEST_CONSTEXPR(match_v4di(_mm256_maskz_ror_epi64(0xC, ((__m256i)(__v4di){10, -11, -12, 13}), 19), 0, 0, -387028092977153LL, 457396837154816LL)); __m128i test_mm_rorv_epi32(__m128i __A, __m128i __B) { - // CHECK-LABEL: @test_mm_rorv_epi32 + // CHECK-LABEL: test_mm_rorv_epi32 // CHECK: @llvm.fshr.v4i32 return _mm_rorv_epi32(__A, __B); } __m128i test_mm_mask_rorv_epi32(__m128i __W, __mmask8 __U, __m128i __A, __m128i __B) { - // CHECK-LABEL: @test_mm_mask_rorv_epi32 + // CHECK-LABEL: test_mm_mask_rorv_epi32 // CHECK: @llvm.fshr.v4i32 // CHECK: select <4 x i1> %{{.*}}, <4 x i32> %{{.*}}, <4 x i32> %{{.*}} return _mm_mask_rorv_epi32(__W, __U, __A, __B); } __m128i test_mm_maskz_rorv_epi32(__mmask8 __U, __m128i __A, __m128i __B) { - // CHECK-LABEL: @test_mm_maskz_rorv_epi32 + // CHECK-LABEL: test_mm_maskz_rorv_epi32 // CHECK: @llvm.fshr.v4i32 // CHECK: select <4 x i1> %{{.*}}, <4 x i32> %{{.*}}, <4 x i32> %{{.*}} return _mm_maskz_rorv_epi32(__U, __A, __B); } __m256i test_mm256_rorv_epi32(__m256i __A, __m256i __B) { - // CHECK-LABEL: @test_mm256_rorv_epi32 + // CHECK-LABEL: test_mm256_rorv_epi32 // CHECK: @llvm.fshr.v8i32 return _mm256_rorv_epi32(__A, __B); } __m256i test_mm256_mask_rorv_epi32(__m256i __W, __mmask8 __U, __m256i __A, __m256i __B) { - // CHECK-LABEL: @test_mm256_mask_rorv_epi32 + // CHECK-LABEL: test_mm256_mask_rorv_epi32 // CHECK: @llvm.fshr.v8i32 // CHECK: select <8 x i1> %{{.*}}, <8 x i32> %{{.*}}, <8 x i32> %{{.*}} return _mm256_mask_rorv_epi32(__W, __U, __A, __B); } __m256i test_mm256_maskz_rorv_epi32(__mmask8 __U, __m256i __A, __m256i __B) { - // CHECK-LABEL: @test_mm256_maskz_rorv_epi32 + // CHECK-LABEL: test_mm256_maskz_rorv_epi32 // CHECK: @llvm.fshr.v8i32 // CHECK: select <8 x i1> %{{.*}}, <8 x i32> %{{.*}}, <8 x i32> %{{.*}} return _mm256_maskz_rorv_epi32(__U, __A, __B); } __m128i test_mm_rorv_epi64(__m128i __A, __m128i __B) { - // CHECK-LABEL: @test_mm_rorv_epi64 + // CHECK-LABEL: test_mm_rorv_epi64 // CHECK: @llvm.fshr.v2i64 return _mm_rorv_epi64(__A, __B); } __m128i test_mm_mask_rorv_epi64(__m128i __W, __mmask8 __U, __m128i __A, __m128i __B) { - // CHECK-LABEL: @test_mm_mask_rorv_epi64 + // CHECK-LABEL: test_mm_mask_rorv_epi64 // CHECK: @llvm.fshr.v2i64 // CHECK: select <2 x i1> %{{.*}}, <2 x i64> %{{.*}}, <2 x i64> %{{.*}} return _mm_mask_rorv_epi64(__W, __U, __A, __B); } __m128i test_mm_maskz_rorv_epi64(__mmask8 __U, __m128i __A, __m128i __B) { - // CHECK-LABEL: @test_mm_maskz_rorv_epi64 + // CHECK-LABEL: test_mm_maskz_rorv_epi64 // CHECK: @llvm.fshr.v2i64 // CHECK: select <2 x i1> %{{.*}}, <2 x i64> %{{.*}}, <2 x i64> %{{.*}} return _mm_maskz_rorv_epi64(__U, __A, __B); } __m256i test_mm256_rorv_epi64(__m256i __A, __m256i __B) { - // CHECK-LABEL: @test_mm256_rorv_epi64 + // CHECK-LABEL: test_mm256_rorv_epi64 // CHECK: @llvm.fshr.v4i64 return _mm256_rorv_epi64(__A, __B); } __m256i test_mm256_mask_rorv_epi64(__m256i __W, __mmask8 __U, __m256i __A, __m256i __B) { - // CHECK-LABEL: @test_mm256_mask_rorv_epi64 + // CHECK-LABEL: test_mm256_mask_rorv_epi64 // CHECK: @llvm.fshr.v4i64 // CHECK: select <4 x i1> %{{.*}}, <4 x i64> %{{.*}}, <4 x i64> %{{.*}} return _mm256_mask_rorv_epi64(__W, __U, __A, __B); } __m256i test_mm256_maskz_rorv_epi64(__mmask8 __U, __m256i __A, __m256i __B) { - // CHECK-LABEL: @test_mm256_maskz_rorv_epi64 + // CHECK-LABEL: test_mm256_maskz_rorv_epi64 // CHECK: @llvm.fshr.v4i64 // CHECK: select <4 x i1> %{{.*}}, <4 x i64> %{{.*}}, <4 x i64> %{{.*}} return _mm256_maskz_rorv_epi64(__U, __A, __B); } __m128i test_mm_mask_sllv_epi64(__m128i __W, __mmask8 __U, __m128i __X, __m128i __Y) { - // CHECK-LABEL: @test_mm_mask_sllv_epi64 + // CHECK-LABEL: test_mm_mask_sllv_epi64 // CHECK: @llvm.x86.avx2.psllv.q // CHECK: select <2 x i1> %{{.*}}, <2 x i64> %{{.*}}, <2 x i64> %{{.*}} return _mm_mask_sllv_epi64(__W, __U, __X, __Y); } +TEST_CONSTEXPR(match_v2di(_mm_mask_sllv_epi64((__m128i)(__v2di){99, 99}, (__mmask8)0x1, (__m128i)(__v2di){1, -3}, (__m128i)(__v2di){8, 63}), 256, 99)); __m128i test_mm_maskz_sllv_epi64(__mmask8 __U, __m128i __X, __m128i __Y) { - // CHECK-LABEL: @test_mm_maskz_sllv_epi64 + // CHECK-LABEL: test_mm_maskz_sllv_epi64 // CHECK: @llvm.x86.avx2.psllv.q // CHECK: select <2 x i1> %{{.*}}, <2 x i64> %{{.*}}, <2 x i64> %{{.*}} return _mm_maskz_sllv_epi64(__U, __X, __Y); } +TEST_CONSTEXPR(match_m128i(_mm_maskz_sllv_epi64((__mmask8)0x2, (__m128i)(__v2di){1, -3}, (__m128i)(__v2di){8, 63}), 0, 0x8000000000000000ULL)); __m256i test_mm256_mask_sllv_epi64(__m256i __W, __mmask8 __U, __m256i __X, __m256i __Y) { - // CHECK-LABEL: @test_mm256_mask_sllv_epi64 + // CHECK-LABEL: test_mm256_mask_sllv_epi64 // CHECK: @llvm.x86.avx2.psllv.q.256 // CHECK: select <4 x i1> %{{.*}}, <4 x i64> %{{.*}}, <4 x i64> %{{.*}} return _mm256_mask_sllv_epi64(__W, __U, __X, __Y); } +TEST_CONSTEXPR(match_v4di(_mm256_mask_sllv_epi64((__m256i)(__v4di){99, 99, 99, 99}, (__mmask8)0x6, (__m256i)(__v4di){1, -2, 3, -4}, (__m256i)(__v4di){1, 2, 3, -4}), 99, -8, 24, 99)); __m256i test_mm256_maskz_sllv_epi64(__mmask8 __U, __m256i __X, __m256i __Y) { - // CHECK-LABEL: @test_mm256_maskz_sllv_epi64 + // CHECK-LABEL: test_mm256_maskz_sllv_epi64 // CHECK: @llvm.x86.avx2.psllv.q.256 // CHECK: select <4 x i1> %{{.*}}, <4 x i64> %{{.*}}, <4 x i64> %{{.*}} return _mm256_maskz_sllv_epi64(__U, __X, __Y); } +TEST_CONSTEXPR(match_v4di(_mm256_maskz_sllv_epi64((__mmask8)0x9, (__m256i)(__v4di){1, -2, 3, -4}, (__m256i)(__v4di){1, 2, 3, -4}), 2, 0, 0, 0)); __m128i test_mm_mask_sllv_epi32(__m128i __W, __mmask8 __U, __m128i __X, __m128i __Y) { - // CHECK-LABEL: @test_mm_mask_sllv_epi32 + // CHECK-LABEL: test_mm_mask_sllv_epi32 // CHECK: @llvm.x86.avx2.psllv.d // CHECK: select <4 x i1> %{{.*}}, <4 x i32> %{{.*}}, <4 x i32> %{{.*}} return _mm_mask_sllv_epi32(__W, __U, __X, __Y); } +TEST_CONSTEXPR(match_v4si(_mm_mask_sllv_epi32((__m128i)(__v4si){99, 99, 99, 99}, (__mmask8)0x0E, (__m128i)(__v4si){1, -2, 3, -4}, (__m128i)(__v4si){1, 2, 3, -4}), 99, -8, 24, 0)); __m128i test_mm_maskz_sllv_epi32(__mmask8 __U, __m128i __X, __m128i __Y) { - // CHECK-LABEL: @test_mm_maskz_sllv_epi32 + // CHECK-LABEL: test_mm_maskz_sllv_epi32 // CHECK: @llvm.x86.avx2.psllv.d // CHECK: select <4 x i1> %{{.*}}, <4 x i32> %{{.*}}, <4 x i32> %{{.*}} return _mm_maskz_sllv_epi32(__U, __X, __Y); } +TEST_CONSTEXPR(match_v4si(_mm_maskz_sllv_epi32((__mmask8)0xC, (__m128i)(__v4si){1, -2, 3, -4}, (__m128i)(__v4si){1, 2, 3, -4}), 0, 0, 24, 0)); __m256i test_mm256_mask_sllv_epi32(__m256i __W, __mmask8 __U, __m256i __X, __m256i __Y) { - // CHECK-LABEL: @test_mm256_mask_sllv_epi32 + // CHECK-LABEL: test_mm256_mask_sllv_epi32 // CHECK: @llvm.x86.avx2.psllv.d.256 // CHECK: select <8 x i1> %{{.*}}, <8 x i32> %{{.*}}, <8 x i32> %{{.*}} return _mm256_mask_sllv_epi32(__W, __U, __X, __Y); } +TEST_CONSTEXPR(match_v8si(_mm256_mask_sllv_epi32((__m256i)(__v8si){99, 99, 99, 99, 99, 99, 99, 99}, (__mmask8)0x3C, (__m256i)(__v8si){1, -2, 3, -4, 5, -6, 7, -8}, (__m256i)(__v8si){1, 2, 3, 4, -17, 31, 33, 29}), 99, 99, 24, -64, 0, 0, 99, 99)); __m256i test_mm256_maskz_sllv_epi32(__mmask8 __U, __m256i __X, __m256i __Y) { - // CHECK-LABEL: @test_mm256_maskz_sllv_epi32 + // CHECK-LABEL: test_mm256_maskz_sllv_epi32 // CHECK: @llvm.x86.avx2.psllv.d.256 // CHECK: select <8 x i1> %{{.*}}, <8 x i32> %{{.*}}, <8 x i32> %{{.*}} return _mm256_maskz_sllv_epi32(__U, __X, __Y); } +TEST_CONSTEXPR(match_v8si(_mm256_maskz_sllv_epi32((__mmask8)0xFE, (__m256i)(__v8si){1, -2, 3, -4, 5, -6, 7, -8}, (__m256i)(__v8si){1, 2, 3, 4, -17, 31, 33, 29}), 0, -8, 24, -64, 0, 0, 0, 0)); __m128i test_mm_mask_srlv_epi64(__m128i __W, __mmask8 __U, __m128i __X, __m128i __Y) { - // CHECK-LABEL: @test_mm_mask_srlv_epi64 + // CHECK-LABEL: test_mm_mask_srlv_epi64 // CHECK: @llvm.x86.avx2.psrlv.q // CHECK: select <2 x i1> %{{.*}}, <2 x i64> %{{.*}}, <2 x i64> %{{.*}} return _mm_mask_srlv_epi64(__W, __U, __X, __Y); } +TEST_CONSTEXPR(match_m128i(_mm_mask_srlv_epi64((__m128i)(__v2di){99, 99}, (__mmask8)0x1, (__m128i)(__v2di){1, -3}, (__m128i)(__v2di){8, 63}), 0, 99)); __m128i test_mm_maskz_srlv_epi64(__mmask8 __U, __m128i __X, __m128i __Y) { - // CHECK-LABEL: @test_mm_maskz_srlv_epi64 + // CHECK-LABEL: test_mm_maskz_srlv_epi64 // CHECK: @llvm.x86.avx2.psrlv.q // CHECK: select <2 x i1> %{{.*}}, <2 x i64> %{{.*}}, <2 x i64> %{{.*}} return _mm_maskz_srlv_epi64(__U, __X, __Y); } +TEST_CONSTEXPR(match_m128i(_mm_maskz_srlv_epi64((__mmask8)0x2, (__m128i)(__v2di){1, -3}, (__m128i)(__v2di){8, 63}), 0, 1)); __m256i test_mm256_mask_srlv_epi64(__m256i __W, __mmask8 __U, __m256i __X, __m256i __Y) { - // CHECK-LABEL: @test_mm256_mask_srlv_epi64 + // CHECK-LABEL: test_mm256_mask_srlv_epi64 // CHECK: @llvm.x86.avx2.psrlv.q.256 // CHECK: select <4 x i1> %{{.*}}, <4 x i64> %{{.*}}, <4 x i64> %{{.*}} return _mm256_mask_srlv_epi64(__W, __U, __X, __Y); } +TEST_CONSTEXPR(match_m256i(_mm256_mask_srlv_epi64((__m256i)(__v4di){99, 99, 99, 99}, (__mmask8)0x6, (__m256i)(__v4di){1, -2, 3, -4}, (__m256i)(__v4di){1, 2, 3, -4}), 99, 0x3FFFFFFFFFFFFFFFULL, 0, 99)); __m256i test_mm256_maskz_srlv_epi64(__mmask8 __U, __m256i __X, __m256i __Y) { - // CHECK-LABEL: @test_mm256_maskz_srlv_epi64 + // CHECK-LABEL: test_mm256_maskz_srlv_epi64 // CHECK: @llvm.x86.avx2.psrlv.q.256 // CHECK: select <4 x i1> %{{.*}}, <4 x i64> %{{.*}}, <4 x i64> %{{.*}} return _mm256_maskz_srlv_epi64(__U, __X, __Y); } +TEST_CONSTEXPR(match_m256i(_mm256_maskz_srlv_epi64((__mmask8)0x1, (__m256i)(__v4di){1, -2, 3, -4}, (__m256i)(__v4di){1, 2, 3, -4}), 0, 0, 0, 0)); __m128i test_mm_mask_srlv_epi32(__m128i __W, __mmask8 __U, __m128i __X, __m128i __Y) { - // CHECK-LABEL: @test_mm_mask_srlv_epi32 + // CHECK-LABEL: test_mm_mask_srlv_epi32 // CHECK: @llvm.x86.avx2.psrlv.d // CHECK: select <4 x i1> %{{.*}}, <4 x i32> %{{.*}}, <4 x i32> %{{.*}} return _mm_mask_srlv_epi32(__W, __U, __X, __Y); } +TEST_CONSTEXPR(match_v4si(_mm_mask_srlv_epi32((__m128i)(__v4si){99, 99, 99, 99}, (__mmask8)0x0E, (__m128i)(__v4si){1, -2, 3, -4}, (__m128i)(__v4si){1, 2, 3, -4}), 99, 1073741823, 0, 0)); __m128i test_mm_maskz_srlv_epi32(__mmask8 __U, __m128i __X, __m128i __Y) { - // CHECK-LABEL: @test_mm_maskz_srlv_epi32 + // CHECK-LABEL: test_mm_maskz_srlv_epi32 // CHECK: @llvm.x86.avx2.psrlv.d // CHECK: select <4 x i1> %{{.*}}, <4 x i32> %{{.*}}, <4 x i32> %{{.*}} return _mm_maskz_srlv_epi32(__U, __X, __Y); } +TEST_CONSTEXPR(match_v4si(_mm_maskz_srlv_epi32((__mmask8)0xC, (__m128i)(__v4si){1, -2, 3, -4}, (__m128i)(__v4si){1, 2, 3, -4}), 0, 0, 0, 0)); __m256i test_mm256_mask_srlv_epi32(__m256i __W, __mmask8 __U, __m256i __X, __m256i __Y) { - // CHECK-LABEL: @test_mm256_mask_srlv_epi32 + // CHECK-LABEL: test_mm256_mask_srlv_epi32 // CHECK: @llvm.x86.avx2.psrlv.d.256 // CHECK: select <8 x i1> %{{.*}}, <8 x i32> %{{.*}}, <8 x i32> %{{.*}} return _mm256_mask_srlv_epi32(__W, __U, __X, __Y); } +TEST_CONSTEXPR(match_v8si(_mm256_mask_srlv_epi32((__m256i)(__v8si){99, 99, 99, 99, 99, 99, 99, 99}, (__mmask8)0x3C, (__m256i)(__v8si){1, -2, 3, -4, 5, -6, 7, -8}, (__m256i)(__v8si){1, 2, 3, 4, -17, 31, 33, 29}), 99, 99, 0, 268435455, 0, 1, 99, 99)); __m256i test_mm256_maskz_srlv_epi32(__mmask8 __U, __m256i __X, __m256i __Y) { - // CHECK-LABEL: @test_mm256_maskz_srlv_epi32 + // CHECK-LABEL: test_mm256_maskz_srlv_epi32 // CHECK: @llvm.x86.avx2.psrlv.d.256 // CHECK: select <8 x i1> %{{.*}}, <8 x i32> %{{.*}}, <8 x i32> %{{.*}} return _mm256_maskz_srlv_epi32(__U, __X, __Y); } +TEST_CONSTEXPR(match_v8si(_mm256_maskz_srlv_epi32((__mmask8)0x9E, (__m256i)(__v8si){1, -2, 3, -4, 5, -6, 7, -8}, (__m256i)(__v8si){1, 2, 3, 4, -17, 31, 33, 29}), 0, 1073741823, 0, 268435455, 0, 0, 0, 7)); __m128i test_mm_mask_srl_epi32(__m128i __W, __mmask8 __U, __m128i __A, __m128i __B) { - // CHECK-LABEL: @test_mm_mask_srl_epi32 + // CHECK-LABEL: test_mm_mask_srl_epi32 // CHECK: @llvm.x86.sse2.psrl.d // CHECK: select <4 x i1> %{{.*}}, <4 x i32> %{{.*}}, <4 x i32> %{{.*}} return _mm_mask_srl_epi32(__W, __U, __A, __B); } __m128i test_mm_maskz_srl_epi32(__mmask8 __U, __m128i __A, __m128i __B) { - // CHECK-LABEL: @test_mm_maskz_srl_epi32 + // CHECK-LABEL: test_mm_maskz_srl_epi32 // CHECK: @llvm.x86.sse2.psrl.d // CHECK: select <4 x i1> %{{.*}}, <4 x i32> %{{.*}}, <4 x i32> %{{.*}} return _mm_maskz_srl_epi32(__U, __A, __B); } __m256i test_mm256_mask_srl_epi32(__m256i __W, __mmask8 __U, __m256i __A, __m128i __B) { - // CHECK-LABEL: @test_mm256_mask_srl_epi32 + // CHECK-LABEL: test_mm256_mask_srl_epi32 // CHECK: @llvm.x86.avx2.psrl.d // CHECK: select <8 x i1> %{{.*}}, <8 x i32> %{{.*}}, <8 x i32> %{{.*}} return _mm256_mask_srl_epi32(__W, __U, __A, __B); } __m256i test_mm256_maskz_srl_epi32(__mmask8 __U, __m256i __A, __m128i __B) { - // CHECK-LABEL: @test_mm256_maskz_srl_epi32 + // CHECK-LABEL: test_mm256_maskz_srl_epi32 // CHECK: @llvm.x86.avx2.psrl.d // CHECK: select <8 x i1> %{{.*}}, <8 x i32> %{{.*}}, <8 x i32> %{{.*}} return _mm256_maskz_srl_epi32(__U, __A, __B); } __m128i test_mm_mask_srli_epi32(__m128i __W, __mmask8 __U, __m128i __A) { - // CHECK-LABEL: @test_mm_mask_srli_epi32 + // CHECK-LABEL: test_mm_mask_srli_epi32 // CHECK: @llvm.x86.sse2.psrli.d // CHECK: select <4 x i1> %{{.*}}, <4 x i32> %{{.*}}, <4 x i32> %{{.*}} return _mm_mask_srli_epi32(__W, __U, __A, 5); } __m128i test_mm_mask_srli_epi32_2(__m128i __W, __mmask8 __U, __m128i __A, unsigned int __B) { - // CHECK-LABEL: @test_mm_mask_srli_epi32_2 + // CHECK-LABEL: test_mm_mask_srli_epi32_2 // CHECK: @llvm.x86.sse2.psrli.d // CHECK: select <4 x i1> %{{.*}}, <4 x i32> %{{.*}}, <4 x i32> %{{.*}} return _mm_mask_srli_epi32(__W, __U, __A, __B); } __m128i test_mm_maskz_srli_epi32(__mmask8 __U, __m128i __A) { - // CHECK-LABEL: @test_mm_maskz_srli_epi32 + // CHECK-LABEL: test_mm_maskz_srli_epi32 // CHECK: @llvm.x86.sse2.psrli.d // CHECK: select <4 x i1> %{{.*}}, <4 x i32> %{{.*}}, <4 x i32> %{{.*}} return _mm_maskz_srli_epi32(__U, __A, 5); } __m128i test_mm_maskz_srli_epi32_2(__mmask8 __U, __m128i __A, unsigned int __B) { - // CHECK-LABEL: @test_mm_maskz_srli_epi32_2 + // CHECK-LABEL: test_mm_maskz_srli_epi32_2 // CHECK: @llvm.x86.sse2.psrli.d // CHECK: select <4 x i1> %{{.*}}, <4 x i32> %{{.*}}, <4 x i32> %{{.*}} return _mm_maskz_srli_epi32(__U, __A, __B); } __m256i test_mm256_mask_srli_epi32(__m256i __W, __mmask8 __U, __m256i __A) { - // CHECK-LABEL: @test_mm256_mask_srli_epi32 + // CHECK-LABEL: test_mm256_mask_srli_epi32 // CHECK: @llvm.x86.avx2.psrli.d // CHECK: select <8 x i1> %{{.*}}, <8 x i32> %{{.*}}, <8 x i32> %{{.*}} return _mm256_mask_srli_epi32(__W, __U, __A, 5); } +TEST_CONSTEXPR(match_v8si(_mm256_mask_srli_epi32((__m256i)(__v8si){100, 101, 102, 103, 104, 105, 106, 107}, (__mmask8)0xff, (__m256i)(__v8si){0, 1, 2, 3, 4, 5, 6, 7}, 3), 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0)); __m256i test_mm256_mask_srli_epi32_2(__m256i __W, __mmask8 __U, __m256i __A, unsigned int __B) { - // CHECK-LABEL: @test_mm256_mask_srli_epi32_2 + // CHECK-LABEL: test_mm256_mask_srli_epi32_2 // CHECK: @llvm.x86.avx2.psrli.d // CHECK: select <8 x i1> %{{.*}}, <8 x i32> %{{.*}}, <8 x i32> %{{.*}} return _mm256_mask_srli_epi32(__W, __U, __A, __B); } __m256i test_mm256_maskz_srli_epi32(__mmask8 __U, __m256i __A) { - // CHECK-LABEL: @test_mm256_maskz_srli_epi32 + // CHECK-LABEL: test_mm256_maskz_srli_epi32 // CHECK: @llvm.x86.avx2.psrli.d // CHECK: select <8 x i1> %{{.*}}, <8 x i32> %{{.*}}, <8 x i32> %{{.*}} return _mm256_maskz_srli_epi32(__U, __A, 5); } +TEST_CONSTEXPR(match_v8si(_mm256_maskz_srli_epi32((__mmask8)0x71, (__m256i)(__v8si){0xff, 1, 2, 3, 4, 5, 6, 7}, 1), 0x7f, 0, 0, 0, 0x2, 0x2, 0x3, 0)); __m256i test_mm256_maskz_srli_epi32_2(__mmask8 __U, __m256i __A, unsigned int __B) { - // CHECK-LABEL: @test_mm256_maskz_srli_epi32_2 + // CHECK-LABEL: test_mm256_maskz_srli_epi32_2 // CHECK: @llvm.x86.avx2.psrli.d // CHECK: select <8 x i1> %{{.*}}, <8 x i32> %{{.*}}, <8 x i32> %{{.*}} return _mm256_maskz_srli_epi32(__U, __A, __B); } __m128i test_mm_mask_srl_epi64(__m128i __W, __mmask8 __U, __m128i __A, __m128i __B) { - // CHECK-LABEL: @test_mm_mask_srl_epi64 + // CHECK-LABEL: test_mm_mask_srl_epi64 // CHECK: @llvm.x86.sse2.psrl.q // CHECK: select <2 x i1> %{{.*}}, <2 x i64> %{{.*}}, <2 x i64> %{{.*}} return _mm_mask_srl_epi64(__W, __U, __A, __B); } __m128i test_mm_maskz_srl_epi64(__mmask8 __U, __m128i __A, __m128i __B) { - // CHECK-LABEL: @test_mm_maskz_srl_epi64 + // CHECK-LABEL: test_mm_maskz_srl_epi64 // CHECK: @llvm.x86.sse2.psrl.q // CHECK: select <2 x i1> %{{.*}}, <2 x i64> %{{.*}}, <2 x i64> %{{.*}} return _mm_maskz_srl_epi64(__U, __A, __B); } __m256i test_mm256_mask_srl_epi64(__m256i __W, __mmask8 __U, __m256i __A, __m128i __B) { - // CHECK-LABEL: @test_mm256_mask_srl_epi64 + // CHECK-LABEL: test_mm256_mask_srl_epi64 // CHECK: @llvm.x86.avx2.psrl.q // CHECK: select <4 x i1> %{{.*}}, <4 x i64> %{{.*}}, <4 x i64> %{{.*}} return _mm256_mask_srl_epi64(__W, __U, __A, __B); } __m256i test_mm256_maskz_srl_epi64(__mmask8 __U, __m256i __A, __m128i __B) { - // CHECK-LABEL: @test_mm256_maskz_srl_epi64 + // CHECK-LABEL: test_mm256_maskz_srl_epi64 // CHECK: @llvm.x86.avx2.psrl.q // CHECK: select <4 x i1> %{{.*}}, <4 x i64> %{{.*}}, <4 x i64> %{{.*}} return _mm256_maskz_srl_epi64(__U, __A, __B); } __m128i test_mm_mask_srli_epi64(__m128i __W, __mmask8 __U, __m128i __A) { - // CHECK-LABEL: @test_mm_mask_srli_epi64 + // CHECK-LABEL: test_mm_mask_srli_epi64 // CHECK: @llvm.x86.sse2.psrli.q // CHECK: select <2 x i1> %{{.*}}, <2 x i64> %{{.*}}, <2 x i64> %{{.*}} return _mm_mask_srli_epi64(__W, __U, __A, 5); } __m128i test_mm_mask_srli_epi64_2(__m128i __W, __mmask8 __U, __m128i __A, unsigned int __B) { - // CHECK-LABEL: @test_mm_mask_srli_epi64_2 + // CHECK-LABEL: test_mm_mask_srli_epi64_2 // CHECK: @llvm.x86.sse2.psrli.q // CHECK: select <2 x i1> %{{.*}}, <2 x i64> %{{.*}}, <2 x i64> %{{.*}} return _mm_mask_srli_epi64(__W, __U, __A, __B); } __m128i test_mm_maskz_srli_epi64(__mmask8 __U, __m128i __A) { - // CHECK-LABEL: @test_mm_maskz_srli_epi64 + // CHECK-LABEL: test_mm_maskz_srli_epi64 // CHECK: @llvm.x86.sse2.psrli.q // CHECK: select <2 x i1> %{{.*}}, <2 x i64> %{{.*}}, <2 x i64> %{{.*}} return _mm_maskz_srli_epi64(__U, __A, 5); } __m128i test_mm_maskz_srli_epi64_2(__mmask8 __U, __m128i __A, unsigned int __B) { - // CHECK-LABEL: @test_mm_maskz_srli_epi64_2 + // CHECK-LABEL: test_mm_maskz_srli_epi64_2 // CHECK: @llvm.x86.sse2.psrli.q // CHECK: select <2 x i1> %{{.*}}, <2 x i64> %{{.*}}, <2 x i64> %{{.*}} return _mm_maskz_srli_epi64(__U, __A, __B); } __m256i test_mm256_mask_srli_epi64(__m256i __W, __mmask8 __U, __m256i __A) { - // CHECK-LABEL: @test_mm256_mask_srli_epi64 + // CHECK-LABEL: test_mm256_mask_srli_epi64 // CHECK: @llvm.x86.avx2.psrli.q // CHECK: select <4 x i1> %{{.*}}, <4 x i64> %{{.*}}, <4 x i64> %{{.*}} return _mm256_mask_srli_epi64(__W, __U, __A, 5); } +TEST_CONSTEXPR(match_v4di(_mm256_mask_srli_epi64((__m256i)(__v4di){100, 101, 102, 103}, (__mmask8)0b1010, (__m256i)(__v4di){0, 0xff80, 2, 3}, 1), 100, 0x7fc0, 102, 0x1)); __m256i test_mm256_mask_srli_epi64_2(__m256i __W, __mmask8 __U, __m256i __A, unsigned int __B) { - // CHECK-LABEL: @test_mm256_mask_srli_epi64_2 + // CHECK-LABEL: test_mm256_mask_srli_epi64_2 // CHECK: @llvm.x86.avx2.psrli.q // CHECK: select <4 x i1> %{{.*}}, <4 x i64> %{{.*}}, <4 x i64> %{{.*}} return _mm256_mask_srli_epi64(__W, __U, __A, __B); } __m256i test_mm256_maskz_srli_epi64(__mmask8 __U, __m256i __A) { - // CHECK-LABEL: @test_mm256_maskz_srli_epi64 + // CHECK-LABEL: test_mm256_maskz_srli_epi64 // CHECK: @llvm.x86.avx2.psrli.q // CHECK: select <4 x i1> %{{.*}}, <4 x i64> %{{.*}}, <4 x i64> %{{.*}} return _mm256_maskz_srli_epi64(__U, __A, 5); } +TEST_CONSTEXPR(match_v4di(_mm256_maskz_srli_epi64((__mmask8)0x71, (__m256i)(__v4di){0xff, 1, 2, 3}, 1), 0x7f, 0, 0, 0)); __m256i test_mm256_maskz_srli_epi64_2(__mmask8 __U,__m256i __A, unsigned int __B) { - // CHECK-LABEL: @test_mm256_maskz_srli_epi64_2 + // CHECK-LABEL: test_mm256_maskz_srli_epi64_2 // CHECK: @llvm.x86.avx2.psrli.q // CHECK: select <4 x i1> %{{.*}}, <4 x i64> %{{.*}}, <4 x i64> %{{.*}} return _mm256_maskz_srli_epi64(__U, __A, __B); } __m128i test_mm_mask_sll_epi32(__m128i __W, __mmask8 __U, __m128i __A, __m128i __B) { - // CHECK-LABEL: @test_mm_mask_sll_epi32 + // CHECK-LABEL: test_mm_mask_sll_epi32 // CHECK: @llvm.x86.sse2.psll.d // CHECK: select <4 x i1> %{{.*}}, <4 x i32> %{{.*}}, <4 x i32> %{{.*}} return _mm_mask_sll_epi32(__W, __U, __A, __B); } __m128i test_mm_maskz_sll_epi32(__mmask8 __U, __m128i __A, __m128i __B) { - // CHECK-LABEL: @test_mm_maskz_sll_epi32 + // CHECK-LABEL: test_mm_maskz_sll_epi32 // CHECK: @llvm.x86.sse2.psll.d // CHECK: select <4 x i1> %{{.*}}, <4 x i32> %{{.*}}, <4 x i32> %{{.*}} return _mm_maskz_sll_epi32(__U, __A, __B); } __m256i test_mm256_mask_sll_epi32(__m256i __W, __mmask8 __U, __m256i __A, __m128i __B) { - // CHECK-LABEL: @test_mm256_mask_sll_epi32 + // CHECK-LABEL: test_mm256_mask_sll_epi32 // CHECK: @llvm.x86.avx2.psll.d // CHECK: select <8 x i1> %{{.*}}, <8 x i32> %{{.*}}, <8 x i32> %{{.*}} return _mm256_mask_sll_epi32(__W, __U, __A, __B); } __m256i test_mm256_maskz_sll_epi32(__mmask8 __U, __m256i __A, __m128i __B) { - // CHECK-LABEL: @test_mm256_maskz_sll_epi32 + // CHECK-LABEL: test_mm256_maskz_sll_epi32 // CHECK: @llvm.x86.avx2.psll.d // CHECK: select <8 x i1> %{{.*}}, <8 x i32> %{{.*}}, <8 x i32> %{{.*}} return _mm256_maskz_sll_epi32(__U, __A, __B); } __m128i test_mm_mask_slli_epi32(__m128i __W, __mmask8 __U, __m128i __A) { - // CHECK-LABEL: @test_mm_mask_slli_epi32 + // CHECK-LABEL: test_mm_mask_slli_epi32 // CHECK: @llvm.x86.sse2.pslli.d // CHECK: select <4 x i1> %{{.*}}, <4 x i32> %{{.*}}, <4 x i32> %{{.*}} return _mm_mask_slli_epi32(__W, __U, __A, 5); } __m128i test_mm_mask_slli_epi32_2(__m128i __W, __mmask8 __U, __m128i __A, unsigned int __B) { - // CHECK-LABEL: @test_mm_mask_slli_epi32_2 + // CHECK-LABEL: test_mm_mask_slli_epi32_2 // CHECK: @llvm.x86.sse2.pslli.d // CHECK: select <4 x i1> %{{.*}}, <4 x i32> %{{.*}}, <4 x i32> %{{.*}} return _mm_mask_slli_epi32(__W, __U, __A, __B); } __m128i test_mm_maskz_slli_epi32(__mmask8 __U, __m128i __A) { - // CHECK-LABEL: @test_mm_maskz_slli_epi32 + // CHECK-LABEL: test_mm_maskz_slli_epi32 // CHECK: @llvm.x86.sse2.pslli.d // CHECK: select <4 x i1> %{{.*}}, <4 x i32> %{{.*}}, <4 x i32> %{{.*}} return _mm_maskz_slli_epi32(__U, __A, 5); } __m128i test_mm_maskz_slli_epi32_2(__mmask8 __U, __m128i __A, unsigned int __B) { - // CHECK-LABEL: @test_mm_maskz_slli_epi32_2 + // CHECK-LABEL: test_mm_maskz_slli_epi32_2 // CHECK: @llvm.x86.sse2.pslli.d // CHECK: select <4 x i1> %{{.*}}, <4 x i32> %{{.*}}, <4 x i32> %{{.*}} return _mm_maskz_slli_epi32(__U, __A, __B); } __m256i test_mm256_mask_slli_epi32(__m256i __W, __mmask8 __U, __m256i __A) { - // CHECK-LABEL: @test_mm256_mask_slli_epi32 + // CHECK-LABEL: test_mm256_mask_slli_epi32 // CHECK: @llvm.x86.avx2.pslli.d // CHECK: select <8 x i1> %{{.*}}, <8 x i32> %{{.*}}, <8 x i32> %{{.*}} return _mm256_mask_slli_epi32(__W, __U, __A, 5); } +TEST_CONSTEXPR(match_v8si(_mm256_mask_slli_epi32((__m256i)(__v8si){100, 101, 102, 103, 104, 105, 106, 107}, (__mmask8)0xff, (__m256i)(__v8si){0, 1, 2, 3, 4, 5, 6, 7}, 3), 0x0, 0x8, 0x10, 0x18, 0x20, 0x28, 0x30, 0x38)); __m256i test_mm256_mask_slli_epi32_2(__m256i __W, __mmask8 __U, __m256i __A, unsigned int __B) { - // CHECK-LABEL: @test_mm256_mask_slli_epi32_2 + // CHECK-LABEL: test_mm256_mask_slli_epi32_2 // CHECK: @llvm.x86.avx2.pslli.d // CHECK: select <8 x i1> %{{.*}}, <8 x i32> %{{.*}}, <8 x i32> %{{.*}} return _mm256_mask_slli_epi32(__W, __U, __A, __B); } __m256i test_mm256_maskz_slli_epi32(__mmask8 __U, __m256i __A) { - // CHECK-LABEL: @test_mm256_maskz_slli_epi32 + // CHECK-LABEL: test_mm256_maskz_slli_epi32 // CHECK: @llvm.x86.avx2.pslli.d // CHECK: select <8 x i1> %{{.*}}, <8 x i32> %{{.*}}, <8 x i32> %{{.*}} return _mm256_maskz_slli_epi32(__U, __A, 5); } +TEST_CONSTEXPR(match_v8si(_mm256_maskz_slli_epi32((__mmask8)0x00ffcc71, (__m256i)(__v8si){0xff, 1, 2, 3, 4, 5, 6, 7}, 32), 0, 0, 0, 0, 0, 0, 0, 0)); +TEST_CONSTEXPR(match_v8si(_mm256_maskz_slli_epi32((__mmask8)0, (__m256i)(__v8si){0xff, 1, 2, 3, 4, 5, 6, 7}, 16), 0, 0, 0, 0, 0, 0, 0, 0)); +TEST_CONSTEXPR(match_v8si(_mm256_maskz_slli_epi32((__mmask8)0xff, (__m256i)(__v8si){0xff, 1, 2, 3, 4, 5, 6, 7}, 1), 0x1fe, 0x2, 0x4, 0x6, 0x8, 0xa, 0xc, 0xe)); +TEST_CONSTEXPR(match_v8si(_mm256_maskz_slli_epi32((__mmask8)0x7, (__m256i)(__v8si){0xff, 1, 2, 3, 4, 5, 6, 7}, 1), 0x1fe, 0x2, 0x4, 0, 0, 0, 0, 0)); +TEST_CONSTEXPR(match_v8si(_mm256_maskz_slli_epi32((__mmask8)0x71, (__m256i)(__v8si){0xff, 1, 2, 3, 4, 5, 6, 7}, 1), 0x1fe, 0, 0, 0, 0x8, 0xa, 0xc, 0)); __m256i test_mm256_maskz_slli_epi32_2(__mmask8 __U, __m256i __A, unsigned int __B) { - // CHECK-LABEL: @test_mm256_maskz_slli_epi32_2 + // CHECK-LABEL: test_mm256_maskz_slli_epi32_2 // CHECK: @llvm.x86.avx2.pslli.d // CHECK: select <8 x i1> %{{.*}}, <8 x i32> %{{.*}}, <8 x i32> %{{.*}} return _mm256_maskz_slli_epi32(__U, __A, __B); } __m128i test_mm_mask_sll_epi64(__m128i __W, __mmask8 __U, __m128i __A, __m128i __B) { - // CHECK-LABEL: @test_mm_mask_sll_epi64 + // CHECK-LABEL: test_mm_mask_sll_epi64 // CHECK: @llvm.x86.sse2.psll.q // CHECK: select <2 x i1> %{{.*}}, <2 x i64> %{{.*}}, <2 x i64> %{{.*}} return _mm_mask_sll_epi64(__W, __U, __A, __B); } __m128i test_mm_maskz_sll_epi64(__mmask8 __U, __m128i __A, __m128i __B) { - // CHECK-LABEL: @test_mm_maskz_sll_epi64 + // CHECK-LABEL: test_mm_maskz_sll_epi64 // CHECK: @llvm.x86.sse2.psll.q // CHECK: select <2 x i1> %{{.*}}, <2 x i64> %{{.*}}, <2 x i64> %{{.*}} return _mm_maskz_sll_epi64(__U, __A, __B); } __m256i test_mm256_mask_sll_epi64(__m256i __W, __mmask8 __U, __m256i __A, __m128i __B) { - // CHECK-LABEL: @test_mm256_mask_sll_epi64 + // CHECK-LABEL: test_mm256_mask_sll_epi64 // CHECK: @llvm.x86.avx2.psll.q // CHECK: select <4 x i1> %{{.*}}, <4 x i64> %{{.*}}, <4 x i64> %{{.*}} return _mm256_mask_sll_epi64(__W, __U, __A, __B); } __m256i test_mm256_maskz_sll_epi64(__mmask8 __U, __m256i __A, __m128i __B) { - // CHECK-LABEL: @test_mm256_maskz_sll_epi64 + // CHECK-LABEL: test_mm256_maskz_sll_epi64 // CHECK: @llvm.x86.avx2.psll.q // CHECK: select <4 x i1> %{{.*}}, <4 x i64> %{{.*}}, <4 x i64> %{{.*}} return _mm256_maskz_sll_epi64(__U, __A, __B); } __m128i test_mm_mask_slli_epi64(__m128i __W, __mmask8 __U, __m128i __A) { - // CHECK-LABEL: @test_mm_mask_slli_epi64 + // CHECK-LABEL: test_mm_mask_slli_epi64 // CHECK: @llvm.x86.sse2.pslli.q // CHECK: select <2 x i1> %{{.*}}, <2 x i64> %{{.*}}, <2 x i64> %{{.*}} return _mm_mask_slli_epi64(__W, __U, __A, 5); } __m128i test_mm_mask_slli_epi64_2(__m128i __W, __mmask8 __U, __m128i __A, unsigned int __B) { - // CHECK-LABEL: @test_mm_mask_slli_epi64_2 + // CHECK-LABEL: test_mm_mask_slli_epi64_2 // CHECK: @llvm.x86.sse2.pslli.q // CHECK: select <2 x i1> %{{.*}}, <2 x i64> %{{.*}}, <2 x i64> %{{.*}} return _mm_mask_slli_epi64(__W, __U, __A, __B); } __m128i test_mm_maskz_slli_epi64(__mmask8 __U, __m128i __A) { - // CHECK-LABEL: @test_mm_maskz_slli_epi64 + // CHECK-LABEL: test_mm_maskz_slli_epi64 // CHECK: @llvm.x86.sse2.pslli.q // CHECK: select <2 x i1> %{{.*}}, <2 x i64> %{{.*}}, <2 x i64> %{{.*}} return _mm_maskz_slli_epi64(__U, __A, 5); } __m128i test_mm_maskz_slli_epi64_2(__mmask8 __U, __m128i __A, unsigned int __B) { - // CHECK-LABEL: @test_mm_maskz_slli_epi64_2 + // CHECK-LABEL: test_mm_maskz_slli_epi64_2 // CHECK: @llvm.x86.sse2.pslli.q // CHECK: select <2 x i1> %{{.*}}, <2 x i64> %{{.*}}, <2 x i64> %{{.*}} return _mm_maskz_slli_epi64(__U, __A, __B); } __m256i test_mm256_mask_slli_epi64(__m256i __W, __mmask8 __U, __m256i __A) { - // CHECK-LABEL: @test_mm256_mask_slli_epi64 + // CHECK-LABEL: test_mm256_mask_slli_epi64 // CHECK: @llvm.x86.avx2.pslli.q // CHECK: select <4 x i1> %{{.*}}, <4 x i64> %{{.*}}, <4 x i64> %{{.*}} return _mm256_mask_slli_epi64(__W, __U, __A, 5); } +TEST_CONSTEXPR(match_v4di(_mm256_mask_slli_epi64((__m256i)(__v4di){100, 101, 102, 103}, (__mmask8)0b1010, (__m256i)(__v4di){0, 1, 2, 3}, 4), 100, 0x10, 102, 0x30)); __m256i test_mm256_mask_slli_epi64_2(__m256i __W, __mmask8 __U, __m256i __A, unsigned int __B) { - // CHECK-LABEL: @test_mm256_mask_slli_epi64_2 + // CHECK-LABEL: test_mm256_mask_slli_epi64_2 // CHECK: @llvm.x86.avx2.pslli.q // CHECK: select <4 x i1> %{{.*}}, <4 x i64> %{{.*}}, <4 x i64> %{{.*}} return _mm256_mask_slli_epi64(__W, __U, __A, __B); } __m256i test_mm256_maskz_slli_epi64(__mmask8 __U, __m256i __A) { - // CHECK-LABEL: @test_mm256_maskz_slli_epi64 + // CHECK-LABEL: test_mm256_maskz_slli_epi64 // CHECK: @llvm.x86.avx2.pslli.q // CHECK: select <4 x i1> %{{.*}}, <4 x i64> %{{.*}}, <4 x i64> %{{.*}} return _mm256_maskz_slli_epi64(__U, __A, 5); } +TEST_CONSTEXPR(match_v4di(_mm256_maskz_slli_epi64((__mmask8)0x00ffcc71, (__m256i)(__v4di){0xff, 1, 2, 3}, 64), 0, 0, 0, 0)); +TEST_CONSTEXPR(match_v4di(_mm256_maskz_slli_epi64((__mmask8)0, (__m256i)(__v4di){0xff, 1, 2, 3}, 16), 0, 0, 0, 0)); +TEST_CONSTEXPR(match_v4di(_mm256_maskz_slli_epi64((__mmask8)0xff, (__m256i)(__v4di){0xff, 1, 2, 3}, 1), 0x1fe, 0x2, 0x4, 0x6)); +TEST_CONSTEXPR(match_v4di(_mm256_maskz_slli_epi64((__mmask8)0x7, (__m256i)(__v4di){0xff, 1, 2, 3}, 1), 0x1fe, 0x2, 0x4, 0)); +TEST_CONSTEXPR(match_v4di(_mm256_maskz_slli_epi64((__mmask8)0x71, (__m256i)(__v4di){0xff, 1, 2, 3}, 1), 0x1fe, 0, 0, 0)); __m256i test_mm256_maskz_slli_epi64_2(__mmask8 __U, __m256i __A, unsigned int __B) { - // CHECK-LABEL: @test_mm256_maskz_slli_epi64_2 + // CHECK-LABEL: test_mm256_maskz_slli_epi64_2 // CHECK: @llvm.x86.avx2.pslli.q // CHECK: select <4 x i1> %{{.*}}, <4 x i64> %{{.*}}, <4 x i64> %{{.*}} return _mm256_maskz_slli_epi64(__U, __A, __B); } __m128i test_mm_mask_srav_epi32(__m128i __W, __mmask8 __U, __m128i __X, __m128i __Y) { - // CHECK-LABEL: @test_mm_mask_srav_epi32 + // CHECK-LABEL: test_mm_mask_srav_epi32 // CHECK: @llvm.x86.avx2.psrav.d // CHECK: select <4 x i1> %{{.*}}, <4 x i32> %{{.*}}, <4 x i32> %{{.*}} return _mm_mask_srav_epi32(__W, __U, __X, __Y); } +TEST_CONSTEXPR(match_v4si(_mm_mask_srav_epi32((__m128i)(__v4si){99, 99, 99, 99}, (__mmask8)0x0E, (__m128i)(__v4si){1, -2, 3, -4}, (__m128i)(__v4si){1, 2, 3, -4}), 99, -1, 0, -1)); __m128i test_mm_maskz_srav_epi32(__mmask8 __U, __m128i __X, __m128i __Y) { - // CHECK-LABEL: @test_mm_maskz_srav_epi32 + // CHECK-LABEL: test_mm_maskz_srav_epi32 // CHECK: @llvm.x86.avx2.psrav.d // CHECK: select <4 x i1> %{{.*}}, <4 x i32> %{{.*}}, <4 x i32> %{{.*}} return _mm_maskz_srav_epi32(__U, __X, __Y); } +TEST_CONSTEXPR(match_v4si(_mm_maskz_srav_epi32((__mmask8)0xC, (__m128i)(__v4si){1, -2, 3, -4}, (__m128i)(__v4si){1, 2, 3, -4}), 0, 0, 0, -1)); __m256i test_mm256_mask_srav_epi32(__m256i __W, __mmask8 __U, __m256i __X, __m256i __Y) { - // CHECK-LABEL: @test_mm256_mask_srav_epi32 + // CHECK-LABEL: test_mm256_mask_srav_epi32 // CHECK: @llvm.x86.avx2.psrav.d.256 // CHECK: select <8 x i1> %{{.*}}, <8 x i32> %{{.*}}, <8 x i32> %{{.*}} return _mm256_mask_srav_epi32(__W, __U, __X, __Y); } +TEST_CONSTEXPR(match_v8si(_mm256_mask_srav_epi32((__m256i)(__v8si){99, 99, 99, 99, 99, 99, 99, 99}, (__mmask8)0x3C, (__m256i)(__v8si){1, -2, 3, -4, 5, -6, 7, -8}, (__m256i)(__v8si){1, 2, 3, 4, -17, 31, 33, 29}), 99, 99, 0, -1, 0, -1, 99, 99)); __m256i test_mm256_maskz_srav_epi32(__mmask8 __U, __m256i __X, __m256i __Y) { - // CHECK-LABEL: @test_mm256_maskz_srav_epi32 + // CHECK-LABEL: test_mm256_maskz_srav_epi32 // CHECK: @llvm.x86.avx2.psrav.d.256 // CHECK: select <8 x i1> %{{.*}}, <8 x i32> %{{.*}}, <8 x i32> %{{.*}} return _mm256_maskz_srav_epi32(__U, __X, __Y); } +TEST_CONSTEXPR(match_v8si(_mm256_maskz_srav_epi32((__mmask8)0x9E, (__m256i)(__v8si){1, -2, 3, -4, 5, -6, 7, -8}, (__m256i)(__v8si){1, 2, 3, 4, -17, 31, 33, 29}), 0, -1, 0, -1, 0, 0, 0, -1)); __m128i test_mm_srav_epi64(__m128i __X, __m128i __Y) { - // CHECK-LABEL: @test_mm_srav_epi64 + // CHECK-LABEL: test_mm_srav_epi64 // CHECK: @llvm.x86.avx512.psrav.q.128 return _mm_srav_epi64(__X, __Y); } __m128i test_mm_mask_srav_epi64(__m128i __W, __mmask8 __U, __m128i __X, __m128i __Y) { - // CHECK-LABEL: @test_mm_mask_srav_epi64 + // CHECK-LABEL: test_mm_mask_srav_epi64 // CHECK: @llvm.x86.avx512.psrav.q.128 // CHECK: select <2 x i1> %{{.*}}, <2 x i64> %{{.*}}, <2 x i64> %{{.*}} return _mm_mask_srav_epi64(__W, __U, __X, __Y); } __m128i test_mm_maskz_srav_epi64(__mmask8 __U, __m128i __X, __m128i __Y) { - // CHECK-LABEL: @test_mm_maskz_srav_epi64 + // CHECK-LABEL: test_mm_maskz_srav_epi64 // CHECK: @llvm.x86.avx512.psrav.q.128 // CHECK: select <2 x i1> %{{.*}}, <2 x i64> %{{.*}}, <2 x i64> %{{.*}} return _mm_maskz_srav_epi64(__U, __X, __Y); } __m256i test_mm256_srav_epi64(__m256i __X, __m256i __Y) { - // CHECK-LABEL: @test_mm256_srav_epi64 + // CHECK-LABEL: test_mm256_srav_epi64 // CHECK: @llvm.x86.avx512.psrav.q.256 return _mm256_srav_epi64(__X, __Y); } __m256i test_mm256_mask_srav_epi64(__m256i __W, __mmask8 __U, __m256i __X, __m256i __Y) { - // CHECK-LABEL: @test_mm256_mask_srav_epi64 + // CHECK-LABEL: test_mm256_mask_srav_epi64 // CHECK: @llvm.x86.avx512.psrav.q.256 // CHECK: select <4 x i1> %{{.*}}, <4 x i64> %{{.*}}, <4 x i64> %{{.*}} return _mm256_mask_srav_epi64(__W, __U, __X, __Y); } __m256i test_mm256_maskz_srav_epi64(__mmask8 __U, __m256i __X, __m256i __Y) { - // CHECK-LABEL: @test_mm256_maskz_srav_epi64 + // CHECK-LABEL: test_mm256_maskz_srav_epi64 // CHECK: @llvm.x86.avx512.psrav.q.256 // CHECK: select <4 x i1> %{{.*}}, <4 x i64> %{{.*}}, <4 x i64> %{{.*}} return _mm256_maskz_srav_epi64(__U, __X, __Y); } void test_mm_store_epi32(void *__P, __m128i __A) { - // CHECK-LABEL: @test_mm_store_epi32 + // CHECK-LABEL: test_mm_store_epi32 // CHECK: store <2 x i64> %{{.*}}, ptr %{{.*}} return _mm_store_epi32(__P, __A); } void test_mm_mask_store_epi32(void *__P, __mmask8 __U, __m128i __A) { - // CHECK-LABEL: @test_mm_mask_store_epi32 + // CHECK-LABEL: test_mm_mask_store_epi32 // CHECK: @llvm.masked.store.v4i32.p0(<4 x i32> %{{.*}}, ptr %{{.}}, i32 16, <4 x i1> %{{.*}}) return _mm_mask_store_epi32(__P, __U, __A); } void test_mm256_store_epi32(void *__P, __m256i __A) { - // CHECK-LABEL: @test_mm256_store_epi32 + // CHECK-LABEL: test_mm256_store_epi32 // CHECK: store <4 x i64> %{{.*}}, ptr %{{.*}} return _mm256_store_epi32(__P, __A); } void test_mm256_mask_store_epi32(void *__P, __mmask8 __U, __m256i __A) { - // CHECK-LABEL: @test_mm256_mask_store_epi32 + // CHECK-LABEL: test_mm256_mask_store_epi32 // CHECK: @llvm.masked.store.v8i32.p0(<8 x i32> %{{.*}}, ptr %{{.}}, i32 32, <8 x i1> %{{.*}}) return _mm256_mask_store_epi32(__P, __U, __A); } __m128i test_mm_mask_mov_epi32(__m128i __W, __mmask8 __U, __m128i __A) { - // CHECK-LABEL: @test_mm_mask_mov_epi32 + // CHECK-LABEL: test_mm_mask_mov_epi32 // CHECK: select <4 x i1> %{{.*}}, <4 x i32> %{{.*}}, <4 x i32> %{{.*}} return _mm_mask_mov_epi32(__W, __U, __A); } __m128i test_mm_maskz_mov_epi32(__mmask8 __U, __m128i __A) { - // CHECK-LABEL: @test_mm_maskz_mov_epi32 + // CHECK-LABEL: test_mm_maskz_mov_epi32 // CHECK: select <4 x i1> %{{.*}}, <4 x i32> %{{.*}}, <4 x i32> %{{.*}} return _mm_maskz_mov_epi32(__U, __A); } __m256i test_mm256_mask_mov_epi32(__m256i __W, __mmask8 __U, __m256i __A) { - // CHECK-LABEL: @test_mm256_mask_mov_epi32 + // CHECK-LABEL: test_mm256_mask_mov_epi32 // CHECK: select <8 x i1> %{{.*}}, <8 x i32> %{{.*}}, <8 x i32> %{{.*}} return _mm256_mask_mov_epi32(__W, __U, __A); } __m256i test_mm256_maskz_mov_epi32(__mmask8 __U, __m256i __A) { - // CHECK-LABEL: @test_mm256_maskz_mov_epi32 + // CHECK-LABEL: test_mm256_maskz_mov_epi32 // CHECK: select <8 x i1> %{{.*}}, <8 x i32> %{{.*}}, <8 x i32> %{{.*}} return _mm256_maskz_mov_epi32(__U, __A); } __m128i test_mm_mask_mov_epi64(__m128i __W, __mmask8 __U, __m128i __A) { - // CHECK-LABEL: @test_mm_mask_mov_epi64 + // CHECK-LABEL: test_mm_mask_mov_epi64 // CHECK: select <2 x i1> %{{.*}}, <2 x i64> %{{.*}}, <2 x i64> %{{.*}} return _mm_mask_mov_epi64(__W, __U, __A); } __m128i test_mm_maskz_mov_epi64(__mmask8 __U, __m128i __A) { - // CHECK-LABEL: @test_mm_maskz_mov_epi64 + // CHECK-LABEL: test_mm_maskz_mov_epi64 // CHECK: select <2 x i1> %{{.*}}, <2 x i64> %{{.*}}, <2 x i64> %{{.*}} return _mm_maskz_mov_epi64(__U, __A); } __m256i test_mm256_mask_mov_epi64(__m256i __W, __mmask8 __U, __m256i __A) { - // CHECK-LABEL: @test_mm256_mask_mov_epi64 + // CHECK-LABEL: test_mm256_mask_mov_epi64 // CHECK: select <4 x i1> %{{.*}}, <4 x i64> %{{.*}}, <4 x i64> %{{.*}} return _mm256_mask_mov_epi64(__W, __U, __A); } __m256i test_mm256_maskz_mov_epi64(__mmask8 __U, __m256i __A) { - // CHECK-LABEL: @test_mm256_maskz_mov_epi64 + // CHECK-LABEL: test_mm256_maskz_mov_epi64 // CHECK: select <4 x i1> %{{.*}}, <4 x i64> %{{.*}}, <4 x i64> %{{.*}} return _mm256_maskz_mov_epi64(__U, __A); } __m128i test_mm_load_epi32(void const *__P) { - // CHECK-LABEL: @test_mm_load_epi32 + // CHECK-LABEL: test_mm_load_epi32 // CHECK: load <2 x i64>, ptr %{{.*}} return _mm_load_epi32(__P); } __m128i test_mm_mask_load_epi32(__m128i __W, __mmask8 __U, void const *__P) { - // CHECK-LABEL: @test_mm_mask_load_epi32 + // CHECK-LABEL: test_mm_mask_load_epi32 // CHECK: @llvm.masked.load.v4i32.p0(ptr %{{.*}}, i32 16, <4 x i1> %{{.*}}, <4 x i32> %{{.*}}) return _mm_mask_load_epi32(__W, __U, __P); } __m128i test_mm_maskz_load_epi32(__mmask8 __U, void const *__P) { - // CHECK-LABEL: @test_mm_maskz_load_epi32 + // CHECK-LABEL: test_mm_maskz_load_epi32 // CHECK: @llvm.masked.load.v4i32.p0(ptr %{{.*}}, i32 16, <4 x i1> %{{.*}}, <4 x i32> %{{.*}}) return _mm_maskz_load_epi32(__U, __P); } __m256i test_mm256_load_epi32(void const *__P) { - // CHECK-LABEL: @test_mm256_load_epi32 + // CHECK-LABEL: test_mm256_load_epi32 // CHECK: load <4 x i64>, ptr %{{.*}} return _mm256_load_epi32(__P); } __m256i test_mm256_mask_load_epi32(__m256i __W, __mmask8 __U, void const *__P) { - // CHECK-LABEL: @test_mm256_mask_load_epi32 + // CHECK-LABEL: test_mm256_mask_load_epi32 // CHECK: @llvm.masked.load.v8i32.p0(ptr %{{.*}}, i32 32, <8 x i1> %{{.*}}, <8 x i32> %{{.*}}) return _mm256_mask_load_epi32(__W, __U, __P); } __m256i test_mm256_maskz_load_epi32(__mmask8 __U, void const *__P) { - // CHECK-LABEL: @test_mm256_maskz_load_epi32 + // CHECK-LABEL: test_mm256_maskz_load_epi32 // CHECK: @llvm.masked.load.v8i32.p0(ptr %{{.*}}, i32 32, <8 x i1> %{{.*}}, <8 x i32> %{{.*}}) return _mm256_maskz_load_epi32(__U, __P); } __m128i test_mm_load_epi64(void const *__P) { - // CHECK-LABEL: @test_mm_load_epi64 + // CHECK-LABEL: test_mm_load_epi64 // CHECK: load <2 x i64>, ptr %{{.*}} return _mm_load_epi64(__P); } __m128i test_mm_mask_load_epi64(__m128i __W, __mmask8 __U, void const *__P) { - // CHECK-LABEL: @test_mm_mask_load_epi64 + // CHECK-LABEL: test_mm_mask_load_epi64 // CHECK: @llvm.masked.load.v2i64.p0(ptr %{{.*}}, i32 16, <2 x i1> %{{.*}}, <2 x i64> %{{.*}}) return _mm_mask_load_epi64(__W, __U, __P); } __m128i test_mm_maskz_load_epi64(__mmask8 __U, void const *__P) { - // CHECK-LABEL: @test_mm_maskz_load_epi64 + // CHECK-LABEL: test_mm_maskz_load_epi64 // CHECK: @llvm.masked.load.v2i64.p0(ptr %{{.*}}, i32 16, <2 x i1> %{{.*}}, <2 x i64> %{{.*}}) return _mm_maskz_load_epi64(__U, __P); } __m256i test_mm256_load_epi64(void const *__P) { - // CHECK-LABEL: @test_mm256_load_epi64 + // CHECK-LABEL: test_mm256_load_epi64 // CHECK: load <4 x i64>, ptr %{{.*}} return _mm256_load_epi64(__P); } __m256i test_mm256_mask_load_epi64(__m256i __W, __mmask8 __U, void const *__P) { - // CHECK-LABEL: @test_mm256_mask_load_epi64 + // CHECK-LABEL: test_mm256_mask_load_epi64 // CHECK: @llvm.masked.load.v4i64.p0(ptr %{{.*}}, i32 32, <4 x i1> %{{.*}}, <4 x i64> %{{.*}}) return _mm256_mask_load_epi64(__W, __U, __P); } __m256i test_mm256_maskz_load_epi64(__mmask8 __U, void const *__P) { - // CHECK-LABEL: @test_mm256_maskz_load_epi64 + // CHECK-LABEL: test_mm256_maskz_load_epi64 // CHECK: @llvm.masked.load.v4i64.p0(ptr %{{.*}}, i32 32, <4 x i1> %{{.*}}, <4 x i64> %{{.*}}) return _mm256_maskz_load_epi64(__U, __P); } void test_mm_store_epi64(void *__P, __m128i __A) { - // CHECK-LABEL: @test_mm_store_epi64 + // CHECK-LABEL: test_mm_store_epi64 // CHECK: store <2 x i64> %{{.*}}, ptr %{{.*}} return _mm_store_epi64(__P, __A); } void test_mm_mask_store_epi64(void *__P, __mmask8 __U, __m128i __A) { - // CHECK-LABEL: @test_mm_mask_store_epi64 + // CHECK-LABEL: test_mm_mask_store_epi64 // CHECK: @llvm.masked.store.v2i64.p0(<2 x i64> %{{.*}}, ptr %{{.*}}, i32 16, <2 x i1> %{{.*}}) return _mm_mask_store_epi64(__P, __U, __A); } void test_mm256_store_epi64(void *__P, __m256i __A) { - // CHECK-LABEL: @test_mm256_store_epi64 + // CHECK-LABEL: test_mm256_store_epi64 // CHECK: store <4 x i64> %{{.*}}, ptr %{{.*}} return _mm256_store_epi64(__P, __A); } void test_mm256_mask_store_epi64(void *__P, __mmask8 __U, __m256i __A) { - // CHECK-LABEL: @test_mm256_mask_store_epi64 + // CHECK-LABEL: test_mm256_mask_store_epi64 // CHECK: @llvm.masked.store.v4i64.p0(<4 x i64> %{{.*}}, ptr %{{.*}}, i32 32, <4 x i1> %{{.*}}) return _mm256_mask_store_epi64(__P, __U, __A); } __m128d test_mm_mask_movedup_pd(__m128d __W, __mmask8 __U, __m128d __A) { - // CHECK-LABEL: @test_mm_mask_movedup_pd + // CHECK-LABEL: test_mm_mask_movedup_pd // CHECK: shufflevector <2 x double> %{{.*}}, <2 x double> %{{.*}}, <2 x i32> zeroinitializer // CHECK: select <2 x i1> %{{.*}}, <2 x double> %{{.*}}, <2 x double> %{{.*}} return _mm_mask_movedup_pd(__W, __U, __A); } __m128d test_mm_maskz_movedup_pd(__mmask8 __U, __m128d __A) { - // CHECK-LABEL: @test_mm_maskz_movedup_pd + // CHECK-LABEL: test_mm_maskz_movedup_pd // CHECK: shufflevector <2 x double> %{{.*}}, <2 x double> %{{.*}}, <2 x i32> zeroinitializer // CHECK: select <2 x i1> %{{.*}}, <2 x double> %{{.*}}, <2 x double> %{{.*}} return _mm_maskz_movedup_pd(__U, __A); } __m256d test_mm256_mask_movedup_pd(__m256d __W, __mmask8 __U, __m256d __A) { - // CHECK-LABEL: @test_mm256_mask_movedup_pd + // CHECK-LABEL: test_mm256_mask_movedup_pd // CHECK: shufflevector <4 x double> %{{.*}}, <4 x double> %{{.*}}, <4 x i32> <i32 0, i32 0, i32 2, i32 2> // CHECK: select <4 x i1> %{{.*}}, <4 x double> %{{.*}}, <4 x double> %{{.*}} return _mm256_mask_movedup_pd(__W, __U, __A); } __m256d test_mm256_maskz_movedup_pd(__mmask8 __U, __m256d __A) { - // CHECK-LABEL: @test_mm256_maskz_movedup_pd + // CHECK-LABEL: test_mm256_maskz_movedup_pd // CHECK: shufflevector <4 x double> %{{.*}}, <4 x double> %{{.*}}, <4 x i32> <i32 0, i32 0, i32 2, i32 2> // CHECK: select <4 x i1> %{{.*}}, <4 x double> %{{.*}}, <4 x double> %{{.*}} return _mm256_maskz_movedup_pd(__U, __A); } __m128i test_mm_mask_set1_epi32(__m128i __O, __mmask8 __M) { - // CHECK-LABEL: @test_mm_mask_set1_epi32 + // CHECK-LABEL: test_mm_mask_set1_epi32 // CHECK: insertelement <4 x i32> poison, i32 %{{.*}}, i32 0 // CHECK: insertelement <4 x i32> %{{.*}}32 1 // CHECK: insertelement <4 x i32> %{{.*}}32 2 @@ -6678,7 +6766,7 @@ __m128i test_mm_mask_set1_epi32(__m128i __O, __mmask8 __M) { } __m128i test_mm_maskz_set1_epi32(__mmask8 __M) { - // CHECK-LABEL: @test_mm_maskz_set1_epi32 + // CHECK-LABEL: test_mm_maskz_set1_epi32 // CHECK: insertelement <4 x i32> poison, i32 %{{.*}}, i32 0 // CHECK: insertelement <4 x i32> %{{.*}}32 1 // CHECK: insertelement <4 x i32> %{{.*}}32 2 @@ -6689,7 +6777,7 @@ __m128i test_mm_maskz_set1_epi32(__mmask8 __M) { } __m256i test_mm256_mask_set1_epi32(__m256i __O, __mmask8 __M) { - // CHECK-LABEL: @test_mm256_mask_set1_epi32 + // CHECK-LABEL: test_mm256_mask_set1_epi32 // CHECK: insertelement <8 x i32> poison, i32 %{{.*}}, i32 0 // CHECK: insertelement <8 x i32> %{{.*}}, i32 %{{.*}}, i32 1 // CHECK: insertelement <8 x i32> %{{.*}}, i32 %{{.*}}, i32 2 @@ -6703,7 +6791,7 @@ __m256i test_mm256_mask_set1_epi32(__m256i __O, __mmask8 __M) { } __m256i test_mm256_maskz_set1_epi32(__mmask8 __M) { - // CHECK-LABEL: @test_mm256_maskz_set1_epi32 + // CHECK-LABEL: test_mm256_maskz_set1_epi32 // CHECK: insertelement <8 x i32> poison, i32 %{{.*}}, i32 0 // CHECK: insertelement <8 x i32> %{{.*}}, i32 %{{.*}}, i32 1 // CHECK: insertelement <8 x i32> %{{.*}}, i32 %{{.*}}, i32 2 @@ -6717,7 +6805,7 @@ __m256i test_mm256_maskz_set1_epi32(__mmask8 __M) { } __m128i test_mm_mask_set1_epi64(__m128i __O, __mmask8 __M, long long __A) { - // CHECK-LABEL: @test_mm_mask_set1_epi64 + // CHECK-LABEL: test_mm_mask_set1_epi64 // CHECK: insertelement <2 x i64> poison, i64 %{{.*}}, i32 0 // CHECK: insertelement <2 x i64> %{{.*}}, i64 %{{.*}}, i32 1 // CHECK: shufflevector <8 x i1> %{{.*}}, <8 x i1> %{{.*}}, <2 x i32> <i32 0, i32 1> @@ -6726,7 +6814,7 @@ __m128i test_mm_mask_set1_epi64(__m128i __O, __mmask8 __M, long long __A) { } __m128i test_mm_maskz_set1_epi64(__mmask8 __M, long long __A) { - // CHECK-LABEL: @test_mm_maskz_set1_epi64 + // CHECK-LABEL: test_mm_maskz_set1_epi64 // CHECK: insertelement <2 x i64> poison, i64 %{{.*}}, i32 0 // CHECK: insertelement <2 x i64> %{{.*}}, i64 %{{.*}}, i32 1 // CHECK: shufflevector <8 x i1> %{{.*}}, <8 x i1> %{{.*}}, <2 x i32> <i32 0, i32 1> @@ -6735,7 +6823,7 @@ __m128i test_mm_maskz_set1_epi64(__mmask8 __M, long long __A) { } __m256i test_mm256_mask_set1_epi64(__m256i __O, __mmask8 __M, long long __A) { - // CHECK-LABEL: @test_mm256_mask_set1_epi64 + // CHECK-LABEL: test_mm256_mask_set1_epi64 // CHECK: insertelement <4 x i64> poison, i64 %{{.*}}, i32 0 // CHECK: insertelement <4 x i64> %{{.*}}, i64 %{{.*}}, i32 1 // CHECK: insertelement <4 x i64> %{{.*}}, i64 %{{.*}}, i32 2 @@ -6746,7 +6834,7 @@ __m256i test_mm256_mask_set1_epi64(__m256i __O, __mmask8 __M, long long __A) { } __m256i test_mm256_maskz_set1_epi64(__mmask8 __M, long long __A) { - // CHECK-LABEL: @test_mm256_maskz_set1_epi64 + // CHECK-LABEL: test_mm256_maskz_set1_epi64 // CHECK: insertelement <4 x i64> poison, i64 %{{.*}}, i32 0 // CHECK: insertelement <4 x i64> %{{.*}}, i64 %{{.*}}, i32 1 // CHECK: insertelement <4 x i64> %{{.*}}, i64 %{{.*}}, i32 2 @@ -6757,646 +6845,646 @@ __m256i test_mm256_maskz_set1_epi64(__mmask8 __M, long long __A) { } __m128d test_mm_fixupimm_pd(__m128d __A, __m128d __B, __m128i __C) { - // CHECK-LABEL: @test_mm_fixupimm_pd + // CHECK-LABEL: test_mm_fixupimm_pd // CHECK: @llvm.x86.avx512.mask.fixupimm.pd.128 return _mm_fixupimm_pd(__A, __B, __C, 5); } __m128d test_mm_mask_fixupimm_pd(__m128d __A, __mmask8 __U, __m128d __B, __m128i __C) { - // CHECK-LABEL: @test_mm_mask_fixupimm_pd + // CHECK-LABEL: test_mm_mask_fixupimm_pd // CHECK: @llvm.x86.avx512.mask.fixupimm.pd.128 return _mm_mask_fixupimm_pd(__A, __U, __B, __C, 5); } __m128d test_mm_maskz_fixupimm_pd(__mmask8 __U, __m128d __A, __m128d __B, __m128i __C) { - // CHECK-LABEL: @test_mm_maskz_fixupimm_pd + // CHECK-LABEL: test_mm_maskz_fixupimm_pd // CHECK: @llvm.x86.avx512.maskz.fixupimm.pd.128 return _mm_maskz_fixupimm_pd(__U, __A, __B, __C, 5); } __m256d test_mm256_fixupimm_pd(__m256d __A, __m256d __B, __m256i __C) { - // CHECK-LABEL: @test_mm256_fixupimm_pd + // CHECK-LABEL: test_mm256_fixupimm_pd // CHECK: @llvm.x86.avx512.mask.fixupimm.pd.256 return _mm256_fixupimm_pd(__A, __B, __C, 5); } __m256d test_mm256_mask_fixupimm_pd(__m256d __A, __mmask8 __U, __m256d __B, __m256i __C) { - // CHECK-LABEL: @test_mm256_mask_fixupimm_pd + // CHECK-LABEL: test_mm256_mask_fixupimm_pd // CHECK: @llvm.x86.avx512.mask.fixupimm.pd.256 return _mm256_mask_fixupimm_pd(__A, __U, __B, __C, 5); } __m256d test_mm256_maskz_fixupimm_pd(__mmask8 __U, __m256d __A, __m256d __B, __m256i __C) { - // CHECK-LABEL: @test_mm256_maskz_fixupimm_pd + // CHECK-LABEL: test_mm256_maskz_fixupimm_pd // CHECK: @llvm.x86.avx512.maskz.fixupimm.pd.256 return _mm256_maskz_fixupimm_pd(__U, __A, __B, __C, 5); } __m128 test_mm_fixupimm_ps(__m128 __A, __m128 __B, __m128i __C) { - // CHECK-LABEL: @test_mm_fixupimm_ps + // CHECK-LABEL: test_mm_fixupimm_ps // CHECK: @llvm.x86.avx512.mask.fixupimm.ps.128 return _mm_fixupimm_ps(__A, __B, __C, 5); } __m128 test_mm_mask_fixupimm_ps(__m128 __A, __mmask8 __U, __m128 __B, __m128i __C) { - // CHECK-LABEL: @test_mm_mask_fixupimm_ps + // CHECK-LABEL: test_mm_mask_fixupimm_ps // CHECK: @llvm.x86.avx512.mask.fixupimm.ps.128 return _mm_mask_fixupimm_ps(__A, __U, __B, __C, 5); } __m128 test_mm_maskz_fixupimm_ps(__mmask8 __U, __m128 __A, __m128 __B, __m128i __C) { - // CHECK-LABEL: @test_mm_maskz_fixupimm_ps + // CHECK-LABEL: test_mm_maskz_fixupimm_ps // CHECK: @llvm.x86.avx512.maskz.fixupimm.ps.128 return _mm_maskz_fixupimm_ps(__U, __A, __B, __C, 5); } __m256 test_mm256_fixupimm_ps(__m256 __A, __m256 __B, __m256i __C) { - // CHECK-LABEL: @test_mm256_fixupimm_ps + // CHECK-LABEL: test_mm256_fixupimm_ps // CHECK: @llvm.x86.avx512.mask.fixupimm.ps.256 return _mm256_fixupimm_ps(__A, __B, __C, 5); } __m256 test_mm256_mask_fixupimm_ps(__m256 __A, __mmask8 __U, __m256 __B, __m256i __C) { - // CHECK-LABEL: @test_mm256_mask_fixupimm_ps + // CHECK-LABEL: test_mm256_mask_fixupimm_ps // CHECK: @llvm.x86.avx512.mask.fixupimm.ps.256 return _mm256_mask_fixupimm_ps(__A, __U, __B, __C, 5); } __m256 test_mm256_maskz_fixupimm_ps(__mmask8 __U, __m256 __A, __m256 __B, __m256i __C) { - // CHECK-LABEL: @test_mm256_maskz_fixupimm_ps + // CHECK-LABEL: test_mm256_maskz_fixupimm_ps // CHECK: @llvm.x86.avx512.maskz.fixupimm.ps.256 return _mm256_maskz_fixupimm_ps(__U, __A, __B, __C, 5); } __m128d test_mm_mask_load_pd(__m128d __W, __mmask8 __U, void const *__P) { - // CHECK-LABEL: @test_mm_mask_load_pd + // CHECK-LABEL: test_mm_mask_load_pd // CHECK: @llvm.masked.load.v2f64.p0(ptr %{{.*}}, i32 16, <2 x i1> %{{.*}}, <2 x double> %{{.*}}) return _mm_mask_load_pd(__W, __U, __P); } __m128d test_mm_maskz_load_pd(__mmask8 __U, void const *__P) { - // CHECK-LABEL: @test_mm_maskz_load_pd + // CHECK-LABEL: test_mm_maskz_load_pd // CHECK: @llvm.masked.load.v2f64.p0(ptr %{{.*}}, i32 16, <2 x i1> %{{.*}}, <2 x double> %{{.*}}) return _mm_maskz_load_pd(__U, __P); } __m256d test_mm256_mask_load_pd(__m256d __W, __mmask8 __U, void const *__P) { - // CHECK-LABEL: @test_mm256_mask_load_pd + // CHECK-LABEL: test_mm256_mask_load_pd // CHECK: @llvm.masked.load.v4f64.p0(ptr %{{.*}}, i32 32, <4 x i1> %{{.*}}, <4 x double> %{{.*}}) return _mm256_mask_load_pd(__W, __U, __P); } __m256d test_mm256_maskz_load_pd(__mmask8 __U, void const *__P) { - // CHECK-LABEL: @test_mm256_maskz_load_pd + // CHECK-LABEL: test_mm256_maskz_load_pd // CHECK: @llvm.masked.load.v4f64.p0(ptr %{{.*}}, i32 32, <4 x i1> %{{.*}}, <4 x double> %{{.*}}) return _mm256_maskz_load_pd(__U, __P); } __m128 test_mm_mask_load_ps(__m128 __W, __mmask8 __U, void const *__P) { - // CHECK-LABEL: @test_mm_mask_load_ps + // CHECK-LABEL: test_mm_mask_load_ps // CHECK: @llvm.masked.load.v4f32.p0(ptr %{{.*}}, i32 16, <4 x i1> %{{.*}}, <4 x float> %{{.*}}) return _mm_mask_load_ps(__W, __U, __P); } __m128 test_mm_maskz_load_ps(__mmask8 __U, void const *__P) { - // CHECK-LABEL: @test_mm_maskz_load_ps + // CHECK-LABEL: test_mm_maskz_load_ps // CHECK: @llvm.masked.load.v4f32.p0(ptr %{{.*}}, i32 16, <4 x i1> %{{.*}}, <4 x float> %{{.*}}) return _mm_maskz_load_ps(__U, __P); } __m256 test_mm256_mask_load_ps(__m256 __W, __mmask8 __U, void const *__P) { - // CHECK-LABEL: @test_mm256_mask_load_ps + // CHECK-LABEL: test_mm256_mask_load_ps // CHECK: @llvm.masked.load.v8f32.p0(ptr %{{.*}}, i32 32, <8 x i1> %{{.*}}, <8 x float> %{{.*}}) return _mm256_mask_load_ps(__W, __U, __P); } __m256 test_mm256_maskz_load_ps(__mmask8 __U, void const *__P) { - // CHECK-LABEL: @test_mm256_maskz_load_ps + // CHECK-LABEL: test_mm256_maskz_load_ps // CHECK: @llvm.masked.load.v8f32.p0(ptr %{{.*}}, i32 32, <8 x i1> %{{.*}}, <8 x float> %{{.*}}) return _mm256_maskz_load_ps(__U, __P); } __m128i test_mm_loadu_epi64(void const *__P) { - // CHECK-LABEL: @test_mm_loadu_epi64 + // CHECK-LABEL: test_mm_loadu_epi64 // CHECK: load <2 x i64>, ptr %{{.*}}, align 1{{$}} return _mm_loadu_epi64(__P); } __m128i test_mm_mask_loadu_epi64(__m128i __W, __mmask8 __U, void const *__P) { - // CHECK-LABEL: @test_mm_mask_loadu_epi64 + // CHECK-LABEL: test_mm_mask_loadu_epi64 // CHECK: @llvm.masked.load.v2i64.p0(ptr %{{.*}}, i32 1, <2 x i1> %{{.*}}, <2 x i64> %{{.*}}) return _mm_mask_loadu_epi64(__W, __U, __P); } __m128i test_mm_maskz_loadu_epi64(__mmask8 __U, void const *__P) { - // CHECK-LABEL: @test_mm_maskz_loadu_epi64 + // CHECK-LABEL: test_mm_maskz_loadu_epi64 // CHECK: @llvm.masked.load.v2i64.p0(ptr %{{.*}}, i32 1, <2 x i1> %{{.*}}, <2 x i64> %{{.*}}) return _mm_maskz_loadu_epi64(__U, __P); } __m256i test_mm256_loadu_epi64(void const *__P) { - // CHECK-LABEL: @test_mm256_loadu_epi64 + // CHECK-LABEL: test_mm256_loadu_epi64 // CHECK: load <4 x i64>, ptr %{{.*}}, align 1{{$}} return _mm256_loadu_epi64(__P); } __m256i test_mm256_mask_loadu_epi64(__m256i __W, __mmask8 __U, void const *__P) { - // CHECK-LABEL: @test_mm256_mask_loadu_epi64 + // CHECK-LABEL: test_mm256_mask_loadu_epi64 // CHECK: @llvm.masked.load.v4i64.p0(ptr %{{.*}}, i32 1, <4 x i1> %{{.*}}, <4 x i64> %{{.*}}) return _mm256_mask_loadu_epi64(__W, __U, __P); } __m256i test_mm256_maskz_loadu_epi64(__mmask8 __U, void const *__P) { - // CHECK-LABEL: @test_mm256_maskz_loadu_epi64 + // CHECK-LABEL: test_mm256_maskz_loadu_epi64 // CHECK: @llvm.masked.load.v4i64.p0(ptr %{{.*}}, i32 1, <4 x i1> %{{.*}}, <4 x i64> %{{.*}}) return _mm256_maskz_loadu_epi64(__U, __P); } __m128i test_mm_loadu_epi32(void const *__P) { - // CHECK-LABEL: @test_mm_loadu_epi32 + // CHECK-LABEL: test_mm_loadu_epi32 // CHECK: load <2 x i64>, ptr %{{.*}}, align 1{{$}} return _mm_loadu_epi32(__P); } __m128i test_mm_mask_loadu_epi32(__m128i __W, __mmask8 __U, void const *__P) { - // CHECK-LABEL: @test_mm_mask_loadu_epi32 + // CHECK-LABEL: test_mm_mask_loadu_epi32 // CHECK: @llvm.masked.load.v4i32.p0(ptr %{{.*}}, i32 1, <4 x i1> %{{.*}}, <4 x i32> %{{.*}}) return _mm_mask_loadu_epi32(__W, __U, __P); } __m128i test_mm_maskz_loadu_epi32(__mmask8 __U, void const *__P) { - // CHECK-LABEL: @test_mm_maskz_loadu_epi32 + // CHECK-LABEL: test_mm_maskz_loadu_epi32 // CHECK: @llvm.masked.load.v4i32.p0(ptr %{{.*}}, i32 1, <4 x i1> %{{.*}}, <4 x i32> %{{.*}}) return _mm_maskz_loadu_epi32(__U, __P); } __m256i test_mm256_loadu_epi32(void const *__P) { - // CHECK-LABEL: @test_mm256_loadu_epi32 + // CHECK-LABEL: test_mm256_loadu_epi32 // CHECK: load <4 x i64>, ptr %{{.*}}, align 1{{$}} return _mm256_loadu_epi32(__P); } __m256i test_mm256_mask_loadu_epi32(__m256i __W, __mmask8 __U, void const *__P) { - // CHECK-LABEL: @test_mm256_mask_loadu_epi32 + // CHECK-LABEL: test_mm256_mask_loadu_epi32 // CHECK: @llvm.masked.load.v8i32.p0(ptr %{{.*}}, i32 1, <8 x i1> %{{.*}}, <8 x i32> %{{.*}}) return _mm256_mask_loadu_epi32(__W, __U, __P); } __m256i test_mm256_maskz_loadu_epi32(__mmask8 __U, void const *__P) { - // CHECK-LABEL: @test_mm256_maskz_loadu_epi32 + // CHECK-LABEL: test_mm256_maskz_loadu_epi32 // CHECK: @llvm.masked.load.v8i32.p0(ptr %{{.*}}, i32 1, <8 x i1> %{{.*}}, <8 x i32> %{{.*}}) return _mm256_maskz_loadu_epi32(__U, __P); } __m128d test_mm_mask_loadu_pd(__m128d __W, __mmask8 __U, void const *__P) { - // CHECK-LABEL: @test_mm_mask_loadu_pd + // CHECK-LABEL: test_mm_mask_loadu_pd // CHECK: @llvm.masked.load.v2f64.p0(ptr %{{.*}}, i32 1, <2 x i1> %{{.*}}, <2 x double> %{{.*}}) return _mm_mask_loadu_pd(__W, __U, __P); } __m128d test_mm_maskz_loadu_pd(__mmask8 __U, void const *__P) { - // CHECK-LABEL: @test_mm_maskz_loadu_pd + // CHECK-LABEL: test_mm_maskz_loadu_pd // CHECK: @llvm.masked.load.v2f64.p0(ptr %{{.*}}, i32 1, <2 x i1> %{{.*}}, <2 x double> %{{.*}}) return _mm_maskz_loadu_pd(__U, __P); } __m256d test_mm256_mask_loadu_pd(__m256d __W, __mmask8 __U, void const *__P) { - // CHECK-LABEL: @test_mm256_mask_loadu_pd + // CHECK-LABEL: test_mm256_mask_loadu_pd // CHECK: @llvm.masked.load.v4f64.p0(ptr %{{.*}}, i32 1, <4 x i1> %{{.*}}, <4 x double> %{{.*}}) return _mm256_mask_loadu_pd(__W, __U, __P); } __m256d test_mm256_maskz_loadu_pd(__mmask8 __U, void const *__P) { - // CHECK-LABEL: @test_mm256_maskz_loadu_pd + // CHECK-LABEL: test_mm256_maskz_loadu_pd // CHECK: @llvm.masked.load.v4f64.p0(ptr %{{.*}}, i32 1, <4 x i1> %{{.*}}, <4 x double> %{{.*}}) return _mm256_maskz_loadu_pd(__U, __P); } __m128 test_mm_mask_loadu_ps(__m128 __W, __mmask8 __U, void const *__P) { - // CHECK-LABEL: @test_mm_mask_loadu_ps + // CHECK-LABEL: test_mm_mask_loadu_ps // CHECK: @llvm.masked.load.v4f32.p0(ptr %{{.*}}, i32 1, <4 x i1> %{{.*}}, <4 x float> %{{.*}}) return _mm_mask_loadu_ps(__W, __U, __P); } __m128 test_mm_maskz_loadu_ps(__mmask8 __U, void const *__P) { - // CHECK-LABEL: @test_mm_maskz_loadu_ps + // CHECK-LABEL: test_mm_maskz_loadu_ps // CHECK: @llvm.masked.load.v4f32.p0(ptr %{{.*}}, i32 1, <4 x i1> %{{.*}}, <4 x float> %{{.*}}) return _mm_maskz_loadu_ps(__U, __P); } __m256 test_mm256_mask_loadu_ps(__m256 __W, __mmask8 __U, void const *__P) { - // CHECK-LABEL: @test_mm256_mask_loadu_ps + // CHECK-LABEL: test_mm256_mask_loadu_ps // CHECK: @llvm.masked.load.v8f32.p0(ptr %{{.*}}, i32 1, <8 x i1> %{{.*}}, <8 x float> %{{.*}}) return _mm256_mask_loadu_ps(__W, __U, __P); } __m256 test_mm256_maskz_loadu_ps(__mmask8 __U, void const *__P) { - // CHECK-LABEL: @test_mm256_maskz_loadu_ps + // CHECK-LABEL: test_mm256_maskz_loadu_ps // CHECK: @llvm.masked.load.v8f32.p0(ptr %{{.*}}, i32 1, <8 x i1> %{{.*}}, <8 x float> %{{.*}}) return _mm256_maskz_loadu_ps(__U, __P); } void test_mm_mask_store_pd(void *__P, __mmask8 __U, __m128d __A) { - // CHECK-LABEL: @test_mm_mask_store_pd + // CHECK-LABEL: test_mm_mask_store_pd // CHECK: @llvm.masked.store.v2f64.p0(<2 x double> %{{.*}}, ptr %{{.*}}, i32 16, <2 x i1> %{{.*}}) return _mm_mask_store_pd(__P, __U, __A); } void test_mm256_mask_store_pd(void *__P, __mmask8 __U, __m256d __A) { - // CHECK-LABEL: @test_mm256_mask_store_pd + // CHECK-LABEL: test_mm256_mask_store_pd // CHECK: @llvm.masked.store.v4f64.p0(<4 x double> %{{.*}}, ptr %{{.*}}, i32 32, <4 x i1> %{{.*}}) return _mm256_mask_store_pd(__P, __U, __A); } void test_mm_mask_store_ps(void *__P, __mmask8 __U, __m128 __A) { - // CHECK-LABEL: @test_mm_mask_store_ps + // CHECK-LABEL: test_mm_mask_store_ps // CHECK: @llvm.masked.store.v4f32.p0(<4 x float> %{{.*}}, ptr %{{.*}}, i32 16, <4 x i1> %{{.*}}) return _mm_mask_store_ps(__P, __U, __A); } void test_mm256_mask_store_ps(void *__P, __mmask8 __U, __m256 __A) { - // CHECK-LABEL: @test_mm256_mask_store_ps + // CHECK-LABEL: test_mm256_mask_store_ps // CHECK: @llvm.masked.store.v8f32.p0(<8 x float> %{{.*}}, ptr %{{.*}}, i32 32, <8 x i1> %{{.*}}) return _mm256_mask_store_ps(__P, __U, __A); } void test_mm_storeu_epi64(void *__p, __m128i __a) { - // check-label: @test_mm_storeu_epi64 + // CHECK-LABEL: test_mm_storeu_epi64 // check: store <2 x i64> %{{.*}}, ptr %{{.*}}, align 1{{$}} return _mm_storeu_epi64(__p, __a); } void test_mm_mask_storeu_epi64(void *__P, __mmask8 __U, __m128i __A) { - // CHECK-LABEL: @test_mm_mask_storeu_epi64 + // CHECK-LABEL: test_mm_mask_storeu_epi64 // CHECK: @llvm.masked.store.v2i64.p0(<2 x i64> %{{.*}}, ptr %{{.*}}, i32 1, <2 x i1> %{{.*}}) return _mm_mask_storeu_epi64(__P, __U, __A); } void test_mm256_storeu_epi64(void *__P, __m256i __A) { - // CHECK-LABEL: @test_mm256_storeu_epi64 + // CHECK-LABEL: test_mm256_storeu_epi64 // CHECK: store <4 x i64> %{{.*}}, ptr %{{.*}}, align 1{{$}} return _mm256_storeu_epi64(__P, __A); } void test_mm256_mask_storeu_epi64(void *__P, __mmask8 __U, __m256i __A) { - // CHECK-LABEL: @test_mm256_mask_storeu_epi64 + // CHECK-LABEL: test_mm256_mask_storeu_epi64 // CHECK: @llvm.masked.store.v4i64.p0(<4 x i64> %{{.*}}, ptr %{{.*}}, i32 1, <4 x i1> %{{.*}}) return _mm256_mask_storeu_epi64(__P, __U, __A); } void test_mm_storeu_epi32(void *__P, __m128i __A) { - // CHECK-LABEL: @test_mm_storeu_epi32 + // CHECK-LABEL: test_mm_storeu_epi32 // CHECK: store <2 x i64> %{{.*}}, ptr %{{.*}}, align 1{{$}} return _mm_storeu_epi32(__P, __A); } void test_mm_mask_storeu_epi32(void *__P, __mmask8 __U, __m128i __A) { - // CHECK-LABEL: @test_mm_mask_storeu_epi32 + // CHECK-LABEL: test_mm_mask_storeu_epi32 // CHECK: @llvm.masked.store.v4i32.p0(<4 x i32> %{{.*}}, ptr %{{.*}}, i32 1, <4 x i1> %{{.*}}) return _mm_mask_storeu_epi32(__P, __U, __A); } void test_mm256_storeu_epi32(void *__P, __m256i __A) { - // CHECK-LABEL: @test_mm256_storeu_epi32 + // CHECK-LABEL: test_mm256_storeu_epi32 // CHECK: store <4 x i64> %{{.*}}, ptr %{{.*}}, align 1{{$}} return _mm256_storeu_epi32(__P, __A); } void test_mm256_mask_storeu_epi32(void *__P, __mmask8 __U, __m256i __A) { - // CHECK-LABEL: @test_mm256_mask_storeu_epi32 + // CHECK-LABEL: test_mm256_mask_storeu_epi32 // CHECK: @llvm.masked.store.v8i32.p0(<8 x i32> %{{.*}}, ptr %{{.*}}, i32 1, <8 x i1> %{{.*}}) return _mm256_mask_storeu_epi32(__P, __U, __A); } void test_mm_mask_storeu_pd(void *__P, __mmask8 __U, __m128d __A) { - // CHECK-LABEL: @test_mm_mask_storeu_pd + // CHECK-LABEL: test_mm_mask_storeu_pd // CHECK: @llvm.masked.store.v2f64.p0(<2 x double> %{{.*}}, ptr %{{.*}}, i32 1, <2 x i1> %{{.*}}) return _mm_mask_storeu_pd(__P, __U, __A); } void test_mm256_mask_storeu_pd(void *__P, __mmask8 __U, __m256d __A) { - // CHECK-LABEL: @test_mm256_mask_storeu_pd + // CHECK-LABEL: test_mm256_mask_storeu_pd // CHECK: @llvm.masked.store.v4f64.p0(<4 x double> %{{.*}}, ptr %{{.*}}, i32 1, <4 x i1> %{{.*}}) return _mm256_mask_storeu_pd(__P, __U, __A); } void test_mm_mask_storeu_ps(void *__P, __mmask8 __U, __m128 __A) { - // CHECK-LABEL: @test_mm_mask_storeu_ps + // CHECK-LABEL: test_mm_mask_storeu_ps // CHECK: @llvm.masked.store.v4f32.p0(<4 x float> %{{.*}}, ptr %{{.*}}, i32 1, <4 x i1> %{{.*}}) return _mm_mask_storeu_ps(__P, __U, __A); } void test_mm256_mask_storeu_ps(void *__P, __mmask8 __U, __m256 __A) { - // CHECK-LABEL: @test_mm256_mask_storeu_ps + // CHECK-LABEL: test_mm256_mask_storeu_ps // CHECK: @llvm.masked.store.v8f32.p0(<8 x float> %{{.*}}, ptr %{{.*}}, i32 1, <8 x i1> %{{.*}}) return _mm256_mask_storeu_ps(__P, __U, __A); } __m128d test_mm_mask_unpackhi_pd(__m128d __W, __mmask8 __U, __m128d __A, __m128d __B) { - // CHECK-LABEL: @test_mm_mask_unpackhi_pd + // CHECK-LABEL: test_mm_mask_unpackhi_pd // CHECK: shufflevector <2 x double> %{{.*}}, <2 x double> %{{.*}}, <2 x i32> <i32 1, i32 3> // CHECK: select <2 x i1> %{{.*}}, <2 x double> %{{.*}}, <2 x double> %{{.*}} return _mm_mask_unpackhi_pd(__W, __U, __A, __B); } __m128d test_mm_maskz_unpackhi_pd(__mmask8 __U, __m128d __A, __m128d __B) { - // CHECK-LABEL: @test_mm_maskz_unpackhi_pd + // CHECK-LABEL: test_mm_maskz_unpackhi_pd // CHECK: shufflevector <2 x double> %{{.*}}, <2 x double> %{{.*}}, <2 x i32> <i32 1, i32 3> // CHECK: select <2 x i1> %{{.*}}, <2 x double> %{{.*}}, <2 x double> %{{.*}} return _mm_maskz_unpackhi_pd(__U, __A, __B); } __m256d test_mm256_mask_unpackhi_pd(__m256d __W, __mmask8 __U, __m256d __A, __m256d __B) { - // CHECK-LABEL: @test_mm256_mask_unpackhi_pd + // CHECK-LABEL: test_mm256_mask_unpackhi_pd // CHECK: shufflevector <8 x i1> %{{.*}}, <8 x i1> %{{.*}}, <4 x i32> <i32 0, i32 1, i32 2, i32 3> // CHECK: select <4 x i1> %{{.*}} <4 x double> %{{.*}}, <4 x double> %{{.*}} return _mm256_mask_unpackhi_pd(__W, __U, __A, __B); } __m256d test_mm256_maskz_unpackhi_pd(__mmask8 __U, __m256d __A, __m256d __B) { - // CHECK-LABEL: @test_mm256_maskz_unpackhi_pd + // CHECK-LABEL: test_mm256_maskz_unpackhi_pd // CHECK: shufflevector <8 x i1> %{{.*}}, <8 x i1> %{{.*}}, <4 x i32> <i32 0, i32 1, i32 2, i32 3> // CHECK: select <4 x i1> %{{.*}} <4 x double> %{{.*}}, <4 x double> %{{.*}} return _mm256_maskz_unpackhi_pd(__U, __A, __B); } __m128 test_mm_mask_unpackhi_ps(__m128 __W, __mmask8 __U, __m128 __A, __m128 __B) { - // CHECK-LABEL: @test_mm_mask_unpackhi_ps + // CHECK-LABEL: test_mm_mask_unpackhi_ps // CHECK: shufflevector <4 x float> %{{.*}}, <4 x float> %{{.*}}, <4 x i32> <i32 2, i32 6, i32 3, i32 7> // CHECK: select <4 x i1> %{{.*}}, <4 x float> %{{.*}} <4 x float> %{{.*}} return _mm_mask_unpackhi_ps(__W, __U, __A, __B); } __m128 test_mm_maskz_unpackhi_ps(__mmask8 __U, __m128 __A, __m128 __B) { - // CHECK-LABEL: @test_mm_maskz_unpackhi_ps + // CHECK-LABEL: test_mm_maskz_unpackhi_ps // CHECK: shufflevector <4 x float> %{{.*}}, <4 x float> %{{.*}}, <4 x i32> <i32 2, i32 6, i32 3, i32 7> // CHECK: select <4 x i1> %{{.*}}, <4 x float> %{{.*}} <4 x float> %{{.*}} return _mm_maskz_unpackhi_ps(__U, __A, __B); } __m256 test_mm256_mask_unpackhi_ps(__m256 __W, __mmask8 __U, __m256 __A, __m256 __B) { - // CHECK-LABEL: @test_mm256_mask_unpackhi_ps + // CHECK-LABEL: test_mm256_mask_unpackhi_ps // CHECK: shufflevector <8 x float> %{{.*}}, <8 x float> %{{.*}}, <8 x i32> <i32 2, i32 10, i32 3, i32 11, i32 6, i32 14, i32 7, i32 15> // CHECK: select <8 x i1> %{{.*}}, <8 x float> %{{.*}}, <8 x float> %{{.*}} return _mm256_mask_unpackhi_ps(__W, __U, __A, __B); } __m256 test_mm256_maskz_unpackhi_ps(__mmask8 __U, __m256 __A, __m256 __B) { - // CHECK-LABEL: @test_mm256_maskz_unpackhi_ps + // CHECK-LABEL: test_mm256_maskz_unpackhi_ps // CHECK: shufflevector <8 x float> %{{.*}}, <8 x float> %{{.*}}, <8 x i32> <i32 2, i32 10, i32 3, i32 11, i32 6, i32 14, i32 7, i32 15> // CHECK: select <8 x i1> %{{.*}}, <8 x float> %{{.*}}, <8 x float> %{{.*}} return _mm256_maskz_unpackhi_ps(__U, __A, __B); } __m128d test_mm_mask_unpacklo_pd(__m128d __W, __mmask8 __U, __m128d __A, __m128d __B) { - // CHECK-LABEL: @test_mm_mask_unpacklo_pd + // CHECK-LABEL: test_mm_mask_unpacklo_pd // CHECK: shufflevector <2 x double> %{{.*}}, <2 x double> %{{.*}}, <2 x i32> <i32 0, i32 2> // CHECK: select <2 x i1> %{{.*}}, <2 x double> %{{.*}}, <2 x double> %{{.*}} return _mm_mask_unpacklo_pd(__W, __U, __A, __B); } __m128d test_mm_maskz_unpacklo_pd(__mmask8 __U, __m128d __A, __m128d __B) { - // CHECK-LABEL: @test_mm_maskz_unpacklo_pd + // CHECK-LABEL: test_mm_maskz_unpacklo_pd // CHECK: shufflevector <2 x double> %{{.*}}, <2 x double> %{{.*}}, <2 x i32> <i32 0, i32 2> // CHECK: select <2 x i1> %{{.*}}, <2 x double> %{{.*}}, <2 x double> %{{.*}} return _mm_maskz_unpacklo_pd(__U, __A, __B); } __m256d test_mm256_mask_unpacklo_pd(__m256d __W, __mmask8 __U, __m256d __A, __m256d __B) { - // CHECK-LABEL: @test_mm256_mask_unpacklo_pd + // CHECK-LABEL: test_mm256_mask_unpacklo_pd // CHECK: shufflevector <4 x double> %{{.*}}, <4 x double> %{{.*}}, <4 x i32> <i32 0, i32 4, i32 2, i32 6> // CHECK: select <4 x i1> %{{.*}} <4 x double> %{{.*}}, <4 x double> %{{.*}} return _mm256_mask_unpacklo_pd(__W, __U, __A, __B); } __m256d test_mm256_maskz_unpacklo_pd(__mmask8 __U, __m256d __A, __m256d __B) { - // CHECK-LABEL: @test_mm256_maskz_unpacklo_pd + // CHECK-LABEL: test_mm256_maskz_unpacklo_pd // CHECK: shufflevector <4 x double> %{{.*}}, <4 x double> %{{.*}}, <4 x i32> <i32 0, i32 4, i32 2, i32 6> // CHECK: select <4 x i1> %{{.*}} <4 x double> %{{.*}}, <4 x double> %{{.*}} return _mm256_maskz_unpacklo_pd(__U, __A, __B); } __m128 test_mm_mask_unpacklo_ps(__m128 __W, __mmask8 __U, __m128 __A, __m128 __B) { - // CHECK-LABEL: @test_mm_mask_unpacklo_ps + // CHECK-LABEL: test_mm_mask_unpacklo_ps // CHECK: shufflevector <4 x float> %{{.*}}, <4 x float> %{{.*}}, <4 x i32> <i32 0, i32 4, i32 1, i32 5> // CHECK: select <4 x i1> %{{.*}} <4 x float> %{{.*}}, <4 x float> %{{.*}} return _mm_mask_unpacklo_ps(__W, __U, __A, __B); } __m128 test_mm_maskz_unpacklo_ps(__mmask8 __U, __m128 __A, __m128 __B) { - // CHECK-LABEL: @test_mm_maskz_unpacklo_ps + // CHECK-LABEL: test_mm_maskz_unpacklo_ps // CHECK: shufflevector <4 x float> %{{.*}}, <4 x float> %{{.*}}, <4 x i32> <i32 0, i32 4, i32 1, i32 5> // CHECK: select <4 x i1> %{{.*}} <4 x float> %{{.*}}, <4 x float> %{{.*}} return _mm_maskz_unpacklo_ps(__U, __A, __B); } __m256 test_mm256_mask_unpacklo_ps(__m256 __W, __mmask8 __U, __m256 __A, __m256 __B) { - // CHECK-LABEL: @test_mm256_mask_unpacklo_ps + // CHECK-LABEL: test_mm256_mask_unpacklo_ps // CHECK: shufflevector <8 x float> %{{.*}}, <8 x float> %{{.*}}, <8 x i32> <i32 0, i32 8, i32 1, i32 9, i32 4, i32 12, i32 5, i32 13> // CHECK: select <8 x i1> %{{.*}}, <8 x float> %{{.*}}, <8 x float> %{{.*}} return _mm256_mask_unpacklo_ps(__W, __U, __A, __B); } __m256 test_mm256_maskz_unpacklo_ps(__mmask8 __U, __m256 __A, __m256 __B) { - // CHECK-LABEL: @test_mm256_maskz_unpacklo_ps + // CHECK-LABEL: test_mm256_maskz_unpacklo_ps // CHECK: shufflevector <8 x float> %{{.*}}, <8 x float> %{{.*}}, <8 x i32> <i32 0, i32 8, i32 1, i32 9, i32 4, i32 12, i32 5, i32 13> // CHECK: select <8 x i1> %{{.*}}, <8 x float> %{{.*}}, <8 x float> %{{.*}} return _mm256_maskz_unpacklo_ps(__U, __A, __B); } __m128d test_mm_rcp14_pd(__m128d __A) { - // CHECK-LABEL: @test_mm_rcp14_pd + // CHECK-LABEL: test_mm_rcp14_pd // CHECK: @llvm.x86.avx512.rcp14.pd.128 return _mm_rcp14_pd(__A); } __m128d test_mm_mask_rcp14_pd(__m128d __W, __mmask8 __U, __m128d __A) { - // CHECK-LABEL: @test_mm_mask_rcp14_pd + // CHECK-LABEL: test_mm_mask_rcp14_pd // CHECK: @llvm.x86.avx512.rcp14.pd.128 return _mm_mask_rcp14_pd(__W, __U, __A); } __m128d test_mm_maskz_rcp14_pd(__mmask8 __U, __m128d __A) { - // CHECK-LABEL: @test_mm_maskz_rcp14_pd + // CHECK-LABEL: test_mm_maskz_rcp14_pd // CHECK: @llvm.x86.avx512.rcp14.pd.128 return _mm_maskz_rcp14_pd(__U, __A); } __m256d test_mm256_rcp14_pd(__m256d __A) { - // CHECK-LABEL: @test_mm256_rcp14_pd + // CHECK-LABEL: test_mm256_rcp14_pd // CHECK: @llvm.x86.avx512.rcp14.pd.256 return _mm256_rcp14_pd(__A); } __m256d test_mm256_mask_rcp14_pd(__m256d __W, __mmask8 __U, __m256d __A) { - // CHECK-LABEL: @test_mm256_mask_rcp14_pd + // CHECK-LABEL: test_mm256_mask_rcp14_pd // CHECK: @llvm.x86.avx512.rcp14.pd.256 return _mm256_mask_rcp14_pd(__W, __U, __A); } __m256d test_mm256_maskz_rcp14_pd(__mmask8 __U, __m256d __A) { - // CHECK-LABEL: @test_mm256_maskz_rcp14_pd + // CHECK-LABEL: test_mm256_maskz_rcp14_pd // CHECK: @llvm.x86.avx512.rcp14.pd.256 return _mm256_maskz_rcp14_pd(__U, __A); } __m128 test_mm_rcp14_ps(__m128 __A) { - // CHECK-LABEL: @test_mm_rcp14_ps + // CHECK-LABEL: test_mm_rcp14_ps // CHECK: @llvm.x86.avx512.rcp14.ps.128 return _mm_rcp14_ps(__A); } __m128 test_mm_mask_rcp14_ps(__m128 __W, __mmask8 __U, __m128 __A) { - // CHECK-LABEL: @test_mm_mask_rcp14_ps + // CHECK-LABEL: test_mm_mask_rcp14_ps // CHECK: @llvm.x86.avx512.rcp14.ps.128 return _mm_mask_rcp14_ps(__W, __U, __A); } __m128 test_mm_maskz_rcp14_ps(__mmask8 __U, __m128 __A) { - // CHECK-LABEL: @test_mm_maskz_rcp14_ps + // CHECK-LABEL: test_mm_maskz_rcp14_ps // CHECK: @llvm.x86.avx512.rcp14.ps.128 return _mm_maskz_rcp14_ps(__U, __A); } __m256 test_mm256_rcp14_ps(__m256 __A) { - // CHECK-LABEL: @test_mm256_rcp14_ps + // CHECK-LABEL: test_mm256_rcp14_ps // CHECK: @llvm.x86.avx512.rcp14.ps.256 return _mm256_rcp14_ps(__A); } __m256 test_mm256_mask_rcp14_ps(__m256 __W, __mmask8 __U, __m256 __A) { - // CHECK-LABEL: @test_mm256_mask_rcp14_ps + // CHECK-LABEL: test_mm256_mask_rcp14_ps // CHECK: @llvm.x86.avx512.rcp14.ps.256 return _mm256_mask_rcp14_ps(__W, __U, __A); } __m256 test_mm256_maskz_rcp14_ps(__mmask8 __U, __m256 __A) { - // CHECK-LABEL: @test_mm256_maskz_rcp14_ps + // CHECK-LABEL: test_mm256_maskz_rcp14_ps // CHECK: @llvm.x86.avx512.rcp14.ps.256 return _mm256_maskz_rcp14_ps(__U, __A); } __m128d test_mm_mask_permute_pd(__m128d __W, __mmask8 __U, __m128d __X) { - // CHECK-LABEL: @test_mm_mask_permute_pd + // CHECK-LABEL: test_mm_mask_permute_pd // CHECK: shufflevector <2 x double> %{{.*}}, <2 x double> poison, <2 x i32> <i32 1, i32 0> // CHECK: select <2 x i1> %{{.*}}, <2 x double> %{{.*}}, <2 x double> %{{.*}} return _mm_mask_permute_pd(__W, __U, __X, 1); } __m128d test_mm_maskz_permute_pd(__mmask8 __U, __m128d __X) { - // CHECK-LABEL: @test_mm_maskz_permute_pd + // CHECK-LABEL: test_mm_maskz_permute_pd // CHECK: shufflevector <2 x double> %{{.*}}, <2 x double> poison, <2 x i32> <i32 1, i32 0> // CHECK: select <2 x i1> %{{.*}}, <2 x double> %{{.*}}, <2 x double> %{{.*}} return _mm_maskz_permute_pd(__U, __X, 1); } __m256d test_mm256_mask_permute_pd(__m256d __W, __mmask8 __U, __m256d __X) { - // CHECK-LABEL: @test_mm256_mask_permute_pd + // CHECK-LABEL: test_mm256_mask_permute_pd // CHECK: shufflevector <4 x double> %{{.*}}, <4 x double> poison, <4 x i32> <i32 1, i32 0, i32 3, i32 2> // CHECK: select <4 x i1> %{{.*}}, <4 x double> %{{.*}}, <4 x double> %{{.*}} return _mm256_mask_permute_pd(__W, __U, __X, 5); } __m256d test_mm256_maskz_permute_pd(__mmask8 __U, __m256d __X) { - // CHECK-LABEL: @test_mm256_maskz_permute_pd + // CHECK-LABEL: test_mm256_maskz_permute_pd // CHECK: shufflevector <4 x double> %{{.*}}, <4 x double> poison, <4 x i32> <i32 1, i32 0, i32 3, i32 2> // CHECK: select <4 x i1> %{{.*}}, <4 x double> %{{.*}}, <4 x double> %{{.*}} return _mm256_maskz_permute_pd(__U, __X, 5); } __m128 test_mm_mask_permute_ps(__m128 __W, __mmask8 __U, __m128 __X) { - // CHECK-LABEL: @test_mm_mask_permute_ps + // CHECK-LABEL: test_mm_mask_permute_ps // CHECK: shufflevector <4 x float> %{{.*}}, <4 x float> poison, <4 x i32> <i32 3, i32 2, i32 1, i32 0> // CHECK: select <4 x i1> %{{.*}}, <4 x float> %{{.*}}, <4 x float> %{{.*}} return _mm_mask_permute_ps(__W, __U, __X, 0x1b); } __m128 test_mm_maskz_permute_ps(__mmask8 __U, __m128 __X) { - // CHECK-LABEL: @test_mm_maskz_permute_ps + // CHECK-LABEL: test_mm_maskz_permute_ps // CHECK: shufflevector <4 x float> %{{.*}}, <4 x float> poison, <4 x i32> <i32 3, i32 2, i32 1, i32 0> // CHECK: select <4 x i1> %{{.*}}, <4 x float> %{{.*}}, <4 x float> %{{.*}} return _mm_maskz_permute_ps(__U, __X, 0x1b); } __m256 test_mm256_mask_permute_ps(__m256 __W, __mmask8 __U, __m256 __X) { - // CHECK-LABEL: @test_mm256_mask_permute_ps + // CHECK-LABEL: test_mm256_mask_permute_ps // CHECK: shufflevector <8 x float> %{{.*}}, <8 x float> poison, <8 x i32> <i32 3, i32 2, i32 1, i32 0, i32 7, i32 6, i32 5, i32 4> // CHECK: select <8 x i1> %{{.*}}, <8 x float> %{{.*}}, <8 x float> %{{.*}} return _mm256_mask_permute_ps(__W, __U, __X, 0x1b); } __m256 test_mm256_maskz_permute_ps(__mmask8 __U, __m256 __X) { - // CHECK-LABEL: @test_mm256_maskz_permute_ps + // CHECK-LABEL: test_mm256_maskz_permute_ps // CHECK: shufflevector <8 x float> %{{.*}}, <8 x float> poison, <8 x i32> <i32 3, i32 2, i32 1, i32 0, i32 7, i32 6, i32 5, i32 4> // CHECK: select <8 x i1> %{{.*}}, <8 x float> %{{.*}}, <8 x float> %{{.*}} return _mm256_maskz_permute_ps(__U, __X, 0x1b); } __m128d test_mm_mask_permutevar_pd(__m128d __W, __mmask8 __U, __m128d __A, __m128i __C) { - // CHECK-LABEL: @test_mm_mask_permutevar_pd + // CHECK-LABEL: test_mm_mask_permutevar_pd // CHECK: @llvm.x86.avx.vpermilvar.pd // CHECK: select <2 x i1> %{{.*}}, <2 x double> %{{.*}}, <2 x double> %{{.*}} return _mm_mask_permutevar_pd(__W, __U, __A, __C); } __m128d test_mm_maskz_permutevar_pd(__mmask8 __U, __m128d __A, __m128i __C) { - // CHECK-LABEL: @test_mm_maskz_permutevar_pd + // CHECK-LABEL: test_mm_maskz_permutevar_pd // CHECK: @llvm.x86.avx.vpermilvar.pd // CHECK: select <2 x i1> %{{.*}}, <2 x double> %{{.*}}, <2 x double> %{{.*}} return _mm_maskz_permutevar_pd(__U, __A, __C); } __m256d test_mm256_mask_permutevar_pd(__m256d __W, __mmask8 __U, __m256d __A, __m256i __C) { - // CHECK-LABEL: @test_mm256_mask_permutevar_pd + // CHECK-LABEL: test_mm256_mask_permutevar_pd // CHECK: @llvm.x86.avx.vpermilvar.pd.256 // CHECK: select <4 x i1> %{{.*}}, <4 x double> %{{.*}}, <4 x double> %{{.*}} return _mm256_mask_permutevar_pd(__W, __U, __A, __C); } __m256d test_mm256_maskz_permutevar_pd(__mmask8 __U, __m256d __A, __m256i __C) { - // CHECK-LABEL: @test_mm256_maskz_permutevar_pd + // CHECK-LABEL: test_mm256_maskz_permutevar_pd // CHECK: @llvm.x86.avx.vpermilvar.pd.256 // CHECK: select <4 x i1> %{{.*}}, <4 x double> %{{.*}}, <4 x double> %{{.*}} return _mm256_maskz_permutevar_pd(__U, __A, __C); } __m128 test_mm_mask_permutevar_ps(__m128 __W, __mmask8 __U, __m128 __A, __m128i __C) { - // CHECK-LABEL: @test_mm_mask_permutevar_ps + // CHECK-LABEL: test_mm_mask_permutevar_ps // CHECK: @llvm.x86.avx.vpermilvar.ps // CHECK: select <4 x i1> %{{.*}}, <4 x float> %{{.*}}, <4 x float> %{{.*}} return _mm_mask_permutevar_ps(__W, __U, __A, __C); } __m128 test_mm_maskz_permutevar_ps(__mmask8 __U, __m128 __A, __m128i __C) { - // CHECK-LABEL: @test_mm_maskz_permutevar_ps + // CHECK-LABEL: test_mm_maskz_permutevar_ps // CHECK: @llvm.x86.avx.vpermilvar.ps // CHECK: select <4 x i1> %{{.*}}, <4 x float> %{{.*}}, <4 x float> %{{.*}} return _mm_maskz_permutevar_ps(__U, __A, __C); } __m256 test_mm256_mask_permutevar_ps(__m256 __W, __mmask8 __U, __m256 __A, __m256i __C) { - // CHECK-LABEL: @test_mm256_mask_permutevar_ps + // CHECK-LABEL: test_mm256_mask_permutevar_ps // CHECK: @llvm.x86.avx.vpermilvar.ps.256 // CHECK: select <8 x i1> %{{.*}}, <8 x float> %{{.*}}, <8 x float> %{{.*}} return _mm256_mask_permutevar_ps(__W, __U, __A, __C); } __m256 test_mm256_maskz_permutevar_ps(__mmask8 __U, __m256 __A, __m256i __C) { - // CHECK-LABEL: @test_mm256_maskz_permutevar_ps + // CHECK-LABEL: test_mm256_maskz_permutevar_ps // CHECK: @llvm.x86.avx.vpermilvar.ps.256 // CHECK: select <8 x i1> %{{.*}}, <8 x float> %{{.*}}, <8 x float> %{{.*}} return _mm256_maskz_permutevar_ps(__U, __A, __C); } __mmask8 test_mm_test_epi32_mask(__m128i __A, __m128i __B) { - // CHECK-LABEL: @test_mm_test_epi32_mask + // CHECK-LABEL: test_mm_test_epi32_mask // CHECK: and <2 x i64> %{{.*}}, %{{.*}} // CHECK: icmp ne <4 x i32> %{{.*}}, %{{.*}} return _mm_test_epi32_mask(__A, __B); } __mmask8 test_mm_mask_test_epi32_mask(__mmask8 __U, __m128i __A, __m128i __B) { - // CHECK-LABEL: @test_mm_mask_test_epi32_mask + // CHECK-LABEL: test_mm_mask_test_epi32_mask // CHECK: and <2 x i64> %{{.*}}, %{{.*}} // CHECK: icmp ne <4 x i32> %{{.*}}, %{{.*}} // CHECK: and <4 x i1> %{{.*}}, %{{.*}} @@ -7404,14 +7492,14 @@ __mmask8 test_mm_mask_test_epi32_mask(__mmask8 __U, __m128i __A, __m128i __B) { } __mmask8 test_mm256_test_epi32_mask(__m256i __A, __m256i __B) { - // CHECK-LABEL: @test_mm256_test_epi32_mask + // CHECK-LABEL: test_mm256_test_epi32_mask // CHECK: and <4 x i64> %{{.*}}, %{{.*}} // CHECK: icmp ne <8 x i32> %{{.*}}, %{{.*}} return _mm256_test_epi32_mask(__A, __B); } __mmask8 test_mm256_mask_test_epi32_mask(__mmask8 __U, __m256i __A, __m256i __B) { - // CHECK-LABEL: @test_mm256_mask_test_epi32_mask + // CHECK-LABEL: test_mm256_mask_test_epi32_mask // CHECK: and <4 x i64> %{{.*}}, %{{.*}} // CHECK: icmp ne <8 x i32> %{{.*}}, %{{.*}} // CHECK: and <8 x i1> %{{.*}}, %{{.*}} @@ -7419,14 +7507,14 @@ __mmask8 test_mm256_mask_test_epi32_mask(__mmask8 __U, __m256i __A, __m256i __B) } __mmask8 test_mm_test_epi64_mask(__m128i __A, __m128i __B) { - // CHECK-LABEL: @test_mm_test_epi64_mask + // CHECK-LABEL: test_mm_test_epi64_mask // CHECK: and <2 x i64> %{{.*}}, %{{.*}} // CHECK: icmp ne <2 x i64> %{{.*}}, %{{.*}} return _mm_test_epi64_mask(__A, __B); } __mmask8 test_mm_mask_test_epi64_mask(__mmask8 __U, __m128i __A, __m128i __B) { - // CHECK-LABEL: @test_mm_mask_test_epi64_mask + // CHECK-LABEL: test_mm_mask_test_epi64_mask // CHECK: and <2 x i64> %{{.*}}, %{{.*}} // CHECK: icmp ne <2 x i64> %{{.*}}, %{{.*}} // CHECK: and <2 x i1> %{{.*}}, %{{.*}} @@ -7434,14 +7522,14 @@ __mmask8 test_mm_mask_test_epi64_mask(__mmask8 __U, __m128i __A, __m128i __B) { } __mmask8 test_mm256_test_epi64_mask(__m256i __A, __m256i __B) { - // CHECK-LABEL: @test_mm256_test_epi64_mask + // CHECK-LABEL: test_mm256_test_epi64_mask // CHECK: and <4 x i64> %{{.*}}, %{{.*}} // CHECK: icmp ne <4 x i64> %{{.*}}, %{{.*}} return _mm256_test_epi64_mask(__A, __B); } __mmask8 test_mm256_mask_test_epi64_mask(__mmask8 __U, __m256i __A, __m256i __B) { - // CHECK-LABEL: @test_mm256_mask_test_epi64_mask + // CHECK-LABEL: test_mm256_mask_test_epi64_mask // CHECK: and <4 x i64> %{{.*}}, %{{.*}} // CHECK: icmp ne <4 x i64> %{{.*}}, %{{.*}} // CHECK: and <4 x i1> %{{.*}}, %{{.*}} @@ -7449,14 +7537,14 @@ __mmask8 test_mm256_mask_test_epi64_mask(__mmask8 __U, __m256i __A, __m256i __B) } __mmask8 test_mm_testn_epi32_mask(__m128i __A, __m128i __B) { - // CHECK-LABEL: @test_mm_testn_epi32_mask + // CHECK-LABEL: test_mm_testn_epi32_mask // CHECK: and <2 x i64> %{{.*}}, %{{.*}} // CHECK: icmp eq <4 x i32> %{{.*}}, %{{.*}} return _mm_testn_epi32_mask(__A, __B); } __mmask8 test_mm_mask_testn_epi32_mask(__mmask8 __U, __m128i __A, __m128i __B) { - // CHECK-LABEL: @test_mm_mask_testn_epi32_mask + // CHECK-LABEL: test_mm_mask_testn_epi32_mask // CHECK: and <2 x i64> %{{.*}}, %{{.*}} // CHECK: icmp eq <4 x i32> %{{.*}}, %{{.*}} // CHECK: and <4 x i1> %{{.*}}, %{{.*}} @@ -7464,14 +7552,14 @@ __mmask8 test_mm_mask_testn_epi32_mask(__mmask8 __U, __m128i __A, __m128i __B) { } __mmask8 test_mm256_testn_epi32_mask(__m256i __A, __m256i __B) { - // CHECK-LABEL: @test_mm256_testn_epi32_mask + // CHECK-LABEL: test_mm256_testn_epi32_mask // CHECK: and <4 x i64> %{{.*}}, %{{.*}} // CHECK: icmp eq <8 x i32> %{{.*}}, %{{.*}} return _mm256_testn_epi32_mask(__A, __B); } __mmask8 test_mm256_mask_testn_epi32_mask(__mmask8 __U, __m256i __A, __m256i __B) { - // CHECK-LABEL: @test_mm256_mask_testn_epi32_mask + // CHECK-LABEL: test_mm256_mask_testn_epi32_mask // CHECK: and <4 x i64> %{{.*}}, %{{.*}} // CHECK: icmp eq <8 x i32> %{{.*}}, %{{.*}} // CHECK: and <8 x i1> %{{.*}}, %{{.*}} @@ -7479,14 +7567,14 @@ __mmask8 test_mm256_mask_testn_epi32_mask(__mmask8 __U, __m256i __A, __m256i __B } __mmask8 test_mm_testn_epi64_mask(__m128i __A, __m128i __B) { - // CHECK-LABEL: @test_mm_testn_epi64_mask + // CHECK-LABEL: test_mm_testn_epi64_mask // CHECK: and <2 x i64> %{{.*}}, %{{.*}} // CHECK: icmp eq <2 x i64> %{{.*}}, %{{.*}} return _mm_testn_epi64_mask(__A, __B); } __mmask8 test_mm_mask_testn_epi64_mask(__mmask8 __U, __m128i __A, __m128i __B) { - // CHECK-LABEL: @test_mm_mask_testn_epi64_mask + // CHECK-LABEL: test_mm_mask_testn_epi64_mask // CHECK: and <2 x i64> %{{.*}}, %{{.*}} // CHECK: icmp eq <2 x i64> %{{.*}}, %{{.*}} // CHECK: and <2 x i1> %{{.*}}, %{{.*}} @@ -7494,14 +7582,14 @@ __mmask8 test_mm_mask_testn_epi64_mask(__mmask8 __U, __m128i __A, __m128i __B) { } __mmask8 test_mm256_testn_epi64_mask(__m256i __A, __m256i __B) { - // CHECK-LABEL: @test_mm256_testn_epi64_mask + // CHECK-LABEL: test_mm256_testn_epi64_mask // CHECK: and <4 x i64> %{{.*}}, %{{.*}} // CHECK: icmp eq <4 x i64> %{{.*}}, %{{.*}} return _mm256_testn_epi64_mask(__A, __B); } __mmask8 test_mm256_mask_testn_epi64_mask(__mmask8 __U, __m256i __A, __m256i __B) { - // CHECK-LABEL: @test_mm256_mask_testn_epi64_mask + // CHECK-LABEL: test_mm256_mask_testn_epi64_mask // CHECK: and <4 x i64> %{{.*}}, %{{.*}} // CHECK: icmp eq <4 x i64> %{{.*}}, %{{.*}} // CHECK: and <4 x i1> %{{.*}}, %{{.*}} @@ -7509,428 +7597,434 @@ __mmask8 test_mm256_mask_testn_epi64_mask(__mmask8 __U, __m256i __A, __m256i __B } __m128i test_mm_mask_unpackhi_epi32(__m128i __W, __mmask8 __U, __m128i __A, __m128i __B) { - // CHECK-LABEL: @test_mm_mask_unpackhi_epi32 + // CHECK-LABEL: test_mm_mask_unpackhi_epi32 // CHECK: shufflevector <4 x i32> %{{.*}}, <4 x i32> %{{.*}}, <4 x i32> <i32 2, i32 6, i32 3, i32 7> // CHECK: select <4 x i1> %{{.*}}, <4 x i32> %{{.*}}, <4 x i32> %{{.*}} return _mm_mask_unpackhi_epi32(__W, __U, __A, __B); } __m128i test_mm_maskz_unpackhi_epi32(__mmask8 __U, __m128i __A, __m128i __B) { - // CHECK-LABEL: @test_mm_maskz_unpackhi_epi32 + // CHECK-LABEL: test_mm_maskz_unpackhi_epi32 // CHECK: shufflevector <4 x i32> %{{.*}}, <4 x i32> %{{.*}}, <4 x i32> <i32 2, i32 6, i32 3, i32 7> // CHECK: select <4 x i1> %{{.*}}, <4 x i32> %{{.*}}, <4 x i32> %{{.*}} return _mm_maskz_unpackhi_epi32(__U, __A, __B); } __m256i test_mm256_mask_unpackhi_epi32(__m256i __W, __mmask8 __U, __m256i __A, __m256i __B) { - // CHECK-LABEL: @test_mm256_mask_unpackhi_epi32 + // CHECK-LABEL: test_mm256_mask_unpackhi_epi32 // CHECK: shufflevector <8 x i32> %{{.*}}, <8 x i32> %{{.*}}, <8 x i32> <i32 2, i32 10, i32 3, i32 11, i32 6, i32 14, i32 7, i32 15> // CHECK: select <8 x i1> %{{.*}}, <8 x i32> %{{.*}}, <8 x i32> %{{.*}} return _mm256_mask_unpackhi_epi32(__W, __U, __A, __B); } __m256i test_mm256_maskz_unpackhi_epi32(__mmask8 __U, __m256i __A, __m256i __B) { - // CHECK-LABEL: @test_mm256_maskz_unpackhi_epi32 + // CHECK-LABEL: test_mm256_maskz_unpackhi_epi32 // CHECK: shufflevector <8 x i32> %{{.*}}, <8 x i32> %{{.*}}, <8 x i32> <i32 2, i32 10, i32 3, i32 11, i32 6, i32 14, i32 7, i32 15> // CHECK: select <8 x i1> %{{.*}}, <8 x i32> %{{.*}}, <8 x i32> %{{.*}} return _mm256_maskz_unpackhi_epi32(__U, __A, __B); } __m128i test_mm_mask_unpackhi_epi64(__m128i __W, __mmask8 __U, __m128i __A, __m128i __B) { - // CHECK-LABEL: @test_mm_mask_unpackhi_epi64 + // CHECK-LABEL: test_mm_mask_unpackhi_epi64 // CHECK: shufflevector <2 x i64> %{{.*}}, <2 x i64> %{{.*}}, <2 x i32> <i32 1, i32 3> // CHECK: select <2 x i1> %{{.*}}, <2 x i64> %{{.*}}, <2 x i64> %{{.*}} return _mm_mask_unpackhi_epi64(__W, __U, __A, __B); } __m128i test_mm_maskz_unpackhi_epi64(__mmask8 __U, __m128i __A, __m128i __B) { - // CHECK-LABEL: @test_mm_maskz_unpackhi_epi64 + // CHECK-LABEL: test_mm_maskz_unpackhi_epi64 // CHECK: shufflevector <2 x i64> %{{.*}}, <2 x i64> %{{.*}}, <2 x i32> <i32 1, i32 3> // CHECK: select <2 x i1> %{{.*}}, <2 x i64> %{{.*}}, <2 x i64> %{{.*}} return _mm_maskz_unpackhi_epi64(__U, __A, __B); } __m256i test_mm256_mask_unpackhi_epi64(__m256i __W, __mmask8 __U, __m256i __A, __m256i __B) { - // CHECK-LABEL: @test_mm256_mask_unpackhi_epi64 + // CHECK-LABEL: test_mm256_mask_unpackhi_epi64 // CHECK: shufflevector <4 x i64> %{{.*}}, <4 x i64> %{{.*}}, <4 x i32> <i32 1, i32 5, i32 3, i32 7> // CHECK: select <4 x i1> %{{.*}}, <4 x i64> %{{.*}}, <4 x i64> %{{.*}} return _mm256_mask_unpackhi_epi64(__W, __U, __A, __B); } __m256i test_mm256_maskz_unpackhi_epi64(__mmask8 __U, __m256i __A, __m256i __B) { - // CHECK-LABEL: @test_mm256_maskz_unpackhi_epi64 + // CHECK-LABEL: test_mm256_maskz_unpackhi_epi64 // CHECK: shufflevector <4 x i64> %{{.*}}, <4 x i64> %{{.*}}, <4 x i32> <i32 1, i32 5, i32 3, i32 7> // CHECK: select <4 x i1> %{{.*}}, <4 x i64> %{{.*}}, <4 x i64> %{{.*}} return _mm256_maskz_unpackhi_epi64(__U, __A, __B); } __m128i test_mm_mask_unpacklo_epi32(__m128i __W, __mmask8 __U, __m128i __A, __m128i __B) { - // CHECK-LABEL: @test_mm_mask_unpacklo_epi32 + // CHECK-LABEL: test_mm_mask_unpacklo_epi32 // CHECK: shufflevector <4 x i32> %{{.*}}, <4 x i32> %{{.*}}, <4 x i32> <i32 0, i32 4, i32 1, i32 5> // CHECK: select <4 x i1> %{{.*}}, <4 x i32> %{{.*}}, <4 x i32> %{{.*}} return _mm_mask_unpacklo_epi32(__W, __U, __A, __B); } __m128i test_mm_maskz_unpacklo_epi32(__mmask8 __U, __m128i __A, __m128i __B) { - // CHECK-LABEL: @test_mm_maskz_unpacklo_epi32 + // CHECK-LABEL: test_mm_maskz_unpacklo_epi32 // CHECK: shufflevector <4 x i32> %{{.*}}, <4 x i32> %{{.*}}, <4 x i32> <i32 0, i32 4, i32 1, i32 5> // CHECK: select <4 x i1> %{{.*}}, <4 x i32> %{{.*}}, <4 x i32> %{{.*}} return _mm_maskz_unpacklo_epi32(__U, __A, __B); } __m256i test_mm256_mask_unpacklo_epi32(__m256i __W, __mmask8 __U, __m256i __A, __m256i __B) { - // CHECK-LABEL: @test_mm256_mask_unpacklo_epi32 + // CHECK-LABEL: test_mm256_mask_unpacklo_epi32 // CHECK: shufflevector <8 x i32> %{{.*}}, <8 x i32> %{{.*}}, <8 x i32> <i32 0, i32 8, i32 1, i32 9, i32 4, i32 12, i32 5, i32 13> // CHECK: select <8 x i1> %{{.*}}, <8 x i32> %{{.*}}, <8 x i32> %{{.*}} return _mm256_mask_unpacklo_epi32(__W, __U, __A, __B); } __m256i test_mm256_maskz_unpacklo_epi32(__mmask8 __U, __m256i __A, __m256i __B) { - // CHECK-LABEL: @test_mm256_maskz_unpacklo_epi32 + // CHECK-LABEL: test_mm256_maskz_unpacklo_epi32 // CHECK: shufflevector <8 x i32> %{{.*}}, <8 x i32> %{{.*}}, <8 x i32> <i32 0, i32 8, i32 1, i32 9, i32 4, i32 12, i32 5, i32 13> // CHECK: select <8 x i1> %{{.*}}, <8 x i32> %{{.*}}, <8 x i32> %{{.*}} return _mm256_maskz_unpacklo_epi32(__U, __A, __B); } __m128i test_mm_mask_unpacklo_epi64(__m128i __W, __mmask8 __U, __m128i __A, __m128i __B) { - // CHECK-LABEL: @test_mm_mask_unpacklo_epi64 + // CHECK-LABEL: test_mm_mask_unpacklo_epi64 // CHECK: shufflevector <2 x i64> %{{.*}}, <2 x i64> %{{.*}}, <2 x i32> <i32 0, i32 2> // CHECK: select <2 x i1> %{{.*}}, <2 x i64> %{{.*}}, <2 x i64> %{{.*}} return _mm_mask_unpacklo_epi64(__W, __U, __A, __B); } __m128i test_mm_maskz_unpacklo_epi64(__mmask8 __U, __m128i __A, __m128i __B) { - // CHECK-LABEL: @test_mm_maskz_unpacklo_epi64 + // CHECK-LABEL: test_mm_maskz_unpacklo_epi64 // CHECK: shufflevector <2 x i64> %{{.*}}, <2 x i64> %{{.*}}, <2 x i32> <i32 0, i32 2> // CHECK: select <2 x i1> %{{.*}}, <2 x i64> %{{.*}}, <2 x i64> %{{.*}} return _mm_maskz_unpacklo_epi64(__U, __A, __B); } __m256i test_mm256_mask_unpacklo_epi64(__m256i __W, __mmask8 __U, __m256i __A, __m256i __B) { - // CHECK-LABEL: @test_mm256_mask_unpacklo_epi64 + // CHECK-LABEL: test_mm256_mask_unpacklo_epi64 // CHECK: shufflevector <4 x i64> %{{.*}}, <4 x i64> %{{.*}}, <4 x i32> <i32 0, i32 4, i32 2, i32 6> // CHECK: select <4 x i1> %{{.*}}, <4 x i64> %{{.*}}, <4 x i64> %{{.*}} return _mm256_mask_unpacklo_epi64(__W, __U, __A, __B); } __m256i test_mm256_maskz_unpacklo_epi64(__mmask8 __U, __m256i __A, __m256i __B) { - // CHECK-LABEL: @test_mm256_maskz_unpacklo_epi64 + // CHECK-LABEL: test_mm256_maskz_unpacklo_epi64 // CHECK: shufflevector <4 x i64> %{{.*}}, <4 x i64> %{{.*}}, <4 x i32> <i32 0, i32 4, i32 2, i32 6> // CHECK: select <4 x i1> %{{.*}}, <4 x i64> %{{.*}}, <4 x i64> %{{.*}} return _mm256_maskz_unpacklo_epi64(__U, __A, __B); } __m128i test_mm_mask_sra_epi32(__m128i __W, __mmask8 __U, __m128i __A, __m128i __B) { - // CHECK-LABEL: @test_mm_mask_sra_epi32 + // CHECK-LABEL: test_mm_mask_sra_epi32 // CHECK: @llvm.x86.sse2.psra.d // CHECK: select <4 x i1> %{{.*}}, <4 x i32> %{{.*}}, <4 x i32> %{{.*}} return _mm_mask_sra_epi32(__W, __U, __A, __B); } __m128i test_mm_maskz_sra_epi32(__mmask8 __U, __m128i __A, __m128i __B) { - // CHECK-LABEL: @test_mm_maskz_sra_epi32 + // CHECK-LABEL: test_mm_maskz_sra_epi32 // CHECK: @llvm.x86.sse2.psra.d // CHECK: select <4 x i1> %{{.*}}, <4 x i32> %{{.*}}, <4 x i32> %{{.*}} return _mm_maskz_sra_epi32(__U, __A, __B); } __m256i test_mm256_mask_sra_epi32(__m256i __W, __mmask8 __U, __m256i __A, __m128i __B) { - // CHECK-LABEL: @test_mm256_mask_sra_epi32 + // CHECK-LABEL: test_mm256_mask_sra_epi32 // CHECK: @llvm.x86.avx2.psra.d // CHECK: select <8 x i1> %{{.*}}, <8 x i32> %{{.*}}, <8 x i32> %{{.*}} return _mm256_mask_sra_epi32(__W, __U, __A, __B); } __m256i test_mm256_maskz_sra_epi32(__mmask8 __U, __m256i __A, __m128i __B) { - // CHECK-LABEL: @test_mm256_maskz_sra_epi32 + // CHECK-LABEL: test_mm256_maskz_sra_epi32 // CHECK: @llvm.x86.avx2.psra.d // CHECK: select <8 x i1> %{{.*}}, <8 x i32> %{{.*}}, <8 x i32> %{{.*}} return _mm256_maskz_sra_epi32(__U, __A, __B); } __m128i test_mm_mask_srai_epi32(__m128i __W, __mmask8 __U, __m128i __A) { - // CHECK-LABEL: @test_mm_mask_srai_epi32 + // CHECK-LABEL: test_mm_mask_srai_epi32 // CHECK: @llvm.x86.sse2.psrai.d // CHECK: select <4 x i1> %{{.*}}, <4 x i32> %{{.*}}, <4 x i32> %{{.*}} return _mm_mask_srai_epi32(__W, __U, __A, 5); } __m128i test_mm_mask_srai_epi32_2(__m128i __W, __mmask8 __U, __m128i __A, unsigned int __B) { - // CHECK-LABEL: @test_mm_mask_srai_epi32_2 + // CHECK-LABEL: test_mm_mask_srai_epi32_2 // CHECK: @llvm.x86.sse2.psrai.d // CHECK: select <4 x i1> %{{.*}}, <4 x i32> %{{.*}}, <4 x i32> %{{.*}} return _mm_mask_srai_epi32(__W, __U, __A, __B); } __m128i test_mm_maskz_srai_epi32(__mmask8 __U, __m128i __A) { - // CHECK-LABEL: @test_mm_maskz_srai_epi32 + // CHECK-LABEL: test_mm_maskz_srai_epi32 // CHECK: @llvm.x86.sse2.psrai.d // CHECK: select <4 x i1> %{{.*}}, <4 x i32> %{{.*}}, <4 x i32> %{{.*}} return _mm_maskz_srai_epi32(__U, __A, 5); } __m128i test_mm_maskz_srai_epi32_2(__mmask8 __U, __m128i __A, unsigned int __B) { - // CHECK-LABEL: @test_mm_maskz_srai_epi32_2 + // CHECK-LABEL: test_mm_maskz_srai_epi32_2 // CHECK: @llvm.x86.sse2.psrai.d // CHECK: select <4 x i1> %{{.*}}, <4 x i32> %{{.*}}, <4 x i32> %{{.*}} return _mm_maskz_srai_epi32(__U, __A, __B); } __m256i test_mm256_mask_srai_epi32(__m256i __W, __mmask8 __U, __m256i __A) { - // CHECK-LABEL: @test_mm256_mask_srai_epi32 + // CHECK-LABEL: test_mm256_mask_srai_epi32 // CHECK: @llvm.x86.avx2.psrai.d // CHECK: select <8 x i1> %{{.*}}, <8 x i32> %{{.*}}, <8 x i32> %{{.*}} return _mm256_mask_srai_epi32(__W, __U, __A, 5); } +TEST_CONSTEXPR(match_v8si(_mm256_mask_srai_epi32((__m256i)(__v8si){100, 101, 102, 103, 104, 105, 106, 107}, (__mmask8)0xff, (__m256i)(__v8si){0, 1, 2, 3, 4, 5, 6, 7}, 3), 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0)); __m256i test_mm256_mask_srai_epi32_2(__m256i __W, __mmask8 __U, __m256i __A, unsigned int __B) { - // CHECK-LABEL: @test_mm256_mask_srai_epi32_2 + // CHECK-LABEL: test_mm256_mask_srai_epi32_2 // CHECK: @llvm.x86.avx2.psrai.d // CHECK: select <8 x i1> %{{.*}}, <8 x i32> %{{.*}}, <8 x i32> %{{.*}} return _mm256_mask_srai_epi32(__W, __U, __A, __B); } __m256i test_mm256_maskz_srai_epi32(__mmask8 __U, __m256i __A) { - // CHECK-LABEL: @test_mm256_maskz_srai_epi32 + // CHECK-LABEL: test_mm256_maskz_srai_epi32 // CHECK: @llvm.x86.avx2.psrai.d // CHECK: select <8 x i1> %{{.*}}, <8 x i32> %{{.*}}, <8 x i32> %{{.*}} return _mm256_maskz_srai_epi32(__U, __A, 5); } +TEST_CONSTEXPR(match_v8si(_mm256_maskz_srai_epi32((__mmask8)0x71, (__m256i)(__v8si){0xff, 1, 2, 3, 4, 5, 6, 7}, 1), 0x7f, 0, 0, 0, 0x2, 0x2, 0x3, 0)); __m256i test_mm256_maskz_srai_epi32_2(__mmask8 __U, __m256i __A, unsigned int __B) { - // CHECK-LABEL: @test_mm256_maskz_srai_epi32_2 + // CHECK-LABEL: test_mm256_maskz_srai_epi32_2 // CHECK: @llvm.x86.avx2.psrai.d // CHECK: select <8 x i1> %{{.*}}, <8 x i32> %{{.*}}, <8 x i32> %{{.*}} return _mm256_maskz_srai_epi32(__U, __A, __B); } __m128i test_mm_sra_epi64(__m128i __A, __m128i __B) { - // CHECK-LABEL: @test_mm_sra_epi64 + // CHECK-LABEL: test_mm_sra_epi64 // CHECK: @llvm.x86.avx512.psra.q.128 return _mm_sra_epi64(__A, __B); } __m128i test_mm_mask_sra_epi64(__m128i __W, __mmask8 __U, __m128i __A, __m128i __B) { - // CHECK-LABEL: @test_mm_mask_sra_epi64 + // CHECK-LABEL: test_mm_mask_sra_epi64 // CHECK: @llvm.x86.avx512.psra.q.128 // CHECK: select <2 x i1> %{{.*}}, <2 x i64> %{{.*}}, <2 x i64> %{{.*}} return _mm_mask_sra_epi64(__W, __U, __A, __B); } __m128i test_mm_maskz_sra_epi64(__mmask8 __U, __m128i __A, __m128i __B) { - // CHECK-LABEL: @test_mm_maskz_sra_epi64 + // CHECK-LABEL: test_mm_maskz_sra_epi64 // CHECK: @llvm.x86.avx512.psra.q.128 // CHECK: select <2 x i1> %{{.*}}, <2 x i64> %{{.*}}, <2 x i64> %{{.*}} return _mm_maskz_sra_epi64(__U, __A, __B); } __m256i test_mm256_sra_epi64(__m256i __A, __m128i __B) { - // CHECK-LABEL: @test_mm256_sra_epi64 + // CHECK-LABEL: test_mm256_sra_epi64 // CHECK: @llvm.x86.avx512.psra.q.256 return _mm256_sra_epi64(__A, __B); } __m256i test_mm256_mask_sra_epi64(__m256i __W, __mmask8 __U, __m256i __A, __m128i __B) { - // CHECK-LABEL: @test_mm256_mask_sra_epi64 + // CHECK-LABEL: test_mm256_mask_sra_epi64 // CHECK: @llvm.x86.avx512.psra.q.256 // CHECK: select <4 x i1> %{{.*}}, <4 x i64> %{{.*}}, <4 x i64> %{{.*}} return _mm256_mask_sra_epi64(__W, __U, __A, __B); } __m256i test_mm256_maskz_sra_epi64(__mmask8 __U, __m256i __A, __m128i __B) { - // CHECK-LABEL: @test_mm256_maskz_sra_epi64 + // CHECK-LABEL: test_mm256_maskz_sra_epi64 // CHECK: @llvm.x86.avx512.psra.q.256 // CHECK: select <4 x i1> %{{.*}}, <4 x i64> %{{.*}}, <4 x i64> %{{.*}} return _mm256_maskz_sra_epi64(__U, __A, __B); } __m128i test_mm_srai_epi64(__m128i __A) { - // CHECK-LABEL: @test_mm_srai_epi64 + // CHECK-LABEL: test_mm_srai_epi64 // CHECK: @llvm.x86.avx512.psrai.q.128 return _mm_srai_epi64(__A, 5); } +TEST_CONSTEXPR(match_v2di(_mm_srai_epi64((__m128i)(__v2di){-32768, -3}, 1), -16384, -2)); __m128i test_mm_srai_epi64_2(__m128i __A, unsigned int __B) { - // CHECK-LABEL: @test_mm_srai_epi64_2 + // CHECK-LABEL: test_mm_srai_epi64_2 // CHECK: @llvm.x86.avx512.psrai.q.128 return _mm_srai_epi64(__A, __B); } __m128i test_mm_mask_srai_epi64(__m128i __W, __mmask8 __U, __m128i __A) { - // CHECK-LABEL: @test_mm_mask_srai_epi64 + // CHECK-LABEL: test_mm_mask_srai_epi64 // CHECK: @llvm.x86.avx512.psrai.q.128 // CHECK: select <2 x i1> %{{.*}}, <2 x i64> %{{.*}}, <2 x i64> %{{.*}} return _mm_mask_srai_epi64(__W, __U, __A, 5); } __m128i test_mm_mask_srai_epi64_2(__m128i __W, __mmask8 __U, __m128i __A, unsigned int __B) { - // CHECK-LABEL: @test_mm_mask_srai_epi64_2 + // CHECK-LABEL: test_mm_mask_srai_epi64_2 // CHECK: @llvm.x86.avx512.psrai.q.128 // CHECK: select <2 x i1> %{{.*}}, <2 x i64> %{{.*}}, <2 x i64> %{{.*}} return _mm_mask_srai_epi64(__W, __U, __A, __B); } __m128i test_mm_maskz_srai_epi64(__mmask8 __U, __m128i __A) { - // CHECK-LABEL: @test_mm_maskz_srai_epi64 + // CHECK-LABEL: test_mm_maskz_srai_epi64 // CHECK: @llvm.x86.avx512.psrai.q.128 // CHECK: select <2 x i1> %{{.*}}, <2 x i64> %{{.*}}, <2 x i64> %{{.*}} return _mm_maskz_srai_epi64(__U, __A, 5); } __m128i test_mm_maskz_srai_epi64_2(__mmask8 __U, __m128i __A, unsigned int __B) { - // CHECK-LABEL: @test_mm_maskz_srai_epi64_2 + // CHECK-LABEL: test_mm_maskz_srai_epi64_2 // CHECK: @llvm.x86.avx512.psrai.q.128 // CHECK: select <2 x i1> %{{.*}}, <2 x i64> %{{.*}}, <2 x i64> %{{.*}} return _mm_maskz_srai_epi64(__U, __A, __B); } __m256i test_mm256_srai_epi64(__m256i __A) { - // CHECK-LABEL: @test_mm256_srai_epi64 + // CHECK-LABEL: test_mm256_srai_epi64 // CHECK: @llvm.x86.avx512.psrai.q.256 return _mm256_srai_epi64(__A, 5); } +TEST_CONSTEXPR(match_v4di(_mm256_srai_epi64((__m256i)(__v4di){-32768, 32767, -3, -2}, 1), -16384, 16383, -2, -1)); __m256i test_mm256_srai_epi64_2(__m256i __A, unsigned int __B) { - // CHECK-LABEL: @test_mm256_srai_epi64_2 + // CHECK-LABEL: test_mm256_srai_epi64_2 // CHECK: @llvm.x86.avx512.psrai.q.256 return _mm256_srai_epi64(__A, __B); } __m256i test_mm256_mask_srai_epi64(__m256i __W, __mmask8 __U, __m256i __A) { - // CHECK-LABEL: @test_mm256_mask_srai_epi64 + // CHECK-LABEL: test_mm256_mask_srai_epi64 // CHECK: @llvm.x86.avx512.psrai.q.256 // CHECK: select <4 x i1> %{{.*}}, <4 x i64> %{{.*}}, <4 x i64> %{{.*}} return _mm256_mask_srai_epi64(__W, __U, __A, 5); } +TEST_CONSTEXPR(match_v4di(_mm256_mask_srai_epi64((__m256i)(__v4di){100, 101, 102, 103}, (__mmask8)0b1010, (__m256i)(__v4di){0,-128, 2, 3}, 2), 100, -32, 102, 0x0)); __m256i test_mm256_mask_srai_epi64_2(__m256i __W, __mmask8 __U, __m256i __A, unsigned int __B) { - // CHECK-LABEL: @test_mm256_mask_srai_epi64_2 + // CHECK-LABEL: test_mm256_mask_srai_epi64_2 // CHECK: @llvm.x86.avx512.psrai.q.256 // CHECK: select <4 x i1> %{{.*}}, <4 x i64> %{{.*}}, <4 x i64> %{{.*}} return _mm256_mask_srai_epi64(__W, __U, __A, __B); } __m256i test_mm256_maskz_srai_epi64(__mmask8 __U, __m256i __A) { - // CHECK-LABEL: @test_mm256_maskz_srai_epi64 + // CHECK-LABEL: test_mm256_maskz_srai_epi64 // CHECK: @llvm.x86.avx512.psrai.q.256 // CHECK: select <4 x i1> %{{.*}}, <4 x i64> %{{.*}}, <4 x i64> %{{.*}} return _mm256_maskz_srai_epi64(__U, __A, 5); } +TEST_CONSTEXPR(match_v4di(_mm256_maskz_srai_epi64((__mmask8)0x71, (__m256i)(__v4di){0xff, 1, 2, 3}, 1), 0x7f, 0, 0, 0)); __m256i test_mm256_maskz_srai_epi64_2(__mmask8 __U, __m256i __A, unsigned int __B) { - // CHECK-LABEL: @test_mm256_maskz_srai_epi64_2 + // CHECK-LABEL: test_mm256_maskz_srai_epi64_2 // CHECK: @llvm.x86.avx512.psrai.q.256 // CHECK: select <4 x i1> %{{.*}}, <4 x i64> %{{.*}}, <4 x i64> %{{.*}} return _mm256_maskz_srai_epi64(__U, __A, __B); } __m128i test_mm_ternarylogic_epi32(__m128i __A, __m128i __B, __m128i __C) { - // CHECK-LABEL: @test_mm_ternarylogic_epi32 + // CHECK-LABEL: test_mm_ternarylogic_epi32 // CHECK: @llvm.x86.avx512.pternlog.d.128 return _mm_ternarylogic_epi32(__A, __B, __C, 4); } __m128i test_mm_mask_ternarylogic_epi32(__m128i __A, __mmask8 __U, __m128i __B, __m128i __C) { - // CHECK-LABEL: @test_mm_mask_ternarylogic_epi32 + // CHECK-LABEL: test_mm_mask_ternarylogic_epi32 // CHECK: @llvm.x86.avx512.pternlog.d.128 // CHECK: select <4 x i1> %{{.*}}, <4 x i32> %{{.*}}, <4 x i32> %{{.*}} return _mm_mask_ternarylogic_epi32(__A, __U, __B, __C, 4); } __m128i test_mm_maskz_ternarylogic_epi32(__mmask8 __U, __m128i __A, __m128i __B, __m128i __C) { - // CHECK-LABEL: @test_mm_maskz_ternarylogic_epi32 + // CHECK-LABEL: test_mm_maskz_ternarylogic_epi32 // CHECK: @llvm.x86.avx512.pternlog.d.128 // CHECK: select <4 x i1> %{{.*}}, <4 x i32> %{{.*}}, <4 x i32> zeroinitializer return _mm_maskz_ternarylogic_epi32(__U, __A, __B, __C, 4); } __m256i test_mm256_ternarylogic_epi32(__m256i __A, __m256i __B, __m256i __C) { - // CHECK-LABEL: @test_mm256_ternarylogic_epi32 + // CHECK-LABEL: test_mm256_ternarylogic_epi32 // CHECK: @llvm.x86.avx512.pternlog.d.256 return _mm256_ternarylogic_epi32(__A, __B, __C, 4); } __m256i test_mm256_mask_ternarylogic_epi32(__m256i __A, __mmask8 __U, __m256i __B, __m256i __C) { - // CHECK-LABEL: @test_mm256_mask_ternarylogic_epi32 + // CHECK-LABEL: test_mm256_mask_ternarylogic_epi32 // CHECK: @llvm.x86.avx512.pternlog.d.256 // CHECK: select <8 x i1> %{{.*}}, <8 x i32> %{{.*}}, <8 x i32> %{{.*}} return _mm256_mask_ternarylogic_epi32(__A, __U, __B, __C, 4); } __m256i test_mm256_maskz_ternarylogic_epi32(__mmask8 __U, __m256i __A, __m256i __B, __m256i __C) { - // CHECK-LABEL: @test_mm256_maskz_ternarylogic_epi32 + // CHECK-LABEL: test_mm256_maskz_ternarylogic_epi32 // CHECK: @llvm.x86.avx512.pternlog.d.256 // CHECK: select <8 x i1> %{{.*}}, <8 x i32> %{{.*}}, <8 x i32> zeroinitializer return _mm256_maskz_ternarylogic_epi32(__U, __A, __B, __C, 4); } __m128i test_mm_ternarylogic_epi64(__m128i __A, __m128i __B, __m128i __C) { - // CHECK-LABEL: @test_mm_ternarylogic_epi64 + // CHECK-LABEL: test_mm_ternarylogic_epi64 // CHECK: @llvm.x86.avx512.pternlog.q.128 return _mm_ternarylogic_epi64(__A, __B, __C, 4); } __m128i test_mm_mask_ternarylogic_epi64(__m128i __A, __mmask8 __U, __m128i __B, __m128i __C) { - // CHECK-LABEL: @test_mm_mask_ternarylogic_epi64 + // CHECK-LABEL: test_mm_mask_ternarylogic_epi64 // CHECK: @llvm.x86.avx512.pternlog.q.128 // CHECK: select <2 x i1> %{{.*}}, <2 x i64> %{{.*}}, <2 x i64> %{{.*}} return _mm_mask_ternarylogic_epi64(__A, __U, __B, __C, 4); } __m128i test_mm_maskz_ternarylogic_epi64(__mmask8 __U, __m128i __A, __m128i __B, __m128i __C) { - // CHECK-LABEL: @test_mm_maskz_ternarylogic_epi64 + // CHECK-LABEL: test_mm_maskz_ternarylogic_epi64 // CHECK: @llvm.x86.avx512.pternlog.q.128 // CHECK: select <2 x i1> %{{.*}}, <2 x i64> %{{.*}}, <2 x i64> zeroinitializer return _mm_maskz_ternarylogic_epi64(__U, __A, __B, __C, 4); } __m256i test_mm256_ternarylogic_epi64(__m256i __A, __m256i __B, __m256i __C) { - // CHECK-LABEL: @test_mm256_ternarylogic_epi64 + // CHECK-LABEL: test_mm256_ternarylogic_epi64 // CHECK: @llvm.x86.avx512.pternlog.q.256 return _mm256_ternarylogic_epi64(__A, __B, __C, 4); } __m256i test_mm256_mask_ternarylogic_epi64(__m256i __A, __mmask8 __U, __m256i __B, __m256i __C) { - // CHECK-LABEL: @test_mm256_mask_ternarylogic_epi64 + // CHECK-LABEL: test_mm256_mask_ternarylogic_epi64 // CHECK: @llvm.x86.avx512.pternlog.q.256 // CHECK: select <4 x i1> %{{.*}}, <4 x i64> %{{.*}}, <4 x i64> %{{.*}} return _mm256_mask_ternarylogic_epi64(__A, __U, __B, __C, 4); } __m256i test_mm256_maskz_ternarylogic_epi64(__mmask8 __U, __m256i __A, __m256i __B, __m256i __C) { - // CHECK-LABEL: @test_mm256_maskz_ternarylogic_epi64 + // CHECK-LABEL: test_mm256_maskz_ternarylogic_epi64 // CHECK: @llvm.x86.avx512.pternlog.q.256 // CHECK: select <4 x i1> %{{.*}}, <4 x i64> %{{.*}}, <4 x i64> zeroinitializer return _mm256_maskz_ternarylogic_epi64(__U, __A, __B, __C, 4); } __m256 test_mm256_shuffle_f32x4(__m256 __A, __m256 __B) { - // CHECK-LABEL: @test_mm256_shuffle_f32x4 + // CHECK-LABEL: test_mm256_shuffle_f32x4 // CHECK: shufflevector <8 x float> %{{.*}}, <8 x float> %{{.*}}, <8 x i32> <i32 4, i32 5, i32 6, i32 7, i32 12, i32 13, i32 14, i32 15> return _mm256_shuffle_f32x4(__A, __B, 3); } __m256 test_mm256_mask_shuffle_f32x4(__m256 __W, __mmask8 __U, __m256 __A, __m256 __B) { - // CHECK-LABEL: @test_mm256_mask_shuffle_f32x4 + // CHECK-LABEL: test_mm256_mask_shuffle_f32x4 // CHECK: shufflevector <8 x float> %{{.*}}, <8 x float> %{{.*}}, <8 x i32> <i32 4, i32 5, i32 6, i32 7, i32 12, i32 13, i32 14, i32 15> // CHECK: select <8 x i1> %{{.*}}, <8 x float> %{{.*}}, <8 x float> %{{.*}} return _mm256_mask_shuffle_f32x4(__W, __U, __A, __B, 3); } __m256 test_mm256_maskz_shuffle_f32x4(__mmask8 __U, __m256 __A, __m256 __B) { - // CHECK-LABEL: @test_mm256_maskz_shuffle_f32x4 + // CHECK-LABEL: test_mm256_maskz_shuffle_f32x4 // CHECK: shufflevector <8 x float> %{{.*}}, <8 x float> %{{.*}}, <8 x i32> <i32 4, i32 5, i32 6, i32 7, i32 12, i32 13, i32 14, i32 15> // CHECK: select <8 x i1> %{{.*}}, <8 x float> %{{.*}}, <8 x float> %{{.*}} return _mm256_maskz_shuffle_f32x4(__U, __A, __B, 3); } __m256d test_mm256_shuffle_f64x2(__m256d __A, __m256d __B) { - // CHECK-LABEL: @test_mm256_shuffle_f64x2 + // CHECK-LABEL: test_mm256_shuffle_f64x2 // CHECK: shufflevector <4 x double> %{{.*}}, <4 x double> %{{.*}}, <4 x i32> <i32 2, i32 3, i32 6, i32 7> return _mm256_shuffle_f64x2(__A, __B, 3); } __m256d test_mm256_mask_shuffle_f64x2(__m256d __W, __mmask8 __U, __m256d __A, __m256d __B) { - // CHECK-LABEL: @test_mm256_mask_shuffle_f64x2 + // CHECK-LABEL: test_mm256_mask_shuffle_f64x2 // CHECK: shufflevector <4 x double> %{{.*}}, <4 x double> %{{.*}}, <4 x i32> <i32 2, i32 3, i32 6, i32 7> // CHECK: shufflevector <8 x i1> %{{.*}}, <8 x i1> %{{.*}}, <4 x i32> <i32 0, i32 1, i32 2, i32 3> // CHECK: select <4 x i1> %{{.*}}, <4 x double> %{{.*}}, <4 x double> %{{.*}} @@ -7938,7 +8032,7 @@ __m256d test_mm256_mask_shuffle_f64x2(__m256d __W, __mmask8 __U, __m256d __A, __ } __m256d test_mm256_maskz_shuffle_f64x2(__mmask8 __U, __m256d __A, __m256d __B) { - // CHECK-LABEL: @test_mm256_maskz_shuffle_f64x2 + // CHECK-LABEL: test_mm256_maskz_shuffle_f64x2 // CHECK: shufflevector <4 x double> %{{.*}}, <4 x double> %{{.*}}, <4 x i32> <i32 2, i32 3, i32 6, i32 7> // CHECK: shufflevector <8 x i1> %{{.*}}, <8 x i1> %{{.*}}, <4 x i32> <i32 0, i32 1, i32 2, i32 3> // CHECK: select <4 x i1> %{{.*}}, <4 x double> %{{.*}}, <4 x double> %{{.*}} @@ -7946,33 +8040,33 @@ __m256d test_mm256_maskz_shuffle_f64x2(__mmask8 __U, __m256d __A, __m256d __B) { } __m256i test_mm256_shuffle_i32x4(__m256i __A, __m256i __B) { - // CHECK-LABEL: @test_mm256_shuffle_i32x4 + // CHECK-LABEL: test_mm256_shuffle_i32x4 // CHECK: shufflevector <8 x i32> %{{.*}}, <8 x i32> %{{.*}}, <8 x i32> <i32 4, i32 5, i32 6, i32 7, i32 12, i32 13, i32 14, i32 15> return _mm256_shuffle_i32x4(__A, __B, 3); } __m256i test_mm256_mask_shuffle_i32x4(__m256i __W, __mmask8 __U, __m256i __A, __m256i __B) { - // CHECK-LABEL: @test_mm256_mask_shuffle_i32x4 + // CHECK-LABEL: test_mm256_mask_shuffle_i32x4 // CHECK: shufflevector <8 x i32> %{{.*}}, <8 x i32> %{{.*}}, <8 x i32> <i32 4, i32 5, i32 6, i32 7, i32 12, i32 13, i32 14, i32 15> // CHECK: select <8 x i1> %{{.*}}, <8 x i32> %{{.*}}, <8 x i32> %{{.*}} return _mm256_mask_shuffle_i32x4(__W, __U, __A, __B, 3); } __m256i test_mm256_maskz_shuffle_i32x4(__mmask8 __U, __m256i __A, __m256i __B) { - // CHECK-LABEL: @test_mm256_maskz_shuffle_i32x4 + // CHECK-LABEL: test_mm256_maskz_shuffle_i32x4 // CHECK: shufflevector <8 x i32> %{{.*}}, <8 x i32> %{{.*}}, <8 x i32> <i32 4, i32 5, i32 6, i32 7, i32 12, i32 13, i32 14, i32 15> // CHECK: select <8 x i1> %{{.*}}, <8 x i32> %{{.*}}, <8 x i32> %{{.*}} return _mm256_maskz_shuffle_i32x4(__U, __A, __B, 3); } __m256i test_mm256_shuffle_i64x2(__m256i __A, __m256i __B) { - // CHECK-LABEL: @test_mm256_shuffle_i64x2 + // CHECK-LABEL: test_mm256_shuffle_i64x2 // CHECK: shufflevector <4 x i64> %{{.*}}, <4 x i64> %{{.*}}, <4 x i32> <i32 2, i32 3, i32 6, i32 7> return _mm256_shuffle_i64x2(__A, __B, 3); } __m256i test_mm256_mask_shuffle_i64x2(__m256i __W, __mmask8 __U, __m256i __A, __m256i __B) { - // CHECK-LABEL: @test_mm256_mask_shuffle_i64x2 + // CHECK-LABEL: test_mm256_mask_shuffle_i64x2 // CHECK: shufflevector <4 x i64> %{{.*}}, <4 x i64> %{{.*}}, <4 x i32> <i32 2, i32 3, i32 6, i32 7> // CHECK: shufflevector <8 x i1> %{{.*}}, <8 x i1> %{{.*}}, <4 x i32> <i32 0, i32 1, i32 2, i32 3> // CHECK: select <4 x i1> %{{.*}}, <4 x i64> %{{.*}}, <4 x i64> %{{.*}} @@ -7980,7 +8074,7 @@ __m256i test_mm256_mask_shuffle_i64x2(__m256i __W, __mmask8 __U, __m256i __A, __ } __m256i test_mm256_maskz_shuffle_i64x2(__mmask8 __U, __m256i __A, __m256i __B) { - // CHECK-LABEL: @test_mm256_maskz_shuffle_i64x2 + // CHECK-LABEL: test_mm256_maskz_shuffle_i64x2 // CHECK: shufflevector <4 x i64> %{{.*}}, <4 x i64> %{{.*}}, <4 x i32> <i32 2, i32 3, i32 6, i32 7> // CHECK: shufflevector <8 x i1> %{{.*}}, <8 x i1> %{{.*}}, <4 x i32> <i32 0, i32 1, i32 2, i32 3> // CHECK: select <4 x i1> %{{.*}}, <4 x i64> %{{.*}}, <4 x i64> %{{.*}} @@ -7988,1576 +8082,1586 @@ __m256i test_mm256_maskz_shuffle_i64x2(__mmask8 __U, __m256i __A, __m256i __B) { } __m128d test_mm_mask_shuffle_pd(__m128d __W, __mmask8 __U, __m128d __A, __m128d __B) { - // CHECK-LABEL: @test_mm_mask_shuffle_pd + // CHECK-LABEL: test_mm_mask_shuffle_pd // CHECK: shufflevector <2 x double> %{{.*}}, <2 x double> %{{.*}}, <2 x i32> <i32 1, i32 3> // CHECK: select <2 x i1> %{{.*}}, <2 x double> %{{.*}}, <2 x double> %{{.*}} return _mm_mask_shuffle_pd(__W, __U, __A, __B, 3); } __m128d test_mm_maskz_shuffle_pd(__mmask8 __U, __m128d __A, __m128d __B) { - // CHECK-LABEL: @test_mm_maskz_shuffle_pd + // CHECK-LABEL: test_mm_maskz_shuffle_pd // CHECK: shufflevector <2 x double> %{{.*}}, <2 x double> %{{.*}}, <2 x i32> <i32 1, i32 3> // CHECK: select <2 x i1> %{{.*}}, <2 x double> %{{.*}}, <2 x double> %{{.*}} return _mm_maskz_shuffle_pd(__U, __A, __B, 3); } __m256d test_mm256_mask_shuffle_pd(__m256d __W, __mmask8 __U, __m256d __A, __m256d __B) { - // CHECK-LABEL: @test_mm256_mask_shuffle_pd + // CHECK-LABEL: test_mm256_mask_shuffle_pd // CHECK: shufflevector <4 x double> %{{.*}}, <4 x double> %{{.*}}, <4 x i32> <i32 1, i32 5, i32 2, i32 6> // CHECK: select <4 x i1> %{{.*}}, <4 x double> %{{.*}}, <4 x double> %{{.*}} return _mm256_mask_shuffle_pd(__W, __U, __A, __B, 3); } __m256d test_mm256_maskz_shuffle_pd(__mmask8 __U, __m256d __A, __m256d __B) { - // CHECK-LABEL: @test_mm256_maskz_shuffle_pd + // CHECK-LABEL: test_mm256_maskz_shuffle_pd // CHECK: shufflevector <4 x double> %{{.*}}, <4 x double> %{{.*}}, <4 x i32> <i32 1, i32 5, i32 2, i32 6> // CHECK: select <4 x i1> %{{.*}}, <4 x double> %{{.*}}, <4 x double> %{{.*}} return _mm256_maskz_shuffle_pd(__U, __A, __B, 3); } __m128 test_mm_mask_shuffle_ps(__m128 __W, __mmask8 __U, __m128 __A, __m128 __B) { - // CHECK-LABEL: @test_mm_mask_shuffle_ps + // CHECK-LABEL: test_mm_mask_shuffle_ps // CHECK: shufflevector <4 x float> %{{.*}}, <4 x float> %{{.*}}, <4 x i32> <i32 0, i32 1, i32 4, i32 4> // CHECK: select <4 x i1> %{{.*}}, <4 x float> %{{.*}}, <4 x float> %{{.*}} return _mm_mask_shuffle_ps(__W, __U, __A, __B, 4); } __m128 test_mm_maskz_shuffle_ps(__mmask8 __U, __m128 __A, __m128 __B) { - // CHECK-LABEL: @test_mm_maskz_shuffle_ps + // CHECK-LABEL: test_mm_maskz_shuffle_ps // CHECK: shufflevector <4 x float> %{{.*}}, <4 x float> %{{.*}}, <4 x i32> <i32 0, i32 1, i32 4, i32 4> // CHECK: select <4 x i1> %{{.*}}, <4 x float> %{{.*}}, <4 x float> %{{.*}} return _mm_maskz_shuffle_ps(__U, __A, __B, 4); } __m256 test_mm256_mask_shuffle_ps(__m256 __W, __mmask8 __U, __m256 __A, __m256 __B) { - // CHECK-LABEL: @test_mm256_mask_shuffle_ps + // CHECK-LABEL: test_mm256_mask_shuffle_ps // CHECK: shufflevector <8 x float> %{{.*}}, <8 x float> %{{.*}}, <8 x i32> <i32 0, i32 1, i32 8, i32 8, i32 4, i32 5, i32 12, i32 12> // CHECK: select <8 x i1> %{{.*}}, <8 x float> %{{.*}}, <8 x float> %{{.*}} return _mm256_mask_shuffle_ps(__W, __U, __A, __B, 4); } __m256 test_mm256_maskz_shuffle_ps(__mmask8 __U, __m256 __A, __m256 __B) { - // CHECK-LABEL: @test_mm256_maskz_shuffle_ps + // CHECK-LABEL: test_mm256_maskz_shuffle_ps // CHECK: shufflevector <8 x float> %{{.*}}, <8 x float> %{{.*}}, <8 x i32> <i32 0, i32 1, i32 8, i32 8, i32 4, i32 5, i32 12, i32 12> // CHECK: select <8 x i1> %{{.*}}, <8 x float> %{{.*}}, <8 x float> %{{.*}} return _mm256_maskz_shuffle_ps(__U, __A, __B, 4); } __m128d test_mm_rsqrt14_pd(__m128d __A) { - // CHECK-LABEL: @test_mm_rsqrt14_pd + // CHECK-LABEL: test_mm_rsqrt14_pd // CHECK: @llvm.x86.avx512.rsqrt14.pd.128 return _mm_rsqrt14_pd(__A); } __m128d test_mm_mask_rsqrt14_pd(__m128d __W, __mmask8 __U, __m128d __A) { - // CHECK-LABEL: @test_mm_mask_rsqrt14_pd + // CHECK-LABEL: test_mm_mask_rsqrt14_pd // CHECK: @llvm.x86.avx512.rsqrt14.pd.128 return _mm_mask_rsqrt14_pd(__W, __U, __A); } __m128d test_mm_maskz_rsqrt14_pd(__mmask8 __U, __m128d __A) { - // CHECK-LABEL: @test_mm_maskz_rsqrt14_pd + // CHECK-LABEL: test_mm_maskz_rsqrt14_pd // CHECK: @llvm.x86.avx512.rsqrt14.pd.128 return _mm_maskz_rsqrt14_pd(__U, __A); } __m256d test_mm256_rsqrt14_pd(__m256d __A) { - // CHECK-LABEL: @test_mm256_rsqrt14_pd + // CHECK-LABEL: test_mm256_rsqrt14_pd // CHECK: @llvm.x86.avx512.rsqrt14.pd.256 return _mm256_rsqrt14_pd(__A); } __m256d test_mm256_mask_rsqrt14_pd(__m256d __W, __mmask8 __U, __m256d __A) { - // CHECK-LABEL: @test_mm256_mask_rsqrt14_pd + // CHECK-LABEL: test_mm256_mask_rsqrt14_pd // CHECK: @llvm.x86.avx512.rsqrt14.pd.256 return _mm256_mask_rsqrt14_pd(__W, __U, __A); } __m256d test_mm256_maskz_rsqrt14_pd(__mmask8 __U, __m256d __A) { - // CHECK-LABEL: @test_mm256_maskz_rsqrt14_pd + // CHECK-LABEL: test_mm256_maskz_rsqrt14_pd // CHECK: @llvm.x86.avx512.rsqrt14.pd.256 return _mm256_maskz_rsqrt14_pd(__U, __A); } __m128 test_mm_rsqrt14_ps(__m128 __A) { - // CHECK-LABEL: @test_mm_rsqrt14_ps + // CHECK-LABEL: test_mm_rsqrt14_ps // CHECK: @llvm.x86.avx512.rsqrt14.ps.128 return _mm_rsqrt14_ps(__A); } __m128 test_mm_mask_rsqrt14_ps(__m128 __W, __mmask8 __U, __m128 __A) { - // CHECK-LABEL: @test_mm_mask_rsqrt14_ps + // CHECK-LABEL: test_mm_mask_rsqrt14_ps // CHECK: @llvm.x86.avx512.rsqrt14.ps.128 return _mm_mask_rsqrt14_ps(__W, __U, __A); } __m128 test_mm_maskz_rsqrt14_ps(__mmask8 __U, __m128 __A) { - // CHECK-LABEL: @test_mm_maskz_rsqrt14_ps + // CHECK-LABEL: test_mm_maskz_rsqrt14_ps // CHECK: @llvm.x86.avx512.rsqrt14.ps.128 return _mm_maskz_rsqrt14_ps(__U, __A); } __m256 test_mm256_rsqrt14_ps(__m256 __A) { - // CHECK-LABEL: @test_mm256_rsqrt14_ps + // CHECK-LABEL: test_mm256_rsqrt14_ps // CHECK: @llvm.x86.avx512.rsqrt14.ps.256 return _mm256_rsqrt14_ps(__A); } __m256 test_mm256_mask_rsqrt14_ps(__m256 __W, __mmask8 __U, __m256 __A) { - // CHECK-LABEL: @test_mm256_mask_rsqrt14_ps + // CHECK-LABEL: test_mm256_mask_rsqrt14_ps // CHECK: @llvm.x86.avx512.rsqrt14.ps.256 return _mm256_mask_rsqrt14_ps(__W, __U, __A); } __m256 test_mm256_maskz_rsqrt14_ps(__mmask8 __U, __m256 __A) { - // CHECK-LABEL: @test_mm256_maskz_rsqrt14_ps + // CHECK-LABEL: test_mm256_maskz_rsqrt14_ps // CHECK: @llvm.x86.avx512.rsqrt14.ps.256 return _mm256_maskz_rsqrt14_ps(__U, __A); } __m256 test_mm256_broadcast_f32x4(__m128 __A) { - // CHECK-LABEL: @test_mm256_broadcast_f32x4 + // CHECK-LABEL: test_mm256_broadcast_f32x4 // CHECK: shufflevector <4 x float> %{{.*}}, <4 x float> %{{.*}}, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 0, i32 1, i32 2, i32 3> return _mm256_broadcast_f32x4(__A); } +TEST_CONSTEXPR(match_m256(_mm256_broadcast_f32x4((__m128)(__v4sf){1.0f, 3.0f, -5.0f, -8.0f}), 1.0f, 3.0f, -5.0f, -8.0f, 1.0f, 3.0f, -5.0f, -8.0f)); __m256 test_mm256_mask_broadcast_f32x4(__m256 __O, __mmask8 __M, __m128 __A) { - // CHECK-LABEL: @test_mm256_mask_broadcast_f32x4 + // CHECK-LABEL: test_mm256_mask_broadcast_f32x4 // CHECK: shufflevector <4 x float> %{{.*}}, <4 x float> %{{.*}}, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 0, i32 1, i32 2, i32 3> // CHECK: select <8 x i1> %{{.*}}, <8 x float> %{{.*}}, <8 x float> %{{.*}} return _mm256_mask_broadcast_f32x4(__O, __M, __A); } __m256 test_mm256_maskz_broadcast_f32x4(__mmask8 __M, __m128 __A) { - // CHECK-LABEL: @test_mm256_maskz_broadcast_f32x4 + // CHECK-LABEL: test_mm256_maskz_broadcast_f32x4 // CHECK: shufflevector <4 x float> %{{.*}}, <4 x float> %{{.*}}, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 0, i32 1, i32 2, i32 3> // CHECK: select <8 x i1> %{{.*}}, <8 x float> %{{.*}}, <8 x float> %{{.*}} return _mm256_maskz_broadcast_f32x4(__M, __A); } __m256i test_mm256_broadcast_i32x4(__m128i const* __A) { - // CHECK-LABEL: @test_mm256_broadcast_i32x4 + // CHECK-LABEL: test_mm256_broadcast_i32x4 // CHECK: shufflevector <4 x i32> %{{.*}}, <4 x i32> %{{.*}}, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 0, i32 1, i32 2, i32 3> return _mm256_broadcast_i32x4(_mm_loadu_si128(__A)); } +TEST_CONSTEXPR(match_v8si(_mm256_broadcast_i32x4((__m128i)(__v4si){1, 3, -5, -8}), 1, 3, -5, -8, 1, 3, -5, -8)); __m256i test_mm256_mask_broadcast_i32x4(__m256i __O, __mmask8 __M, __m128i const* __A) { - // CHECK-LABEL: @test_mm256_mask_broadcast_i32x4 + // CHECK-LABEL: test_mm256_mask_broadcast_i32x4 // CHECK: shufflevector <4 x i32> %{{.*}}, <4 x i32> %{{.*}}, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 0, i32 1, i32 2, i32 3> // CHECK: select <8 x i1> %{{.*}}, <8 x i32> %{{.*}}, <8 x i32> %{{.*}} return _mm256_mask_broadcast_i32x4(__O, __M, _mm_loadu_si128(__A)); } __m256i test_mm256_maskz_broadcast_i32x4(__mmask8 __M, __m128i const* __A) { - // CHECK-LABEL: @test_mm256_maskz_broadcast_i32x4 + // CHECK-LABEL: test_mm256_maskz_broadcast_i32x4 // CHECK: shufflevector <4 x i32> %{{.*}}, <4 x i32> %{{.*}}, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 0, i32 1, i32 2, i32 3> // CHECK: select <8 x i1> %{{.*}}, <8 x i32> %{{.*}}, <8 x i32> %{{.*}} return _mm256_maskz_broadcast_i32x4(__M, _mm_loadu_si128(__A)); } __m256d test_mm256_mask_broadcastsd_pd(__m256d __O, __mmask8 __M, __m128d __A) { - // CHECK-LABEL: @test_mm256_mask_broadcastsd_pd + // CHECK-LABEL: test_mm256_mask_broadcastsd_pd // CHECK: shufflevector <2 x double> %{{.*}}, <2 x double> %{{.*}}, <4 x i32> zeroinitializer // CHECK: select <4 x i1> %{{.*}}, <4 x double> %{{.*}}, <4 x double> %{{.*}} return _mm256_mask_broadcastsd_pd(__O, __M, __A); } __m256d test_mm256_maskz_broadcastsd_pd(__mmask8 __M, __m128d __A) { - // CHECK-LABEL: @test_mm256_maskz_broadcastsd_pd + // CHECK-LABEL: test_mm256_maskz_broadcastsd_pd // CHECK: shufflevector <2 x double> %{{.*}}, <2 x double> %{{.*}}, <4 x i32> zeroinitializer // CHECK: select <4 x i1> %{{.*}}, <4 x double> %{{.*}}, <4 x double> %{{.*}} return _mm256_maskz_broadcastsd_pd(__M, __A); } __m128 test_mm_mask_broadcastss_ps(__m128 __O, __mmask8 __M, __m128 __A) { - // CHECK-LABEL: @test_mm_mask_broadcastss_ps + // CHECK-LABEL: test_mm_mask_broadcastss_ps // CHECK: shufflevector <4 x float> %{{.*}}, <4 x float> %{{.*}}, <4 x i32> zeroinitializer // CHECK: select <4 x i1> %{{.*}}, <4 x float> %{{.*}}, <4 x float> %{{.*}} return _mm_mask_broadcastss_ps(__O, __M, __A); } __m128 test_mm_maskz_broadcastss_ps(__mmask8 __M, __m128 __A) { - // CHECK-LABEL: @test_mm_maskz_broadcastss_ps + // CHECK-LABEL: test_mm_maskz_broadcastss_ps // CHECK: shufflevector <4 x float> %{{.*}}, <4 x float> %{{.*}}, <4 x i32> zeroinitializer // CHECK: select <4 x i1> %{{.*}}, <4 x float> %{{.*}}, <4 x float> %{{.*}} return _mm_maskz_broadcastss_ps(__M, __A); } __m256 test_mm256_mask_broadcastss_ps(__m256 __O, __mmask8 __M, __m128 __A) { - // CHECK-LABEL: @test_mm256_mask_broadcastss_ps + // CHECK-LABEL: test_mm256_mask_broadcastss_ps // CHECK: shufflevector <4 x float> %{{.*}}, <4 x float> %{{.*}}, <8 x i32> zeroinitializer // CHECK: select <8 x i1> %{{.*}}, <8 x float> %{{.*}}, <8 x float> %{{.*}} return _mm256_mask_broadcastss_ps(__O, __M, __A); } __m256 test_mm256_maskz_broadcastss_ps(__mmask8 __M, __m128 __A) { - // CHECK-LABEL: @test_mm256_maskz_broadcastss_ps + // CHECK-LABEL: test_mm256_maskz_broadcastss_ps // CHECK: shufflevector <4 x float> %{{.*}}, <4 x float> %{{.*}}, <8 x i32> zeroinitializer // CHECK: select <8 x i1> %{{.*}}, <8 x float> %{{.*}}, <8 x float> %{{.*}} return _mm256_maskz_broadcastss_ps(__M, __A); } __m128i test_mm_mask_broadcastd_epi32(__m128i __O, __mmask8 __M, __m128i __A) { - // CHECK-LABEL: @test_mm_mask_broadcastd_epi32 + // CHECK-LABEL: test_mm_mask_broadcastd_epi32 // CHECK: shufflevector <4 x i32> %{{.*}}, <4 x i32> %{{.*}}, <4 x i32> zeroinitializer // CHECK: select <4 x i1> %{{.*}}, <4 x i32> %{{.*}}, <4 x i32> %{{.*}} return _mm_mask_broadcastd_epi32(__O, __M, __A); } __m128i test_mm_maskz_broadcastd_epi32(__mmask8 __M, __m128i __A) { - // CHECK-LABEL: @test_mm_maskz_broadcastd_epi32 + // CHECK-LABEL: test_mm_maskz_broadcastd_epi32 // CHECK: shufflevector <4 x i32> %{{.*}}, <4 x i32> %{{.*}}, <4 x i32> zeroinitializer // CHECK: select <4 x i1> %{{.*}}, <4 x i32> %{{.*}}, <4 x i32> %{{.*}} return _mm_maskz_broadcastd_epi32(__M, __A); } __m256i test_mm256_mask_broadcastd_epi32(__m256i __O, __mmask8 __M, __m128i __A) { - // CHECK-LABEL: @test_mm256_mask_broadcastd_epi32 + // CHECK-LABEL: test_mm256_mask_broadcastd_epi32 // CHECK: shufflevector <4 x i32> %{{.*}}, <4 x i32> %{{.*}}, <8 x i32> zeroinitializer // CHECK: select <8 x i1> %{{.*}}, <8 x i32> %{{.*}}, <8 x i32> %{{.*}} return _mm256_mask_broadcastd_epi32(__O, __M, __A); } __m256i test_mm256_maskz_broadcastd_epi32(__mmask8 __M, __m128i __A) { - // CHECK-LABEL: @test_mm256_maskz_broadcastd_epi32 + // CHECK-LABEL: test_mm256_maskz_broadcastd_epi32 // CHECK: shufflevector <4 x i32> %{{.*}}, <4 x i32> %{{.*}}, <8 x i32> zeroinitializer // CHECK: select <8 x i1> %{{.*}}, <8 x i32> %{{.*}}, <8 x i32> %{{.*}} return _mm256_maskz_broadcastd_epi32(__M, __A); } __m128i test_mm_mask_broadcastq_epi64(__m128i __O, __mmask8 __M, __m128i __A) { - // CHECK-LABEL: @test_mm_mask_broadcastq_epi64 + // CHECK-LABEL: test_mm_mask_broadcastq_epi64 // CHECK: shufflevector <2 x i64> %{{.*}}, <2 x i64> %{{.*}}, <2 x i32> zeroinitializer // CHECK: select <2 x i1> %{{.*}}, <2 x i64> %{{.*}}, <2 x i64> %{{.*}} return _mm_mask_broadcastq_epi64(__O, __M, __A); } __m128i test_mm_maskz_broadcastq_epi64(__mmask8 __M, __m128i __A) { - // CHECK-LABEL: @test_mm_maskz_broadcastq_epi64 + // CHECK-LABEL: test_mm_maskz_broadcastq_epi64 // CHECK: shufflevector <2 x i64> %{{.*}}, <2 x i64> %{{.*}}, <2 x i32> zeroinitializer // CHECK: select <2 x i1> %{{.*}}, <2 x i64> %{{.*}}, <2 x i64> %{{.*}} return _mm_maskz_broadcastq_epi64(__M, __A); } __m256i test_mm256_mask_broadcastq_epi64(__m256i __O, __mmask8 __M, __m128i __A) { - // CHECK-LABEL: @test_mm256_mask_broadcastq_epi64 + // CHECK-LABEL: test_mm256_mask_broadcastq_epi64 // CHECK: shufflevector <2 x i64> %{{.*}}, <2 x i64> %{{.*}}, <4 x i32> zeroinitializer // CHECK: select <4 x i1> %{{.*}}, <4 x i64> %{{.*}}, <4 x i64> %{{.*}} return _mm256_mask_broadcastq_epi64(__O, __M, __A); } __m256i test_mm256_maskz_broadcastq_epi64(__mmask8 __M, __m128i __A) { - // CHECK-LABEL: @test_mm256_maskz_broadcastq_epi64 + // CHECK-LABEL: test_mm256_maskz_broadcastq_epi64 // CHECK: shufflevector <2 x i64> %{{.*}}, <2 x i64> %{{.*}}, <4 x i32> zeroinitializer // CHECK: select <4 x i1> %{{.*}}, <4 x i64> %{{.*}}, <4 x i64> %{{.*}} return _mm256_maskz_broadcastq_epi64(__M, __A); } __m128i test_mm_cvtsepi32_epi8(__m128i __A) { - // CHECK-LABEL: @test_mm_cvtsepi32_epi8 + // CHECK-LABEL: test_mm_cvtsepi32_epi8 // CHECK: @llvm.x86.avx512.mask.pmovs.db.128 return _mm_cvtsepi32_epi8(__A); } __m128i test_mm_mask_cvtsepi32_epi8(__m128i __O, __mmask8 __M, __m128i __A) { - // CHECK-LABEL: @test_mm_mask_cvtsepi32_epi8 + // CHECK-LABEL: test_mm_mask_cvtsepi32_epi8 // CHECK: @llvm.x86.avx512.mask.pmovs.db.128 return _mm_mask_cvtsepi32_epi8(__O, __M, __A); } __m128i test_mm_maskz_cvtsepi32_epi8(__mmask8 __M, __m128i __A) { - // CHECK-LABEL: @test_mm_maskz_cvtsepi32_epi8 + // CHECK-LABEL: test_mm_maskz_cvtsepi32_epi8 // CHECK: @llvm.x86.avx512.mask.pmovs.db.128 return _mm_maskz_cvtsepi32_epi8(__M, __A); } void test_mm_mask_cvtsepi32_storeu_epi8(void * __P, __mmask8 __M, __m128i __A) { - // CHECK-LABEL: @test_mm_mask_cvtsepi32_storeu_epi8 + // CHECK-LABEL: test_mm_mask_cvtsepi32_storeu_epi8 // CHECK: @llvm.x86.avx512.mask.pmovs.db.mem.128 return _mm_mask_cvtsepi32_storeu_epi8(__P, __M, __A); } __m128i test_mm256_cvtsepi32_epi8(__m256i __A) { - // CHECK-LABEL: @test_mm256_cvtsepi32_epi8 + // CHECK-LABEL: test_mm256_cvtsepi32_epi8 // CHECK: @llvm.x86.avx512.mask.pmovs.db.256 return _mm256_cvtsepi32_epi8(__A); } __m128i test_mm256_mask_cvtsepi32_epi8(__m128i __O, __mmask8 __M, __m256i __A) { - // CHECK-LABEL: @test_mm256_mask_cvtsepi32_epi8 + // CHECK-LABEL: test_mm256_mask_cvtsepi32_epi8 // CHECK: @llvm.x86.avx512.mask.pmovs.db.256 return _mm256_mask_cvtsepi32_epi8(__O, __M, __A); } __m128i test_mm256_maskz_cvtsepi32_epi8(__mmask8 __M, __m256i __A) { - // CHECK-LABEL: @test_mm256_maskz_cvtsepi32_epi8 + // CHECK-LABEL: test_mm256_maskz_cvtsepi32_epi8 // CHECK: @llvm.x86.avx512.mask.pmovs.db.256 return _mm256_maskz_cvtsepi32_epi8(__M, __A); } void test_mm256_mask_cvtsepi32_storeu_epi8(void * __P, __mmask8 __M, __m256i __A) { - // CHECK-LABEL: @test_mm256_mask_cvtsepi32_storeu_epi8 + // CHECK-LABEL: test_mm256_mask_cvtsepi32_storeu_epi8 // CHECK: @llvm.x86.avx512.mask.pmovs.db.mem.256 return _mm256_mask_cvtsepi32_storeu_epi8(__P, __M, __A); } __m128i test_mm_cvtsepi32_epi16(__m128i __A) { - // CHECK-LABEL: @test_mm_cvtsepi32_epi16 + // CHECK-LABEL: test_mm_cvtsepi32_epi16 // CHECK: @llvm.x86.avx512.mask.pmovs.dw.128 return _mm_cvtsepi32_epi16(__A); } __m128i test_mm_mask_cvtsepi32_epi16(__m128i __O, __mmask8 __M, __m128i __A) { - // CHECK-LABEL: @test_mm_mask_cvtsepi32_epi16 + // CHECK-LABEL: test_mm_mask_cvtsepi32_epi16 // CHECK: @llvm.x86.avx512.mask.pmovs.dw.128 return _mm_mask_cvtsepi32_epi16(__O, __M, __A); } __m128i test_mm_maskz_cvtsepi32_epi16(__mmask8 __M, __m128i __A) { - // CHECK-LABEL: @test_mm_maskz_cvtsepi32_epi16 + // CHECK-LABEL: test_mm_maskz_cvtsepi32_epi16 // CHECK: @llvm.x86.avx512.mask.pmovs.dw.128 return _mm_maskz_cvtsepi32_epi16(__M, __A); } void test_mm_mask_cvtsepi32_storeu_epi16(void * __P, __mmask8 __M, __m128i __A) { - // CHECK-LABEL: @test_mm_mask_cvtsepi32_storeu_epi16 + // CHECK-LABEL: test_mm_mask_cvtsepi32_storeu_epi16 // CHECK: @llvm.x86.avx512.mask.pmovs.dw.mem.128 return _mm_mask_cvtsepi32_storeu_epi16(__P, __M, __A); } __m128i test_mm256_cvtsepi32_epi16(__m256i __A) { - // CHECK-LABEL: @test_mm256_cvtsepi32_epi16 + // CHECK-LABEL: test_mm256_cvtsepi32_epi16 // CHECK: @llvm.x86.avx512.mask.pmovs.dw.256 return _mm256_cvtsepi32_epi16(__A); } __m128i test_mm256_mask_cvtsepi32_epi16(__m128i __O, __mmask8 __M, __m256i __A) { - // CHECK-LABEL: @test_mm256_mask_cvtsepi32_epi16 + // CHECK-LABEL: test_mm256_mask_cvtsepi32_epi16 // CHECK: @llvm.x86.avx512.mask.pmovs.dw.256 return _mm256_mask_cvtsepi32_epi16(__O, __M, __A); } __m128i test_mm256_maskz_cvtsepi32_epi16(__mmask8 __M, __m256i __A) { - // CHECK-LABEL: @test_mm256_maskz_cvtsepi32_epi16 + // CHECK-LABEL: test_mm256_maskz_cvtsepi32_epi16 // CHECK: @llvm.x86.avx512.mask.pmovs.dw.256 return _mm256_maskz_cvtsepi32_epi16(__M, __A); } void test_mm256_mask_cvtsepi32_storeu_epi16(void * __P, __mmask8 __M, __m256i __A) { - // CHECK-LABEL: @test_mm256_mask_cvtsepi32_storeu_epi16 + // CHECK-LABEL: test_mm256_mask_cvtsepi32_storeu_epi16 // CHECK: @llvm.x86.avx512.mask.pmovs.dw.mem.256 return _mm256_mask_cvtsepi32_storeu_epi16(__P, __M, __A); } __m128i test_mm_cvtsepi64_epi8(__m128i __A) { - // CHECK-LABEL: @test_mm_cvtsepi64_epi8 + // CHECK-LABEL: test_mm_cvtsepi64_epi8 // CHECK: @llvm.x86.avx512.mask.pmovs.qb.128 return _mm_cvtsepi64_epi8(__A); } __m128i test_mm_mask_cvtsepi64_epi8(__m128i __O, __mmask8 __M, __m128i __A) { - // CHECK-LABEL: @test_mm_mask_cvtsepi64_epi8 + // CHECK-LABEL: test_mm_mask_cvtsepi64_epi8 // CHECK: @llvm.x86.avx512.mask.pmovs.qb.128 return _mm_mask_cvtsepi64_epi8(__O, __M, __A); } __m128i test_mm_maskz_cvtsepi64_epi8(__mmask8 __M, __m128i __A) { - // CHECK-LABEL: @test_mm_maskz_cvtsepi64_epi8 + // CHECK-LABEL: test_mm_maskz_cvtsepi64_epi8 // CHECK: @llvm.x86.avx512.mask.pmovs.qb.128 return _mm_maskz_cvtsepi64_epi8(__M, __A); } void test_mm_mask_cvtsepi64_storeu_epi8(void * __P, __mmask8 __M, __m128i __A) { - // CHECK-LABEL: @test_mm_mask_cvtsepi64_storeu_epi8 + // CHECK-LABEL: test_mm_mask_cvtsepi64_storeu_epi8 // CHECK: @llvm.x86.avx512.mask.pmovs.qb.mem.128 return _mm_mask_cvtsepi64_storeu_epi8(__P, __M, __A); } __m128i test_mm256_cvtsepi64_epi8(__m256i __A) { - // CHECK-LABEL: @test_mm256_cvtsepi64_epi8 + // CHECK-LABEL: test_mm256_cvtsepi64_epi8 // CHECK: @llvm.x86.avx512.mask.pmovs.qb.256 return _mm256_cvtsepi64_epi8(__A); } __m128i test_mm256_mask_cvtsepi64_epi8(__m128i __O, __mmask8 __M, __m256i __A) { - // CHECK-LABEL: @test_mm256_mask_cvtsepi64_epi8 + // CHECK-LABEL: test_mm256_mask_cvtsepi64_epi8 // CHECK: @llvm.x86.avx512.mask.pmovs.qb.256 return _mm256_mask_cvtsepi64_epi8(__O, __M, __A); } __m128i test_mm256_maskz_cvtsepi64_epi8(__mmask8 __M, __m256i __A) { - // CHECK-LABEL: @test_mm256_maskz_cvtsepi64_epi8 + // CHECK-LABEL: test_mm256_maskz_cvtsepi64_epi8 // CHECK: @llvm.x86.avx512.mask.pmovs.qb.256 return _mm256_maskz_cvtsepi64_epi8(__M, __A); } void test_mm256_mask_cvtsepi64_storeu_epi8(void * __P, __mmask8 __M, __m256i __A) { - // CHECK-LABEL: @test_mm256_mask_cvtsepi64_storeu_epi8 + // CHECK-LABEL: test_mm256_mask_cvtsepi64_storeu_epi8 // CHECK: @llvm.x86.avx512.mask.pmovs.qb.mem.256 return _mm256_mask_cvtsepi64_storeu_epi8(__P, __M, __A); } __m128i test_mm_cvtsepi64_epi32(__m128i __A) { - // CHECK-LABEL: @test_mm_cvtsepi64_epi32 + // CHECK-LABEL: test_mm_cvtsepi64_epi32 // CHECK: @llvm.x86.avx512.mask.pmovs.qd.128 return _mm_cvtsepi64_epi32(__A); } __m128i test_mm_mask_cvtsepi64_epi32(__m128i __O, __mmask8 __M, __m128i __A) { - // CHECK-LABEL: @test_mm_mask_cvtsepi64_epi32 + // CHECK-LABEL: test_mm_mask_cvtsepi64_epi32 // CHECK: @llvm.x86.avx512.mask.pmovs.qd.128 return _mm_mask_cvtsepi64_epi32(__O, __M, __A); } __m128i test_mm_maskz_cvtsepi64_epi32(__mmask8 __M, __m128i __A) { - // CHECK-LABEL: @test_mm_maskz_cvtsepi64_epi32 + // CHECK-LABEL: test_mm_maskz_cvtsepi64_epi32 // CHECK: @llvm.x86.avx512.mask.pmovs.qd.128 return _mm_maskz_cvtsepi64_epi32(__M, __A); } void test_mm_mask_cvtsepi64_storeu_epi32(void * __P, __mmask8 __M, __m128i __A) { - // CHECK-LABEL: @test_mm_mask_cvtsepi64_storeu_epi32 + // CHECK-LABEL: test_mm_mask_cvtsepi64_storeu_epi32 // CHECK: @llvm.x86.avx512.mask.pmovs.qd.mem.128 return _mm_mask_cvtsepi64_storeu_epi32(__P, __M, __A); } __m128i test_mm256_cvtsepi64_epi32(__m256i __A) { - // CHECK-LABEL: @test_mm256_cvtsepi64_epi32 + // CHECK-LABEL: test_mm256_cvtsepi64_epi32 // CHECK: @llvm.x86.avx512.mask.pmovs.qd.256 return _mm256_cvtsepi64_epi32(__A); } __m128i test_mm256_mask_cvtsepi64_epi32(__m128i __O, __mmask8 __M, __m256i __A) { - // CHECK-LABEL: @test_mm256_mask_cvtsepi64_epi32 + // CHECK-LABEL: test_mm256_mask_cvtsepi64_epi32 // CHECK: @llvm.x86.avx512.mask.pmovs.qd.256 return _mm256_mask_cvtsepi64_epi32(__O, __M, __A); } __m128i test_mm256_maskz_cvtsepi64_epi32(__mmask8 __M, __m256i __A) { - // CHECK-LABEL: @test_mm256_maskz_cvtsepi64_epi32 + // CHECK-LABEL: test_mm256_maskz_cvtsepi64_epi32 // CHECK: @llvm.x86.avx512.mask.pmovs.qd.256 return _mm256_maskz_cvtsepi64_epi32(__M, __A); } void test_mm256_mask_cvtsepi64_storeu_epi32(void * __P, __mmask8 __M, __m256i __A) { - // CHECK-LABEL: @test_mm256_mask_cvtsepi64_storeu_epi32 + // CHECK-LABEL: test_mm256_mask_cvtsepi64_storeu_epi32 // CHECK: @llvm.x86.avx512.mask.pmovs.qd.mem.256 return _mm256_mask_cvtsepi64_storeu_epi32(__P, __M, __A); } __m128i test_mm_cvtsepi64_epi16(__m128i __A) { - // CHECK-LABEL: @test_mm_cvtsepi64_epi16 + // CHECK-LABEL: test_mm_cvtsepi64_epi16 // CHECK: @llvm.x86.avx512.mask.pmovs.qw.128 return _mm_cvtsepi64_epi16(__A); } __m128i test_mm_mask_cvtsepi64_epi16(__m128i __O, __mmask8 __M, __m128i __A) { - // CHECK-LABEL: @test_mm_mask_cvtsepi64_epi16 + // CHECK-LABEL: test_mm_mask_cvtsepi64_epi16 // CHECK: @llvm.x86.avx512.mask.pmovs.qw.128 return _mm_mask_cvtsepi64_epi16(__O, __M, __A); } __m128i test_mm_maskz_cvtsepi64_epi16(__mmask8 __M, __m128i __A) { - // CHECK-LABEL: @test_mm_maskz_cvtsepi64_epi16 + // CHECK-LABEL: test_mm_maskz_cvtsepi64_epi16 // CHECK: @llvm.x86.avx512.mask.pmovs.qw.128 return _mm_maskz_cvtsepi64_epi16(__M, __A); } void test_mm_mask_cvtsepi64_storeu_epi16(void * __P, __mmask8 __M, __m128i __A) { - // CHECK-LABEL: @test_mm_mask_cvtsepi64_storeu_epi16 + // CHECK-LABEL: test_mm_mask_cvtsepi64_storeu_epi16 // CHECK: @llvm.x86.avx512.mask.pmovs.qw.mem.128 return _mm_mask_cvtsepi64_storeu_epi16(__P, __M, __A); } __m128i test_mm256_cvtsepi64_epi16(__m256i __A) { - // CHECK-LABEL: @test_mm256_cvtsepi64_epi16 + // CHECK-LABEL: test_mm256_cvtsepi64_epi16 // CHECK: @llvm.x86.avx512.mask.pmovs.qw.256 return _mm256_cvtsepi64_epi16(__A); } __m128i test_mm256_mask_cvtsepi64_epi16(__m128i __O, __mmask8 __M, __m256i __A) { - // CHECK-LABEL: @test_mm256_mask_cvtsepi64_epi16 + // CHECK-LABEL: test_mm256_mask_cvtsepi64_epi16 // CHECK: @llvm.x86.avx512.mask.pmovs.qw.256 return _mm256_mask_cvtsepi64_epi16(__O, __M, __A); } __m128i test_mm256_maskz_cvtsepi64_epi16(__mmask8 __M, __m256i __A) { - // CHECK-LABEL: @test_mm256_maskz_cvtsepi64_epi16 + // CHECK-LABEL: test_mm256_maskz_cvtsepi64_epi16 // CHECK: @llvm.x86.avx512.mask.pmovs.qw.256 return _mm256_maskz_cvtsepi64_epi16(__M, __A); } void test_mm256_mask_cvtsepi64_storeu_epi16(void * __P, __mmask8 __M, __m256i __A) { - // CHECK-LABEL: @test_mm256_mask_cvtsepi64_storeu_epi16 + // CHECK-LABEL: test_mm256_mask_cvtsepi64_storeu_epi16 // CHECK: @llvm.x86.avx512.mask.pmovs.qw.mem.256 return _mm256_mask_cvtsepi64_storeu_epi16(__P, __M, __A); } __m128i test_mm_cvtusepi32_epi8(__m128i __A) { - // CHECK-LABEL: @test_mm_cvtusepi32_epi8 + // CHECK-LABEL: test_mm_cvtusepi32_epi8 // CHECK: @llvm.x86.avx512.mask.pmovus.db.128 return _mm_cvtusepi32_epi8(__A); } __m128i test_mm_mask_cvtusepi32_epi8(__m128i __O, __mmask8 __M, __m128i __A) { - // CHECK-LABEL: @test_mm_mask_cvtusepi32_epi8 + // CHECK-LABEL: test_mm_mask_cvtusepi32_epi8 // CHECK: @llvm.x86.avx512.mask.pmovus.db.128 return _mm_mask_cvtusepi32_epi8(__O, __M, __A); } __m128i test_mm_maskz_cvtusepi32_epi8(__mmask8 __M, __m128i __A) { - // CHECK-LABEL: @test_mm_maskz_cvtusepi32_epi8 + // CHECK-LABEL: test_mm_maskz_cvtusepi32_epi8 // CHECK: @llvm.x86.avx512.mask.pmovus.db.128 return _mm_maskz_cvtusepi32_epi8(__M, __A); } void test_mm_mask_cvtusepi32_storeu_epi8(void * __P, __mmask8 __M, __m128i __A) { - // CHECK-LABEL: @test_mm_mask_cvtusepi32_storeu_epi8 + // CHECK-LABEL: test_mm_mask_cvtusepi32_storeu_epi8 // CHECK: @llvm.x86.avx512.mask.pmovus.db.mem.128 return _mm_mask_cvtusepi32_storeu_epi8(__P, __M, __A); } __m128i test_mm256_cvtusepi32_epi8(__m256i __A) { - // CHECK-LABEL: @test_mm256_cvtusepi32_epi8 + // CHECK-LABEL: test_mm256_cvtusepi32_epi8 // CHECK: @llvm.x86.avx512.mask.pmovus.db.256 return _mm256_cvtusepi32_epi8(__A); } __m128i test_mm256_mask_cvtusepi32_epi8(__m128i __O, __mmask8 __M, __m256i __A) { - // CHECK-LABEL: @test_mm256_mask_cvtusepi32_epi8 + // CHECK-LABEL: test_mm256_mask_cvtusepi32_epi8 // CHECK: @llvm.x86.avx512.mask.pmovus.db.256 return _mm256_mask_cvtusepi32_epi8(__O, __M, __A); } __m128i test_mm256_maskz_cvtusepi32_epi8(__mmask8 __M, __m256i __A) { - // CHECK-LABEL: @test_mm256_maskz_cvtusepi32_epi8 + // CHECK-LABEL: test_mm256_maskz_cvtusepi32_epi8 // CHECK: @llvm.x86.avx512.mask.pmovus.db.256 return _mm256_maskz_cvtusepi32_epi8(__M, __A); } void test_mm256_mask_cvtusepi32_storeu_epi8(void * __P, __mmask8 __M, __m256i __A) { - // CHECK-LABEL: @test_mm256_mask_cvtusepi32_storeu_epi8 + // CHECK-LABEL: test_mm256_mask_cvtusepi32_storeu_epi8 // CHECK: @llvm.x86.avx512.mask.pmovus.db.mem.256 return _mm256_mask_cvtusepi32_storeu_epi8(__P, __M, __A); } __m128i test_mm_cvtusepi32_epi16(__m128i __A) { - // CHECK-LABEL: @test_mm_cvtusepi32_epi16 + // CHECK-LABEL: test_mm_cvtusepi32_epi16 // CHECK: @llvm.x86.avx512.mask.pmovus.dw.128 return _mm_cvtusepi32_epi16(__A); } __m128i test_mm_mask_cvtusepi32_epi16(__m128i __O, __mmask8 __M, __m128i __A) { - // CHECK-LABEL: @test_mm_mask_cvtusepi32_epi16 + // CHECK-LABEL: test_mm_mask_cvtusepi32_epi16 // CHECK: @llvm.x86.avx512.mask.pmovus.dw.128 return _mm_mask_cvtusepi32_epi16(__O, __M, __A); } __m128i test_mm_maskz_cvtusepi32_epi16(__mmask8 __M, __m128i __A) { - // CHECK-LABEL: @test_mm_maskz_cvtusepi32_epi16 + // CHECK-LABEL: test_mm_maskz_cvtusepi32_epi16 // CHECK: @llvm.x86.avx512.mask.pmovus.dw.128 return _mm_maskz_cvtusepi32_epi16(__M, __A); } void test_mm_mask_cvtusepi32_storeu_epi16(void * __P, __mmask8 __M, __m128i __A) { - // CHECK-LABEL: @test_mm_mask_cvtusepi32_storeu_epi16 + // CHECK-LABEL: test_mm_mask_cvtusepi32_storeu_epi16 // CHECK: @llvm.x86.avx512.mask.pmovus.dw.mem.128 return _mm_mask_cvtusepi32_storeu_epi16(__P, __M, __A); } __m128i test_mm256_cvtusepi32_epi16(__m256i __A) { - // CHECK-LABEL: @test_mm256_cvtusepi32_epi16 + // CHECK-LABEL: test_mm256_cvtusepi32_epi16 // CHECK: @llvm.x86.avx512.mask.pmovus.dw.256 return _mm256_cvtusepi32_epi16(__A); } __m128i test_mm256_mask_cvtusepi32_epi16(__m128i __O, __mmask8 __M, __m256i __A) { - // CHECK-LABEL: @test_mm256_mask_cvtusepi32_epi16 + // CHECK-LABEL: test_mm256_mask_cvtusepi32_epi16 // CHECK: @llvm.x86.avx512.mask.pmovus.dw.256 return _mm256_mask_cvtusepi32_epi16(__O, __M, __A); } __m128i test_mm256_maskz_cvtusepi32_epi16(__mmask8 __M, __m256i __A) { - // CHECK-LABEL: @test_mm256_maskz_cvtusepi32_epi16 + // CHECK-LABEL: test_mm256_maskz_cvtusepi32_epi16 // CHECK: @llvm.x86.avx512.mask.pmovus.dw.256 return _mm256_maskz_cvtusepi32_epi16(__M, __A); } void test_mm256_mask_cvtusepi32_storeu_epi16(void * __P, __mmask8 __M, __m256i __A) { - // CHECK-LABEL: @test_mm256_mask_cvtusepi32_storeu_epi16 + // CHECK-LABEL: test_mm256_mask_cvtusepi32_storeu_epi16 // CHECK: @llvm.x86.avx512.mask.pmovus.dw.mem.256 return _mm256_mask_cvtusepi32_storeu_epi16(__P, __M, __A); } __m128i test_mm_cvtusepi64_epi8(__m128i __A) { - // CHECK-LABEL: @test_mm_cvtusepi64_epi8 + // CHECK-LABEL: test_mm_cvtusepi64_epi8 // CHECK: @llvm.x86.avx512.mask.pmovus.qb.128 return _mm_cvtusepi64_epi8(__A); } __m128i test_mm_mask_cvtusepi64_epi8(__m128i __O, __mmask8 __M, __m128i __A) { - // CHECK-LABEL: @test_mm_mask_cvtusepi64_epi8 + // CHECK-LABEL: test_mm_mask_cvtusepi64_epi8 // CHECK: @llvm.x86.avx512.mask.pmovus.qb.128 return _mm_mask_cvtusepi64_epi8(__O, __M, __A); } __m128i test_mm_maskz_cvtusepi64_epi8(__mmask8 __M, __m128i __A) { - // CHECK-LABEL: @test_mm_maskz_cvtusepi64_epi8 + // CHECK-LABEL: test_mm_maskz_cvtusepi64_epi8 // CHECK: @llvm.x86.avx512.mask.pmovus.qb.128 return _mm_maskz_cvtusepi64_epi8(__M, __A); } void test_mm_mask_cvtusepi64_storeu_epi8(void * __P, __mmask8 __M, __m128i __A) { - // CHECK-LABEL: @test_mm_mask_cvtusepi64_storeu_epi8 + // CHECK-LABEL: test_mm_mask_cvtusepi64_storeu_epi8 // CHECK: @llvm.x86.avx512.mask.pmovus.qb.mem.128 return _mm_mask_cvtusepi64_storeu_epi8(__P, __M, __A); } __m128i test_mm256_cvtusepi64_epi8(__m256i __A) { - // CHECK-LABEL: @test_mm256_cvtusepi64_epi8 + // CHECK-LABEL: test_mm256_cvtusepi64_epi8 // CHECK: @llvm.x86.avx512.mask.pmovus.qb.256 return _mm256_cvtusepi64_epi8(__A); } __m128i test_mm256_mask_cvtusepi64_epi8(__m128i __O, __mmask8 __M, __m256i __A) { - // CHECK-LABEL: @test_mm256_mask_cvtusepi64_epi8 + // CHECK-LABEL: test_mm256_mask_cvtusepi64_epi8 // CHECK: @llvm.x86.avx512.mask.pmovus.qb.256 return _mm256_mask_cvtusepi64_epi8(__O, __M, __A); } __m128i test_mm256_maskz_cvtusepi64_epi8(__mmask8 __M, __m256i __A) { - // CHECK-LABEL: @test_mm256_maskz_cvtusepi64_epi8 + // CHECK-LABEL: test_mm256_maskz_cvtusepi64_epi8 // CHECK: @llvm.x86.avx512.mask.pmovus.qb.256 return _mm256_maskz_cvtusepi64_epi8(__M, __A); } void test_mm256_mask_cvtusepi64_storeu_epi8(void * __P, __mmask8 __M, __m256i __A) { - // CHECK-LABEL: @test_mm256_mask_cvtusepi64_storeu_epi8 + // CHECK-LABEL: test_mm256_mask_cvtusepi64_storeu_epi8 // CHECK: @llvm.x86.avx512.mask.pmovus.qb.mem.256 return _mm256_mask_cvtusepi64_storeu_epi8(__P, __M, __A); } __m128i test_mm_cvtusepi64_epi32(__m128i __A) { - // CHECK-LABEL: @test_mm_cvtusepi64_epi32 + // CHECK-LABEL: test_mm_cvtusepi64_epi32 // CHECK: @llvm.x86.avx512.mask.pmovus.qd.128 return _mm_cvtusepi64_epi32(__A); } __m128i test_mm_mask_cvtusepi64_epi32(__m128i __O, __mmask8 __M, __m128i __A) { - // CHECK-LABEL: @test_mm_mask_cvtusepi64_epi32 + // CHECK-LABEL: test_mm_mask_cvtusepi64_epi32 // CHECK: @llvm.x86.avx512.mask.pmovus.qd.128 return _mm_mask_cvtusepi64_epi32(__O, __M, __A); } __m128i test_mm_maskz_cvtusepi64_epi32(__mmask8 __M, __m128i __A) { - // CHECK-LABEL: @test_mm_maskz_cvtusepi64_epi32 + // CHECK-LABEL: test_mm_maskz_cvtusepi64_epi32 // CHECK: @llvm.x86.avx512.mask.pmovus.qd.128 return _mm_maskz_cvtusepi64_epi32(__M, __A); } void test_mm_mask_cvtusepi64_storeu_epi32(void * __P, __mmask8 __M, __m128i __A) { - // CHECK-LABEL: @test_mm_mask_cvtusepi64_storeu_epi32 + // CHECK-LABEL: test_mm_mask_cvtusepi64_storeu_epi32 // CHECK: @llvm.x86.avx512.mask.pmovus.qd.mem.128 return _mm_mask_cvtusepi64_storeu_epi32(__P, __M, __A); } __m128i test_mm256_cvtusepi64_epi32(__m256i __A) { - // CHECK-LABEL: @test_mm256_cvtusepi64_epi32 + // CHECK-LABEL: test_mm256_cvtusepi64_epi32 // CHECK: @llvm.x86.avx512.mask.pmovus.qd.256 return _mm256_cvtusepi64_epi32(__A); } __m128i test_mm256_mask_cvtusepi64_epi32(__m128i __O, __mmask8 __M, __m256i __A) { - // CHECK-LABEL: @test_mm256_mask_cvtusepi64_epi32 + // CHECK-LABEL: test_mm256_mask_cvtusepi64_epi32 // CHECK: @llvm.x86.avx512.mask.pmovus.qd.256 return _mm256_mask_cvtusepi64_epi32(__O, __M, __A); } __m128i test_mm256_maskz_cvtusepi64_epi32(__mmask8 __M, __m256i __A) { - // CHECK-LABEL: @test_mm256_maskz_cvtusepi64_epi32 + // CHECK-LABEL: test_mm256_maskz_cvtusepi64_epi32 // CHECK: @llvm.x86.avx512.mask.pmovus.qd.256 return _mm256_maskz_cvtusepi64_epi32(__M, __A); } void test_mm256_mask_cvtusepi64_storeu_epi32(void * __P, __mmask8 __M, __m256i __A) { - // CHECK-LABEL: @test_mm256_mask_cvtusepi64_storeu_epi32 + // CHECK-LABEL: test_mm256_mask_cvtusepi64_storeu_epi32 // CHECK: @llvm.x86.avx512.mask.pmovus.qd.mem.256 return _mm256_mask_cvtusepi64_storeu_epi32(__P, __M, __A); } __m128i test_mm_cvtusepi64_epi16(__m128i __A) { - // CHECK-LABEL: @test_mm_cvtusepi64_epi16 + // CHECK-LABEL: test_mm_cvtusepi64_epi16 // CHECK: @llvm.x86.avx512.mask.pmovus.qw.128 return _mm_cvtusepi64_epi16(__A); } __m128i test_mm_mask_cvtusepi64_epi16(__m128i __O, __mmask8 __M, __m128i __A) { - // CHECK-LABEL: @test_mm_mask_cvtusepi64_epi16 + // CHECK-LABEL: test_mm_mask_cvtusepi64_epi16 // CHECK: @llvm.x86.avx512.mask.pmovus.qw.128 return _mm_mask_cvtusepi64_epi16(__O, __M, __A); } __m128i test_mm_maskz_cvtusepi64_epi16(__mmask8 __M, __m128i __A) { - // CHECK-LABEL: @test_mm_maskz_cvtusepi64_epi16 + // CHECK-LABEL: test_mm_maskz_cvtusepi64_epi16 // CHECK: @llvm.x86.avx512.mask.pmovus.qw.128 return _mm_maskz_cvtusepi64_epi16(__M, __A); } void test_mm_mask_cvtusepi64_storeu_epi16(void * __P, __mmask8 __M, __m128i __A) { - // CHECK-LABEL: @test_mm_mask_cvtusepi64_storeu_epi16 + // CHECK-LABEL: test_mm_mask_cvtusepi64_storeu_epi16 // CHECK: @llvm.x86.avx512.mask.pmovus.qw.mem.128 return _mm_mask_cvtusepi64_storeu_epi16(__P, __M, __A); } __m128i test_mm256_cvtusepi64_epi16(__m256i __A) { - // CHECK-LABEL: @test_mm256_cvtusepi64_epi16 + // CHECK-LABEL: test_mm256_cvtusepi64_epi16 // CHECK: @llvm.x86.avx512.mask.pmovus.qw.256 return _mm256_cvtusepi64_epi16(__A); } __m128i test_mm256_mask_cvtusepi64_epi16(__m128i __O, __mmask8 __M, __m256i __A) { - // CHECK-LABEL: @test_mm256_mask_cvtusepi64_epi16 + // CHECK-LABEL: test_mm256_mask_cvtusepi64_epi16 // CHECK: @llvm.x86.avx512.mask.pmovus.qw.256 return _mm256_mask_cvtusepi64_epi16(__O, __M, __A); } __m128i test_mm256_maskz_cvtusepi64_epi16(__mmask8 __M, __m256i __A) { - // CHECK-LABEL: @test_mm256_maskz_cvtusepi64_epi16 + // CHECK-LABEL: test_mm256_maskz_cvtusepi64_epi16 // CHECK: @llvm.x86.avx512.mask.pmovus.qw.256 return _mm256_maskz_cvtusepi64_epi16(__M, __A); } void test_mm256_mask_cvtusepi64_storeu_epi16(void * __P, __mmask8 __M, __m256i __A) { - // CHECK-LABEL: @test_mm256_mask_cvtusepi64_storeu_epi16 + // CHECK-LABEL: test_mm256_mask_cvtusepi64_storeu_epi16 // CHECK: @llvm.x86.avx512.mask.pmovus.qw.mem.256 return _mm256_mask_cvtusepi64_storeu_epi16(__P, __M, __A); } __m128i test_mm_cvtepi32_epi8(__m128i __A) { - // CHECK-LABEL: @test_mm_cvtepi32_epi8 + // CHECK-LABEL: test_mm_cvtepi32_epi8 // CHECK: trunc <4 x i32> %{{.*}} to <4 x i8> // CHECK: shufflevector <4 x i8> %{{.*}}, <4 x i8> %{{.*}}, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 7, i32 7, i32 7, i32 7, i32 7, i32 7, i32 7, i32 7> return _mm_cvtepi32_epi8(__A); } __m128i test_mm_mask_cvtepi32_epi8(__m128i __O, __mmask8 __M, __m128i __A) { - // CHECK-LABEL: @test_mm_mask_cvtepi32_epi8 + // CHECK-LABEL: test_mm_mask_cvtepi32_epi8 // CHECK: @llvm.x86.avx512.mask.pmov.db.128 return _mm_mask_cvtepi32_epi8(__O, __M, __A); } __m128i test_mm_maskz_cvtepi32_epi8(__mmask8 __M, __m128i __A) { - // CHECK-LABEL: @test_mm_maskz_cvtepi32_epi8 + // CHECK-LABEL: test_mm_maskz_cvtepi32_epi8 // CHECK: @llvm.x86.avx512.mask.pmov.db.128 return _mm_maskz_cvtepi32_epi8(__M, __A); } void test_mm_mask_cvtepi32_storeu_epi8(void * __P, __mmask8 __M, __m128i __A) { - // CHECK-LABEL: @test_mm_mask_cvtepi32_storeu_epi8 + // CHECK-LABEL: test_mm_mask_cvtepi32_storeu_epi8 // CHECK: @llvm.x86.avx512.mask.pmov.db.mem.128 return _mm_mask_cvtepi32_storeu_epi8(__P, __M, __A); } __m128i test_mm256_cvtepi32_epi8(__m256i __A) { - // CHECK-LABEL: @test_mm256_cvtepi32_epi8 + // CHECK-LABEL: test_mm256_cvtepi32_epi8 // CHECK: trunc <8 x i32> %{{.*}} to <8 x i8> // CHECK: shufflevector <8 x i8> %{{.*}}, <8 x i8> %{{.*}}, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15> return _mm256_cvtepi32_epi8(__A); } __m128i test_mm256_mask_cvtepi32_epi8(__m128i __O, __mmask8 __M, __m256i __A) { - // CHECK-LABEL: @test_mm256_mask_cvtepi32_epi8 + // CHECK-LABEL: test_mm256_mask_cvtepi32_epi8 // CHECK: @llvm.x86.avx512.mask.pmov.db.256 return _mm256_mask_cvtepi32_epi8(__O, __M, __A); } __m128i test_mm256_maskz_cvtepi32_epi8(__mmask8 __M, __m256i __A) { - // CHECK-LABEL: @test_mm256_maskz_cvtepi32_epi8 + // CHECK-LABEL: test_mm256_maskz_cvtepi32_epi8 // CHECK: @llvm.x86.avx512.mask.pmov.db.256 return _mm256_maskz_cvtepi32_epi8(__M, __A); } void test_mm256_mask_cvtepi32_storeu_epi8(void * __P, __mmask8 __M, __m256i __A) { - // CHECK-LABEL: @test_mm256_mask_cvtepi32_storeu_epi8 + // CHECK-LABEL: test_mm256_mask_cvtepi32_storeu_epi8 // CHECK: @llvm.x86.avx512.mask.pmov.db.mem.256 return _mm256_mask_cvtepi32_storeu_epi8(__P, __M, __A); } __m128i test_mm_cvtepi32_epi16(__m128i __A) { - // CHECK-LABEL: @test_mm_cvtepi32_epi16 + // CHECK-LABEL: test_mm_cvtepi32_epi16 // CHECK: trunc <4 x i32> %{{.*}} to <4 x i16> // CHECK: shufflevector <4 x i16> %{{.*}}, <4 x i16> %{{.*}}, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7> return _mm_cvtepi32_epi16(__A); } __m128i test_mm_mask_cvtepi32_epi16(__m128i __O, __mmask8 __M, __m128i __A) { - // CHECK-LABEL: @test_mm_mask_cvtepi32_epi16 + // CHECK-LABEL: test_mm_mask_cvtepi32_epi16 // CHECK: @llvm.x86.avx512.mask.pmov.dw.128 return _mm_mask_cvtepi32_epi16(__O, __M, __A); } __m128i test_mm_maskz_cvtepi32_epi16(__mmask8 __M, __m128i __A) { - // CHECK-LABEL: @test_mm_maskz_cvtepi32_epi16 + // CHECK-LABEL: test_mm_maskz_cvtepi32_epi16 // CHECK: @llvm.x86.avx512.mask.pmov.dw.128 return _mm_maskz_cvtepi32_epi16(__M, __A); } void test_mm_mask_cvtepi32_storeu_epi16(void * __P, __mmask8 __M, __m128i __A) { - // CHECK-LABEL: @test_mm_mask_cvtepi32_storeu_epi16 + // CHECK-LABEL: test_mm_mask_cvtepi32_storeu_epi16 // CHECK: @llvm.x86.avx512.mask.pmov.dw.mem.128 return _mm_mask_cvtepi32_storeu_epi16(__P, __M, __A); } __m128i test_mm256_cvtepi32_epi16(__m256i __A) { - // CHECK-LABEL: @test_mm256_cvtepi32_epi16 + // CHECK-LABEL: test_mm256_cvtepi32_epi16 // CHECK: trunc <8 x i32> %{{.*}} to <8 x i16> return _mm256_cvtepi32_epi16(__A); } __m128i test_mm256_mask_cvtepi32_epi16(__m128i __O, __mmask8 __M, __m256i __A) { - // CHECK-LABEL: @test_mm256_mask_cvtepi32_epi16 + // CHECK-LABEL: test_mm256_mask_cvtepi32_epi16 // CHECK: @llvm.x86.avx512.mask.pmov.dw.256 return _mm256_mask_cvtepi32_epi16(__O, __M, __A); } __m128i test_mm256_maskz_cvtepi32_epi16(__mmask8 __M, __m256i __A) { - // CHECK-LABEL: @test_mm256_maskz_cvtepi32_epi16 + // CHECK-LABEL: test_mm256_maskz_cvtepi32_epi16 // CHECK: @llvm.x86.avx512.mask.pmov.dw.256 return _mm256_maskz_cvtepi32_epi16(__M, __A); } void test_mm256_mask_cvtepi32_storeu_epi16(void * __P, __mmask8 __M, __m256i __A) { - // CHECK-LABEL: @test_mm256_mask_cvtepi32_storeu_epi16 + // CHECK-LABEL: test_mm256_mask_cvtepi32_storeu_epi16 // CHECK: @llvm.x86.avx512.mask.pmov.dw.mem.256 return _mm256_mask_cvtepi32_storeu_epi16(__P, __M, __A); } __m128i test_mm_cvtepi64_epi8(__m128i __A) { - // CHECK-LABEL: @test_mm_cvtepi64_epi8 + // CHECK-LABEL: test_mm_cvtepi64_epi8 // CHECK: trunc <2 x i64> %{{.*}} to <2 x i8> // CHECK: shufflevector <2 x i8> %{{.*}}, <2 x i8> %{{.*}}, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3> return _mm_cvtepi64_epi8(__A); } __m128i test_mm_mask_cvtepi64_epi8(__m128i __O, __mmask8 __M, __m128i __A) { - // CHECK-LABEL: @test_mm_mask_cvtepi64_epi8 + // CHECK-LABEL: test_mm_mask_cvtepi64_epi8 // CHECK: @llvm.x86.avx512.mask.pmov.qb.128 return _mm_mask_cvtepi64_epi8(__O, __M, __A); } __m128i test_mm_maskz_cvtepi64_epi8(__mmask8 __M, __m128i __A) { - // CHECK-LABEL: @test_mm_maskz_cvtepi64_epi8 + // CHECK-LABEL: test_mm_maskz_cvtepi64_epi8 // CHECK: @llvm.x86.avx512.mask.pmov.qb.128 return _mm_maskz_cvtepi64_epi8(__M, __A); } void test_mm_mask_cvtepi64_storeu_epi8(void * __P, __mmask8 __M, __m128i __A) { - // CHECK-LABEL: @test_mm_mask_cvtepi64_storeu_epi8 + // CHECK-LABEL: test_mm_mask_cvtepi64_storeu_epi8 // CHECK: @llvm.x86.avx512.mask.pmov.qb.mem.128 return _mm_mask_cvtepi64_storeu_epi8(__P, __M, __A); } __m128i test_mm256_cvtepi64_epi8(__m256i __A) { - // CHECK-LABEL: @test_mm256_cvtepi64_epi8 + // CHECK-LABEL: test_mm256_cvtepi64_epi8 // CHECK: trunc <4 x i64> %{{.*}} to <4 x i8> // CHECK: shufflevector <4 x i8> %{{.*}}, <4 x i8> %{{.*}}, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 7, i32 7, i32 7, i32 7, i32 7, i32 7, i32 7, i32 7> return _mm256_cvtepi64_epi8(__A); } __m128i test_mm256_mask_cvtepi64_epi8(__m128i __O, __mmask8 __M, __m256i __A) { - // CHECK-LABEL: @test_mm256_mask_cvtepi64_epi8 + // CHECK-LABEL: test_mm256_mask_cvtepi64_epi8 // CHECK: @llvm.x86.avx512.mask.pmov.qb.256 return _mm256_mask_cvtepi64_epi8(__O, __M, __A); } __m128i test_mm256_maskz_cvtepi64_epi8(__mmask8 __M, __m256i __A) { - // CHECK-LABEL: @test_mm256_maskz_cvtepi64_epi8 + // CHECK-LABEL: test_mm256_maskz_cvtepi64_epi8 // CHECK: @llvm.x86.avx512.mask.pmov.qb.256 return _mm256_maskz_cvtepi64_epi8(__M, __A); } void test_mm256_mask_cvtepi64_storeu_epi8(void * __P, __mmask8 __M, __m256i __A) { - // CHECK-LABEL: @test_mm256_mask_cvtepi64_storeu_epi8 + // CHECK-LABEL: test_mm256_mask_cvtepi64_storeu_epi8 // CHECK: @llvm.x86.avx512.mask.pmov.qb.mem.256 return _mm256_mask_cvtepi64_storeu_epi8(__P, __M, __A); } __m128i test_mm_cvtepi64_epi32(__m128i __A) { - // CHECK-LABEL: @test_mm_cvtepi64_epi32 + // CHECK-LABEL: test_mm_cvtepi64_epi32 // CHECK: trunc <2 x i64> %{{.*}} to <2 x i32> // CHECK: shufflevector <2 x i32> %{{.*}}, <2 x i32> %{{.*}}, <4 x i32> <i32 0, i32 1, i32 2, i32 3> return _mm_cvtepi64_epi32(__A); } __m128i test_mm_mask_cvtepi64_epi32(__m128i __O, __mmask8 __M, __m128i __A) { - // CHECK-LABEL: @test_mm_mask_cvtepi64_epi32 + // CHECK-LABEL: test_mm_mask_cvtepi64_epi32 // CHECK: @llvm.x86.avx512.mask.pmov.qd.128 return _mm_mask_cvtepi64_epi32(__O, __M, __A); } __m128i test_mm_maskz_cvtepi64_epi32(__mmask8 __M, __m128i __A) { - // CHECK-LABEL: @test_mm_maskz_cvtepi64_epi32 + // CHECK-LABEL: test_mm_maskz_cvtepi64_epi32 // CHECK: @llvm.x86.avx512.mask.pmov.qd.128 return _mm_maskz_cvtepi64_epi32(__M, __A); } void test_mm_mask_cvtepi64_storeu_epi32(void * __P, __mmask8 __M, __m128i __A) { - // CHECK-LABEL: @test_mm_mask_cvtepi64_storeu_epi32 + // CHECK-LABEL: test_mm_mask_cvtepi64_storeu_epi32 // CHECK: @llvm.x86.avx512.mask.pmov.qd.mem.128 return _mm_mask_cvtepi64_storeu_epi32(__P, __M, __A); } __m128i test_mm256_cvtepi64_epi32(__m256i __A) { - // CHECK-LABEL: @test_mm256_cvtepi64_epi32 + // CHECK-LABEL: test_mm256_cvtepi64_epi32 // CHECK: trunc <4 x i64> %{{.*}} to <4 x i32> return _mm256_cvtepi64_epi32(__A); } __m128i test_mm256_mask_cvtepi64_epi32(__m128i __O, __mmask8 __M, __m256i __A) { - // CHECK-LABEL: @test_mm256_mask_cvtepi64_epi32 + // CHECK-LABEL: test_mm256_mask_cvtepi64_epi32 // CHECK: trunc <4 x i64> %{{.*}} to <4 x i32> // CHECK: select <4 x i1> %{{.*}}, <4 x i32> %{{.*}}, <4 x i32> %{{.*}} return _mm256_mask_cvtepi64_epi32(__O, __M, __A); } __m128i test_mm256_maskz_cvtepi64_epi32(__mmask8 __M, __m256i __A) { - // CHECK-LABEL: @test_mm256_maskz_cvtepi64_epi32 + // CHECK-LABEL: test_mm256_maskz_cvtepi64_epi32 // CHECK: trunc <4 x i64> %{{.*}} to <4 x i32> // CHECK: select <4 x i1> %{{.*}}, <4 x i32> %{{.*}}, <4 x i32> %{{.*}} return _mm256_maskz_cvtepi64_epi32(__M, __A); } void test_mm256_mask_cvtepi64_storeu_epi32(void * __P, __mmask8 __M, __m256i __A) { - // CHECK-LABEL: @test_mm256_mask_cvtepi64_storeu_epi32 + // CHECK-LABEL: test_mm256_mask_cvtepi64_storeu_epi32 // CHECK: @llvm.x86.avx512.mask.pmov.qd.mem.256 return _mm256_mask_cvtepi64_storeu_epi32(__P, __M, __A); } __m128i test_mm_cvtepi64_epi16(__m128i __A) { - // CHECK-LABEL: @test_mm_cvtepi64_epi16 + // CHECK-LABEL: test_mm_cvtepi64_epi16 // CHECK: trunc <2 x i64> %{{.*}} to <2 x i16> // CHECK: shufflevector <2 x i16> %{{.*}}, <2 x i16> %{{.*}}, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 3, i32 3, i32 3, i32 3> return _mm_cvtepi64_epi16(__A); } __m128i test_mm_mask_cvtepi64_epi16(__m128i __O, __mmask8 __M, __m128i __A) { - // CHECK-LABEL: @test_mm_mask_cvtepi64_epi16 + // CHECK-LABEL: test_mm_mask_cvtepi64_epi16 // CHECK: @llvm.x86.avx512.mask.pmov.qw.128 return _mm_mask_cvtepi64_epi16(__O, __M, __A); } __m128i test_mm_maskz_cvtepi64_epi16(__mmask8 __M, __m128i __A) { - // CHECK-LABEL: @test_mm_maskz_cvtepi64_epi16 + // CHECK-LABEL: test_mm_maskz_cvtepi64_epi16 // CHECK: @llvm.x86.avx512.mask.pmov.qw.128 return _mm_maskz_cvtepi64_epi16(__M, __A); } void test_mm_mask_cvtepi64_storeu_epi16(void * __P, __mmask8 __M, __m128i __A) { - // CHECK-LABEL: @test_mm_mask_cvtepi64_storeu_epi16 + // CHECK-LABEL: test_mm_mask_cvtepi64_storeu_epi16 // CHECK: @llvm.x86.avx512.mask.pmov.qw.mem.128 return _mm_mask_cvtepi64_storeu_epi16(__P, __M, __A); } __m128i test_mm256_cvtepi64_epi16(__m256i __A) { - // CHECK-LABEL: @test_mm256_cvtepi64_epi16 + // CHECK-LABEL: test_mm256_cvtepi64_epi16 // CHECK: trunc <4 x i64> %{{.*}} to <4 x i16> // CHECK: shufflevector <4 x i16> %{{.*}}, <4 x i16> %{{.*}}, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7> return _mm256_cvtepi64_epi16(__A); } __m128i test_mm256_mask_cvtepi64_epi16(__m128i __O, __mmask8 __M, __m256i __A) { - // CHECK-LABEL: @test_mm256_mask_cvtepi64_epi16 + // CHECK-LABEL: test_mm256_mask_cvtepi64_epi16 // CHECK: @llvm.x86.avx512.mask.pmov.qw.256 return _mm256_mask_cvtepi64_epi16(__O, __M, __A); } __m128i test_mm256_maskz_cvtepi64_epi16(__mmask8 __M, __m256i __A) { - // CHECK-LABEL: @test_mm256_maskz_cvtepi64_epi16 + // CHECK-LABEL: test_mm256_maskz_cvtepi64_epi16 // CHECK: @llvm.x86.avx512.mask.pmov.qw.256 return _mm256_maskz_cvtepi64_epi16(__M, __A); } void test_mm256_mask_cvtepi64_storeu_epi16(void * __P, __mmask8 __M, __m256i __A) { - // CHECK-LABEL: @test_mm256_mask_cvtepi64_storeu_epi16 + // CHECK-LABEL: test_mm256_mask_cvtepi64_storeu_epi16 // CHECK: @llvm.x86.avx512.mask.pmov.qw.mem.256 return _mm256_mask_cvtepi64_storeu_epi16(__P, __M, __A); } __m128 test_mm256_extractf32x4_ps(__m256 __A) { - // CHECK-LABEL: @test_mm256_extractf32x4_ps + // CHECK-LABEL: test_mm256_extractf32x4_ps // CHECK: shufflevector <8 x float> %{{.*}}, <8 x float> poison, <4 x i32> <i32 4, i32 5, i32 6, i32 7> return _mm256_extractf32x4_ps(__A, 1); } __m128 test_mm256_mask_extractf32x4_ps(__m128 __W, __mmask8 __U, __m256 __A) { - // CHECK-LABEL: @test_mm256_mask_extractf32x4_ps + // CHECK-LABEL: test_mm256_mask_extractf32x4_ps // CHECK: shufflevector <8 x float> %{{.*}}, <8 x float> poison, <4 x i32> <i32 4, i32 5, i32 6, i32 7> // CHECK: select <4 x i1> %{{.*}}, <4 x float> %{{.*}}, <4 x float> %{{.*}} return _mm256_mask_extractf32x4_ps(__W, __U, __A, 1); } __m128 test_mm256_maskz_extractf32x4_ps(__mmask8 __U, __m256 __A) { - // CHECK-LABEL: @test_mm256_maskz_extractf32x4_ps + // CHECK-LABEL: test_mm256_maskz_extractf32x4_ps // CHECK: shufflevector <8 x float> %{{.*}}, <8 x float> poison, <4 x i32> <i32 4, i32 5, i32 6, i32 7> // CHECK: select <4 x i1> %{{.*}}, <4 x float> %{{.*}}, <4 x float> %{{.*}} return _mm256_maskz_extractf32x4_ps(__U, __A, 1); } __m128i test_mm256_extracti32x4_epi32(__m256i __A) { - // CHECK-LABEL: @test_mm256_extracti32x4_epi32 + // CHECK-LABEL: test_mm256_extracti32x4_epi32 // CHECK: shufflevector <8 x i32> %{{.*}}, <8 x i32> poison, <4 x i32> <i32 4, i32 5, i32 6, i32 7> return _mm256_extracti32x4_epi32(__A, 1); } __m128i test_mm256_mask_extracti32x4_epi32(__m128i __W, __mmask8 __U, __m256i __A) { - // CHECK-LABEL: @test_mm256_mask_extracti32x4_epi32 + // CHECK-LABEL: test_mm256_mask_extracti32x4_epi32 // CHECK: shufflevector <8 x i32> %{{.*}}, <8 x i32> poison, <4 x i32> <i32 4, i32 5, i32 6, i32 7> // CHECK: select <4 x i1> %{{.*}}, <4 x i32> %{{.*}}, <4 x i32> %{{.*}} return _mm256_mask_extracti32x4_epi32(__W, __U, __A, 1); } __m128i test_mm256_maskz_extracti32x4_epi32(__mmask8 __U, __m256i __A) { - // CHECK-LABEL: @test_mm256_maskz_extracti32x4_epi32 + // CHECK-LABEL: test_mm256_maskz_extracti32x4_epi32 // CHECK: shufflevector <8 x i32> %{{.*}}, <8 x i32> poison, <4 x i32> <i32 4, i32 5, i32 6, i32 7> // CHECK: select <4 x i1> %{{.*}}, <4 x i32> %{{.*}}, <4 x i32> %{{.*}} return _mm256_maskz_extracti32x4_epi32(__U, __A, 1); } __m256 test_mm256_insertf32x4(__m256 __A, __m128 __B) { - // CHECK-LABEL: @test_mm256_insertf32x4 + // CHECK-LABEL: test_mm256_insertf32x4 // CHECK: shufflevector <8 x float> %{{.*}}, <8 x float> %{{.*}}, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 8, i32 9, i32 10, i32 11> return _mm256_insertf32x4(__A, __B, 1); } __m256 test_mm256_mask_insertf32x4(__m256 __W, __mmask8 __U, __m256 __A, __m128 __B) { - // CHECK-LABEL: @test_mm256_mask_insertf32x4 + // CHECK-LABEL: test_mm256_mask_insertf32x4 // CHECK: shufflevector <8 x float> %{{.*}}, <8 x float> %{{.*}}, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 8, i32 9, i32 10, i32 11> // CHECK: select <8 x i1> %{{.*}}, <8 x float> %{{.*}}, <8 x float> %{{.*}} return _mm256_mask_insertf32x4(__W, __U, __A, __B, 1); } __m256 test_mm256_maskz_insertf32x4(__mmask8 __U, __m256 __A, __m128 __B) { - // CHECK-LABEL: @test_mm256_maskz_insertf32x4 + // CHECK-LABEL: test_mm256_maskz_insertf32x4 // CHECK: shufflevector <8 x float> %{{.*}}, <8 x float> %{{.*}}, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 8, i32 9, i32 10, i32 11> // CHECK: select <8 x i1> %{{.*}}, <8 x float> %{{.*}}, <8 x float> %{{.*}} return _mm256_maskz_insertf32x4(__U, __A, __B, 1); } __m256i test_mm256_inserti32x4(__m256i __A, __m128i __B) { - // CHECK-LABEL: @test_mm256_inserti32x4 + // CHECK-LABEL: test_mm256_inserti32x4 // CHECK: shufflevector <8 x i32> %{{.*}}, <8 x i32> %{{.*}}, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 8, i32 9, i32 10, i32 11> return _mm256_inserti32x4(__A, __B, 1); } __m256i test_mm256_mask_inserti32x4(__m256i __W, __mmask8 __U, __m256i __A, __m128i __B) { - // CHECK-LABEL: @test_mm256_mask_inserti32x4 + // CHECK-LABEL: test_mm256_mask_inserti32x4 // CHECK: shufflevector <8 x i32> %{{.*}}, <8 x i32> %{{.*}}, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 8, i32 9, i32 10, i32 11> // CHECK: select <8 x i1> %{{.*}}, <8 x i32> %{{.*}}, <8 x i32> %{{.*}} return _mm256_mask_inserti32x4(__W, __U, __A, __B, 1); } __m256i test_mm256_maskz_inserti32x4(__mmask8 __U, __m256i __A, __m128i __B) { - // CHECK-LABEL: @test_mm256_maskz_inserti32x4 + // CHECK-LABEL: test_mm256_maskz_inserti32x4 // CHECK: shufflevector <8 x i32> %{{.*}}, <8 x i32> %{{.*}}, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 8, i32 9, i32 10, i32 11> // CHECK: select <8 x i1> %{{.*}}, <8 x i32> %{{.*}}, <8 x i32> %{{.*}} return _mm256_maskz_inserti32x4(__U, __A, __B, 1); } __m128d test_mm_getmant_pd(__m128d __A) { - // CHECK-LABEL: @test_mm_getmant_pd + // CHECK-LABEL: test_mm_getmant_pd // CHECK: @llvm.x86.avx512.mask.getmant.pd.128 return _mm_getmant_pd(__A,_MM_MANT_NORM_p5_2, _MM_MANT_SIGN_nan); } __m128d test_mm_mask_getmant_pd(__m128d __W, __mmask8 __U, __m128d __A) { - // CHECK-LABEL: @test_mm_mask_getmant_pd + // CHECK-LABEL: test_mm_mask_getmant_pd // CHECK: @llvm.x86.avx512.mask.getmant.pd.128 return _mm_mask_getmant_pd(__W, __U, __A,_MM_MANT_NORM_p5_2, _MM_MANT_SIGN_nan); } __m128d test_mm_maskz_getmant_pd(__mmask8 __U, __m128d __A) { - // CHECK-LABEL: @test_mm_maskz_getmant_pd + // CHECK-LABEL: test_mm_maskz_getmant_pd // CHECK: @llvm.x86.avx512.mask.getmant.pd.128 return _mm_maskz_getmant_pd(__U, __A,_MM_MANT_NORM_p5_2, _MM_MANT_SIGN_nan); } __m256d test_mm256_getmant_pd(__m256d __A) { - // CHECK-LABEL: @test_mm256_getmant_pd + // CHECK-LABEL: test_mm256_getmant_pd // CHECK: @llvm.x86.avx512.mask.getmant.pd.256 return _mm256_getmant_pd(__A,_MM_MANT_NORM_p5_2, _MM_MANT_SIGN_nan); } __m256d test_mm256_mask_getmant_pd(__m256d __W, __mmask8 __U, __m256d __A) { - // CHECK-LABEL: @test_mm256_mask_getmant_pd + // CHECK-LABEL: test_mm256_mask_getmant_pd // CHECK: @llvm.x86.avx512.mask.getmant.pd.256 return _mm256_mask_getmant_pd(__W, __U, __A,_MM_MANT_NORM_p5_2, _MM_MANT_SIGN_nan); } __m256d test_mm256_maskz_getmant_pd(__mmask8 __U, __m256d __A) { - // CHECK-LABEL: @test_mm256_maskz_getmant_pd + // CHECK-LABEL: test_mm256_maskz_getmant_pd // CHECK: @llvm.x86.avx512.mask.getmant.pd.256 return _mm256_maskz_getmant_pd(__U, __A,_MM_MANT_NORM_p5_2, _MM_MANT_SIGN_nan); } __m128 test_mm_getmant_ps(__m128 __A) { - // CHECK-LABEL: @test_mm_getmant_ps + // CHECK-LABEL: test_mm_getmant_ps // CHECK: @llvm.x86.avx512.mask.getmant.ps.128 return _mm_getmant_ps(__A,_MM_MANT_NORM_p5_2, _MM_MANT_SIGN_nan); } __m128 test_mm_mask_getmant_ps(__m128 __W, __mmask8 __U, __m128 __A) { - // CHECK-LABEL: @test_mm_mask_getmant_ps + // CHECK-LABEL: test_mm_mask_getmant_ps // CHECK: @llvm.x86.avx512.mask.getmant.ps.128 return _mm_mask_getmant_ps(__W, __U, __A,_MM_MANT_NORM_p5_2, _MM_MANT_SIGN_nan); } __m128 test_mm_maskz_getmant_ps(__mmask8 __U, __m128 __A) { - // CHECK-LABEL: @test_mm_maskz_getmant_ps + // CHECK-LABEL: test_mm_maskz_getmant_ps // CHECK: @llvm.x86.avx512.mask.getmant.ps.128 return _mm_maskz_getmant_ps(__U, __A,_MM_MANT_NORM_p5_2, _MM_MANT_SIGN_nan); } __m256 test_mm256_getmant_ps(__m256 __A) { - // CHECK-LABEL: @test_mm256_getmant_ps + // CHECK-LABEL: test_mm256_getmant_ps // CHECK: @llvm.x86.avx512.mask.getmant.ps.256 return _mm256_getmant_ps(__A,_MM_MANT_NORM_p5_2, _MM_MANT_SIGN_nan); } __m256 test_mm256_mask_getmant_ps(__m256 __W, __mmask8 __U, __m256 __A) { - // CHECK-LABEL: @test_mm256_mask_getmant_ps + // CHECK-LABEL: test_mm256_mask_getmant_ps // CHECK: @llvm.x86.avx512.mask.getmant.ps.256 return _mm256_mask_getmant_ps(__W, __U, __A,_MM_MANT_NORM_p5_2, _MM_MANT_SIGN_nan); } __m256 test_mm256_maskz_getmant_ps(__mmask8 __U, __m256 __A) { - // CHECK-LABEL: @test_mm256_maskz_getmant_ps + // CHECK-LABEL: test_mm256_maskz_getmant_ps // CHECK: @llvm.x86.avx512.mask.getmant.ps.256 return _mm256_maskz_getmant_ps(__U, __A,_MM_MANT_NORM_p5_2, _MM_MANT_SIGN_nan); } __m128d test_mm_mmask_i64gather_pd(__m128d __v1_old, __mmask8 __mask, __m128i __index, void const *__addr) { - // CHECK-LABEL: @test_mm_mmask_i64gather_pd + // CHECK-LABEL: test_mm_mmask_i64gather_pd // CHECK: @llvm.x86.avx512.mask.gather3div2.df return _mm_mmask_i64gather_pd(__v1_old, __mask, __index, __addr, 2); } __m128i test_mm_mmask_i64gather_epi64(__m128i __v1_old, __mmask8 __mask, __m128i __index, void const *__addr) { - // CHECK-LABEL: @test_mm_mmask_i64gather_epi64 + // CHECK-LABEL: test_mm_mmask_i64gather_epi64 // CHECK: @llvm.x86.avx512.mask.gather3div2.di return _mm_mmask_i64gather_epi64(__v1_old, __mask, __index, __addr, 2); } __m256d test_mm256_mmask_i64gather_pd(__m256d __v1_old, __mmask8 __mask, __m256i __index, void const *__addr) { - // CHECK-LABEL: @test_mm256_mmask_i64gather_pd + // CHECK-LABEL: test_mm256_mmask_i64gather_pd // CHECK: @llvm.x86.avx512.mask.gather3div4.df return _mm256_mmask_i64gather_pd(__v1_old, __mask, __index, __addr, 2); } __m256i test_mm256_mmask_i64gather_epi64(__m256i __v1_old, __mmask8 __mask, __m256i __index, void const *__addr) { - // CHECK-LABEL: @test_mm256_mmask_i64gather_epi64 + // CHECK-LABEL: test_mm256_mmask_i64gather_epi64 // CHECK: @llvm.x86.avx512.mask.gather3div4.di return _mm256_mmask_i64gather_epi64(__v1_old, __mask, __index, __addr, 2); } __m128 test_mm_mmask_i64gather_ps(__m128 __v1_old, __mmask8 __mask, __m128i __index, void const *__addr) { - // CHECK-LABEL: @test_mm_mmask_i64gather_ps + // CHECK-LABEL: test_mm_mmask_i64gather_ps // CHECK: @llvm.x86.avx512.mask.gather3div4.sf return _mm_mmask_i64gather_ps(__v1_old, __mask, __index, __addr, 2); } __m128i test_mm_mmask_i64gather_epi32(__m128i __v1_old, __mmask8 __mask, __m128i __index, void const *__addr) { - // CHECK-LABEL: @test_mm_mmask_i64gather_epi32 + // CHECK-LABEL: test_mm_mmask_i64gather_epi32 // CHECK: @llvm.x86.avx512.mask.gather3div4.si return _mm_mmask_i64gather_epi32(__v1_old, __mask, __index, __addr, 2); } __m128 test_mm256_mmask_i64gather_ps(__m128 __v1_old, __mmask8 __mask, __m256i __index, void const *__addr) { - // CHECK-LABEL: @test_mm256_mmask_i64gather_ps + // CHECK-LABEL: test_mm256_mmask_i64gather_ps // CHECK: @llvm.x86.avx512.mask.gather3div8.sf return _mm256_mmask_i64gather_ps(__v1_old, __mask, __index, __addr, 2); } __m128i test_mm256_mmask_i64gather_epi32(__m128i __v1_old, __mmask8 __mask, __m256i __index, void const *__addr) { - // CHECK-LABEL: @test_mm256_mmask_i64gather_epi32 + // CHECK-LABEL: test_mm256_mmask_i64gather_epi32 // CHECK: @llvm.x86.avx512.mask.gather3div8.si return _mm256_mmask_i64gather_epi32(__v1_old, __mask, __index, __addr, 2); } __m128d test_mm_mask_i32gather_pd(__m128d __v1_old, __mmask8 __mask, __m128i __index, void const *__addr) { - // CHECK-LABEL: @test_mm_mask_i32gather_pd + // CHECK-LABEL: test_mm_mask_i32gather_pd // CHECK: @llvm.x86.avx512.mask.gather3siv2.df return _mm_mmask_i32gather_pd(__v1_old, __mask, __index, __addr, 2); } __m128i test_mm_mask_i32gather_epi64(__m128i __v1_old, __mmask8 __mask, __m128i __index, void const *__addr) { - // CHECK-LABEL: @test_mm_mask_i32gather_epi64 + // CHECK-LABEL: test_mm_mask_i32gather_epi64 // CHECK: @llvm.x86.avx512.mask.gather3siv2.di return _mm_mmask_i32gather_epi64(__v1_old, __mask, __index, __addr, 2); } __m256d test_mm256_mask_i32gather_pd(__m256d __v1_old, __mmask8 __mask, __m128i __index, void const *__addr) { - // CHECK-LABEL: @test_mm256_mask_i32gather_pd + // CHECK-LABEL: test_mm256_mask_i32gather_pd // CHECK: @llvm.x86.avx512.mask.gather3siv4.df return _mm256_mmask_i32gather_pd(__v1_old, __mask, __index, __addr, 2); } __m256i test_mm256_mask_i32gather_epi64(__m256i __v1_old, __mmask8 __mask, __m128i __index, void const *__addr) { - // CHECK-LABEL: @test_mm256_mask_i32gather_epi64 + // CHECK-LABEL: test_mm256_mask_i32gather_epi64 // CHECK: @llvm.x86.avx512.mask.gather3siv4.di return _mm256_mmask_i32gather_epi64(__v1_old, __mask, __index, __addr, 2); } __m128 test_mm_mask_i32gather_ps(__m128 __v1_old, __mmask8 __mask, __m128i __index, void const *__addr) { - // CHECK-LABEL: @test_mm_mask_i32gather_ps + // CHECK-LABEL: test_mm_mask_i32gather_ps // CHECK: @llvm.x86.avx512.mask.gather3siv4.sf return _mm_mmask_i32gather_ps(__v1_old, __mask, __index, __addr, 2); } __m128i test_mm_mask_i32gather_epi32(__m128i __v1_old, __mmask8 __mask, __m128i __index, void const *__addr) { - // CHECK-LABEL: @test_mm_mask_i32gather_epi32 + // CHECK-LABEL: test_mm_mask_i32gather_epi32 // CHECK: @llvm.x86.avx512.mask.gather3siv4.si return _mm_mmask_i32gather_epi32(__v1_old, __mask, __index, __addr, 2); } __m256 test_mm256_mask_i32gather_ps(__m256 __v1_old, __mmask8 __mask, __m256i __index, void const *__addr) { - // CHECK-LABEL: @test_mm256_mask_i32gather_ps + // CHECK-LABEL: test_mm256_mask_i32gather_ps // CHECK: @llvm.x86.avx512.mask.gather3siv8.sf return _mm256_mmask_i32gather_ps(__v1_old, __mask, __index, __addr, 2); } __m256i test_mm256_mask_i32gather_epi32(__m256i __v1_old, __mmask8 __mask, __m256i __index, void const *__addr) { - // CHECK-LABEL: @test_mm256_mask_i32gather_epi32 + // CHECK-LABEL: test_mm256_mask_i32gather_epi32 // CHECK: @llvm.x86.avx512.mask.gather3siv8.si return _mm256_mmask_i32gather_epi32(__v1_old, __mask, __index, __addr, 2); } __m256d test_mm256_permutex_pd(__m256d __X) { - // CHECK-LABEL: @test_mm256_permutex_pd + // CHECK-LABEL: test_mm256_permutex_pd // CHECK: shufflevector <4 x double> %{{.*}}, <4 x double> poison, <4 x i32> <i32 3, i32 0, i32 0, i32 0> return _mm256_permutex_pd(__X, 3); } __m256d test_mm256_mask_permutex_pd(__m256d __W, __mmask8 __U, __m256d __X) { - // CHECK-LABEL: @test_mm256_mask_permutex_pd + // CHECK-LABEL: test_mm256_mask_permutex_pd // CHECK: shufflevector <4 x double> %{{.*}}, <4 x double> poison, <4 x i32> <i32 1, i32 0, i32 0, i32 0> // CHECK: select <4 x i1> %{{.*}}, <4 x double> %{{.*}}, <4 x double> %{{.*}} return _mm256_mask_permutex_pd(__W, __U, __X, 1); } __m256d test_mm256_maskz_permutex_pd(__mmask8 __U, __m256d __X) { - // CHECK-LABEL: @test_mm256_maskz_permutex_pd + // CHECK-LABEL: test_mm256_maskz_permutex_pd // CHECK: shufflevector <4 x double> %{{.*}}, <4 x double> poison, <4 x i32> <i32 1, i32 0, i32 0, i32 0> // CHECK: select <4 x i1> %{{.*}}, <4 x double> %{{.*}}, <4 x double> %{{.*}} return _mm256_maskz_permutex_pd(__U, __X, 1); } __m256i test_mm256_permutex_epi64(__m256i __X) { - // CHECK-LABEL: @test_mm256_permutex_epi64 + // CHECK-LABEL: test_mm256_permutex_epi64 // CHECK: shufflevector <4 x i64> %{{.*}}, <4 x i64> poison, <4 x i32> <i32 3, i32 0, i32 0, i32 0> return _mm256_permutex_epi64(__X, 3); } __m256i test_mm256_mask_permutex_epi64(__m256i __W, __mmask8 __M, __m256i __X) { - // CHECK-LABEL: @test_mm256_mask_permutex_epi64 + // CHECK-LABEL: test_mm256_mask_permutex_epi64 // CHECK: shufflevector <4 x i64> %{{.*}}, <4 x i64> poison, <4 x i32> <i32 3, i32 0, i32 0, i32 0> // CHECK: select <4 x i1> %{{.*}}, <4 x i64> %{{.*}}, <4 x i64> %{{.*}} return _mm256_mask_permutex_epi64(__W, __M, __X, 3); } __m256i test_mm256_maskz_permutex_epi64(__mmask8 __M, __m256i __X) { - // CHECK-LABEL: @test_mm256_maskz_permutex_epi64 + // CHECK-LABEL: test_mm256_maskz_permutex_epi64 // CHECK: shufflevector <4 x i64> %{{.*}}, <4 x i64> poison, <4 x i32> <i32 3, i32 0, i32 0, i32 0> // CHECK: select <4 x i1> %{{.*}}, <4 x i64> %{{.*}}, <4 x i64> %{{.*}} return _mm256_maskz_permutex_epi64(__M, __X, 3); } __m256d test_mm256_permutexvar_pd(__m256i __X, __m256d __Y) { - // CHECK-LABEL: @test_mm256_permutexvar_pd + // CHECK-LABEL: test_mm256_permutexvar_pd // CHECK: @llvm.x86.avx512.permvar.df.256 return _mm256_permutexvar_pd(__X, __Y); } __m256d test_mm256_mask_permutexvar_pd(__m256d __W, __mmask8 __U, __m256i __X, __m256d __Y) { - // CHECK-LABEL: @test_mm256_mask_permutexvar_pd + // CHECK-LABEL: test_mm256_mask_permutexvar_pd // CHECK: @llvm.x86.avx512.permvar.df.256 // CHECK: select <4 x i1> %{{.*}}, <4 x double> %{{.*}}, <4 x double> %{{.*}} return _mm256_mask_permutexvar_pd(__W, __U, __X, __Y); } __m256d test_mm256_maskz_permutexvar_pd(__mmask8 __U, __m256i __X, __m256d __Y) { - // CHECK-LABEL: @test_mm256_maskz_permutexvar_pd + // CHECK-LABEL: test_mm256_maskz_permutexvar_pd // CHECK: @llvm.x86.avx512.permvar.df.256 // CHECK: select <4 x i1> %{{.*}}, <4 x double> %{{.*}}, <4 x double> %{{.*}} return _mm256_maskz_permutexvar_pd(__U, __X, __Y); } __m256i test_mm256_maskz_permutexvar_epi64(__mmask8 __M, __m256i __X, __m256i __Y) { - // CHECK-LABEL: @test_mm256_maskz_permutexvar_epi64 + // CHECK-LABEL: test_mm256_maskz_permutexvar_epi64 // CHECK: @llvm.x86.avx512.permvar.di.256 // CHECK: select <4 x i1> %{{.*}}, <4 x i64> %{{.*}}, <4 x i64> %{{.*}} return _mm256_maskz_permutexvar_epi64(__M, __X, __Y); } __m256i test_mm256_mask_permutexvar_epi64(__m256i __W, __mmask8 __M, __m256i __X, __m256i __Y) { - // CHECK-LABEL: @test_mm256_mask_permutexvar_epi64 + // CHECK-LABEL: test_mm256_mask_permutexvar_epi64 // CHECK: @llvm.x86.avx512.permvar.di.256 // CHECK: select <4 x i1> %{{.*}}, <4 x i64> %{{.*}}, <4 x i64> %{{.*}} return _mm256_mask_permutexvar_epi64(__W, __M, __X, __Y); } __m256 test_mm256_mask_permutexvar_ps(__m256 __W, __mmask8 __U, __m256i __X, __m256 __Y) { - // CHECK-LABEL: @test_mm256_mask_permutexvar_ps + // CHECK-LABEL: test_mm256_mask_permutexvar_ps // CHECK: @llvm.x86.avx2.permps // CHECK: select <8 x i1> %{{.*}}, <8 x float> %{{.*}}, <8 x float> %{{.*}} return _mm256_mask_permutexvar_ps(__W, __U, __X, __Y); } __m256 test_mm256_maskz_permutexvar_ps(__mmask8 __U, __m256i __X, __m256 __Y) { - // CHECK-LABEL: @test_mm256_maskz_permutexvar_ps + // CHECK-LABEL: test_mm256_maskz_permutexvar_ps // CHECK: select <8 x i1> %{{.*}}, <8 x float> %{{.*}}, <8 x float> %{{.*}} return _mm256_maskz_permutexvar_ps(__U, __X, __Y); } __m256 test_mm256_permutexvar_ps(__m256i __X, __m256 __Y) { - // CHECK-LABEL: @test_mm256_permutexvar_ps + // CHECK-LABEL: test_mm256_permutexvar_ps // CHECK: @llvm.x86.avx2.permps return _mm256_permutexvar_ps( __X, __Y); } __m256i test_mm256_maskz_permutexvar_epi32(__mmask8 __M, __m256i __X, __m256i __Y) { - // CHECK-LABEL: @test_mm256_maskz_permutexvar_epi32 + // CHECK-LABEL: test_mm256_maskz_permutexvar_epi32 // CHECK: @llvm.x86.avx2.permd // CHECK: select <8 x i1> %{{.*}}, <8 x i32> %{{.*}}, <8 x i32> %{{.*}} return _mm256_maskz_permutexvar_epi32(__M, __X, __Y); } __m256i test_mm256_permutexvar_epi32(__m256i __X, __m256i __Y) { - // CHECK-LABEL: @test_mm256_permutexvar_epi32 + // CHECK-LABEL: test_mm256_permutexvar_epi32 // CHECK: @llvm.x86.avx2.permd return _mm256_permutexvar_epi32(__X, __Y); } __m256i test_mm256_mask_permutexvar_epi32(__m256i __W, __mmask8 __M, __m256i __X, __m256i __Y) { - // CHECK-LABEL: @test_mm256_mask_permutexvar_epi32 + // CHECK-LABEL: test_mm256_mask_permutexvar_epi32 // CHECK: @llvm.x86.avx2.permd // CHECK: select <8 x i1> %{{.*}}, <8 x i32> %{{.*}}, <8 x i32> %{{.*}} return _mm256_mask_permutexvar_epi32(__W, __M, __X, __Y); } __m128i test_mm_alignr_epi32(__m128i __A, __m128i __B) { - // CHECK-LABEL: @test_mm_alignr_epi32 + // CHECK-LABEL: test_mm_alignr_epi32 // CHECK: shufflevector <4 x i32> %{{.*}}, <4 x i32> %{{.*}}, <4 x i32> <i32 1, i32 2, i32 3, i32 4> return _mm_alignr_epi32(__A, __B, 1); } __m128i test_mm_mask_alignr_epi32(__m128i __W, __mmask8 __U, __m128i __A, __m128i __B) { - // CHECK-LABEL: @test_mm_mask_alignr_epi32 + // CHECK-LABEL: test_mm_mask_alignr_epi32 // CHECK: shufflevector <4 x i32> %{{.*}}, <4 x i32> %{{.*}}, <4 x i32> <i32 1, i32 2, i32 3, i32 4> // CHECK: select <4 x i1> %{{.*}}, <4 x i32> %{{.*}}, <4 x i32> %{{.*}} return _mm_mask_alignr_epi32(__W, __U, __A, __B, 5); } __m128i test_mm_maskz_alignr_epi32(__mmask8 __U, __m128i __A, __m128i __B) { - // CHECK-LABEL: @test_mm_maskz_alignr_epi32 + // CHECK-LABEL: test_mm_maskz_alignr_epi32 // CHECK: shufflevector <4 x i32> %{{.*}}, <4 x i32> %{{.*}}, <4 x i32> <i32 1, i32 2, i32 3, i32 4> // CHECK: select <4 x i1> %{{.*}}, <4 x i32> %{{.*}}, <4 x i32> %{{.*}} return _mm_maskz_alignr_epi32(__U, __A, __B, 1); } __m256i test_mm256_alignr_epi32(__m256i __A, __m256i __B) { - // CHECK-LABEL: @test_mm256_alignr_epi32 + // CHECK-LABEL: test_mm256_alignr_epi32 // CHECK: shufflevector <8 x i32> %{{.*}}, <8 x i32> %{{.*}}, <8 x i32> <i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8> return _mm256_alignr_epi32(__A, __B, 1); } __m256i test_mm256_mask_alignr_epi32(__m256i __W, __mmask8 __U, __m256i __A, __m256i __B) { - // CHECK-LABEL: @test_mm256_mask_alignr_epi32 + // CHECK-LABEL: test_mm256_mask_alignr_epi32 // CHECK: shufflevector <8 x i32> %{{.*}}, <8 x i32> %{{.*}}, <8 x i32> <i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8> // CHECK: select <8 x i1> %{{.*}}, <8 x i32> %{{.*}}, <8 x i32> %{{.*}} return _mm256_mask_alignr_epi32(__W, __U, __A, __B, 9); } __m256i test_mm256_maskz_alignr_epi32(__mmask8 __U, __m256i __A, __m256i __B) { - // CHECK-LABEL: @test_mm256_maskz_alignr_epi32 + // CHECK-LABEL: test_mm256_maskz_alignr_epi32 // CHECK: shufflevector <8 x i32> %{{.*}}, <8 x i32> %{{.*}}, <8 x i32> <i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8> // CHECK: select <8 x i1> %{{.*}}, <8 x i32> %{{.*}}, <8 x i32> %{{.*}} return _mm256_maskz_alignr_epi32(__U, __A, __B, 1); } __m128i test_mm_alignr_epi64(__m128i __A, __m128i __B) { - // CHECK-LABEL: @test_mm_alignr_epi64 + // CHECK-LABEL: test_mm_alignr_epi64 // CHECK: shufflevector <2 x i64> %{{.*}}, <2 x i64> %{{.*}}, <2 x i32> <i32 1, i32 2> return _mm_alignr_epi64(__A, __B, 1); } __m128i test_mm_mask_alignr_epi64(__m128i __W, __mmask8 __U, __m128i __A, __m128i __B) { - // CHECK-LABEL: @test_mm_mask_alignr_epi64 + // CHECK-LABEL: test_mm_mask_alignr_epi64 // CHECK: shufflevector <2 x i64> %{{.*}}, <2 x i64> %{{.*}}, <2 x i32> <i32 1, i32 2> // CHECK: select <2 x i1> %{{.*}}, <2 x i64> %{{.*}}, <2 x i64> %{{.*}} return _mm_mask_alignr_epi64(__W, __U, __A, __B, 3); } __m128i test_mm_maskz_alignr_epi64(__mmask8 __U, __m128i __A, __m128i __B) { - // CHECK-LABEL: @test_mm_maskz_alignr_epi64 + // CHECK-LABEL: test_mm_maskz_alignr_epi64 // CHECK: shufflevector <2 x i64> %{{.*}}, <2 x i64> %{{.*}}, <2 x i32> <i32 1, i32 2> // CHECK: select <2 x i1> %{{.*}}, <2 x i64> %{{.*}}, <2 x i64> %{{.*}} return _mm_maskz_alignr_epi64(__U, __A, __B, 1); } __m256i test_mm256_alignr_epi64(__m256i __A, __m256i __B) { - // CHECK-LABEL: @test_mm256_alignr_epi64 + // CHECK-LABEL: test_mm256_alignr_epi64 // CHECK: shufflevector <4 x i64> %{{.*}}, <4 x i64> %{{.*}}, <4 x i32> <i32 1, i32 2, i32 3, i32 4> return _mm256_alignr_epi64(__A, __B, 1); } __m256i test_mm256_mask_alignr_epi64(__m256i __W, __mmask8 __U, __m256i __A, __m256i __B) { - // CHECK-LABEL: @test_mm256_mask_alignr_epi64 + // CHECK-LABEL: test_mm256_mask_alignr_epi64 // CHECK: shufflevector <4 x i64> %{{.*}}, <4 x i64> %{{.*}}, <4 x i32> <i32 1, i32 2, i32 3, i32 4> // CHECK: select <4 x i1> %{{.*}}, <4 x i64> %{{.*}}, <4 x i64> %{{.*}} return _mm256_mask_alignr_epi64(__W, __U, __A, __B, 5); } __m256i test_mm256_maskz_alignr_epi64(__mmask8 __U, __m256i __A, __m256i __B) { - // CHECK-LABEL: @test_mm256_maskz_alignr_epi64 + // CHECK-LABEL: test_mm256_maskz_alignr_epi64 // CHECK: shufflevector <4 x i64> %{{.*}}, <4 x i64> %{{.*}}, <4 x i32> <i32 1, i32 2, i32 3, i32 4> // CHECK: select <4 x i1> %{{.*}}, <4 x i64> %{{.*}}, <4 x i64> %{{.*}} return _mm256_maskz_alignr_epi64(__U, __A, __B, 1); } __m128 test_mm_mask_movehdup_ps(__m128 __W, __mmask8 __U, __m128 __A) { - // CHECK-LABEL: @test_mm_mask_movehdup_ps + // CHECK-LABEL: test_mm_mask_movehdup_ps // CHECK: shufflevector <4 x float> %{{.*}}, <4 x float> %{{.*}}, <4 x i32> <i32 1, i32 1, i32 3, i32 3> // CHECK: select <4 x i1> %{{.*}} <4 x float> %{{.*}}, <4 x float> %{{.*}} return _mm_mask_movehdup_ps(__W, __U, __A); } __m128 test_mm_maskz_movehdup_ps(__mmask8 __U, __m128 __A) { - // CHECK-LABEL: @test_mm_maskz_movehdup_ps + // CHECK-LABEL: test_mm_maskz_movehdup_ps // CHECK: shufflevector <4 x float> %{{.*}}, <4 x float> %{{.*}}, <4 x i32> <i32 1, i32 1, i32 3, i32 3> // CHECK: select <4 x i1> %{{.*}} <4 x float> %{{.*}}, <4 x float> %{{.*}} return _mm_maskz_movehdup_ps(__U, __A); } __m256 test_mm256_mask_movehdup_ps(__m256 __W, __mmask8 __U, __m256 __A) { - // CHECK-LABEL: @test_mm256_mask_movehdup_ps + // CHECK-LABEL: test_mm256_mask_movehdup_ps // CHECK: shufflevector <8 x float> %{{.*}}, <8 x float> %{{.*}}, <8 x i32> <i32 1, i32 1, i32 3, i32 3, i32 5, i32 5, i32 7, i32 7> // CHECK: select <8 x i1> %{{.*}} <8 x float> %{{.*}}, <8 x float> %{{.*}} return _mm256_mask_movehdup_ps(__W, __U, __A); } __m256 test_mm256_maskz_movehdup_ps(__mmask8 __U, __m256 __A) { - // CHECK-LABEL: @test_mm256_maskz_movehdup_ps + // CHECK-LABEL: test_mm256_maskz_movehdup_ps // CHECK: shufflevector <8 x float> %{{.*}}, <8 x float> %{{.*}}, <8 x i32> <i32 1, i32 1, i32 3, i32 3, i32 5, i32 5, i32 7, i32 7> // CHECK: select <8 x i1> %{{.*}} <8 x float> %{{.*}}, <8 x float> %{{.*}} return _mm256_maskz_movehdup_ps(__U, __A); } __m128 test_mm_mask_moveldup_ps(__m128 __W, __mmask8 __U, __m128 __A) { - // CHECK-LABEL: @test_mm_mask_moveldup_ps + // CHECK-LABEL: test_mm_mask_moveldup_ps // CHECK: shufflevector <4 x float> %{{.*}}, <4 x float> %{{.*}}, <4 x i32> <i32 0, i32 0, i32 2, i32 2> // CHECK: select <4 x i1> %{{.*}} <4 x float> %{{.*}}, <4 x float> %{{.*}} return _mm_mask_moveldup_ps(__W, __U, __A); } __m128 test_mm_maskz_moveldup_ps(__mmask8 __U, __m128 __A) { - // CHECK-LABEL: @test_mm_maskz_moveldup_ps + // CHECK-LABEL: test_mm_maskz_moveldup_ps // CHECK: shufflevector <4 x float> %{{.*}}, <4 x float> %{{.*}}, <4 x i32> <i32 0, i32 0, i32 2, i32 2> // CHECK: select <4 x i1> %{{.*}} <4 x float> %{{.*}}, <4 x float> %{{.*}} return _mm_maskz_moveldup_ps(__U, __A); } __m256 test_mm256_mask_moveldup_ps(__m256 __W, __mmask8 __U, __m256 __A) { - // CHECK-LABEL: @test_mm256_mask_moveldup_ps + // CHECK-LABEL: test_mm256_mask_moveldup_ps // CHECK: shufflevector <8 x float> %{{.*}}, <8 x float> %{{.*}}, <8 x i32> <i32 0, i32 0, i32 2, i32 2, i32 4, i32 4, i32 6, i32 6> // CHECK: select <8 x i1> %{{.*}} <8 x float> %{{.*}}, <8 x float> %{{.*}} return _mm256_mask_moveldup_ps(__W, __U, __A); } __m256 test_mm256_maskz_moveldup_ps(__mmask8 __U, __m256 __A) { - // CHECK-LABEL: @test_mm256_maskz_moveldup_ps + // CHECK-LABEL: test_mm256_maskz_moveldup_ps // CHECK: shufflevector <8 x float> %{{.*}}, <8 x float> %{{.*}}, <8 x i32> <i32 0, i32 0, i32 2, i32 2, i32 4, i32 4, i32 6, i32 6> // CHECK: select <8 x i1> %{{.*}} <8 x float> %{{.*}}, <8 x float> %{{.*}} return _mm256_maskz_moveldup_ps(__U, __A); } __m128i test_mm_mask_shuffle_epi32(__m128i __W, __mmask8 __U, __m128i __A) { - // CHECK-LABEL: @test_mm_mask_shuffle_epi32 + // CHECK-LABEL: test_mm_mask_shuffle_epi32 // CHECK: shufflevector <4 x i32> %{{.*}}, <4 x i32> poison, <4 x i32> <i32 1, i32 0, i32 0, i32 0> // CHECK: select <4 x i1> %{{.*}}, <4 x i32> %{{.*}}, <4 x i32> %{{.*}} return _mm_mask_shuffle_epi32(__W, __U, __A, 1); } __m128i test_mm_maskz_shuffle_epi32(__mmask8 __U, __m128i __A) { - // CHECK-LABEL: @test_mm_maskz_shuffle_epi32 + // CHECK-LABEL: test_mm_maskz_shuffle_epi32 // CHECK: shufflevector <4 x i32> %{{.*}}, <4 x i32> poison, <4 x i32> <i32 2, i32 0, i32 0, i32 0> // CHECK: select <4 x i1> %{{.*}}, <4 x i32> %{{.*}}, <4 x i32> %{{.*}} return _mm_maskz_shuffle_epi32(__U, __A, 2); } __m256i test_mm256_mask_shuffle_epi32(__m256i __W, __mmask8 __U, __m256i __A) { - // CHECK-LABEL: @test_mm256_mask_shuffle_epi32 + // CHECK-LABEL: test_mm256_mask_shuffle_epi32 // CHECK: shufflevector <8 x i32> %{{.*}}, <8 x i32> poison, <8 x i32> <i32 2, i32 0, i32 0, i32 0, i32 6, i32 4, i32 4, i32 4> // CHECK: select <8 x i1> %{{.*}}, <8 x i32> %{{.*}}, <8 x i32> %{{.*}} return _mm256_mask_shuffle_epi32(__W, __U, __A, 2); } __m256i test_mm256_maskz_shuffle_epi32(__mmask8 __U, __m256i __A) { - // CHECK-LABEL: @test_mm256_maskz_shuffle_epi32 + // CHECK-LABEL: test_mm256_maskz_shuffle_epi32 // CHECK: shufflevector <8 x i32> %{{.*}}, <8 x i32> poison, <8 x i32> <i32 2, i32 0, i32 0, i32 0, i32 6, i32 4, i32 4, i32 4> // CHECK: select <8 x i1> %{{.*}}, <8 x i32> %{{.*}}, <8 x i32> %{{.*}} return _mm256_maskz_shuffle_epi32(__U, __A, 2); } __m128d test_mm_mask_mov_pd(__m128d __W, __mmask8 __U, __m128d __A) { - // CHECK-LABEL: @test_mm_mask_mov_pd + // CHECK-LABEL: test_mm_mask_mov_pd // CHECK: select <2 x i1> %{{.*}}, <2 x double> %{{.*}}, <2 x double> %{{.*}} return _mm_mask_mov_pd(__W, __U, __A); } +TEST_CONSTEXPR(match_m128d(_mm_mask_mov_pd((__m128d){-2.0, -1.0}, 0x2, (__m128d){+1.0, +2.0}), -2.0, +2.0)); __m128d test_mm_maskz_mov_pd(__mmask8 __U, __m128d __A) { - // CHECK-LABEL: @test_mm_maskz_mov_pd + // CHECK-LABEL: test_mm_maskz_mov_pd // CHECK: select <2 x i1> %{{.*}}, <2 x double> %{{.*}}, <2 x double> %{{.*}} return _mm_maskz_mov_pd(__U, __A); } +TEST_CONSTEXPR(match_m128d(_mm_maskz_mov_pd(0x1, (__m128d){+1.0, +2.0}), +1.0, +0.0)); __m256d test_mm256_mask_mov_pd(__m256d __W, __mmask8 __U, __m256d __A) { - // CHECK-LABEL: @test_mm256_mask_mov_pd + // CHECK-LABEL: test_mm256_mask_mov_pd // CHECK: select <4 x i1> %{{.*}}, <4 x double> %{{.*}}, <4 x double> %{{.*}} return _mm256_mask_mov_pd(__W, __U, __A); } +TEST_CONSTEXPR(match_m256d(_mm256_mask_mov_pd((__m256d){-4.0, -3.0, -2.0, -1.0}, 0x3, (__m256d){+1.0, +2.0, +3.0, +4.0}), +1.0, +2.0, -2.0, -1.0)); __m256d test_mm256_maskz_mov_pd(__mmask8 __U, __m256d __A) { - // CHECK-LABEL: @test_mm256_maskz_mov_pd + // CHECK-LABEL: test_mm256_maskz_mov_pd // CHECK: select <4 x i1> %{{.*}}, <4 x double> %{{.*}}, <4 x double> %{{.*}} return _mm256_maskz_mov_pd(__U, __A); } +TEST_CONSTEXPR(match_m256d(_mm256_maskz_mov_pd(0xC, (__m256d){+1.0, +2.0, +3.0, +4.0}), 0.0, 0.0, +3.0, +4.0)); __m128 test_mm_mask_mov_ps(__m128 __W, __mmask8 __U, __m128 __A) { - // CHECK-LABEL: @test_mm_mask_mov_ps + // CHECK-LABEL: test_mm_mask_mov_ps // CHECK: select <4 x i1> %{{.*}}, <4 x float> %{{.*}}, <4 x float> %{{.*}} return _mm_mask_mov_ps(__W, __U, __A); } +TEST_CONSTEXPR(match_m128(_mm_mask_mov_ps((__m128){-4.0f, -3.0f, -2.0f, -1.0f}, 0x3, (__m128){+1.0f, +2.0f, +3.0f, +4.0f}), +1.0f, +2.0f, -2.0f, -1.0f)); __m128 test_mm_maskz_mov_ps(__mmask8 __U, __m128 __A) { - // CHECK-LABEL: @test_mm_maskz_mov_ps + // CHECK-LABEL: test_mm_maskz_mov_ps // CHECK: select <4 x i1> %{{.*}}, <4 x float> %{{.*}}, <4 x float> %{{.*}} return _mm_maskz_mov_ps(__U, __A); } +TEST_CONSTEXPR(match_m128(_mm_maskz_mov_ps(0xC, (__m128){+1.0f, +2.0f, +3.0f, +4.0f}), 0.0f, 0.0f, +3.0f, +4.0f)); __m256 test_mm256_mask_mov_ps(__m256 __W, __mmask8 __U, __m256 __A) { - // CHECK-LABEL: @test_mm256_mask_mov_ps + // CHECK-LABEL: test_mm256_mask_mov_ps // CHECK: select <8 x i1> %{{.*}}, <8 x float> %{{.*}}, <8 x float> %{{.*}} return _mm256_mask_mov_ps(__W, __U, __A); } +TEST_CONSTEXPR(match_m256(_mm256_mask_mov_ps((__m256){-8.0f, -7.0f, -6.0f, -5.0f, -4.0f, -3.0f, -2.0f, -1.0f}, 0xC3, (__m256){+1.0f, +2.0f, +3.0f, +4.0f, +5.0f, +6.0f, +7.0f, +8.0f}), +1.0f, +2.0f, -6.0f, -5.0f, -4.0f, -3.0f, +7.0f, +8.0f)); __m256 test_mm256_maskz_mov_ps(__mmask8 __U, __m256 __A) { - // CHECK-LABEL: @test_mm256_maskz_mov_ps + // CHECK-LABEL: test_mm256_maskz_mov_ps // CHECK: select <8 x i1> %{{.*}}, <8 x float> %{{.*}}, <8 x float> %{{.*}} return _mm256_maskz_mov_ps(__U, __A); } +TEST_CONSTEXPR(match_m256(_mm256_maskz_mov_ps(0xC3, (__m256){+1.0f, +2.0f, +3.0f, +4.0f, +5.0f, +6.0f, +7.0f, +8.0f}), +1.0f, +2.0f, 0.0f, 0.0f, 0.0f, 0.0f, +7.0f, +8.0f)); __m128 test_mm_mask_cvtph_ps(__m128 __W, __mmask8 __U, __m128i __A) { - // CHECK-LABEL: @test_mm_mask_cvtph_ps + // CHECK-LABEL: test_mm_mask_cvtph_ps // CHECK: shufflevector <8 x i16> %{{.*}}, <8 x i16> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 3> // CHECK: fpext <4 x half> %{{.*}} to <4 x float> // CHECK: select <4 x i1> %{{.*}}, <4 x float> %{{.*}}, <4 x float> %{{.*}} @@ -9565,7 +9669,7 @@ __m128 test_mm_mask_cvtph_ps(__m128 __W, __mmask8 __U, __m128i __A) { } __m128 test_mm_maskz_cvtph_ps(__mmask8 __U, __m128i __A) { - // CHECK-LABEL: @test_mm_maskz_cvtph_ps + // CHECK-LABEL: test_mm_maskz_cvtph_ps // CHECK: shufflevector <8 x i16> %{{.*}}, <8 x i16> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 3> // CHECK: fpext <4 x half> %{{.*}} to <4 x float> // CHECK: select <4 x i1> %{{.*}}, <4 x float> %{{.*}}, <4 x float> %{{.*}} @@ -9573,167 +9677,167 @@ __m128 test_mm_maskz_cvtph_ps(__mmask8 __U, __m128i __A) { } __m256 test_mm256_mask_cvtph_ps(__m256 __W, __mmask8 __U, __m128i __A) { - // CHECK-LABEL: @test_mm256_mask_cvtph_ps + // CHECK-LABEL: test_mm256_mask_cvtph_ps // CHECK: fpext <8 x half> %{{.*}} to <8 x float> // CHECK: select <8 x i1> %{{.*}}, <8 x float> %{{.*}}, <8 x float> %{{.*}} return _mm256_mask_cvtph_ps(__W, __U, __A); } __m256 test_mm256_maskz_cvtph_ps(__mmask8 __U, __m128i __A) { - // CHECK-LABEL: @test_mm256_maskz_cvtph_ps + // CHECK-LABEL: test_mm256_maskz_cvtph_ps // CHECK: fpext <8 x half> %{{.*}} to <8 x float> // CHECK: select <8 x i1> %{{.*}}, <8 x float> %{{.*}}, <8 x float> %{{.*}} return _mm256_maskz_cvtph_ps(__U, __A); } __m128i test_mm_mask_cvtps_ph(__m128i __W, __mmask8 __U, __m128 __A) { - // CHECK-LABEL: @test_mm_mask_cvtps_ph + // CHECK-LABEL: test_mm_mask_cvtps_ph // CHECK: @llvm.x86.avx512.mask.vcvtps2ph.128 return _mm_mask_cvtps_ph(__W, __U, __A, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC); } __m128i test_mm_maskz_cvtps_ph(__mmask8 __U, __m128 __A) { - // CHECK-LABEL: @test_mm_maskz_cvtps_ph + // CHECK-LABEL: test_mm_maskz_cvtps_ph // CHECK: @llvm.x86.avx512.mask.vcvtps2ph.128 return _mm_maskz_cvtps_ph(__U, __A, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC); } __m128i test_mm256_mask_cvtps_ph(__m128i __W, __mmask8 __U, __m256 __A) { - // CHECK-LABEL: @test_mm256_mask_cvtps_ph + // CHECK-LABEL: test_mm256_mask_cvtps_ph // CHECK: @llvm.x86.avx512.mask.vcvtps2ph.256 return _mm256_mask_cvtps_ph(__W, __U, __A, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC); } __m128i test_mm256_maskz_cvtps_ph(__mmask8 __U, __m256 __A) { - // CHECK-LABEL: @test_mm256_maskz_cvtps_ph + // CHECK-LABEL: test_mm256_maskz_cvtps_ph // CHECK: @llvm.x86.avx512.mask.vcvtps2ph.256 return _mm256_maskz_cvtps_ph(__U, __A, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC); } __m128i test_mm_mask_cvt_roundps_ph(__m128i __W, __mmask8 __U, __m128 __A) { - // CHECK-LABEL: @test_mm_mask_cvt_roundps_ph + // CHECK-LABEL: test_mm_mask_cvt_roundps_ph // CHECK: @llvm.x86.avx512.mask.vcvtps2ph.128 return _mm_mask_cvt_roundps_ph(__W, __U, __A, _MM_FROUND_TO_ZERO); } __m128i test_mm_maskz_cvt_roundps_ph(__mmask8 __U, __m128 __A) { - // CHECK-LABEL: @test_mm_maskz_cvt_roundps_ph + // CHECK-LABEL: test_mm_maskz_cvt_roundps_ph // CHECK: @llvm.x86.avx512.mask.vcvtps2ph.128 return _mm_maskz_cvt_roundps_ph(__U, __A, _MM_FROUND_TO_ZERO); } __m128i test_mm256_mask_cvt_roundps_ph(__m128i __W, __mmask8 __U, __m256 __A) { - // CHECK-LABEL: @test_mm256_mask_cvt_roundps_ph + // CHECK-LABEL: test_mm256_mask_cvt_roundps_ph // CHECK: @llvm.x86.avx512.mask.vcvtps2ph.256 return _mm256_mask_cvt_roundps_ph(__W, __U, __A, _MM_FROUND_TO_ZERO); } __m128i test_mm256_maskz_cvt_roundps_ph(__mmask8 __U, __m256 __A) { - // CHECK-LABEL: @test_mm256_maskz_cvt_roundps_ph + // CHECK-LABEL: test_mm256_maskz_cvt_roundps_ph // CHECK: @llvm.x86.avx512.mask.vcvtps2ph.256 return _mm256_maskz_cvt_roundps_ph(__U, __A, _MM_FROUND_TO_ZERO); } __mmask8 test_mm_cmpeq_epi32_mask(__m128i __a, __m128i __b) { - // CHECK-LABEL: @test_mm_cmpeq_epi32_mask + // CHECK-LABEL: test_mm_cmpeq_epi32_mask // CHECK: icmp eq <4 x i32> %{{.*}}, %{{.*}} return (__mmask8)_mm_cmpeq_epi32_mask(__a, __b); } __mmask8 test_mm_mask_cmpeq_epi32_mask(__mmask8 __u, __m128i __a, __m128i __b) { - // CHECK-LABEL: @test_mm_mask_cmpeq_epi32_mask + // CHECK-LABEL: test_mm_mask_cmpeq_epi32_mask // CHECK: icmp eq <4 x i32> %{{.*}}, %{{.*}} // CHECK: and <4 x i1> %{{.*}}, %{{.*}} return (__mmask8)_mm_mask_cmpeq_epi32_mask(__u, __a, __b); } __mmask8 test_mm_mask_cmpeq_epi64_mask(__mmask8 __u, __m128i __a, __m128i __b) { - // CHECK-LABEL: @test_mm_mask_cmpeq_epi64_mask + // CHECK-LABEL: test_mm_mask_cmpeq_epi64_mask // CHECK: icmp eq <2 x i64> %{{.*}}, %{{.*}} // CHECK: and <2 x i1> %{{.*}}, %{{.*}} return (__mmask8)_mm_mask_cmpeq_epi64_mask(__u, __a, __b); } __mmask8 test_mm_cmpeq_epi64_mask(__m128i __a, __m128i __b) { - // CHECK-LABEL: @test_mm_cmpeq_epi64_mask + // CHECK-LABEL: test_mm_cmpeq_epi64_mask // CHECK: icmp eq <2 x i64> %{{.*}}, %{{.*}} return (__mmask8)_mm_cmpeq_epi64_mask(__a, __b); } __mmask8 test_mm_cmpgt_epi32_mask(__m128i __a, __m128i __b) { - // CHECK-LABEL: @test_mm_cmpgt_epi32_mask + // CHECK-LABEL: test_mm_cmpgt_epi32_mask // CHECK: icmp sgt <4 x i32> %{{.*}}, %{{.*}} return (__mmask8)_mm_cmpgt_epi32_mask(__a, __b); } __mmask8 test_mm_mask_cmpgt_epi32_mask(__mmask8 __u, __m128i __a, __m128i __b) { - // CHECK-LABEL: @test_mm_mask_cmpgt_epi32_mask + // CHECK-LABEL: test_mm_mask_cmpgt_epi32_mask // CHECK: icmp sgt <4 x i32> %{{.*}}, %{{.*}} // CHECK: and <4 x i1> %{{.*}}, %{{.*}} return (__mmask8)_mm_mask_cmpgt_epi32_mask(__u, __a, __b); } __mmask8 test_mm_mask_cmpgt_epi64_mask(__mmask8 __u, __m128i __a, __m128i __b) { - // CHECK-LABEL: @test_mm_mask_cmpgt_epi64_mask + // CHECK-LABEL: test_mm_mask_cmpgt_epi64_mask // CHECK: icmp sgt <2 x i64> %{{.*}}, %{{.*}} // CHECK: and <2 x i1> %{{.*}}, %{{.*}} return (__mmask8)_mm_mask_cmpgt_epi64_mask(__u, __a, __b); } __mmask8 test_mm_cmpgt_epi64_mask(__m128i __a, __m128i __b) { - // CHECK-LABEL: @test_mm_cmpgt_epi64_mask + // CHECK-LABEL: test_mm_cmpgt_epi64_mask // CHECK: icmp sgt <2 x i64> %{{.*}}, %{{.*}} return (__mmask8)_mm_cmpgt_epi64_mask(__a, __b); } __mmask8 test_mm256_cmpeq_epi32_mask(__m256i __a, __m256i __b) { - // CHECK-LABEL: @test_mm256_cmpeq_epi32_mask + // CHECK-LABEL: test_mm256_cmpeq_epi32_mask // CHECK: icmp eq <8 x i32> %{{.*}}, %{{.*}} return (__mmask8)_mm256_cmpeq_epi32_mask(__a, __b); } __mmask8 test_mm256_mask_cmpeq_epi32_mask(__mmask8 __u, __m256i __a, __m256i __b) { - // CHECK-LABEL: @test_mm256_mask_cmpeq_epi32_mask + // CHECK-LABEL: test_mm256_mask_cmpeq_epi32_mask // CHECK: icmp eq <8 x i32> %{{.*}}, %{{.*}} // CHECK: and <8 x i1> %{{.*}}, %{{.*}} return (__mmask8)_mm256_mask_cmpeq_epi32_mask(__u, __a, __b); } __mmask8 test_mm256_mask_cmpeq_epi64_mask(__mmask8 __u, __m256i __a, __m256i __b) { - // CHECK-LABEL: @test_mm256_mask_cmpeq_epi64_mask + // CHECK-LABEL: test_mm256_mask_cmpeq_epi64_mask // CHECK: icmp eq <4 x i64> %{{.*}}, %{{.*}} // CHECK: and <4 x i1> %{{.*}}, %{{.*}} return (__mmask8)_mm256_mask_cmpeq_epi64_mask(__u, __a, __b); } __mmask8 test_mm256_cmpeq_epi64_mask(__m256i __a, __m256i __b) { - // CHECK-LABEL: @test_mm256_cmpeq_epi64_mask + // CHECK-LABEL: test_mm256_cmpeq_epi64_mask // CHECK: icmp eq <4 x i64> %{{.*}}, %{{.*}} return (__mmask8)_mm256_cmpeq_epi64_mask(__a, __b); } __mmask8 test_mm256_cmpgt_epi32_mask(__m256i __a, __m256i __b) { - // CHECK-LABEL: @test_mm256_cmpgt_epi32_mask + // CHECK-LABEL: test_mm256_cmpgt_epi32_mask // CHECK: icmp sgt <8 x i32> %{{.*}}, %{{.*}} return (__mmask8)_mm256_cmpgt_epi32_mask(__a, __b); } __mmask8 test_mm256_mask_cmpgt_epi32_mask(__mmask8 __u, __m256i __a, __m256i __b) { - // CHECK-LABEL: @test_mm256_mask_cmpgt_epi32_mask + // CHECK-LABEL: test_mm256_mask_cmpgt_epi32_mask // CHECK: icmp sgt <8 x i32> %{{.*}}, %{{.*}} // CHECK: and <8 x i1> %{{.*}}, %{{.*}} return (__mmask8)_mm256_mask_cmpgt_epi32_mask(__u, __a, __b); } __mmask8 test_mm256_mask_cmpgt_epi64_mask(__mmask8 __u, __m256i __a, __m256i __b) { - // CHECK-LABEL: @test_mm256_mask_cmpgt_epi64_mask + // CHECK-LABEL: test_mm256_mask_cmpgt_epi64_mask // CHECK: icmp sgt <4 x i64> %{{.*}}, %{{.*}} // CHECK: and <4 x i1> %{{.*}}, %{{.*}} return (__mmask8)_mm256_mask_cmpgt_epi64_mask(__u, __a, __b); } __mmask8 test_mm256_cmpgt_epi64_mask(__m256i __a, __m256i __b) { - // CHECK-LABEL: @test_mm256_cmpgt_epi64_mask + // CHECK-LABEL: test_mm256_cmpgt_epi64_mask // CHECK: icmp sgt <4 x i64> %{{.*}}, %{{.*}} return (__mmask8)_mm256_cmpgt_epi64_mask(__a, __b); } diff --git a/clang/test/CodeGen/X86/avx512vlbf16-builtins.c b/clang/test/CodeGen/X86/avx512vlbf16-builtins.c index f62ba46..5e37b4d 100644 --- a/clang/test/CodeGen/X86/avx512vlbf16-builtins.c +++ b/clang/test/CodeGen/X86/avx512vlbf16-builtins.c @@ -1,222 +1,196 @@ -// RUN: %clang_cc1 -flax-vector-conversions=none -ffreestanding %s -triple=x86_64-apple-darwin \ -// RUN: -target-feature +avx512bf16 -target-feature \ -// RUN: +avx512vl -emit-llvm -o - -Wall -Werror | FileCheck %s +// RUN: %clang_cc1 -x c -flax-vector-conversions=none -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +avx512bf16 -target-feature +avx512vl -emit-llvm -o - -Wall -Werror | FileCheck %s +// RUN: %clang_cc1 -x c -flax-vector-conversions=none -ffreestanding %s -triple=i386-apple-darwin -target-feature +avx512bf16 -target-feature +avx512vl -emit-llvm -o - -Wall -Werror | FileCheck %s +// RUN: %clang_cc1 -x c++ -flax-vector-conversions=none -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +avx512bf16 -target-feature +avx512vl -emit-llvm -o - -Wall -Werror | FileCheck %s +// RUN: %clang_cc1 -x c++ -flax-vector-conversions=none -ffreestanding %s -triple=i386-apple-darwin -target-feature +avx512bf16 -target-feature +avx512vl -emit-llvm -o - -Wall -Werror | FileCheck %s #include <immintrin.h> __m128bh test_mm_cvtne2ps2bf16(__m128 A, __m128 B) { - // CHECK-LABEL: @test_mm_cvtne2ps2bf16 - // CHECK: @llvm.x86.avx512bf16.cvtne2ps2bf16.128 - // CHECK: ret <8 x bfloat> %{{.*}} + // CHECK-LABEL: test_mm_cvtne2ps2bf16 + // CHECK: call {{.*}}<8 x bfloat> @llvm.x86.avx512bf16.cvtne2ps2bf16.128(<4 x float> %{{.*}}, <4 x float> %{{.*}}) return _mm_cvtne2ps_pbh(A, B); } __m128bh test_mm_maskz_cvtne2ps2bf16(__m128 A, __m128 B, __mmask8 U) { - // CHECK-LABEL: @test_mm_maskz_cvtne2ps2bf16 - // CHECK: @llvm.x86.avx512bf16.cvtne2ps2bf16.128 + // CHECK-LABEL: test_mm_maskz_cvtne2ps2bf16 + // CHECK: call {{.*}}<8 x bfloat> @llvm.x86.avx512bf16.cvtne2ps2bf16.128(<4 x float> %{{.*}}, <4 x float> %{{.*}}) // CHECK: select <8 x i1> %{{.*}}, <8 x bfloat> %{{.*}}, <8 x bfloat> %{{.*}} - // CHECK: ret <8 x bfloat> %{{.*}} return _mm_maskz_cvtne2ps_pbh(U, A, B); } __m128bh test_mm_mask_cvtne2ps2bf16(__m128bh C, __mmask8 U, __m128 A, __m128 B) { - // CHECK-LABEL: @test_mm_mask_cvtne2ps2bf16 - // CHECK: @llvm.x86.avx512bf16.cvtne2ps2bf16.128 + // CHECK-LABEL: test_mm_mask_cvtne2ps2bf16 + // CHECK: call {{.*}}<8 x bfloat> @llvm.x86.avx512bf16.cvtne2ps2bf16.128(<4 x float> %{{.*}}, <4 x float> %{{.*}}) // CHECK: select <8 x i1> %{{.*}}, <8 x bfloat> %{{.*}}, <8 x bfloat> %{{.*}} - // CHECK: ret <8 x bfloat> %{{.*}} return _mm_mask_cvtne2ps_pbh(C, U, A, B); } __m256bh test_mm256_cvtne2ps2bf16(__m256 A, __m256 B) { - // CHECK-LABEL: @test_mm256_cvtne2ps2bf16 - // CHECK: @llvm.x86.avx512bf16.cvtne2ps2bf16.256 - // CHECK: ret <16 x bfloat> %{{.*}} + // CHECK-LABEL: test_mm256_cvtne2ps2bf16 + // CHECK: call {{.*}}<16 x bfloat> @llvm.x86.avx512bf16.cvtne2ps2bf16.256(<8 x float> %{{.*}}, <8 x float> %{{.*}}) return _mm256_cvtne2ps_pbh(A, B); } __m256bh test_mm256_maskz_cvtne2ps2bf16(__m256 A, __m256 B, __mmask16 U) { - // CHECK-LABEL: @test_mm256_maskz_cvtne2ps2bf16 - // CHECK: @llvm.x86.avx512bf16.cvtne2ps2bf16.256 + // CHECK-LABEL: test_mm256_maskz_cvtne2ps2bf16 + // CHECK: call {{.*}}<16 x bfloat> @llvm.x86.avx512bf16.cvtne2ps2bf16.256(<8 x float> %{{.*}}, <8 x float> %{{.*}}) // CHECK: select <16 x i1> %{{.*}}, <16 x bfloat> %{{.*}}, <16 x bfloat> %{{.*}} - // CHECK: ret <16 x bfloat> %{{.*}} return _mm256_maskz_cvtne2ps_pbh(U, A, B); } __m256bh test_mm256_mask_cvtne2ps2bf16(__m256bh C, __mmask16 U, __m256 A, __m256 B) { - // CHECK-LABEL: @test_mm256_mask_cvtne2ps2bf16 - // CHECK: @llvm.x86.avx512bf16.cvtne2ps2bf16.256 + // CHECK-LABEL: test_mm256_mask_cvtne2ps2bf16 + // CHECK: call {{.*}}<16 x bfloat> @llvm.x86.avx512bf16.cvtne2ps2bf16.256(<8 x float> %{{.*}}, <8 x float> %{{.*}}) // CHECK: select <16 x i1> %{{.*}}, <16 x bfloat> %{{.*}}, <16 x bfloat> %{{.*}} - // CHECK: ret <16 x bfloat> %{{.*}} return _mm256_mask_cvtne2ps_pbh(C, U, A, B); } __m512bh test_mm512_cvtne2ps2bf16(__m512 A, __m512 B) { - // CHECK-LABEL: @test_mm512_cvtne2ps2bf16 - // CHECK: @llvm.x86.avx512bf16.cvtne2ps2bf16.512 - // CHECK: ret <32 x bfloat> %{{.*}} + // CHECK-LABEL: test_mm512_cvtne2ps2bf16 + // CHECK: call {{.*}}<32 x bfloat> @llvm.x86.avx512bf16.cvtne2ps2bf16.512(<16 x float> %{{.*}}, <16 x float> %{{.*}}) return _mm512_cvtne2ps_pbh(A, B); } __m512bh test_mm512_maskz_cvtne2ps2bf16(__m512 A, __m512 B, __mmask32 U) { - // CHECK-LABEL: @test_mm512_maskz_cvtne2ps2bf16 - // CHECK: @llvm.x86.avx512bf16.cvtne2ps2bf16.512 + // CHECK-LABEL: test_mm512_maskz_cvtne2ps2bf16 + // CHECK: call {{.*}}<32 x bfloat> @llvm.x86.avx512bf16.cvtne2ps2bf16.512(<16 x float> %{{.*}}, <16 x float> %{{.*}}) // CHECK: select <32 x i1> %{{.*}}, <32 x bfloat> %{{.*}}, <32 x bfloat> %{{.*}} - // CHECK: ret <32 x bfloat> %{{.*}} return _mm512_maskz_cvtne2ps_pbh(U, A, B); } __m512bh test_mm512_mask_cvtne2ps2bf16(__m512bh C, __mmask32 U, __m512 A, __m512 B) { - // CHECK-LABEL: @test_mm512_mask_cvtne2ps2bf16 - // CHECK: @llvm.x86.avx512bf16.cvtne2ps2bf16.512 + // CHECK-LABEL: test_mm512_mask_cvtne2ps2bf16 + // CHECK: call {{.*}}<32 x bfloat> @llvm.x86.avx512bf16.cvtne2ps2bf16.512(<16 x float> %{{.*}}, <16 x float> %{{.*}}) // CHECK: select <32 x i1> %{{.*}}, <32 x bfloat> %{{.*}}, <32 x bfloat> %{{.*}} - // CHECK: ret <32 x bfloat> %{{.*}} return _mm512_mask_cvtne2ps_pbh(C, U, A, B); } __m128bh test_mm_cvtneps2bf16(__m128 A) { - // CHECK-LABEL: @test_mm_cvtneps2bf16 - // CHECK: @llvm.x86.vcvtneps2bf16128 - // CHECK: ret <8 x bfloat> %{{.*}} + // CHECK-LABEL: test_mm_cvtneps2bf16 + // CHECK: call {{.*}}<8 x bfloat> @llvm.x86.vcvtneps2bf16128(<4 x float> %{{.*}}) return _mm_cvtneps_pbh(A); } __m128bh test_mm_mask_cvtneps2bf16(__m128bh C, __mmask8 U, __m128 A) { - // CHECK-LABEL: @test_mm_mask_cvtneps2bf16 - // CHECK: @llvm.x86.avx512bf16.mask.cvtneps2bf16. - // CHECK: ret <8 x bfloat> %{{.*}} + // CHECK-LABEL: test_mm_mask_cvtneps2bf16 + // CHECK: call {{.*}}<8 x bfloat> @llvm.x86.avx512bf16.mask.cvtneps2bf16.128(<4 x float> %{{.*}}, <8 x bfloat> %{{.*}}, <4 x i1> %{{.*}}) return _mm_mask_cvtneps_pbh(C, U, A); } __m128bh test_mm_maskz_cvtneps2bf16(__m128 A, __mmask8 U) { - // CHECK-LABEL: @test_mm_maskz_cvtneps2bf16 - // CHECK: @llvm.x86.avx512bf16.mask.cvtneps2bf16.128 - // CHECK: ret <8 x bfloat> %{{.*}} + // CHECK-LABEL: test_mm_maskz_cvtneps2bf16 + // CHECK: call {{.*}}<8 x bfloat> @llvm.x86.avx512bf16.mask.cvtneps2bf16.128(<4 x float> %{{.*}}, <8 x bfloat> %{{.*}}, <4 x i1> %{{.*}}) return _mm_maskz_cvtneps_pbh(U, A); } __m128bh test_mm256_cvtneps2bf16(__m256 A) { - // CHECK-LABEL: @test_mm256_cvtneps2bf16 - // CHECK: @llvm.x86.vcvtneps2bf16256 - // CHECK: ret <8 x bfloat> %{{.*}} + // CHECK-LABEL: test_mm256_cvtneps2bf16 + // CHECK: call {{.*}}<8 x bfloat> @llvm.x86.vcvtneps2bf16256(<8 x float> %{{.*}}) return _mm256_cvtneps_pbh(A); } __m128bh test_mm256_mask_cvtneps2bf16(__m128bh C, __mmask8 U, __m256 A) { - // CHECK-LABEL: @test_mm256_mask_cvtneps2bf16 - // CHECK: @llvm.x86.avx512bf16.cvtneps2bf16.256 + // CHECK-LABEL: test_mm256_mask_cvtneps2bf16 + // CHECK: call {{.*}}<8 x bfloat> @llvm.x86.avx512bf16.cvtneps2bf16.256(<8 x float> %{{.*}}) // CHECK: select <8 x i1> %{{.*}}, <8 x bfloat> %{{.*}}, <8 x bfloat> %{{.*}} - // CHECK: ret <8 x bfloat> %{{.*}} return _mm256_mask_cvtneps_pbh(C, U, A); } __m128bh test_mm256_maskz_cvtneps2bf16(__m256 A, __mmask8 U) { - // CHECK-LABEL: @test_mm256_maskz_cvtneps2bf16 - // CHECK: @llvm.x86.avx512bf16.cvtneps2bf16.256 + // CHECK-LABEL: test_mm256_maskz_cvtneps2bf16 + // CHECK: call {{.*}}<8 x bfloat> @llvm.x86.avx512bf16.cvtneps2bf16.256 // CHECK: select <8 x i1> %{{.*}}, <8 x bfloat> %{{.*}}, <8 x bfloat> %{{.*}} - // CHECK: ret <8 x bfloat> %{{.*}} return _mm256_maskz_cvtneps_pbh(U, A); } __m128 test_mm_dpbf16_ps(__m128 D, __m128bh A, __m128bh B) { - // CHECK-LABEL: @test_mm_dpbf16_ps - // CHECK: @llvm.x86.avx512bf16.dpbf16ps.128 - // CHECK: ret <4 x float> %{{.*}} + // CHECK-LABEL: test_mm_dpbf16_ps + // CHECK: call {{.*}}<4 x float> @llvm.x86.avx512bf16.dpbf16ps.128(<4 x float> %{{.*}}, <8 x bfloat> %{{.*}}, <8 x bfloat> %{{.*}}) return _mm_dpbf16_ps(D, A, B); } __m128 test_mm_maskz_dpbf16_ps(__m128 D, __m128bh A, __m128bh B, __mmask8 U) { - // CHECK-LABEL: @test_mm_maskz_dpbf16_ps - // CHECK: @llvm.x86.avx512bf16.dpbf16ps.128 + // CHECK-LABEL: test_mm_maskz_dpbf16_ps + // CHECK: call {{.*}}<4 x float> @llvm.x86.avx512bf16.dpbf16ps.128(<4 x float> %{{.*}}, <8 x bfloat> %{{.*}}, <8 x bfloat> %{{.*}}) // CHECK: select <4 x i1> %{{.*}}, <4 x float> %{{.*}}, <4 x float> %{{.*}} - // CHECK: ret <4 x float> %{{.*}} return _mm_maskz_dpbf16_ps(U, D, A, B); } __m128 test_mm_mask_dpbf16_ps(__m128 D, __m128bh A, __m128bh B, __mmask8 U) { - // CHECK-LABEL: @test_mm_mask_dpbf16_ps - // CHECK: @llvm.x86.avx512bf16.dpbf16ps.128 + // CHECK-LABEL: test_mm_mask_dpbf16_ps + // CHECK: call {{.*}}<4 x float> @llvm.x86.avx512bf16.dpbf16ps.128(<4 x float> %{{.*}}, <8 x bfloat> %{{.*}}, <8 x bfloat> %{{.*}}) // CHECK: select <4 x i1> %{{.*}}, <4 x float> %{{.*}}, <4 x float> %{{.*}} - // CHECK: ret <4 x float> %{{.*}} return _mm_mask_dpbf16_ps(D, U, A, B); } + __m256 test_mm256_dpbf16_ps(__m256 D, __m256bh A, __m256bh B) { - // CHECK-LABEL: @test_mm256_dpbf16_ps - // CHECK: @llvm.x86.avx512bf16.dpbf16ps.256 - // CHECK: ret <8 x float> %{{.*}} + // CHECK-LABEL: test_mm256_dpbf16_ps + // CHECK: call {{.*}}<8 x float> @llvm.x86.avx512bf16.dpbf16ps.256(<8 x float> %{{.*}}, <16 x bfloat> %{{.*}}, <16 x bfloat> %{{.*}}) return _mm256_dpbf16_ps(D, A, B); } __m256 test_mm256_maskz_dpbf16_ps(__m256 D, __m256bh A, __m256bh B, __mmask8 U) { - // CHECK-LABEL: @test_mm256_maskz_dpbf16_ps - // CHECK: @llvm.x86.avx512bf16.dpbf16ps.256 + // CHECK-LABEL: test_mm256_maskz_dpbf16_ps + // CHECK: call {{.*}}<8 x float> @llvm.x86.avx512bf16.dpbf16ps.256(<8 x float> %{{.*}}, <16 x bfloat> %{{.*}}, <16 x bfloat> %{{.*}}) // CHECK: select <8 x i1> %{{.*}}, <8 x float> %{{.*}}, <8 x float> %{{.*}} - // CHECK: ret <8 x float> %{{.*}} return _mm256_maskz_dpbf16_ps(U, D, A, B); } __m256 test_mm256_mask_dpbf16_ps(__m256 D, __m256bh A, __m256bh B, __mmask8 U) { - // CHECK-LABEL: @test_mm256_mask_dpbf16_ps - // CHECK: @llvm.x86.avx512bf16.dpbf16ps.256 + // CHECK-LABEL: test_mm256_mask_dpbf16_ps + // CHECK: call {{.*}}<8 x float> @llvm.x86.avx512bf16.dpbf16ps.256(<8 x float> %{{.*}}, <16 x bfloat> %{{.*}}, <16 x bfloat> %{{.*}}) // CHECK: select <8 x i1> %{{.*}}, <8 x float> %{{.*}}, <8 x float> %{{.*}} - // CHECK: ret <8 x float> %{{.*}} return _mm256_mask_dpbf16_ps(D, U, A, B); } __bf16 test_mm_cvtness_sbh(float A) { - // CHECK-LABEL: @test_mm_cvtness_sbh - // CHECK: @llvm.x86.avx512bf16.mask.cvtneps2bf16.128 - // CHECK: ret bfloat %{{.*}} + // CHECK-LABEL: test_mm_cvtness_sbh + // CHECK: call {{.*}}<8 x bfloat> @llvm.x86.avx512bf16.mask.cvtneps2bf16.128(<4 x float> %{{.*}}, <8 x bfloat> %{{.*}}, <4 x i1> splat (i1 true)) return _mm_cvtness_sbh(A); } __m128 test_mm_cvtpbh_ps(__m128bh A) { - // CHECK-LABEL: @test_mm_cvtpbh_ps + // CHECK-LABEL: test_mm_cvtpbh_ps // CHECK: sext <4 x i16> %{{.*}} to <4 x i32> - // CHECK: @llvm.x86.sse2.pslli.d - // CHECK: ret <4 x float> %{{.*}} + // CHECK: call <4 x i32> @llvm.x86.sse2.pslli.d(<4 x i32> %{{.*}}, i32 %{{.*}}) return _mm_cvtpbh_ps(A); } __m256 test_mm256_cvtpbh_ps(__m128bh A) { - // CHECK-LABEL: @test_mm256_cvtpbh_ps + // CHECK-LABEL: test_mm256_cvtpbh_ps // CHECK: sext <8 x i16> %{{.*}} to <8 x i32> - // CHECK: @llvm.x86.avx2.pslli.d - // CHECK: ret <8 x float> %{{.*}} + // CHECK: call <8 x i32> @llvm.x86.avx2.pslli.d(<8 x i32> %{{.*}}, i32 %{{.*}}) return _mm256_cvtpbh_ps(A); } __m128 test_mm_maskz_cvtpbh_ps(__mmask8 M, __m128bh A) { - // CHECK-LABEL: @test_mm_maskz_cvtpbh_ps + // CHECK-LABEL: test_mm_maskz_cvtpbh_ps // CHECK: sext <4 x i16> %{{.*}} to <4 x i32> // CHECK: select <4 x i1> %{{.*}}, <4 x i32> %{{.*}}, <4 x i32> %{{.*}} - // CHECK: @llvm.x86.sse2.pslli.d - // CHECK: ret <4 x float> %{{.*}} + // CHECK: call <4 x i32> @llvm.x86.sse2.pslli.d(<4 x i32> %{{.*}}, i32 %{{.*}}) return _mm_maskz_cvtpbh_ps(M, A); } __m256 test_mm256_maskz_cvtpbh_ps(__mmask8 M, __m128bh A) { - // CHECK-LABEL: @test_mm256_maskz_cvtpbh_ps + // CHECK-LABEL: test_mm256_maskz_cvtpbh_ps // CHECK: sext <8 x i16> %{{.*}} to <8 x i32> // CHECK: select <8 x i1> %{{.*}}, <8 x i32> %{{.*}}, <8 x i32> %{{.*}} - // CHECK: @llvm.x86.avx2.pslli.d - // CHECK: ret <8 x float> %{{.*}} + // CHECK: call <8 x i32> @llvm.x86.avx2.pslli.d(<8 x i32> %{{.*}}, i32 %{{.*}}) return _mm256_maskz_cvtpbh_ps(M, A); } __m128 test_mm_mask_cvtpbh_ps(__m128 S, __mmask8 M, __m128bh A) { - // CHECK-LABEL: @test_mm_mask_cvtpbh_ps + // CHECK-LABEL: test_mm_mask_cvtpbh_ps // CHECK: sext <4 x i16> %{{.*}} to <4 x i32> - // CHECK: @llvm.x86.sse2.pslli.d + // CHECK: call <4 x i32> @llvm.x86.sse2.pslli.d(<4 x i32> %{{.*}}, i32 %{{.*}}) // CHECK: select <4 x i1> %{{.*}}, <4 x i32> %{{.*}}, <4 x i32> %{{.*}} - // CHECK: ret <4 x float> %{{.*}} return _mm_mask_cvtpbh_ps(S, M, A); } __m256 test_mm256_mask_cvtpbh_ps(__m256 S, __mmask8 M, __m128bh A) { - // CHECK-LABEL: @test_mm256_mask_cvtpbh_ps + // CHECK-LABEL: test_mm256_mask_cvtpbh_ps // CHECK: sext <8 x i16> %{{.*}} to <8 x i32> - // CHECK: @llvm.x86.avx2.pslli.d + // CHECK: call <8 x i32> @llvm.x86.avx2.pslli.d(<8 x i32> %{{.*}}, i32 %{{.*}}) // CHECK: select <8 x i1> %{{.*}}, <8 x i32> %{{.*}}, <8 x i32> %{{.*}} - // CHECK: ret <8 x float> %{{.*}} return _mm256_mask_cvtpbh_ps(S, M, A); } diff --git a/clang/test/CodeGen/X86/avx512vlbitalg-builtins.c b/clang/test/CodeGen/X86/avx512vlbitalg-builtins.c index 4e65da0..e0b55c6 100644 --- a/clang/test/CodeGen/X86/avx512vlbitalg-builtins.c +++ b/clang/test/CodeGen/X86/avx512vlbitalg-builtins.c @@ -1,105 +1,131 @@ -// RUN: %clang_cc1 -flax-vector-conversions=none -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +avx512bitalg -target-feature +avx512vl -emit-llvm -o - -Wall -Werror | FileCheck %s +// RUN: %clang_cc1 -x c -flax-vector-conversions=none -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +avx512bitalg -target-feature +avx512vl -emit-llvm -o - -Wall -Werror | FileCheck %s +// RUN: %clang_cc1 -x c -flax-vector-conversions=none -ffreestanding %s -triple=i386-apple-darwin -target-feature +avx512bitalg -target-feature +avx512vl -emit-llvm -o - -Wall -Werror | FileCheck %s +// RUN: %clang_cc1 -x c++ -flax-vector-conversions=none -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +avx512bitalg -target-feature +avx512vl -emit-llvm -o - -Wall -Werror | FileCheck %s +// RUN: %clang_cc1 -x c++ -flax-vector-conversions=none -ffreestanding %s -triple=i386-apple-darwin -target-feature +avx512bitalg -target-feature +avx512vl -emit-llvm -o - -Wall -Werror | FileCheck %s + +// RUN: %clang_cc1 -x c -flax-vector-conversions=none -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +avx512bitalg -target-feature +avx512vl -emit-llvm -o - -Wall -Werror -fexperimental-new-constant-interpreter | FileCheck %s +// RUN: %clang_cc1 -x c -flax-vector-conversions=none -ffreestanding %s -triple=i386-apple-darwin -target-feature +avx512bitalg -target-feature +avx512vl -emit-llvm -o - -Wall -Werror -fexperimental-new-constant-interpreter | FileCheck %s +// RUN: %clang_cc1 -x c++ -flax-vector-conversions=none -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +avx512bitalg -target-feature +avx512vl -emit-llvm -o - -Wall -Werror -fexperimental-new-constant-interpreter | FileCheck %s +// RUN: %clang_cc1 -x c++ -flax-vector-conversions=none -ffreestanding %s -triple=i386-apple-darwin -target-feature +avx512bitalg -target-feature +avx512vl -emit-llvm -o - -Wall -Werror -fexperimental-new-constant-interpreter | FileCheck %s + #include <immintrin.h> +#include "builtin_test_helpers.h" __m256i test_mm256_popcnt_epi16(__m256i __A) { - // CHECK-LABEL: @test_mm256_popcnt_epi16 + // CHECK-LABEL: test_mm256_popcnt_epi16 // CHECK: @llvm.ctpop.v16i16 return _mm256_popcnt_epi16(__A); } +TEST_CONSTEXPR(match_v16hi(_mm256_popcnt_epi16((__m256i)(__v16hi){+5, -3, -10, +8, 0, -256, +256, -128, +3, +9, +15, +33, +63, +129, +511, +1025}), 2, 15, 14, 1, 0, 8, 1, 9, 2, 2, 4, 2, 6, 2, 9, 2)); __m256i test_mm256_mask_popcnt_epi16(__m256i __A, __mmask16 __U, __m256i __B) { - // CHECK-LABEL: @test_mm256_mask_popcnt_epi16 + // CHECK-LABEL: test_mm256_mask_popcnt_epi16 // CHECK: @llvm.ctpop.v16i16 // CHECK: select <16 x i1> %{{[0-9]+}}, <16 x i16> %{{.*}}, <16 x i16> %{{.*}} return _mm256_mask_popcnt_epi16(__A, __U, __B); } +TEST_CONSTEXPR(match_v16hi(_mm256_mask_popcnt_epi16(_mm256_set1_epi16(-1), 0xF0F0, (__m256i)(__v16hi){+5, -3, -10, +8, 0, -256, +256, -128, +3, +9, +15, +33, +63, +129, +511, +1025}), -1, -1, -1, -1, 0, 8, 1, 9, -1, -1, -1, -1, 6, 2, 9, 2)); + __m256i test_mm256_maskz_popcnt_epi16(__mmask16 __U, __m256i __B) { - // CHECK-LABEL: @test_mm256_maskz_popcnt_epi16 + // CHECK-LABEL: test_mm256_maskz_popcnt_epi16 // CHECK: @llvm.ctpop.v16i16 // CHECK: select <16 x i1> %{{[0-9]+}}, <16 x i16> %{{.*}}, <16 x i16> %{{.*}} return _mm256_maskz_popcnt_epi16(__U, __B); } +TEST_CONSTEXPR(match_v16hi(_mm256_maskz_popcnt_epi16(0x0F0F, (__m256i)(__v16hi){+5, -3, -10, +8, 0, -256, +256, -128, +3, +9, +15, +33, +63, +129, +511, +1025}), 2, 15, 14, 1, 0, 0, 0, 0, 2, 2, 4, 2, 0, 0, 0, 0)); __m128i test_mm_popcnt_epi16(__m128i __A) { - // CHECK-LABEL: @test_mm_popcnt_epi16 + // CHECK-LABEL: test_mm_popcnt_epi16 // CHECK: @llvm.ctpop.v8i16 return _mm_popcnt_epi16(__A); } +TEST_CONSTEXPR(match_v8hi(_mm_popcnt_epi16((__m128i)(__v8hi){+5, -3, -10, +8, 0, -256, +256, -128}), 2, 15, 14, 1, 0, 8, 1, 9)); __m128i test_mm_mask_popcnt_epi16(__m128i __A, __mmask8 __U, __m128i __B) { - // CHECK-LABEL: @test_mm_mask_popcnt_epi16 + // CHECK-LABEL: test_mm_mask_popcnt_epi16 // CHECK: @llvm.ctpop.v8i16 // CHECK: select <8 x i1> %{{[0-9]+}}, <8 x i16> %{{.*}}, <8 x i16> %{{.*}} return _mm_mask_popcnt_epi16(__A, __U, __B); } +TEST_CONSTEXPR(match_v8hi(_mm_mask_popcnt_epi16(_mm_set1_epi16(-1), 0xF0, (__m128i)(__v8hi){+5, -3, -10, +8, 0, -256, +256, -128}), -1, -1, -1, -1, 0, 8, 1, 9)); + __m128i test_mm_maskz_popcnt_epi16(__mmask8 __U, __m128i __B) { - // CHECK-LABEL: @test_mm_maskz_popcnt_epi16 + // CHECK-LABEL: test_mm_maskz_popcnt_epi16 // CHECK: @llvm.ctpop.v8i16 // CHECK: select <8 x i1> %{{[0-9]+}}, <8 x i16> %{{.*}}, <8 x i16> %{{.*}} return _mm_maskz_popcnt_epi16(__U, __B); } +TEST_CONSTEXPR(match_v8hi(_mm_maskz_popcnt_epi16(0x0F, (__m128i)(__v8hi){+5, -3, -10, +8, 0, -256, +256, -128}), 2, 15, 14, 1, 0, 0, 0, 0)); __m256i test_mm256_popcnt_epi8(__m256i __A) { - // CHECK-LABEL: @test_mm256_popcnt_epi8 + // CHECK-LABEL: test_mm256_popcnt_epi8 // CHECK: @llvm.ctpop.v32i8 return _mm256_popcnt_epi8(__A); } +TEST_CONSTEXPR(match_v32qi(_mm256_popcnt_epi8((__m256i)(__v32qi){+5, -3, -10, +8, 0, -16, +16, -16, +3, +9, +15, +33, +63, +33, +53, +73, +5, -3, -10, +8, 0, -16, +16, -16, +3, +9, +15, +33, +63, +33, +53, +73}), 2, 7, 6, 1, 0, 4, 1, 4, 2, 2, 4, 2, 6, 2, 4, 3, 2, 7, 6, 1, 0, 4, 1, 4, 2, 2, 4, 2, 6, 2, 4, 3)); __m256i test_mm256_mask_popcnt_epi8(__m256i __A, __mmask32 __U, __m256i __B) { - // CHECK-LABEL: @test_mm256_mask_popcnt_epi8 + // CHECK-LABEL: test_mm256_mask_popcnt_epi8 // CHECK: @llvm.ctpop.v32i8 // CHECK: select <32 x i1> %{{[0-9]+}}, <32 x i8> %{{.*}}, <32 x i8> %{{.*}} return _mm256_mask_popcnt_epi8(__A, __U, __B); } +TEST_CONSTEXPR(match_v32qi(_mm256_mask_popcnt_epi8(_mm256_set1_epi8(-1), 0xF00F, (__m256i)(__v32qi){+5, -3, -10, +8, 0, -16, +16, -16, +3, +9, +15, +33, +63, +33, +53, +73, +5, -3, -10, +8, 0, -16, +16, -16, +3, +9, +15, +33, +63, +33, +53, +73}), 2, 7, 6, 1, -1, -1, -1, -1, -1, -1, -1, -1, 6, 2, 4, 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1)); + __m256i test_mm256_maskz_popcnt_epi8(__mmask32 __U, __m256i __B) { - // CHECK-LABEL: @test_mm256_maskz_popcnt_epi8 + // CHECK-LABEL: test_mm256_maskz_popcnt_epi8 // CHECK: @llvm.ctpop.v32i8 // CHECK: select <32 x i1> %{{[0-9]+}}, <32 x i8> %{{.*}}, <32 x i8> %{{.*}} return _mm256_maskz_popcnt_epi8(__U, __B); } +TEST_CONSTEXPR(match_v32qi(_mm256_maskz_popcnt_epi8(0x0FF0, (__m256i)(__v32qi){+5, -3, -10, +8, 0, -16, +16, -16, +3, +9, +15, +33, +63, +33, +53, +73, +5, -3, -10, +8, 0, -16, +16, -16, +3, +9, +15, +33, +63, +33, +53, +73}), 0, 0, 0, 0, 0, 4, 1, 4, 2, 2, 4, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)); __m128i test_mm_popcnt_epi8(__m128i __A) { - // CHECK-LABEL: @test_mm_popcnt_epi8 + // CHECK-LABEL: test_mm_popcnt_epi8 // CHECK: @llvm.ctpop.v16i8 return _mm_popcnt_epi8(__A); } +TEST_CONSTEXPR(match_v16qi(_mm_popcnt_epi8((__m128i)(__v16qi){+5, -3, -10, +8, 0, -16, +16, -16, +3, +9, +15, +33, +63, +33, +53, +73}), 2, 7, 6, 1, 0, 4, 1, 4, 2, 2, 4, 2, 6, 2, 4, 3)); __m128i test_mm_mask_popcnt_epi8(__m128i __A, __mmask16 __U, __m128i __B) { - // CHECK-LABEL: @test_mm_mask_popcnt_epi8 + // CHECK-LABEL: test_mm_mask_popcnt_epi8 // CHECK: @llvm.ctpop.v16i8 // CHECK: select <16 x i1> %{{[0-9]+}}, <16 x i8> %{{.*}}, <16 x i8> %{{.*}} return _mm_mask_popcnt_epi8(__A, __U, __B); } +TEST_CONSTEXPR(match_v16qi(_mm_mask_popcnt_epi8(_mm_set1_epi8(-1), 0xF00F, (__m128i)(__v16qi){+5, -3, -10, +8, 0, -16, +16, -16, +3, +9, +15, +33, +63, +33, +53, +73}), 2, 7, 6, 1, -1, -1, -1, -1, -1, -1, -1, -1, 6, 2, 4, 3)); + __m128i test_mm_maskz_popcnt_epi8(__mmask16 __U, __m128i __B) { - // CHECK-LABEL: @test_mm_maskz_popcnt_epi8 + // CHECK-LABEL: test_mm_maskz_popcnt_epi8 // CHECK: @llvm.ctpop.v16i8 // CHECK: select <16 x i1> %{{[0-9]+}}, <16 x i8> %{{.*}}, <16 x i8> %{{.*}} return _mm_maskz_popcnt_epi8(__U, __B); } +TEST_CONSTEXPR(match_v16qi(_mm_maskz_popcnt_epi8(0x0FF0, (__m128i)(__v16qi){+5, -3, -10, +8, 0, -16, +16, -16, +3, +9, +15, +33, +63, +33, +53, +73}), 0, 0, 0, 0, 0, 4, 1, 4, 2, 2, 4, 2, 0, 0, 0, 0)); __mmask32 test_mm256_mask_bitshuffle_epi64_mask(__mmask32 __U, __m256i __A, __m256i __B) { - // CHECK-LABEL: @test_mm256_mask_bitshuffle_epi64_mask + // CHECK-LABEL: test_mm256_mask_bitshuffle_epi64_mask // CHECK: @llvm.x86.avx512.vpshufbitqmb.256 // CHECK: and <32 x i1> %{{.*}}, %{{.*}} return _mm256_mask_bitshuffle_epi64_mask(__U, __A, __B); } __mmask32 test_mm256_bitshuffle_epi64_mask(__m256i __A, __m256i __B) { - // CHECK-LABEL: @test_mm256_bitshuffle_epi64_mask + // CHECK-LABEL: test_mm256_bitshuffle_epi64_mask // CHECK: @llvm.x86.avx512.vpshufbitqmb.256 return _mm256_bitshuffle_epi64_mask(__A, __B); } __mmask16 test_mm_mask_bitshuffle_epi64_mask(__mmask16 __U, __m128i __A, __m128i __B) { - // CHECK-LABEL: @test_mm_mask_bitshuffle_epi64_mask + // CHECK-LABEL: test_mm_mask_bitshuffle_epi64_mask // CHECK: @llvm.x86.avx512.vpshufbitqmb.128 // CHECK: and <16 x i1> %{{.*}}, %{{.*}} return _mm_mask_bitshuffle_epi64_mask(__U, __A, __B); } __mmask16 test_mm_bitshuffle_epi64_mask(__m128i __A, __m128i __B) { - // CHECK-LABEL: @test_mm_bitshuffle_epi64_mask + // CHECK-LABEL: test_mm_bitshuffle_epi64_mask // CHECK: @llvm.x86.avx512.vpshufbitqmb.128 return _mm_bitshuffle_epi64_mask(__A, __B); } diff --git a/clang/test/CodeGen/X86/avx512vlbw-builtins.c b/clang/test/CodeGen/X86/avx512vlbw-builtins.c index 4ec499c..4527c91 100644 --- a/clang/test/CodeGen/X86/avx512vlbw-builtins.c +++ b/clang/test/CodeGen/X86/avx512vlbw-builtins.c @@ -1,732 +1,743 @@ -// RUN: %clang_cc1 -flax-vector-conversions=none -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +avx512bw -target-feature +avx512vl -emit-llvm -o - -Wall -Werror -Wsign-conversion | FileCheck %s -// RUN: %clang_cc1 -flax-vector-conversions=none -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +avx512bw -target-feature +avx512vl -fno-signed-char -emit-llvm -o - -Wall -Werror -Wsign-conversion | FileCheck %s -// RUN: %clang_cc1 -flax-vector-conversions=none -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +avx10.1-512 -emit-llvm -o - -Wall -Werror -Wsign-conversion | FileCheck %s +// RUN: %clang_cc1 -x c -flax-vector-conversions=none -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +avx512bw -target-feature +avx512vl -emit-llvm -o - -Wall -Werror -Wsign-conversion | FileCheck %s +// RUN: %clang_cc1 -x c -flax-vector-conversions=none -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +avx512bw -target-feature +avx512vl -fno-signed-char -emit-llvm -o - -Wall -Werror -Wsign-conversion | FileCheck %s +// RUN: %clang_cc1 -x c -flax-vector-conversions=none -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +avx10.1-512 -emit-llvm -o - -Wall -Werror -Wsign-conversion | FileCheck %s +// RUN: %clang_cc1 -x c++ -flax-vector-conversions=none -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +avx512bw -target-feature +avx512vl -emit-llvm -o - -Wall -Werror -Wsign-conversion | FileCheck %s +// RUN: %clang_cc1 -x c++ -flax-vector-conversions=none -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +avx512bw -target-feature +avx512vl -fno-signed-char -emit-llvm -o - -Wall -Werror -Wsign-conversion | FileCheck %s +// RUN: %clang_cc1 -x c++ -flax-vector-conversions=none -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +avx10.1-512 -emit-llvm -o - -Wall -Werror -Wsign-conversion | FileCheck %s + +// RUN: %clang_cc1 -x c -flax-vector-conversions=none -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +avx512bw -target-feature +avx512vl -emit-llvm -o - -Wall -Werror -Wsign-conversion -fexperimental-new-constant-interpreter | FileCheck %s +// RUN: %clang_cc1 -x c -flax-vector-conversions=none -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +avx512bw -target-feature +avx512vl -fno-signed-char -emit-llvm -o - -Wall -Werror -Wsign-conversion -fexperimental-new-constant-interpreter | FileCheck %s +// RUN: %clang_cc1 -x c -flax-vector-conversions=none -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +avx10.1-512 -emit-llvm -o - -Wall -Werror -Wsign-conversion -fexperimental-new-constant-interpreter | FileCheck %s +// RUN: %clang_cc1 -x c++ -flax-vector-conversions=none -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +avx512bw -target-feature +avx512vl -emit-llvm -o - -Wall -Werror -Wsign-conversion -fexperimental-new-constant-interpreter | FileCheck %s +// RUN: %clang_cc1 -x c++ -flax-vector-conversions=none -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +avx512bw -target-feature +avx512vl -fno-signed-char -emit-llvm -o - -Wall -Werror -Wsign-conversion -fexperimental-new-constant-interpreter | FileCheck %s +// RUN: %clang_cc1 -x c++ -flax-vector-conversions=none -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +avx10.1-512 -emit-llvm -o - -Wall -Werror -Wsign-conversion -fexperimental-new-constant-interpreter | FileCheck %s #include <immintrin.h> +#include "builtin_test_helpers.h" __mmask32 test_mm256_cmpeq_epi8_mask(__m256i __a, __m256i __b) { - // CHECK-LABEL: @test_mm256_cmpeq_epi8_mask + // CHECK-LABEL: test_mm256_cmpeq_epi8_mask // CHECK: icmp eq <32 x i8> %{{.*}}, %{{.*}} return (__mmask32)_mm256_cmpeq_epi8_mask(__a, __b); } __mmask32 test_mm256_mask_cmpeq_epi8_mask(__mmask32 __u, __m256i __a, __m256i __b) { - // CHECK-LABEL: @test_mm256_mask_cmpeq_epi8_mask + // CHECK-LABEL: test_mm256_mask_cmpeq_epi8_mask // CHECK: icmp eq <32 x i8> %{{.*}}, %{{.*}} // CHECK: and <32 x i1> %{{.*}}, %{{.*}} return (__mmask32)_mm256_mask_cmpeq_epi8_mask(__u, __a, __b); } __mmask16 test_mm_cmpeq_epi8_mask(__m128i __a, __m128i __b) { - // CHECK-LABEL: @test_mm_cmpeq_epi8_mask + // CHECK-LABEL: test_mm_cmpeq_epi8_mask // CHECK: icmp eq <16 x i8> %{{.*}}, %{{.*}} return (__mmask16)_mm_cmpeq_epi8_mask(__a, __b); } __mmask16 test_mm_mask_cmpeq_epi8_mask(__mmask16 __u, __m128i __a, __m128i __b) { - // CHECK-LABEL: @test_mm_mask_cmpeq_epi8_mask + // CHECK-LABEL: test_mm_mask_cmpeq_epi8_mask // CHECK: icmp eq <16 x i8> %{{.*}}, %{{.*}} // CHECK: and <16 x i1> %{{.*}}, %{{.*}} return (__mmask16)_mm_mask_cmpeq_epi8_mask(__u, __a, __b); } __mmask16 test_mm256_cmpeq_epi16_mask(__m256i __a, __m256i __b) { - // CHECK-LABEL: @test_mm256_cmpeq_epi16_mask + // CHECK-LABEL: test_mm256_cmpeq_epi16_mask // CHECK: icmp eq <16 x i16> %{{.*}}, %{{.*}} return (__mmask16)_mm256_cmpeq_epi16_mask(__a, __b); } __mmask16 test_mm256_mask_cmpeq_epi16_mask(__mmask16 __u, __m256i __a, __m256i __b) { - // CHECK-LABEL: @test_mm256_mask_cmpeq_epi16_mask + // CHECK-LABEL: test_mm256_mask_cmpeq_epi16_mask // CHECK: icmp eq <16 x i16> %{{.*}}, %{{.*}} // CHECK: and <16 x i1> %{{.*}}, %{{.*}} return (__mmask16)_mm256_mask_cmpeq_epi16_mask(__u, __a, __b); } __mmask8 test_mm_cmpeq_epi16_mask(__m128i __a, __m128i __b) { - // CHECK-LABEL: @test_mm_cmpeq_epi16_mask + // CHECK-LABEL: test_mm_cmpeq_epi16_mask // CHECK: icmp eq <8 x i16> %{{.*}}, %{{.*}} return (__mmask8)_mm_cmpeq_epi16_mask(__a, __b); } __mmask8 test_mm_mask_cmpeq_epi16_mask(__mmask8 __u, __m128i __a, __m128i __b) { - // CHECK-LABEL: @test_mm_mask_cmpeq_epi16_mask + // CHECK-LABEL: test_mm_mask_cmpeq_epi16_mask // CHECK: icmp eq <8 x i16> %{{.*}}, %{{.*}} // CHECK: and <8 x i1> %{{.*}}, %{{.*}} return (__mmask8)_mm_mask_cmpeq_epi16_mask(__u, __a, __b); } __mmask32 test_mm256_cmpgt_epi8_mask(__m256i __a, __m256i __b) { - // CHECK-LABEL: @test_mm256_cmpgt_epi8_mask + // CHECK-LABEL: test_mm256_cmpgt_epi8_mask // CHECK: icmp sgt <32 x i8> %{{.*}}, %{{.*}} return (__mmask32)_mm256_cmpgt_epi8_mask(__a, __b); } __mmask32 test_mm256_mask_cmpgt_epi8_mask(__mmask32 __u, __m256i __a, __m256i __b) { - // CHECK-LABEL: @test_mm256_mask_cmpgt_epi8_mask + // CHECK-LABEL: test_mm256_mask_cmpgt_epi8_mask // CHECK: icmp sgt <32 x i8> %{{.*}}, %{{.*}} // CHECK: and <32 x i1> %{{.*}}, %{{.*}} return (__mmask32)_mm256_mask_cmpgt_epi8_mask(__u, __a, __b); } __mmask16 test_mm_cmpgt_epi8_mask(__m128i __a, __m128i __b) { - // CHECK-LABEL: @test_mm_cmpgt_epi8_mask + // CHECK-LABEL: test_mm_cmpgt_epi8_mask // CHECK: icmp sgt <16 x i8> %{{.*}}, %{{.*}} return (__mmask16)_mm_cmpgt_epi8_mask(__a, __b); } __mmask16 test_mm_mask_cmpgt_epi8_mask(__mmask16 __u, __m128i __a, __m128i __b) { - // CHECK-LABEL: @test_mm_mask_cmpgt_epi8_mask + // CHECK-LABEL: test_mm_mask_cmpgt_epi8_mask // CHECK: icmp sgt <16 x i8> %{{.*}}, %{{.*}} // CHECK: and <16 x i1> %{{.*}}, %{{.*}} return (__mmask16)_mm_mask_cmpgt_epi8_mask(__u, __a, __b); } __mmask16 test_mm256_cmpgt_epi16_mask(__m256i __a, __m256i __b) { - // CHECK-LABEL: @test_mm256_cmpgt_epi16_mask + // CHECK-LABEL: test_mm256_cmpgt_epi16_mask // CHECK: icmp sgt <16 x i16> %{{.*}}, %{{.*}} return (__mmask16)_mm256_cmpgt_epi16_mask(__a, __b); } __mmask16 test_mm256_mask_cmpgt_epi16_mask(__mmask16 __u, __m256i __a, __m256i __b) { - // CHECK-LABEL: @test_mm256_mask_cmpgt_epi16_mask + // CHECK-LABEL: test_mm256_mask_cmpgt_epi16_mask // CHECK: icmp sgt <16 x i16> %{{.*}}, %{{.*}} // CHECK: and <16 x i1> %{{.*}}, %{{.*}} return (__mmask16)_mm256_mask_cmpgt_epi16_mask(__u, __a, __b); } __mmask8 test_mm_cmpgt_epi16_mask(__m128i __a, __m128i __b) { - // CHECK-LABEL: @test_mm_cmpgt_epi16_mask + // CHECK-LABEL: test_mm_cmpgt_epi16_mask // CHECK: icmp sgt <8 x i16> %{{.*}}, %{{.*}} return (__mmask8)_mm_cmpgt_epi16_mask(__a, __b); } __mmask8 test_mm_mask_cmpgt_epi16_mask(__mmask8 __u, __m128i __a, __m128i __b) { - // CHECK-LABEL: @test_mm_mask_cmpgt_epi16_mask + // CHECK-LABEL: test_mm_mask_cmpgt_epi16_mask // CHECK: icmp sgt <8 x i16> %{{.*}}, %{{.*}} // CHECK: and <8 x i1> %{{.*}}, %{{.*}} return (__mmask8)_mm_mask_cmpgt_epi16_mask(__u, __a, __b); } __mmask16 test_mm_cmpeq_epu8_mask(__m128i __a, __m128i __b) { - // CHECK-LABEL: @test_mm_cmpeq_epu8_mask + // CHECK-LABEL: test_mm_cmpeq_epu8_mask // CHECK: icmp eq <16 x i8> %{{.*}}, %{{.*}} return (__mmask16)_mm_cmpeq_epu8_mask(__a, __b); } __mmask16 test_mm_mask_cmpeq_epu8_mask(__mmask16 __u, __m128i __a, __m128i __b) { - // CHECK-LABEL: @test_mm_mask_cmpeq_epu8_mask + // CHECK-LABEL: test_mm_mask_cmpeq_epu8_mask // CHECK: icmp eq <16 x i8> %{{.*}}, %{{.*}} // CHECK: and <16 x i1> %{{.*}}, %{{.*}} return (__mmask16)_mm_mask_cmpeq_epu8_mask(__u, __a, __b); } __mmask8 test_mm_cmpeq_epu16_mask(__m128i __a, __m128i __b) { - // CHECK-LABEL: @test_mm_cmpeq_epu16_mask + // CHECK-LABEL: test_mm_cmpeq_epu16_mask // CHECK: icmp eq <8 x i16> %{{.*}}, %{{.*}} return (__mmask8)_mm_cmpeq_epu16_mask(__a, __b); } __mmask8 test_mm_mask_cmpeq_epu16_mask(__mmask8 __u, __m128i __a, __m128i __b) { - // CHECK-LABEL: @test_mm_mask_cmpeq_epu16_mask + // CHECK-LABEL: test_mm_mask_cmpeq_epu16_mask // CHECK: icmp eq <8 x i16> %{{.*}}, %{{.*}} // CHECK: and <8 x i1> %{{.*}}, %{{.*}} return (__mmask8)_mm_mask_cmpeq_epu16_mask(__u, __a, __b); } __mmask32 test_mm256_cmpeq_epu8_mask(__m256i __a, __m256i __b) { - // CHECK-LABEL: @test_mm256_cmpeq_epu8_mask + // CHECK-LABEL: test_mm256_cmpeq_epu8_mask // CHECK: icmp eq <32 x i8> %{{.*}}, %{{.*}} return (__mmask32)_mm256_cmpeq_epu8_mask(__a, __b); } __mmask32 test_mm256_mask_cmpeq_epu8_mask(__mmask32 __u, __m256i __a, __m256i __b) { - // CHECK-LABEL: @test_mm256_mask_cmpeq_epu8_mask + // CHECK-LABEL: test_mm256_mask_cmpeq_epu8_mask // CHECK: icmp eq <32 x i8> %{{.*}}, %{{.*}} // CHECK: and <32 x i1> %{{.*}}, %{{.*}} return (__mmask32)_mm256_mask_cmpeq_epu8_mask(__u, __a, __b); } __mmask16 test_mm256_cmpeq_epu16_mask(__m256i __a, __m256i __b) { - // CHECK-LABEL: @test_mm256_cmpeq_epu16_mask + // CHECK-LABEL: test_mm256_cmpeq_epu16_mask // CHECK: icmp eq <16 x i16> %{{.*}}, %{{.*}} return (__mmask16)_mm256_cmpeq_epu16_mask(__a, __b); } __mmask16 test_mm256_mask_cmpeq_epu16_mask(__mmask16 __u, __m256i __a, __m256i __b) { - // CHECK-LABEL: @test_mm256_mask_cmpeq_epu16_mask + // CHECK-LABEL: test_mm256_mask_cmpeq_epu16_mask // CHECK: icmp eq <16 x i16> %{{.*}}, %{{.*}} // CHECK: and <16 x i1> %{{.*}}, %{{.*}} return (__mmask16)_mm256_mask_cmpeq_epu16_mask(__u, __a, __b); } __mmask16 test_mm_cmpgt_epu8_mask(__m128i __a, __m128i __b) { - // CHECK-LABEL: @test_mm_cmpgt_epu8_mask + // CHECK-LABEL: test_mm_cmpgt_epu8_mask // CHECK: icmp ugt <16 x i8> %{{.*}}, %{{.*}} return (__mmask16)_mm_cmpgt_epu8_mask(__a, __b); } __mmask16 test_mm_mask_cmpgt_epu8_mask(__mmask16 __u, __m128i __a, __m128i __b) { - // CHECK-LABEL: @test_mm_mask_cmpgt_epu8_mask + // CHECK-LABEL: test_mm_mask_cmpgt_epu8_mask // CHECK: icmp ugt <16 x i8> %{{.*}}, %{{.*}} // CHECK: and <16 x i1> %{{.*}}, %{{.*}} return (__mmask16)_mm_mask_cmpgt_epu8_mask(__u, __a, __b); } __mmask8 test_mm_cmpgt_epu16_mask(__m128i __a, __m128i __b) { - // CHECK-LABEL: @test_mm_cmpgt_epu16_mask + // CHECK-LABEL: test_mm_cmpgt_epu16_mask // CHECK: icmp ugt <8 x i16> %{{.*}}, %{{.*}} return (__mmask8)_mm_cmpgt_epu16_mask(__a, __b); } __mmask8 test_mm_mask_cmpgt_epu16_mask(__mmask8 __u, __m128i __a, __m128i __b) { - // CHECK-LABEL: @test_mm_mask_cmpgt_epu16_mask + // CHECK-LABEL: test_mm_mask_cmpgt_epu16_mask // CHECK: icmp ugt <8 x i16> %{{.*}}, %{{.*}} // CHECK: and <8 x i1> %{{.*}}, %{{.*}} return (__mmask8)_mm_mask_cmpgt_epu16_mask(__u, __a, __b); } __mmask32 test_mm256_cmpgt_epu8_mask(__m256i __a, __m256i __b) { - // CHECK-LABEL: @test_mm256_cmpgt_epu8_mask + // CHECK-LABEL: test_mm256_cmpgt_epu8_mask // CHECK: icmp ugt <32 x i8> %{{.*}}, %{{.*}} return (__mmask32)_mm256_cmpgt_epu8_mask(__a, __b); } __mmask32 test_mm256_mask_cmpgt_epu8_mask(__mmask32 __u, __m256i __a, __m256i __b) { - // CHECK-LABEL: @test_mm256_mask_cmpgt_epu8_mask + // CHECK-LABEL: test_mm256_mask_cmpgt_epu8_mask // CHECK: icmp ugt <32 x i8> %{{.*}}, %{{.*}} // CHECK: and <32 x i1> %{{.*}}, %{{.*}} return (__mmask32)_mm256_mask_cmpgt_epu8_mask(__u, __a, __b); } __mmask16 test_mm256_cmpgt_epu16_mask(__m256i __a, __m256i __b) { - // CHECK-LABEL: @test_mm256_cmpgt_epu16_mask + // CHECK-LABEL: test_mm256_cmpgt_epu16_mask // CHECK: icmp ugt <16 x i16> %{{.*}}, %{{.*}} return (__mmask16)_mm256_cmpgt_epu16_mask(__a, __b); } __mmask16 test_mm256_mask_cmpgt_epu16_mask(__mmask16 __u, __m256i __a, __m256i __b) { - // CHECK-LABEL: @test_mm256_mask_cmpgt_epu16_mask + // CHECK-LABEL: test_mm256_mask_cmpgt_epu16_mask // CHECK: icmp ugt <16 x i16> %{{.*}}, %{{.*}} // CHECK: and <16 x i1> %{{.*}}, %{{.*}} return (__mmask16)_mm256_mask_cmpgt_epu16_mask(__u, __a, __b); } __mmask16 test_mm_cmpge_epi8_mask(__m128i __a, __m128i __b) { - // CHECK-LABEL: @test_mm_cmpge_epi8_mask + // CHECK-LABEL: test_mm_cmpge_epi8_mask // CHECK: icmp sge <16 x i8> %{{.*}}, %{{.*}} return (__mmask16)_mm_cmpge_epi8_mask(__a, __b); } __mmask16 test_mm_mask_cmpge_epi8_mask(__mmask16 __u, __m128i __a, __m128i __b) { - // CHECK-LABEL: @test_mm_mask_cmpge_epi8_mask + // CHECK-LABEL: test_mm_mask_cmpge_epi8_mask // CHECK: icmp sge <16 x i8> %{{.*}}, %{{.*}} // CHECK: and <16 x i1> %{{.*}}, %{{.*}} return (__mmask16)_mm_mask_cmpge_epi8_mask(__u, __a, __b); } __mmask16 test_mm_cmpge_epu8_mask(__m128i __a, __m128i __b) { - // CHECK-LABEL: @test_mm_cmpge_epu8_mask + // CHECK-LABEL: test_mm_cmpge_epu8_mask // CHECK: icmp uge <16 x i8> %{{.*}}, %{{.*}} return (__mmask16)_mm_cmpge_epu8_mask(__a, __b); } __mmask16 test_mm_mask_cmpge_epu8_mask(__mmask16 __u, __m128i __a, __m128i __b) { - // CHECK-LABEL: @test_mm_mask_cmpge_epu8_mask + // CHECK-LABEL: test_mm_mask_cmpge_epu8_mask // CHECK: icmp uge <16 x i8> %{{.*}}, %{{.*}} // CHECK: and <16 x i1> %{{.*}}, %{{.*}} return (__mmask16)_mm_mask_cmpge_epu8_mask(__u, __a, __b); } __mmask8 test_mm_cmpge_epi16_mask(__m128i __a, __m128i __b) { - // CHECK-LABEL: @test_mm_cmpge_epi16_mask + // CHECK-LABEL: test_mm_cmpge_epi16_mask // CHECK: icmp sge <8 x i16> %{{.*}}, %{{.*}} return (__mmask8)_mm_cmpge_epi16_mask(__a, __b); } __mmask8 test_mm_mask_cmpge_epi16_mask(__mmask8 __u, __m128i __a, __m128i __b) { - // CHECK-LABEL: @test_mm_mask_cmpge_epi16_mask + // CHECK-LABEL: test_mm_mask_cmpge_epi16_mask // CHECK: icmp sge <8 x i16> %{{.*}}, %{{.*}} // CHECK: and <8 x i1> %{{.*}}, %{{.*}} return (__mmask8)_mm_mask_cmpge_epi16_mask(__u, __a, __b); } __mmask8 test_mm_cmpge_epu16_mask(__m128i __a, __m128i __b) { - // CHECK-LABEL: @test_mm_cmpge_epu16_mask + // CHECK-LABEL: test_mm_cmpge_epu16_mask // CHECK: icmp uge <8 x i16> %{{.*}}, %{{.*}} return (__mmask8)_mm_cmpge_epu16_mask(__a, __b); } __mmask8 test_mm_mask_cmpge_epu16_mask(__mmask8 __u, __m128i __a, __m128i __b) { - // CHECK-LABEL: @test_mm_mask_cmpge_epu16_mask + // CHECK-LABEL: test_mm_mask_cmpge_epu16_mask // CHECK: icmp uge <8 x i16> %{{.*}}, %{{.*}} // CHECK: and <8 x i1> %{{.*}}, %{{.*}} return (__mmask8)_mm_mask_cmpge_epu16_mask(__u, __a, __b); } __mmask32 test_mm256_cmpge_epi8_mask(__m256i __a, __m256i __b) { - // CHECK-LABEL: @test_mm256_cmpge_epi8_mask + // CHECK-LABEL: test_mm256_cmpge_epi8_mask // CHECK: icmp sge <32 x i8> %{{.*}}, %{{.*}} return (__mmask32)_mm256_cmpge_epi8_mask(__a, __b); } __mmask32 test_mm256_mask_cmpge_epi8_mask(__mmask32 __u, __m256i __a, __m256i __b) { - // CHECK-LABEL: @test_mm256_mask_cmpge_epi8_mask + // CHECK-LABEL: test_mm256_mask_cmpge_epi8_mask // CHECK: icmp sge <32 x i8> %{{.*}}, %{{.*}} // CHECK: and <32 x i1> %{{.*}}, %{{.*}} return (__mmask32)_mm256_mask_cmpge_epi8_mask(__u, __a, __b); } __mmask32 test_mm256_cmpge_epu8_mask(__m256i __a, __m256i __b) { - // CHECK-LABEL: @test_mm256_cmpge_epu8_mask + // CHECK-LABEL: test_mm256_cmpge_epu8_mask // CHECK: icmp uge <32 x i8> %{{.*}}, %{{.*}} return (__mmask32)_mm256_cmpge_epu8_mask(__a, __b); } __mmask32 test_mm256_mask_cmpge_epu8_mask(__mmask32 __u, __m256i __a, __m256i __b) { - // CHECK-LABEL: @test_mm256_mask_cmpge_epu8_mask + // CHECK-LABEL: test_mm256_mask_cmpge_epu8_mask // CHECK: icmp uge <32 x i8> %{{.*}}, %{{.*}} // CHECK: and <32 x i1> %{{.*}}, %{{.*}} return (__mmask32)_mm256_mask_cmpge_epu8_mask(__u, __a, __b); } __mmask16 test_mm256_cmpge_epi16_mask(__m256i __a, __m256i __b) { - // CHECK-LABEL: @test_mm256_cmpge_epi16_mask + // CHECK-LABEL: test_mm256_cmpge_epi16_mask // CHECK: icmp sge <16 x i16> %{{.*}}, %{{.*}} return (__mmask16)_mm256_cmpge_epi16_mask(__a, __b); } __mmask16 test_mm256_mask_cmpge_epi16_mask(__mmask16 __u, __m256i __a, __m256i __b) { - // CHECK-LABEL: @test_mm256_mask_cmpge_epi16_mask + // CHECK-LABEL: test_mm256_mask_cmpge_epi16_mask // CHECK: icmp sge <16 x i16> %{{.*}}, %{{.*}} // CHECK: and <16 x i1> %{{.*}}, %{{.*}} return (__mmask16)_mm256_mask_cmpge_epi16_mask(__u, __a, __b); } __mmask16 test_mm256_cmpge_epu16_mask(__m256i __a, __m256i __b) { - // CHECK-LABEL: @test_mm256_cmpge_epu16_mask + // CHECK-LABEL: test_mm256_cmpge_epu16_mask // CHECK: icmp uge <16 x i16> %{{.*}}, %{{.*}} return (__mmask16)_mm256_cmpge_epu16_mask(__a, __b); } __mmask16 test_mm256_mask_cmpge_epu16_mask(__mmask16 __u, __m256i __a, __m256i __b) { - // CHECK-LABEL: @test_mm256_mask_cmpge_epu16_mask + // CHECK-LABEL: test_mm256_mask_cmpge_epu16_mask // CHECK: icmp uge <16 x i16> %{{.*}}, %{{.*}} // CHECK: and <16 x i1> %{{.*}}, %{{.*}} return (__mmask16)_mm256_mask_cmpge_epu16_mask(__u, __a, __b); } __mmask16 test_mm_cmple_epi8_mask(__m128i __a, __m128i __b) { - // CHECK-LABEL: @test_mm_cmple_epi8_mask + // CHECK-LABEL: test_mm_cmple_epi8_mask // CHECK: icmp sle <16 x i8> %{{.*}}, %{{.*}} return (__mmask16)_mm_cmple_epi8_mask(__a, __b); } __mmask16 test_mm_mask_cmple_epi8_mask(__mmask16 __u, __m128i __a, __m128i __b) { - // CHECK-LABEL: @test_mm_mask_cmple_epi8_mask + // CHECK-LABEL: test_mm_mask_cmple_epi8_mask // CHECK: icmp sle <16 x i8> %{{.*}}, %{{.*}} // CHECK: and <16 x i1> %{{.*}}, %{{.*}} return (__mmask16)_mm_mask_cmple_epi8_mask(__u, __a, __b); } __mmask16 test_mm_cmple_epu8_mask(__m128i __a, __m128i __b) { - // CHECK-LABEL: @test_mm_cmple_epu8_mask + // CHECK-LABEL: test_mm_cmple_epu8_mask // CHECK: icmp ule <16 x i8> %{{.*}}, %{{.*}} return (__mmask16)_mm_cmple_epu8_mask(__a, __b); } __mmask16 test_mm_mask_cmple_epu8_mask(__mmask16 __u, __m128i __a, __m128i __b) { - // CHECK-LABEL: @test_mm_mask_cmple_epu8_mask + // CHECK-LABEL: test_mm_mask_cmple_epu8_mask // CHECK: icmp ule <16 x i8> %{{.*}}, %{{.*}} // CHECK: and <16 x i1> %{{.*}}, %{{.*}} return (__mmask16)_mm_mask_cmple_epu8_mask(__u, __a, __b); } __mmask8 test_mm_cmple_epi16_mask(__m128i __a, __m128i __b) { - // CHECK-LABEL: @test_mm_cmple_epi16_mask + // CHECK-LABEL: test_mm_cmple_epi16_mask // CHECK: icmp sle <8 x i16> %{{.*}}, %{{.*}} return (__mmask8)_mm_cmple_epi16_mask(__a, __b); } __mmask8 test_mm_mask_cmple_epi16_mask(__mmask8 __u, __m128i __a, __m128i __b) { - // CHECK-LABEL: @test_mm_mask_cmple_epi16_mask + // CHECK-LABEL: test_mm_mask_cmple_epi16_mask // CHECK: icmp sle <8 x i16> %{{.*}}, %{{.*}} // CHECK: and <8 x i1> %{{.*}}, %{{.*}} return (__mmask8)_mm_mask_cmple_epi16_mask(__u, __a, __b); } __mmask8 test_mm_cmple_epu16_mask(__m128i __a, __m128i __b) { - // CHECK-LABEL: @test_mm_cmple_epu16_mask + // CHECK-LABEL: test_mm_cmple_epu16_mask // CHECK: icmp ule <8 x i16> %{{.*}}, %{{.*}} return (__mmask8)_mm_cmple_epu16_mask(__a, __b); } __mmask8 test_mm_mask_cmple_epu16_mask(__mmask8 __u, __m128i __a, __m128i __b) { - // CHECK-LABEL: @test_mm_mask_cmple_epu16_mask + // CHECK-LABEL: test_mm_mask_cmple_epu16_mask // CHECK: icmp ule <8 x i16> %{{.*}}, %{{.*}} // CHECK: and <8 x i1> %{{.*}}, %{{.*}} return (__mmask8)_mm_mask_cmple_epu16_mask(__u, __a, __b); } __mmask32 test_mm256_cmple_epi8_mask(__m256i __a, __m256i __b) { - // CHECK-LABEL: @test_mm256_cmple_epi8_mask + // CHECK-LABEL: test_mm256_cmple_epi8_mask // CHECK: icmp sle <32 x i8> %{{.*}}, %{{.*}} return (__mmask32)_mm256_cmple_epi8_mask(__a, __b); } __mmask32 test_mm256_mask_cmple_epi8_mask(__mmask32 __u, __m256i __a, __m256i __b) { - // CHECK-LABEL: @test_mm256_mask_cmple_epi8_mask + // CHECK-LABEL: test_mm256_mask_cmple_epi8_mask // CHECK: icmp sle <32 x i8> %{{.*}}, %{{.*}} // CHECK: and <32 x i1> %{{.*}}, %{{.*}} return (__mmask32)_mm256_mask_cmple_epi8_mask(__u, __a, __b); } __mmask32 test_mm256_cmple_epu8_mask(__m256i __a, __m256i __b) { - // CHECK-LABEL: @test_mm256_cmple_epu8_mask + // CHECK-LABEL: test_mm256_cmple_epu8_mask // CHECK: icmp ule <32 x i8> %{{.*}}, %{{.*}} return (__mmask32)_mm256_cmple_epu8_mask(__a, __b); } __mmask32 test_mm256_mask_cmple_epu8_mask(__mmask32 __u, __m256i __a, __m256i __b) { - // CHECK-LABEL: @test_mm256_mask_cmple_epu8_mask + // CHECK-LABEL: test_mm256_mask_cmple_epu8_mask // CHECK: icmp ule <32 x i8> %{{.*}}, %{{.*}} // CHECK: and <32 x i1> %{{.*}}, %{{.*}} return (__mmask32)_mm256_mask_cmple_epu8_mask(__u, __a, __b); } __mmask16 test_mm256_cmple_epi16_mask(__m256i __a, __m256i __b) { - // CHECK-LABEL: @test_mm256_cmple_epi16_mask + // CHECK-LABEL: test_mm256_cmple_epi16_mask // CHECK: icmp sle <16 x i16> %{{.*}}, %{{.*}} return (__mmask16)_mm256_cmple_epi16_mask(__a, __b); } __mmask16 test_mm256_mask_cmple_epi16_mask(__mmask16 __u, __m256i __a, __m256i __b) { - // CHECK-LABEL: @test_mm256_mask_cmple_epi16_mask + // CHECK-LABEL: test_mm256_mask_cmple_epi16_mask // CHECK: icmp sle <16 x i16> %{{.*}}, %{{.*}} // CHECK: and <16 x i1> %{{.*}}, %{{.*}} return (__mmask16)_mm256_mask_cmple_epi16_mask(__u, __a, __b); } __mmask16 test_mm256_cmple_epu16_mask(__m256i __a, __m256i __b) { - // CHECK-LABEL: @test_mm256_cmple_epu16_mask + // CHECK-LABEL: test_mm256_cmple_epu16_mask // CHECK: icmp ule <16 x i16> %{{.*}}, %{{.*}} return (__mmask16)_mm256_cmple_epu16_mask(__a, __b); } __mmask16 test_mm256_mask_cmple_epu16_mask(__mmask16 __u, __m256i __a, __m256i __b) { - // CHECK-LABEL: @test_mm256_mask_cmple_epu16_mask + // CHECK-LABEL: test_mm256_mask_cmple_epu16_mask // CHECK: icmp ule <16 x i16> %{{.*}}, %{{.*}} // CHECK: and <16 x i1> %{{.*}}, %{{.*}} return (__mmask16)_mm256_mask_cmple_epu16_mask(__u, __a, __b); } __mmask16 test_mm_cmplt_epi8_mask(__m128i __a, __m128i __b) { - // CHECK-LABEL: @test_mm_cmplt_epi8_mask + // CHECK-LABEL: test_mm_cmplt_epi8_mask // CHECK: icmp slt <16 x i8> %{{.*}}, %{{.*}} return (__mmask16)_mm_cmplt_epi8_mask(__a, __b); } __mmask16 test_mm_mask_cmplt_epi8_mask(__mmask16 __u, __m128i __a, __m128i __b) { - // CHECK-LABEL: @test_mm_mask_cmplt_epi8_mask + // CHECK-LABEL: test_mm_mask_cmplt_epi8_mask // CHECK: icmp slt <16 x i8> %{{.*}}, %{{.*}} // CHECK: and <16 x i1> %{{.*}}, %{{.*}} return (__mmask16)_mm_mask_cmplt_epi8_mask(__u, __a, __b); } __mmask16 test_mm_cmplt_epu8_mask(__m128i __a, __m128i __b) { - // CHECK-LABEL: @test_mm_cmplt_epu8_mask + // CHECK-LABEL: test_mm_cmplt_epu8_mask // CHECK: icmp ult <16 x i8> %{{.*}}, %{{.*}} return (__mmask16)_mm_cmplt_epu8_mask(__a, __b); } __mmask16 test_mm_mask_cmplt_epu8_mask(__mmask16 __u, __m128i __a, __m128i __b) { - // CHECK-LABEL: @test_mm_mask_cmplt_epu8_mask + // CHECK-LABEL: test_mm_mask_cmplt_epu8_mask // CHECK: icmp ult <16 x i8> %{{.*}}, %{{.*}} // CHECK: and <16 x i1> %{{.*}}, %{{.*}} return (__mmask16)_mm_mask_cmplt_epu8_mask(__u, __a, __b); } __mmask8 test_mm_cmplt_epi16_mask(__m128i __a, __m128i __b) { - // CHECK-LABEL: @test_mm_cmplt_epi16_mask + // CHECK-LABEL: test_mm_cmplt_epi16_mask // CHECK: icmp slt <8 x i16> %{{.*}}, %{{.*}} return (__mmask8)_mm_cmplt_epi16_mask(__a, __b); } __mmask8 test_mm_mask_cmplt_epi16_mask(__mmask8 __u, __m128i __a, __m128i __b) { - // CHECK-LABEL: @test_mm_mask_cmplt_epi16_mask + // CHECK-LABEL: test_mm_mask_cmplt_epi16_mask // CHECK: icmp slt <8 x i16> %{{.*}}, %{{.*}} // CHECK: and <8 x i1> %{{.*}}, %{{.*}} return (__mmask8)_mm_mask_cmplt_epi16_mask(__u, __a, __b); } __mmask8 test_mm_cmplt_epu16_mask(__m128i __a, __m128i __b) { - // CHECK-LABEL: @test_mm_cmplt_epu16_mask + // CHECK-LABEL: test_mm_cmplt_epu16_mask // CHECK: icmp ult <8 x i16> %{{.*}}, %{{.*}} return (__mmask8)_mm_cmplt_epu16_mask(__a, __b); } __mmask8 test_mm_mask_cmplt_epu16_mask(__mmask8 __u, __m128i __a, __m128i __b) { - // CHECK-LABEL: @test_mm_mask_cmplt_epu16_mask + // CHECK-LABEL: test_mm_mask_cmplt_epu16_mask // CHECK: icmp ult <8 x i16> %{{.*}}, %{{.*}} // CHECK: and <8 x i1> %{{.*}}, %{{.*}} return (__mmask8)_mm_mask_cmplt_epu16_mask(__u, __a, __b); } __mmask32 test_mm256_cmplt_epi8_mask(__m256i __a, __m256i __b) { - // CHECK-LABEL: @test_mm256_cmplt_epi8_mask + // CHECK-LABEL: test_mm256_cmplt_epi8_mask // CHECK: icmp slt <32 x i8> %{{.*}}, %{{.*}} return (__mmask32)_mm256_cmplt_epi8_mask(__a, __b); } __mmask32 test_mm256_mask_cmplt_epi8_mask(__mmask32 __u, __m256i __a, __m256i __b) { - // CHECK-LABEL: @test_mm256_mask_cmplt_epi8_mask + // CHECK-LABEL: test_mm256_mask_cmplt_epi8_mask // CHECK: icmp slt <32 x i8> %{{.*}}, %{{.*}} // CHECK: and <32 x i1> %{{.*}}, %{{.*}} return (__mmask32)_mm256_mask_cmplt_epi8_mask(__u, __a, __b); } __mmask32 test_mm256_cmplt_epu8_mask(__m256i __a, __m256i __b) { - // CHECK-LABEL: @test_mm256_cmplt_epu8_mask + // CHECK-LABEL: test_mm256_cmplt_epu8_mask // CHECK: icmp ult <32 x i8> %{{.*}}, %{{.*}} return (__mmask32)_mm256_cmplt_epu8_mask(__a, __b); } __mmask32 test_mm256_mask_cmplt_epu8_mask(__mmask32 __u, __m256i __a, __m256i __b) { - // CHECK-LABEL: @test_mm256_mask_cmplt_epu8_mask + // CHECK-LABEL: test_mm256_mask_cmplt_epu8_mask // CHECK: icmp ult <32 x i8> %{{.*}}, %{{.*}} // CHECK: and <32 x i1> %{{.*}}, %{{.*}} return (__mmask32)_mm256_mask_cmplt_epu8_mask(__u, __a, __b); } __mmask16 test_mm256_cmplt_epi16_mask(__m256i __a, __m256i __b) { - // CHECK-LABEL: @test_mm256_cmplt_epi16_mask + // CHECK-LABEL: test_mm256_cmplt_epi16_mask // CHECK: icmp slt <16 x i16> %{{.*}}, %{{.*}} return (__mmask16)_mm256_cmplt_epi16_mask(__a, __b); } __mmask16 test_mm256_mask_cmplt_epi16_mask(__mmask16 __u, __m256i __a, __m256i __b) { - // CHECK-LABEL: @test_mm256_mask_cmplt_epi16_mask + // CHECK-LABEL: test_mm256_mask_cmplt_epi16_mask // CHECK: icmp slt <16 x i16> %{{.*}}, %{{.*}} // CHECK: and <16 x i1> %{{.*}}, %{{.*}} return (__mmask16)_mm256_mask_cmplt_epi16_mask(__u, __a, __b); } __mmask16 test_mm256_cmplt_epu16_mask(__m256i __a, __m256i __b) { - // CHECK-LABEL: @test_mm256_cmplt_epu16_mask + // CHECK-LABEL: test_mm256_cmplt_epu16_mask // CHECK: icmp ult <16 x i16> %{{.*}}, %{{.*}} return (__mmask16)_mm256_cmplt_epu16_mask(__a, __b); } __mmask16 test_mm256_mask_cmplt_epu16_mask(__mmask16 __u, __m256i __a, __m256i __b) { - // CHECK-LABEL: @test_mm256_mask_cmplt_epu16_mask + // CHECK-LABEL: test_mm256_mask_cmplt_epu16_mask // CHECK: icmp ult <16 x i16> %{{.*}}, %{{.*}} // CHECK: and <16 x i1> %{{.*}}, %{{.*}} return (__mmask16)_mm256_mask_cmplt_epu16_mask(__u, __a, __b); } __mmask16 test_mm_cmpneq_epi8_mask(__m128i __a, __m128i __b) { - // CHECK-LABEL: @test_mm_cmpneq_epi8_mask + // CHECK-LABEL: test_mm_cmpneq_epi8_mask // CHECK: icmp ne <16 x i8> %{{.*}}, %{{.*}} return (__mmask16)_mm_cmpneq_epi8_mask(__a, __b); } __mmask16 test_mm_mask_cmpneq_epi8_mask(__mmask16 __u, __m128i __a, __m128i __b) { - // CHECK-LABEL: @test_mm_mask_cmpneq_epi8_mask + // CHECK-LABEL: test_mm_mask_cmpneq_epi8_mask // CHECK: icmp ne <16 x i8> %{{.*}}, %{{.*}} // CHECK: and <16 x i1> %{{.*}}, %{{.*}} return (__mmask16)_mm_mask_cmpneq_epi8_mask(__u, __a, __b); } __mmask16 test_mm_cmpneq_epu8_mask(__m128i __a, __m128i __b) { - // CHECK-LABEL: @test_mm_cmpneq_epu8_mask + // CHECK-LABEL: test_mm_cmpneq_epu8_mask // CHECK: icmp ne <16 x i8> %{{.*}}, %{{.*}} return (__mmask16)_mm_cmpneq_epu8_mask(__a, __b); } __mmask16 test_mm_mask_cmpneq_epu8_mask(__mmask16 __u, __m128i __a, __m128i __b) { - // CHECK-LABEL: @test_mm_mask_cmpneq_epu8_mask + // CHECK-LABEL: test_mm_mask_cmpneq_epu8_mask // CHECK: icmp ne <16 x i8> %{{.*}}, %{{.*}} // CHECK: and <16 x i1> %{{.*}}, %{{.*}} return (__mmask16)_mm_mask_cmpneq_epu8_mask(__u, __a, __b); } __mmask8 test_mm_cmpneq_epi16_mask(__m128i __a, __m128i __b) { - // CHECK-LABEL: @test_mm_cmpneq_epi16_mask + // CHECK-LABEL: test_mm_cmpneq_epi16_mask // CHECK: icmp ne <8 x i16> %{{.*}}, %{{.*}} return (__mmask8)_mm_cmpneq_epi16_mask(__a, __b); } __mmask8 test_mm_mask_cmpneq_epi16_mask(__mmask8 __u, __m128i __a, __m128i __b) { - // CHECK-LABEL: @test_mm_mask_cmpneq_epi16_mask + // CHECK-LABEL: test_mm_mask_cmpneq_epi16_mask // CHECK: icmp ne <8 x i16> %{{.*}}, %{{.*}} // CHECK: and <8 x i1> %{{.*}}, %{{.*}} return (__mmask8)_mm_mask_cmpneq_epi16_mask(__u, __a, __b); } __mmask8 test_mm_cmpneq_epu16_mask(__m128i __a, __m128i __b) { - // CHECK-LABEL: @test_mm_cmpneq_epu16_mask + // CHECK-LABEL: test_mm_cmpneq_epu16_mask // CHECK: icmp ne <8 x i16> %{{.*}}, %{{.*}} return (__mmask8)_mm_cmpneq_epu16_mask(__a, __b); } __mmask8 test_mm_mask_cmpneq_epu16_mask(__mmask8 __u, __m128i __a, __m128i __b) { - // CHECK-LABEL: @test_mm_mask_cmpneq_epu16_mask + // CHECK-LABEL: test_mm_mask_cmpneq_epu16_mask // CHECK: icmp ne <8 x i16> %{{.*}}, %{{.*}} // CHECK: and <8 x i1> %{{.*}}, %{{.*}} return (__mmask8)_mm_mask_cmpneq_epu16_mask(__u, __a, __b); } __mmask32 test_mm256_cmpneq_epi8_mask(__m256i __a, __m256i __b) { - // CHECK-LABEL: @test_mm256_cmpneq_epi8_mask + // CHECK-LABEL: test_mm256_cmpneq_epi8_mask // CHECK: icmp ne <32 x i8> %{{.*}}, %{{.*}} return (__mmask32)_mm256_cmpneq_epi8_mask(__a, __b); } __mmask32 test_mm256_mask_cmpneq_epi8_mask(__mmask32 __u, __m256i __a, __m256i __b) { - // CHECK-LABEL: @test_mm256_mask_cmpneq_epi8_mask + // CHECK-LABEL: test_mm256_mask_cmpneq_epi8_mask // CHECK: icmp ne <32 x i8> %{{.*}}, %{{.*}} // CHECK: and <32 x i1> %{{.*}}, %{{.*}} return (__mmask32)_mm256_mask_cmpneq_epi8_mask(__u, __a, __b); } __mmask32 test_mm256_cmpneq_epu8_mask(__m256i __a, __m256i __b) { - // CHECK-LABEL: @test_mm256_cmpneq_epu8_mask + // CHECK-LABEL: test_mm256_cmpneq_epu8_mask // CHECK: icmp ne <32 x i8> %{{.*}}, %{{.*}} return (__mmask32)_mm256_cmpneq_epu8_mask(__a, __b); } __mmask32 test_mm256_mask_cmpneq_epu8_mask(__mmask32 __u, __m256i __a, __m256i __b) { - // CHECK-LABEL: @test_mm256_mask_cmpneq_epu8_mask + // CHECK-LABEL: test_mm256_mask_cmpneq_epu8_mask // CHECK: icmp ne <32 x i8> %{{.*}}, %{{.*}} // CHECK: and <32 x i1> %{{.*}}, %{{.*}} return (__mmask32)_mm256_mask_cmpneq_epu8_mask(__u, __a, __b); } __mmask16 test_mm256_cmpneq_epi16_mask(__m256i __a, __m256i __b) { - // CHECK-LABEL: @test_mm256_cmpneq_epi16_mask + // CHECK-LABEL: test_mm256_cmpneq_epi16_mask // CHECK: icmp ne <16 x i16> %{{.*}}, %{{.*}} return (__mmask16)_mm256_cmpneq_epi16_mask(__a, __b); } __mmask16 test_mm256_mask_cmpneq_epi16_mask(__mmask16 __u, __m256i __a, __m256i __b) { - // CHECK-LABEL: @test_mm256_mask_cmpneq_epi16_mask + // CHECK-LABEL: test_mm256_mask_cmpneq_epi16_mask // CHECK: icmp ne <16 x i16> %{{.*}}, %{{.*}} // CHECK: and <16 x i1> %{{.*}}, %{{.*}} return (__mmask16)_mm256_mask_cmpneq_epi16_mask(__u, __a, __b); } __mmask16 test_mm256_cmpneq_epu16_mask(__m256i __a, __m256i __b) { - // CHECK-LABEL: @test_mm256_cmpneq_epu16_mask + // CHECK-LABEL: test_mm256_cmpneq_epu16_mask // CHECK: icmp ne <16 x i16> %{{.*}}, %{{.*}} return (__mmask16)_mm256_cmpneq_epu16_mask(__a, __b); } __mmask16 test_mm256_mask_cmpneq_epu16_mask(__mmask16 __u, __m256i __a, __m256i __b) { - // CHECK-LABEL: @test_mm256_mask_cmpneq_epu16_mask + // CHECK-LABEL: test_mm256_mask_cmpneq_epu16_mask // CHECK: icmp ne <16 x i16> %{{.*}}, %{{.*}} // CHECK: and <16 x i1> %{{.*}}, %{{.*}} return (__mmask16)_mm256_mask_cmpneq_epu16_mask(__u, __a, __b); } __mmask16 test_mm_cmp_epi8_mask(__m128i __a, __m128i __b) { - // CHECK-LABEL: @test_mm_cmp_epi8_mask + // CHECK-LABEL: test_mm_cmp_epi8_mask // CHECK: icmp eq <16 x i8> %{{.*}}, %{{.*}} return (__mmask16)_mm_cmp_epi8_mask(__a, __b, 0); } __mmask16 test_mm_mask_cmp_epi8_mask(__mmask16 __u, __m128i __a, __m128i __b) { - // CHECK-LABEL: @test_mm_mask_cmp_epi8_mask + // CHECK-LABEL: test_mm_mask_cmp_epi8_mask // CHECK: icmp eq <16 x i8> %{{.*}}, %{{.*}} // CHECK: and <16 x i1> %{{.*}}, %{{.*}} return (__mmask16)_mm_mask_cmp_epi8_mask(__u, __a, __b, 0); } __mmask16 test_mm_cmp_epu8_mask(__m128i __a, __m128i __b) { - // CHECK-LABEL: @test_mm_cmp_epu8_mask + // CHECK-LABEL: test_mm_cmp_epu8_mask // CHECK: icmp eq <16 x i8> %{{.*}}, %{{.*}} return (__mmask16)_mm_cmp_epu8_mask(__a, __b, 0); } __mmask16 test_mm_mask_cmp_epu8_mask(__mmask16 __u, __m128i __a, __m128i __b) { - // CHECK-LABEL: @test_mm_mask_cmp_epu8_mask + // CHECK-LABEL: test_mm_mask_cmp_epu8_mask // CHECK: icmp eq <16 x i8> %{{.*}}, %{{.*}} // CHECK: and <16 x i1> %{{.*}}, %{{.*}} return (__mmask16)_mm_mask_cmp_epu8_mask(__u, __a, __b, 0); } __mmask8 test_mm_cmp_epi16_mask(__m128i __a, __m128i __b) { - // CHECK-LABEL: @test_mm_cmp_epi16_mask + // CHECK-LABEL: test_mm_cmp_epi16_mask // CHECK: icmp eq <8 x i16> %{{.*}}, %{{.*}} return (__mmask8)_mm_cmp_epi16_mask(__a, __b, 0); } __mmask8 test_mm_mask_cmp_epi16_mask(__mmask8 __u, __m128i __a, __m128i __b) { - // CHECK-LABEL: @test_mm_mask_cmp_epi16_mask + // CHECK-LABEL: test_mm_mask_cmp_epi16_mask // CHECK: icmp eq <8 x i16> %{{.*}}, %{{.*}} // CHECK: and <8 x i1> %{{.*}}, %{{.*}} return (__mmask8)_mm_mask_cmp_epi16_mask(__u, __a, __b, 0); } __mmask8 test_mm_cmp_epu16_mask(__m128i __a, __m128i __b) { - // CHECK-LABEL: @test_mm_cmp_epu16_mask + // CHECK-LABEL: test_mm_cmp_epu16_mask // CHECK: icmp eq <8 x i16> %{{.*}}, %{{.*}} return (__mmask8)_mm_cmp_epu16_mask(__a, __b, 0); } __mmask8 test_mm_mask_cmp_epu16_mask(__mmask8 __u, __m128i __a, __m128i __b) { - // CHECK-LABEL: @test_mm_mask_cmp_epu16_mask + // CHECK-LABEL: test_mm_mask_cmp_epu16_mask // CHECK: icmp eq <8 x i16> %{{.*}}, %{{.*}} // CHECK: and <8 x i1> %{{.*}}, %{{.*}} return (__mmask8)_mm_mask_cmp_epu16_mask(__u, __a, __b, 0); } __mmask32 test_mm256_cmp_epi8_mask(__m256i __a, __m256i __b) { - // CHECK-LABEL: @test_mm256_cmp_epi8_mask + // CHECK-LABEL: test_mm256_cmp_epi8_mask // CHECK: icmp eq <32 x i8> %{{.*}}, %{{.*}} return (__mmask32)_mm256_cmp_epi8_mask(__a, __b, 0); } __mmask32 test_mm256_mask_cmp_epi8_mask(__mmask32 __u, __m256i __a, __m256i __b) { - // CHECK-LABEL: @test_mm256_mask_cmp_epi8_mask + // CHECK-LABEL: test_mm256_mask_cmp_epi8_mask // CHECK: icmp eq <32 x i8> %{{.*}}, %{{.*}} // CHECK: and <32 x i1> %{{.*}}, %{{.*}} return (__mmask32)_mm256_mask_cmp_epi8_mask(__u, __a, __b, 0); } __mmask32 test_mm256_cmp_epu8_mask(__m256i __a, __m256i __b) { - // CHECK-LABEL: @test_mm256_cmp_epu8_mask + // CHECK-LABEL: test_mm256_cmp_epu8_mask // CHECK: icmp eq <32 x i8> %{{.*}}, %{{.*}} return (__mmask32)_mm256_cmp_epu8_mask(__a, __b, 0); } __mmask32 test_mm256_mask_cmp_epu8_mask(__mmask32 __u, __m256i __a, __m256i __b) { - // CHECK-LABEL: @test_mm256_mask_cmp_epu8_mask + // CHECK-LABEL: test_mm256_mask_cmp_epu8_mask // CHECK: icmp eq <32 x i8> %{{.*}}, %{{.*}} // CHECK: and <32 x i1> %{{.*}}, %{{.*}} return (__mmask32)_mm256_mask_cmp_epu8_mask(__u, __a, __b, 0); } __mmask16 test_mm256_cmp_epi16_mask(__m256i __a, __m256i __b) { - // CHECK-LABEL: @test_mm256_cmp_epi16_mask + // CHECK-LABEL: test_mm256_cmp_epi16_mask // CHECK: icmp eq <16 x i16> %{{.*}}, %{{.*}} return (__mmask16)_mm256_cmp_epi16_mask(__a, __b, 0); } __mmask16 test_mm256_mask_cmp_epi16_mask(__mmask16 __u, __m256i __a, __m256i __b) { - // CHECK-LABEL: @test_mm256_mask_cmp_epi16_mask + // CHECK-LABEL: test_mm256_mask_cmp_epi16_mask // CHECK: icmp eq <16 x i16> %{{.*}}, %{{.*}} // CHECK: and <16 x i1> %{{.*}}, %{{.*}} return (__mmask16)_mm256_mask_cmp_epi16_mask(__u, __a, __b, 0); } __mmask16 test_mm256_cmp_epu16_mask(__m256i __a, __m256i __b) { - // CHECK-LABEL: @test_mm256_cmp_epu16_mask + // CHECK-LABEL: test_mm256_cmp_epu16_mask // CHECK: icmp eq <16 x i16> %{{.*}}, %{{.*}} return (__mmask16)_mm256_cmp_epu16_mask(__a, __b, 0); } __mmask16 test_mm256_mask_cmp_epu16_mask(__mmask16 __u, __m256i __a, __m256i __b) { - // CHECK-LABEL: @test_mm256_mask_cmp_epu16_mask + // CHECK-LABEL: test_mm256_mask_cmp_epu16_mask // CHECK: icmp eq <16 x i16> %{{.*}}, %{{.*}} // CHECK: and <16 x i1> %{{.*}}, %{{.*}} return (__mmask16)_mm256_mask_cmp_epu16_mask(__u, __a, __b, 0); @@ -734,499 +745,511 @@ __mmask16 test_mm256_mask_cmp_epu16_mask(__mmask16 __u, __m256i __a, __m256i __b __m256i test_mm256_mask_add_epi8 (__m256i __W, __mmask32 __U, __m256i __A, __m256i __B){ - //CHECK-LABEL: @test_mm256_mask_add_epi8 + //CHECK-LABEL: test_mm256_mask_add_epi8 //CHECK: add <32 x i8> %{{.*}}, %{{.*}} //CHECK: select <32 x i1> %{{.*}}, <32 x i8> %{{.*}}, <32 x i8> %{{.*}} return _mm256_mask_add_epi8(__W, __U , __A, __B); } __m256i test_mm256_maskz_add_epi8 (__mmask32 __U, __m256i __A, __m256i __B) { - //CHECK-LABEL: @test_mm256_maskz_add_epi8 + //CHECK-LABEL: test_mm256_maskz_add_epi8 //CHECK: add <32 x i8> %{{.*}}, %{{.*}} //CHECK: select <32 x i1> %{{.*}}, <32 x i8> %{{.*}}, <32 x i8> %{{.*}} return _mm256_maskz_add_epi8(__U , __A, __B); } __m256i test_mm256_mask_add_epi16 (__m256i __W, __mmask16 __U, __m256i __A, __m256i __B) { - //CHECK-LABEL: @test_mm256_mask_add_epi16 + //CHECK-LABEL: test_mm256_mask_add_epi16 //CHECK: add <16 x i16> %{{.*}}, %{{.*}} //CHECK: select <16 x i1> %{{.*}}, <16 x i16> %{{.*}}, <16 x i16> %{{.*}} return _mm256_mask_add_epi16(__W, __U , __A, __B); } __m256i test_mm256_maskz_add_epi16 (__mmask16 __U, __m256i __A, __m256i __B) { - //CHECK-LABEL: @test_mm256_maskz_add_epi16 + //CHECK-LABEL: test_mm256_maskz_add_epi16 //CHECK: add <16 x i16> %{{.*}}, %{{.*}} //CHECK: select <16 x i1> %{{.*}}, <16 x i16> %{{.*}}, <16 x i16> %{{.*}} return _mm256_maskz_add_epi16(__U , __A, __B); } __m256i test_mm256_mask_sub_epi8 (__m256i __W, __mmask32 __U, __m256i __A, __m256i __B) { - //CHECK-LABEL: @test_mm256_mask_sub_epi8 + //CHECK-LABEL: test_mm256_mask_sub_epi8 //CHECK: sub <32 x i8> %{{.*}}, %{{.*}} //CHECK: select <32 x i1> %{{.*}}, <32 x i8> %{{.*}}, <32 x i8> %{{.*}} return _mm256_mask_sub_epi8(__W, __U , __A, __B); } __m256i test_mm256_maskz_sub_epi8 (__mmask32 __U, __m256i __A, __m256i __B) { - //CHECK-LABEL: @test_mm256_maskz_sub_epi8 + //CHECK-LABEL: test_mm256_maskz_sub_epi8 //CHECK: sub <32 x i8> %{{.*}}, %{{.*}} //CHECK: select <32 x i1> %{{.*}}, <32 x i8> %{{.*}}, <32 x i8> %{{.*}} return _mm256_maskz_sub_epi8(__U , __A, __B); } __m256i test_mm256_mask_sub_epi16 (__m256i __W, __mmask16 __U, __m256i __A, __m256i __B) { - //CHECK-LABEL: @test_mm256_mask_sub_epi16 + //CHECK-LABEL: test_mm256_mask_sub_epi16 //CHECK: sub <16 x i16> %{{.*}}, %{{.*}} //CHECK: select <16 x i1> %{{.*}}, <16 x i16> %{{.*}}, <16 x i16> %{{.*}} return _mm256_mask_sub_epi16(__W, __U , __A, __B); } __m256i test_mm256_maskz_sub_epi16 (__mmask16 __U, __m256i __A, __m256i __B) { - //CHECK-LABEL: @test_mm256_maskz_sub_epi16 + //CHECK-LABEL: test_mm256_maskz_sub_epi16 //CHECK: sub <16 x i16> %{{.*}}, %{{.*}} //CHECK: select <16 x i1> %{{.*}}, <16 x i16> %{{.*}}, <16 x i16> %{{.*}} return _mm256_maskz_sub_epi16(__U , __A, __B); } __m128i test_mm_mask_add_epi8 (__m128i __W, __mmask16 __U, __m128i __A, __m128i __B) { - //CHECK-LABEL: @test_mm_mask_add_epi8 + //CHECK-LABEL: test_mm_mask_add_epi8 //CHECK: add <16 x i8> %{{.*}}, %{{.*}} //CHECK: select <16 x i1> %{{.*}}, <16 x i8> %{{.*}}, <16 x i8> %{{.*}} return _mm_mask_add_epi8(__W, __U , __A, __B); } __m128i test_mm_maskz_add_epi8 (__mmask16 __U, __m128i __A, __m128i __B) { - //CHECK-LABEL: @test_mm_maskz_add_epi8 + //CHECK-LABEL: test_mm_maskz_add_epi8 //CHECK: add <16 x i8> %{{.*}}, %{{.*}} //CHECK: select <16 x i1> %{{.*}}, <16 x i8> %{{.*}}, <16 x i8> %{{.*}} return _mm_maskz_add_epi8(__U , __A, __B); } __m128i test_mm_mask_add_epi16 (__m128i __W, __mmask8 __U, __m128i __A, __m128i __B) { - //CHECK-LABEL: @test_mm_mask_add_epi16 + //CHECK-LABEL: test_mm_mask_add_epi16 //CHECK: add <8 x i16> %{{.*}}, %{{.*}} //CHECK: select <8 x i1> %{{.*}}, <8 x i16> %{{.*}}, <8 x i16> %{{.*}} return _mm_mask_add_epi16(__W, __U , __A, __B); } __m128i test_mm_maskz_add_epi16 (__mmask8 __U, __m128i __A, __m128i __B) { - //CHECK-LABEL: @test_mm_maskz_add_epi16 + //CHECK-LABEL: test_mm_maskz_add_epi16 //CHECK: add <8 x i16> %{{.*}}, %{{.*}} //CHECK: select <8 x i1> %{{.*}}, <8 x i16> %{{.*}}, <8 x i16> %{{.*}} return _mm_maskz_add_epi16(__U , __A, __B); } __m128i test_mm_mask_sub_epi8 (__m128i __W, __mmask16 __U, __m128i __A, __m128i __B) { - //CHECK-LABEL: @test_mm_mask_sub_epi8 + //CHECK-LABEL: test_mm_mask_sub_epi8 //CHECK: sub <16 x i8> %{{.*}}, %{{.*}} //CHECK: select <16 x i1> %{{.*}}, <16 x i8> %{{.*}}, <16 x i8> %{{.*}} return _mm_mask_sub_epi8(__W, __U , __A, __B); } __m128i test_mm_maskz_sub_epi8 (__mmask16 __U, __m128i __A, __m128i __B) { - //CHECK-LABEL: @test_mm_maskz_sub_epi8 + //CHECK-LABEL: test_mm_maskz_sub_epi8 //CHECK: sub <16 x i8> %{{.*}}, %{{.*}} //CHECK: select <16 x i1> %{{.*}}, <16 x i8> %{{.*}}, <16 x i8> %{{.*}} return _mm_maskz_sub_epi8(__U , __A, __B); } __m128i test_mm_mask_sub_epi16 (__m128i __W, __mmask8 __U, __m128i __A, __m128i __B) { - //CHECK-LABEL: @test_mm_mask_sub_epi16 + //CHECK-LABEL: test_mm_mask_sub_epi16 //CHECK: sub <8 x i16> %{{.*}}, %{{.*}} //CHECK: select <8 x i1> %{{.*}}, <8 x i16> %{{.*}}, <8 x i16> %{{.*}} return _mm_mask_sub_epi16(__W, __U , __A, __B); } __m128i test_mm_maskz_sub_epi16 (__mmask8 __U, __m128i __A, __m128i __B) { - //CHECK-LABEL: @test_mm_maskz_sub_epi16 + //CHECK-LABEL: test_mm_maskz_sub_epi16 //CHECK: sub <8 x i16> %{{.*}}, %{{.*}} //CHECK: select <8 x i1> %{{.*}}, <8 x i16> %{{.*}}, <8 x i16> %{{.*}} return _mm_maskz_sub_epi16(__U , __A, __B); } __m256i test_mm256_mask_mullo_epi16 (__m256i __W, __mmask16 __U, __m256i __A, __m256i __B) { - //CHECK-LABEL: @test_mm256_mask_mullo_epi16 + //CHECK-LABEL: test_mm256_mask_mullo_epi16 //CHECK: mul <16 x i16> %{{.*}}, %{{.*}} //CHECK: select <16 x i1> %{{.*}}, <16 x i16> %{{.*}}, <16 x i16> %{{.*}} return _mm256_mask_mullo_epi16(__W, __U , __A, __B); } +TEST_CONSTEXPR(match_v16hi(_mm256_mask_mullo_epi16((__m256i)(__v16hi){-1, +2, -3, +4, -5, +6, -7, +8, -9, +10, -11, +12, -13, +14, -15, +16}, 0x00FF, (__m256i)(__v16hi){+2, -3, +4, -5, +6, -7, +8, -9, +10, -11, +12, -13, +14, -15, +16, -17}, (__m256i)(__v16hi){-3, +4, -5, +6, -7, +8, -9, +10, -11, +12, -13, +14, -15, +16, -17, +18}), -6, -12, -20, -30, -42, -56, -72, -90, -9, +10, -11, +12, -13, +14, -15, +16)); __m256i test_mm256_maskz_mullo_epi16 (__mmask16 __U, __m256i __A, __m256i __B) { - //CHECK-LABEL: @test_mm256_maskz_mullo_epi16 + //CHECK-LABEL: test_mm256_maskz_mullo_epi16 //CHECK: mul <16 x i16> %{{.*}}, %{{.*}} //CHECK: select <16 x i1> %{{.*}}, <16 x i16> %{{.*}}, <16 x i16> %{{.*}} return _mm256_maskz_mullo_epi16(__U , __A, __B); } +TEST_CONSTEXPR(match_v16hi(_mm256_maskz_mullo_epi16(0x00FF, (__m256i)(__v16hi){+2, -3, +4, -5, +6, -7, +8, -9, +10, -11, +12, -13, +14, -15, +16, -17}, (__m256i)(__v16hi){-3, +4, -5, +6, -7, +8, -9, +10, -11, +12, -13, +14, -15, +16, -17, +18}), -6, -12, -20, -30, -42, -56, -72, -90, 0, 0, 0, 0, 0, 0, 0, 0)); __m128i test_mm_mask_mullo_epi16 (__m128i __W, __mmask8 __U, __m128i __A, __m128i __B) { - //CHECK-LABEL: @test_mm_mask_mullo_epi16 + //CHECK-LABEL: test_mm_mask_mullo_epi16 //CHECK: mul <8 x i16> %{{.*}}, %{{.*}} //CHECK: select <8 x i1> %{{.*}}, <8 x i16> %{{.*}}, <8 x i16> %{{.*}} return _mm_mask_mullo_epi16(__W, __U , __A, __B); } +TEST_CONSTEXPR(match_v8hi(_mm_mask_mullo_epi16((__m128i)(__v8hi){-1, +2, -3, +4, -5, +6, -7, +8}, 0x0F, (__m128i)(__v8hi){+2, -3, +4, -5, +6, -7, +8, -9}, (__m128i)(__v8hi){-3, +4, -5, +6, -7, +8, -9, +10}), -6, -12, -20, -30, -5, +6, -7, +8)); __m128i test_mm_maskz_mullo_epi16 (__mmask8 __U, __m128i __A, __m128i __B) { - //CHECK-LABEL: @test_mm_maskz_mullo_epi16 + //CHECK-LABEL: test_mm_maskz_mullo_epi16 //CHECK: mul <8 x i16> %{{.*}}, %{{.*}} //CHECK: select <8 x i1> %{{.*}}, <8 x i16> %{{.*}}, <8 x i16> %{{.*}} return _mm_maskz_mullo_epi16(__U , __A, __B); } +TEST_CONSTEXPR(match_v8hi(_mm_maskz_mullo_epi16(0x0F, (__m128i)(__v8hi){+2, -3, +4, -5, +6, -7, +8, -9}, (__m128i)(__v8hi){-3, +4, -5, +6, -7, +8, -9, +10}), -6, -12, -20, -30, 0, 0, 0, 0)); __m128i test_mm_mask_blend_epi8(__mmask16 __U, __m128i __A, __m128i __W) { - // CHECK-LABEL: @test_mm_mask_blend_epi8 + // CHECK-LABEL: test_mm_mask_blend_epi8 // CHECK: select <16 x i1> %{{.*}}, <16 x i8> %{{.*}}, <16 x i8> %{{.*}} return _mm_mask_blend_epi8(__U,__A,__W); } __m256i test_mm256_mask_blend_epi8(__mmask32 __U, __m256i __A, __m256i __W) { - // CHECK-LABEL: @test_mm256_mask_blend_epi8 + // CHECK-LABEL: test_mm256_mask_blend_epi8 // CHECK: select <32 x i1> %{{.*}}, <32 x i8> %{{.*}}, <32 x i8> %{{.*}} return _mm256_mask_blend_epi8(__U,__A,__W); } __m128i test_mm_mask_blend_epi16(__mmask8 __U, __m128i __A, __m128i __W) { - // CHECK-LABEL: @test_mm_mask_blend_epi16 + // CHECK-LABEL: test_mm_mask_blend_epi16 // CHECK: select <8 x i1> %{{.*}}, <8 x i16> %{{.*}}, <8 x i16> %{{.*}} return _mm_mask_blend_epi16(__U,__A,__W); } __m256i test_mm256_mask_blend_epi16(__mmask16 __U, __m256i __A, __m256i __W) { - // CHECK-LABEL: @test_mm256_mask_blend_epi16 + // CHECK-LABEL: test_mm256_mask_blend_epi16 // CHECK: select <16 x i1> %{{.*}}, <16 x i16> %{{.*}}, <16 x i16> %{{.*}} return _mm256_mask_blend_epi16(__U,__A,__W); } __m128i test_mm_mask_abs_epi8(__m128i __W, __mmask16 __U, __m128i __A) { - // CHECK-LABEL: @test_mm_mask_abs_epi8 + // CHECK-LABEL: test_mm_mask_abs_epi8 // CHECK: [[ABS:%.*]] = call <16 x i8> @llvm.abs.v16i8(<16 x i8> %{{.*}}, i1 false) // CHECK: [[TMP:%.*]] = bitcast <16 x i8> [[ABS]] to <2 x i64> // CHECK: [[ABS:%.*]] = bitcast <2 x i64> [[TMP]] to <16 x i8> // CHECK: select <16 x i1> %{{.*}}, <16 x i8> [[ABS]], <16 x i8> %{{.*}} return _mm_mask_abs_epi8(__W,__U,__A); } +TEST_CONSTEXPR(match_v16qi(_mm_mask_abs_epi8((__m128i)(__v16qi){99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99}, (__mmask16)0x0001, (__m128i)(__v16qi){(char)-1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2}), 1, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99)); __m128i test_mm_maskz_abs_epi8(__mmask16 __U, __m128i __A) { - // CHECK-LABEL: @test_mm_maskz_abs_epi8 + // CHECK-LABEL: test_mm_maskz_abs_epi8 // CHECK: [[ABS:%.*]] = call <16 x i8> @llvm.abs.v16i8(<16 x i8> %{{.*}}, i1 false) // CHECK: [[TMP:%.*]] = bitcast <16 x i8> [[ABS]] to <2 x i64> // CHECK: [[ABS:%.*]] = bitcast <2 x i64> [[TMP]] to <16 x i8> // CHECK: select <16 x i1> %{{.*}}, <16 x i8> [[ABS]], <16 x i8> %{{.*}} return _mm_maskz_abs_epi8(__U,__A); } +TEST_CONSTEXPR(match_v16qi(_mm_maskz_abs_epi8((__mmask16)0x5555, (__m128i)(__v16qi){(char)-1, 2, (char)-3, 4, (char)-5, 6, (char)-7, 8, (char)-9, 10, (char)-11, 12, (char)-13, 14, (char)-15, 16}), 1, 0, 3, 0, 5, 0, 7, 0, 9, 0, 11, 0, 13, 0, 15, 0)); __m256i test_mm256_mask_abs_epi8(__m256i __W, __mmask32 __U, __m256i __A) { - // CHECK-LABEL: @test_mm256_mask_abs_epi8 + // CHECK-LABEL: test_mm256_mask_abs_epi8 // CHECK: [[ABS:%.*]] = call <32 x i8> @llvm.abs.v32i8(<32 x i8> %{{.*}}, i1 false) // CHECK: [[TMP:%.*]] = bitcast <32 x i8> [[ABS]] to <4 x i64> // CHECK: [[ABS:%.*]] = bitcast <4 x i64> [[TMP]] to <32 x i8> // CHECK: select <32 x i1> %{{.*}}, <32 x i8> [[ABS]], <32 x i8> %{{.*}} return _mm256_mask_abs_epi8(__W,__U,__A); } +TEST_CONSTEXPR(match_v32qi(_mm256_mask_abs_epi8((__m256i)(__v32qi){99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99}, (__mmask32)0x00000001, (__m256i)(__v32qi){(char)-1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2}), 1, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99)); __m256i test_mm256_maskz_abs_epi8(__mmask32 __U, __m256i __A) { - // CHECK-LABEL: @test_mm256_maskz_abs_epi8 + // CHECK-LABEL: test_mm256_maskz_abs_epi8 // CHECK: [[ABS:%.*]] = call <32 x i8> @llvm.abs.v32i8(<32 x i8> %{{.*}}, i1 false) // CHECK: [[TMP:%.*]] = bitcast <32 x i8> [[ABS]] to <4 x i64> // CHECK: [[ABS:%.*]] = bitcast <4 x i64> [[TMP]] to <32 x i8> // CHECK: select <32 x i1> %{{.*}}, <32 x i8> [[ABS]], <32 x i8> %{{.*}} return _mm256_maskz_abs_epi8(__U,__A); } +TEST_CONSTEXPR(match_v32qi(_mm256_maskz_abs_epi8((__mmask32)0x55555555, (__m256i)(__v32qi){(char)-1, 2, (char)-3, 4, (char)-5, 6, (char)-7, 8, (char)-9, 10, (char)-11, 12, (char)-13, 14, (char)-15, 16, (char)-17, 18, (char)-19, 20, (char)-21, 22, (char)-23, 24, (char)-25, 26, (char)-27, 28, (char)-29, 30, (char)-31, 32}), 1, 0, 3, 0, 5, 0, 7, 0, 9, 0, 11, 0, 13, 0, 15, 0, 17, 0, 19, 0, 21, 0, 23, 0, 25, 0, 27, 0, 29, 0, 31, 0)); __m128i test_mm_mask_abs_epi16(__m128i __W, __mmask8 __U, __m128i __A) { - // CHECK-LABEL: @test_mm_mask_abs_epi16 + // CHECK-LABEL: test_mm_mask_abs_epi16 // CHECK: [[ABS:%.*]] = call <8 x i16> @llvm.abs.v8i16(<8 x i16> %{{.*}}, i1 false) // CHECK: [[TMP:%.*]] = bitcast <8 x i16> [[ABS]] to <2 x i64> // CHECK: [[ABS:%.*]] = bitcast <2 x i64> [[TMP]] to <8 x i16> // CHECK: select <8 x i1> %{{.*}}, <8 x i16> [[ABS]], <8 x i16> %{{.*}} return _mm_mask_abs_epi16(__W,__U,__A); } +TEST_CONSTEXPR(match_v8hi(_mm_mask_abs_epi16((__m128i)(__v8hi){99, 99, 99, 99, 99, 99, 99, 99}, (__mmask16)0x01, (__m128i)(__v8hi){-1, 2, 2, 2, 2, 2, 2, 2}), 1, 99, 99, 99, 99, 99, 99, 99)); __m128i test_mm_maskz_abs_epi16(__mmask8 __U, __m128i __A) { - // CHECK-LABEL: @test_mm_maskz_abs_epi16 + // CHECK-LABEL: test_mm_maskz_abs_epi16 // CHECK: [[ABS:%.*]] = call <8 x i16> @llvm.abs.v8i16(<8 x i16> %{{.*}}, i1 false) // CHECK: [[TMP:%.*]] = bitcast <8 x i16> [[ABS]] to <2 x i64> // CHECK: [[ABS:%.*]] = bitcast <2 x i64> [[TMP]] to <8 x i16> // CHECK: select <8 x i1> %{{.*}}, <8 x i16> [[ABS]], <8 x i16> %{{.*}} return _mm_maskz_abs_epi16(__U,__A); } +TEST_CONSTEXPR(match_v8hi(_mm_maskz_abs_epi16((__mmask8)0x55, (__m128i)(__v8hi){-1, 2, -3, 4, -5, 6, -7, 8}), 1, 0, 3, 0, 5, 0, 7, 0)); __m256i test_mm256_mask_abs_epi16(__m256i __W, __mmask16 __U, __m256i __A) { - // CHECK-LABEL: @test_mm256_mask_abs_epi16 + // CHECK-LABEL: test_mm256_mask_abs_epi16 // CHECK: [[ABS:%.*]] = call <16 x i16> @llvm.abs.v16i16(<16 x i16> %{{.*}}, i1 false) // CHECK: [[TMP:%.*]] = bitcast <16 x i16> [[ABS]] to <4 x i64> // CHECK: [[ABS:%.*]] = bitcast <4 x i64> [[TMP]] to <16 x i16> // CHECK: select <16 x i1> %{{.*}}, <16 x i16> [[ABS]], <16 x i16> %{{.*}} return _mm256_mask_abs_epi16(__W,__U,__A); } +TEST_CONSTEXPR(match_v16hi(_mm256_mask_abs_epi16((__m256i)(__v16hi){99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99}, (__mmask16)0x0001, (__m256i)(__v16hi){-128, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2}), 128, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99)); __m256i test_mm256_maskz_abs_epi16(__mmask16 __U, __m256i __A) { - // CHECK-LABEL: @test_mm256_maskz_abs_epi16 + // CHECK-LABEL: test_mm256_maskz_abs_epi16 // CHECK: [[ABS:%.*]] = call <16 x i16> @llvm.abs.v16i16(<16 x i16> %{{.*}}, i1 false) // CHECK: [[TMP:%.*]] = bitcast <16 x i16> [[ABS]] to <4 x i64> // CHECK: [[ABS:%.*]] = bitcast <4 x i64> [[TMP]] to <16 x i16> // CHECK: select <16 x i1> %{{.*}}, <16 x i16> [[ABS]], <16 x i16> %{{.*}} return _mm256_maskz_abs_epi16(__U,__A); } +TEST_CONSTEXPR(match_v16hi(_mm256_maskz_abs_epi16((__mmask16)0x0001, (__m256i)(__v16hi){-128, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2}), 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)); __m128i test_mm_maskz_packs_epi32(__mmask8 __M, __m128i __A, __m128i __B) { - // CHECK-LABEL: @test_mm_maskz_packs_epi32 + // CHECK-LABEL: test_mm_maskz_packs_epi32 // CHECK: @llvm.x86.sse2.packssdw // CHECK: select <8 x i1> %{{.*}}, <8 x i16> %{{.*}}, <8 x i16> %{{.*}} return _mm_maskz_packs_epi32(__M,__A,__B); } __m128i test_mm_mask_packs_epi32(__m128i __W, __mmask8 __M, __m128i __A, __m128i __B) { - // CHECK-LABEL: @test_mm_mask_packs_epi32 + // CHECK-LABEL: test_mm_mask_packs_epi32 // CHECK: @llvm.x86.sse2.packssdw // CHECK: select <8 x i1> %{{.*}}, <8 x i16> %{{.*}}, <8 x i16> %{{.*}} return _mm_mask_packs_epi32(__W,__M,__A,__B); } __m256i test_mm256_maskz_packs_epi32(__mmask16 __M, __m256i __A, __m256i __B) { - // CHECK-LABEL: @test_mm256_maskz_packs_epi32 + // CHECK-LABEL: test_mm256_maskz_packs_epi32 // CHECK: @llvm.x86.avx2.packssdw // CHECK: select <16 x i1> %{{.*}}, <16 x i16> %{{.*}}, <16 x i16> %{{.*}} return _mm256_maskz_packs_epi32(__M,__A,__B); } __m256i test_mm256_mask_packs_epi32(__m256i __W, __mmask16 __M, __m256i __A, __m256i __B) { - // CHECK-LABEL: @test_mm256_mask_packs_epi32 + // CHECK-LABEL: test_mm256_mask_packs_epi32 // CHECK: @llvm.x86.avx2.packssdw // CHECK: select <16 x i1> %{{.*}}, <16 x i16> %{{.*}}, <16 x i16> %{{.*}} return _mm256_mask_packs_epi32(__W,__M,__A,__B); } __m128i test_mm_maskz_packs_epi16(__mmask16 __M, __m128i __A, __m128i __B) { - // CHECK-LABEL: @test_mm_maskz_packs_epi16 + // CHECK-LABEL: test_mm_maskz_packs_epi16 // CHECK: @llvm.x86.sse2.packsswb // CHECK: select <16 x i1> %{{.*}}, <16 x i8> %{{.*}}, <16 x i8> %{{.*}} return _mm_maskz_packs_epi16(__M,__A,__B); } __m128i test_mm_mask_packs_epi16(__m128i __W, __mmask16 __M, __m128i __A, __m128i __B) { - // CHECK-LABEL: @test_mm_mask_packs_epi16 + // CHECK-LABEL: test_mm_mask_packs_epi16 // CHECK: @llvm.x86.sse2.packsswb // CHECK: select <16 x i1> %{{.*}}, <16 x i8> %{{.*}}, <16 x i8> %{{.*}} return _mm_mask_packs_epi16(__W,__M,__A,__B); } __m256i test_mm256_maskz_packs_epi16(__mmask32 __M, __m256i __A, __m256i __B) { - // CHECK-LABEL: @test_mm256_maskz_packs_epi16 + // CHECK-LABEL: test_mm256_maskz_packs_epi16 // CHECK: @llvm.x86.avx2.packsswb // CHECK: select <32 x i1> %{{.*}}, <32 x i8> %{{.*}}, <32 x i8> %{{.*}} return _mm256_maskz_packs_epi16(__M,__A,__B); } __m256i test_mm256_mask_packs_epi16(__m256i __W, __mmask32 __M, __m256i __A, __m256i __B) { - // CHECK-LABEL: @test_mm256_mask_packs_epi16 + // CHECK-LABEL: test_mm256_mask_packs_epi16 // CHECK: @llvm.x86.avx2.packsswb // CHECK: select <32 x i1> %{{.*}}, <32 x i8> %{{.*}}, <32 x i8> %{{.*}} return _mm256_mask_packs_epi16(__W,__M,__A,__B); } __m128i test_mm_mask_packus_epi32(__m128i __W, __mmask8 __M, __m128i __A, __m128i __B) { - // CHECK-LABEL: @test_mm_mask_packus_epi32 + // CHECK-LABEL: test_mm_mask_packus_epi32 // CHECK: @llvm.x86.sse41.packusdw // CHECK: select <8 x i1> %{{.*}}, <8 x i16> %{{.*}}, <8 x i16> %{{.*}} return _mm_mask_packus_epi32(__W,__M,__A,__B); } __m128i test_mm_maskz_packus_epi32(__mmask8 __M, __m128i __A, __m128i __B) { - // CHECK-LABEL: @test_mm_maskz_packus_epi32 + // CHECK-LABEL: test_mm_maskz_packus_epi32 // CHECK: @llvm.x86.sse41.packusdw // CHECK: select <8 x i1> %{{.*}}, <8 x i16> %{{.*}}, <8 x i16> %{{.*}} return _mm_maskz_packus_epi32(__M,__A,__B); } __m256i test_mm256_maskz_packus_epi32(__mmask16 __M, __m256i __A, __m256i __B) { - // CHECK-LABEL: @test_mm256_maskz_packus_epi32 + // CHECK-LABEL: test_mm256_maskz_packus_epi32 // CHECK: @llvm.x86.avx2.packusdw // CHECK: select <16 x i1> %{{.*}}, <16 x i16> %{{.*}}, <16 x i16> %{{.*}} return _mm256_maskz_packus_epi32(__M,__A,__B); } __m256i test_mm256_mask_packus_epi32(__m256i __W, __mmask16 __M, __m256i __A, __m256i __B) { - // CHECK-LABEL: @test_mm256_mask_packus_epi32 + // CHECK-LABEL: test_mm256_mask_packus_epi32 // CHECK: @llvm.x86.avx2.packusdw // CHECK: select <16 x i1> %{{.*}}, <16 x i16> %{{.*}}, <16 x i16> %{{.*}} return _mm256_mask_packus_epi32(__W,__M,__A,__B); } __m128i test_mm_maskz_packus_epi16(__mmask16 __M, __m128i __A, __m128i __B) { - // CHECK-LABEL: @test_mm_maskz_packus_epi16 + // CHECK-LABEL: test_mm_maskz_packus_epi16 // CHECK: @llvm.x86.sse2.packuswb // CHECK: select <16 x i1> %{{.*}}, <16 x i8> %{{.*}}, <16 x i8> %{{.*}} return _mm_maskz_packus_epi16(__M,__A,__B); } __m128i test_mm_mask_packus_epi16(__m128i __W, __mmask16 __M, __m128i __A, __m128i __B) { - // CHECK-LABEL: @test_mm_mask_packus_epi16 + // CHECK-LABEL: test_mm_mask_packus_epi16 // CHECK: @llvm.x86.sse2.packuswb // CHECK: select <16 x i1> %{{.*}}, <16 x i8> %{{.*}}, <16 x i8> %{{.*}} return _mm_mask_packus_epi16(__W,__M,__A,__B); } __m256i test_mm256_maskz_packus_epi16(__mmask32 __M, __m256i __A, __m256i __B) { - // CHECK-LABEL: @test_mm256_maskz_packus_epi16 + // CHECK-LABEL: test_mm256_maskz_packus_epi16 // CHECK: @llvm.x86.avx2.packuswb // CHECK: select <32 x i1> %{{.*}}, <32 x i8> %{{.*}}, <32 x i8> %{{.*}} return _mm256_maskz_packus_epi16(__M,__A,__B); } __m256i test_mm256_mask_packus_epi16(__m256i __W, __mmask32 __M, __m256i __A, __m256i __B) { - // CHECK-LABEL: @test_mm256_mask_packus_epi16 + // CHECK-LABEL: test_mm256_mask_packus_epi16 // CHECK: @llvm.x86.avx2.packuswb // CHECK: select <32 x i1> %{{.*}}, <32 x i8> %{{.*}}, <32 x i8> %{{.*}} return _mm256_mask_packus_epi16(__W,__M,__A,__B); } __m128i test_mm_mask_adds_epi8(__m128i __W, __mmask16 __U, __m128i __A, __m128i __B) { - // CHECK-LABEL: @test_mm_mask_adds_epi8 + // CHECK-LABEL: test_mm_mask_adds_epi8 // CHECK: @llvm.sadd.sat.v16i8 // CHECK: select <16 x i1> %{{.*}}, <16 x i8> %{{.*}}, <16 x i8> %{{.*}} return _mm_mask_adds_epi8(__W,__U,__A,__B); } __m128i test_mm_maskz_adds_epi8(__mmask16 __U, __m128i __A, __m128i __B) { - // CHECK-LABEL: @test_mm_maskz_adds_epi8 + // CHECK-LABEL: test_mm_maskz_adds_epi8 // CHECK: @llvm.sadd.sat.v16i8 // CHECK: select <16 x i1> %{{.*}}, <16 x i8> %{{.*}}, <16 x i8> %{{.*}} return _mm_maskz_adds_epi8(__U,__A,__B); } __m256i test_mm256_mask_adds_epi8(__m256i __W, __mmask32 __U, __m256i __A, __m256i __B) { - // CHECK-LABEL: @test_mm256_mask_adds_epi8 + // CHECK-LABEL: test_mm256_mask_adds_epi8 // CHECK: @llvm.sadd.sat.v32i8 // CHECK: select <32 x i1> %{{.*}}, <32 x i8> %{{.*}}, <32 x i8> %{{.*}} return _mm256_mask_adds_epi8(__W,__U,__A,__B); } __m256i test_mm256_maskz_adds_epi8(__mmask32 __U, __m256i __A, __m256i __B) { - // CHECK-LABEL: @test_mm256_maskz_adds_epi8 + // CHECK-LABEL: test_mm256_maskz_adds_epi8 // CHECK: @llvm.sadd.sat.v32i8 // CHECK: select <32 x i1> %{{.*}}, <32 x i8> %{{.*}}, <32 x i8> %{{.*}} return _mm256_maskz_adds_epi8(__U,__A,__B); } __m128i test_mm_mask_adds_epi16(__m128i __W, __mmask8 __U, __m128i __A, __m128i __B) { - // CHECK-LABEL: @test_mm_mask_adds_epi16 + // CHECK-LABEL: test_mm_mask_adds_epi16 // CHECK: @llvm.sadd.sat.v8i16 // CHECK: select <8 x i1> %{{.*}}, <8 x i16> %{{.*}}, <8 x i16> %{{.*}} return _mm_mask_adds_epi16(__W,__U,__A,__B); } __m128i test_mm_maskz_adds_epi16(__mmask8 __U, __m128i __A, __m128i __B) { - // CHECK-LABEL: @test_mm_maskz_adds_epi16 + // CHECK-LABEL: test_mm_maskz_adds_epi16 // CHECK: @llvm.sadd.sat.v8i16 // CHECK: select <8 x i1> %{{.*}}, <8 x i16> %{{.*}}, <8 x i16> %{{.*}} return _mm_maskz_adds_epi16(__U,__A,__B); } __m256i test_mm256_mask_adds_epi16(__m256i __W, __mmask16 __U, __m256i __A, __m256i __B) { - // CHECK-LABEL: @test_mm256_mask_adds_epi16 + // CHECK-LABEL: test_mm256_mask_adds_epi16 // CHECK: @llvm.sadd.sat.v16i16 // CHECK: select <16 x i1> %{{.*}}, <16 x i16> %{{.*}}, <16 x i16> %{{.*}} return _mm256_mask_adds_epi16(__W,__U,__A,__B); } __m256i test_mm256_maskz_adds_epi16(__mmask16 __U, __m256i __A, __m256i __B) { - // CHECK-LABEL: @test_mm256_maskz_adds_epi16 + // CHECK-LABEL: test_mm256_maskz_adds_epi16 // CHECK: @llvm.sadd.sat.v16i16 // CHECK: select <16 x i1> %{{.*}}, <16 x i16> %{{.*}}, <16 x i16> %{{.*}} return _mm256_maskz_adds_epi16(__U,__A,__B); } __m128i test_mm_mask_adds_epu8(__m128i __W, __mmask16 __U, __m128i __A, __m128i __B) { - // CHECK-LABEL: @test_mm_mask_adds_epu8 + // CHECK-LABEL: test_mm_mask_adds_epu8 // CHECK-NOT: @llvm.x86.sse2.paddus.b // CHECK: call <16 x i8> @llvm.uadd.sat.v16i8(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}) // CHECK: select <16 x i1> %{{.*}}, <16 x i8> %{{.*}}, <16 x i8> %{{.*}} return _mm_mask_adds_epu8(__W,__U,__A,__B); } __m128i test_mm_maskz_adds_epu8(__mmask16 __U, __m128i __A, __m128i __B) { - // CHECK-LABEL: @test_mm_maskz_adds_epu8 + // CHECK-LABEL: test_mm_maskz_adds_epu8 // CHECK-NOT: @llvm.x86.sse2.paddus.b // CHECK: call <16 x i8> @llvm.uadd.sat.v16i8(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}) // CHECK: select <16 x i1> %{{.*}}, <16 x i8> %{{.*}}, <16 x i8> %{{.*}} return _mm_maskz_adds_epu8(__U,__A,__B); } __m256i test_mm256_mask_adds_epu8(__m256i __W, __mmask32 __U, __m256i __A, __m256i __B) { - // CHECK-LABEL: @test_mm256_mask_adds_epu8 + // CHECK-LABEL: test_mm256_mask_adds_epu8 // CHECK-NOT: @llvm.x86.avx2.paddus.b // CHECK: call <32 x i8> @llvm.uadd.sat.v32i8(<32 x i8> %{{.*}}, <32 x i8> %{{.*}}) // CHECK: select <32 x i1> %{{.*}}, <32 x i8> %{{.*}}, <32 x i8> %{{.*}} return _mm256_mask_adds_epu8(__W,__U,__A,__B); } __m256i test_mm256_maskz_adds_epu8(__mmask32 __U, __m256i __A, __m256i __B) { - // CHECK-LABEL: @test_mm256_maskz_adds_epu8 + // CHECK-LABEL: test_mm256_maskz_adds_epu8 // CHECK-NOT: @llvm.x86.avx2.paddus.b // CHECK: call <32 x i8> @llvm.uadd.sat.v32i8(<32 x i8> %{{.*}}, <32 x i8> %{{.*}}) // CHECK: select <32 x i1> %{{.*}}, <32 x i8> %{{.*}}, <32 x i8> %{{.*}} return _mm256_maskz_adds_epu8(__U,__A,__B); } __m128i test_mm_mask_adds_epu16(__m128i __W, __mmask8 __U, __m128i __A, __m128i __B) { - // CHECK-LABEL: @test_mm_mask_adds_epu16 + // CHECK-LABEL: test_mm_mask_adds_epu16 // CHECK-NOT: @llvm.x86.sse2.paddus.w // CHECK: call <8 x i16> @llvm.uadd.sat.v8i16(<8 x i16> %{{.*}}, <8 x i16> %{{.*}}) // CHECK: select <8 x i1> %{{.*}}, <8 x i16> %{{.*}}, <8 x i16> %{{.*}} return _mm_mask_adds_epu16(__W,__U,__A,__B); } __m128i test_mm_maskz_adds_epu16(__mmask8 __U, __m128i __A, __m128i __B) { - // CHECK-LABEL: @test_mm_maskz_adds_epu16 + // CHECK-LABEL: test_mm_maskz_adds_epu16 // CHECK-NOT: @llvm.x86.sse2.paddus.w // CHECK: call <8 x i16> @llvm.uadd.sat.v8i16(<8 x i16> %{{.*}}, <8 x i16> %{{.*}}) // CHECK: select <8 x i1> %{{.*}}, <8 x i16> %{{.*}}, <8 x i16> %{{.*}} return _mm_maskz_adds_epu16(__U,__A,__B); } __m256i test_mm256_mask_adds_epu16(__m256i __W, __mmask16 __U, __m256i __A, __m256i __B) { - // CHECK-LABEL: @test_mm256_mask_adds_epu16 + // CHECK-LABEL: test_mm256_mask_adds_epu16 // CHECK-NOT: @llvm.x86.avx2.paddus.w // CHECK: call <16 x i16> @llvm.uadd.sat.v16i16(<16 x i16> %{{.*}}, <16 x i16> %{{.*}}) // CHECK: select <16 x i1> %{{.*}}, <16 x i16> %{{.*}}, <16 x i16> %{{.*}} return _mm256_mask_adds_epu16(__W,__U,__A,__B); } __m256i test_mm256_maskz_adds_epu16(__mmask16 __U, __m256i __A, __m256i __B) { - // CHECK-LABEL: @test_mm256_maskz_adds_epu16 + // CHECK-LABEL: test_mm256_maskz_adds_epu16 // CHECK-NOT: @llvm.x86.avx2.paddus.w // CHECK: call <16 x i16> @llvm.uadd.sat.v16i16(<16 x i16> %{{.*}}, <16 x i16> %{{.*}}) // CHECK: select <16 x i1> %{{.*}}, <16 x i16> %{{.*}}, <16 x i16> %{{.*}} return _mm256_maskz_adds_epu16(__U,__A,__B); } __m128i test_mm_mask_avg_epu8(__m128i __W, __mmask16 __U, __m128i __A, __m128i __B) { - // CHECK-LABEL: @test_mm_mask_avg_epu8 + // CHECK-LABEL: test_mm_mask_avg_epu8 // CHECK: @llvm.x86.sse2.pavg.b // CHECK: select <16 x i1> %{{.*}}, <16 x i8> %{{.*}}, <16 x i8> %{{.*}} return _mm_mask_avg_epu8(__W,__U,__A,__B); } __m128i test_mm_maskz_avg_epu8(__mmask16 __U, __m128i __A, __m128i __B) { - // CHECK-LABEL: @test_mm_maskz_avg_epu8 + // CHECK-LABEL: test_mm_maskz_avg_epu8 // CHECK: @llvm.x86.sse2.pavg.b // CHECK: select <16 x i1> %{{.*}}, <16 x i8> %{{.*}}, <16 x i8> %{{.*}} return _mm_maskz_avg_epu8(__U,__A,__B); } __m256i test_mm256_mask_avg_epu8(__m256i __W, __mmask32 __U, __m256i __A, __m256i __B) { - // CHECK-LABEL: @test_mm256_mask_avg_epu8 + // CHECK-LABEL: test_mm256_mask_avg_epu8 // CHECK: @llvm.x86.avx2.pavg.b // CHECK: select <32 x i1> %{{.*}}, <32 x i8> %{{.*}}, <32 x i8> %{{.*}} return _mm256_mask_avg_epu8(__W,__U,__A,__B); } __m256i test_mm256_maskz_avg_epu8(__mmask32 __U, __m256i __A, __m256i __B) { - // CHECK-LABEL: @test_mm256_maskz_avg_epu8 + // CHECK-LABEL: test_mm256_maskz_avg_epu8 // CHECK: @llvm.x86.avx2.pavg.b // CHECK: select <32 x i1> %{{.*}}, <32 x i8> %{{.*}}, <32 x i8> %{{.*}} return _mm256_maskz_avg_epu8(__U,__A,__B); } __m128i test_mm_mask_avg_epu16(__m128i __W, __mmask8 __U, __m128i __A, __m128i __B) { - // CHECK-LABEL: @test_mm_mask_avg_epu16 + // CHECK-LABEL: test_mm_mask_avg_epu16 // CHECK: @llvm.x86.sse2.pavg.w // CHECK: select <8 x i1> %{{.*}}, <8 x i16> %{{.*}}, <8 x i16> %{{.*}} return _mm_mask_avg_epu16(__W,__U,__A,__B); } __m128i test_mm_maskz_avg_epu16(__mmask8 __U, __m128i __A, __m128i __B) { - // CHECK-LABEL: @test_mm_maskz_avg_epu16 + // CHECK-LABEL: test_mm_maskz_avg_epu16 // CHECK: @llvm.x86.sse2.pavg.w // CHECK: select <8 x i1> %{{.*}}, <8 x i16> %{{.*}}, <8 x i16> %{{.*}} return _mm_maskz_avg_epu16(__U,__A,__B); } __m256i test_mm256_mask_avg_epu16(__m256i __W, __mmask16 __U, __m256i __A, __m256i __B) { - // CHECK-LABEL: @test_mm256_mask_avg_epu16 + // CHECK-LABEL: test_mm256_mask_avg_epu16 // CHECK: @llvm.x86.avx2.pavg.w // CHECK: select <16 x i1> %{{.*}}, <16 x i16> %{{.*}}, <16 x i16> %{{.*}} return _mm256_mask_avg_epu16(__W,__U,__A,__B); } __m256i test_mm256_maskz_avg_epu16(__mmask16 __U, __m256i __A, __m256i __B) { - // CHECK-LABEL: @test_mm256_maskz_avg_epu16 + // CHECK-LABEL: test_mm256_maskz_avg_epu16 // CHECK: @llvm.x86.avx2.pavg.w // CHECK: select <16 x i1> %{{.*}}, <16 x i16> %{{.*}}, <16 x i16> %{{.*}} return _mm256_maskz_avg_epu16(__U,__A,__B); } __m128i test_mm_maskz_max_epi8(__mmask16 __M, __m128i __A, __m128i __B) { - // CHECK-LABEL: @test_mm_maskz_max_epi8 + // CHECK-LABEL: test_mm_maskz_max_epi8 // CHECK: [[RES:%.*]] = call <16 x i8> @llvm.smax.v16i8(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}) // CHECK: [[TMP:%.*]] = bitcast [[SRCTY:<16 x i8>]] [[RES]] to [[DSTTY:<2 x i64>]] // CHECK: [[RES:%.*]] = bitcast [[DSTTY]] [[TMP]] to [[SRCTY]] @@ -1234,7 +1257,7 @@ __m128i test_mm_maskz_max_epi8(__mmask16 __M, __m128i __A, __m128i __B) { return _mm_maskz_max_epi8(__M,__A,__B); } __m128i test_mm_mask_max_epi8(__m128i __W, __mmask16 __M, __m128i __A, __m128i __B) { - // CHECK-LABEL: @test_mm_mask_max_epi8 + // CHECK-LABEL: test_mm_mask_max_epi8 // CHECK: [[RES:%.*]] = call <16 x i8> @llvm.smax.v16i8(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}) // CHECK: [[TMP:%.*]] = bitcast [[SRCTY:<16 x i8>]] [[RES]] to [[DSTTY:<2 x i64>]] // CHECK: [[RES:%.*]] = bitcast [[DSTTY]] [[TMP]] to [[SRCTY]] @@ -1242,7 +1265,7 @@ __m128i test_mm_mask_max_epi8(__m128i __W, __mmask16 __M, __m128i __A, __m128i _ return _mm_mask_max_epi8(__W,__M,__A,__B); } __m256i test_mm256_maskz_max_epi8(__mmask32 __M, __m256i __A, __m256i __B) { - // CHECK-LABEL: @test_mm256_maskz_max_epi8 + // CHECK-LABEL: test_mm256_maskz_max_epi8 // CHECK: [[RES:%.*]] = call <32 x i8> @llvm.smax.v32i8(<32 x i8> %{{.*}}, <32 x i8> %{{.*}}) // CHECK: [[TMP:%.*]] = bitcast [[SRCTY:<32 x i8>]] [[RES]] to [[DSTTY:<4 x i64>]] // CHECK: [[RES:%.*]] = bitcast [[DSTTY]] [[TMP]] to [[SRCTY]] @@ -1250,7 +1273,7 @@ __m256i test_mm256_maskz_max_epi8(__mmask32 __M, __m256i __A, __m256i __B) { return _mm256_maskz_max_epi8(__M,__A,__B); } __m256i test_mm256_mask_max_epi8(__m256i __W, __mmask32 __M, __m256i __A, __m256i __B) { - // CHECK-LABEL: @test_mm256_mask_max_epi8 + // CHECK-LABEL: test_mm256_mask_max_epi8 // CHECK: [[RES:%.*]] = call <32 x i8> @llvm.smax.v32i8(<32 x i8> %{{.*}}, <32 x i8> %{{.*}}) // CHECK: [[TMP:%.*]] = bitcast [[SRCTY:<32 x i8>]] [[RES]] to [[DSTTY:<4 x i64>]] // CHECK: [[RES:%.*]] = bitcast [[DSTTY]] [[TMP]] to [[SRCTY]] @@ -1258,7 +1281,7 @@ __m256i test_mm256_mask_max_epi8(__m256i __W, __mmask32 __M, __m256i __A, __m256 return _mm256_mask_max_epi8(__W,__M,__A,__B); } __m128i test_mm_maskz_max_epi16(__mmask8 __M, __m128i __A, __m128i __B) { - // CHECK-LABEL: @test_mm_maskz_max_epi16 + // CHECK-LABEL: test_mm_maskz_max_epi16 // CHECK: [[RES:%.*]] = call <8 x i16> @llvm.smax.v8i16(<8 x i16> %{{.*}}, <8 x i16> %{{.*}}) // CHECK: [[TMP:%.*]] = bitcast [[SRCTY:<8 x i16>]] [[RES]] to [[DSTTY:<2 x i64>]] // CHECK: [[RES:%.*]] = bitcast [[DSTTY]] [[TMP]] to [[SRCTY]] @@ -1266,7 +1289,7 @@ __m128i test_mm_maskz_max_epi16(__mmask8 __M, __m128i __A, __m128i __B) { return _mm_maskz_max_epi16(__M,__A,__B); } __m128i test_mm_mask_max_epi16(__m128i __W, __mmask8 __M, __m128i __A, __m128i __B) { - // CHECK-LABEL: @test_mm_mask_max_epi16 + // CHECK-LABEL: test_mm_mask_max_epi16 // CHECK: [[RES:%.*]] = call <8 x i16> @llvm.smax.v8i16(<8 x i16> %{{.*}}, <8 x i16> %{{.*}}) // CHECK: [[TMP:%.*]] = bitcast [[SRCTY:<8 x i16>]] [[RES]] to [[DSTTY:<2 x i64>]] // CHECK: [[RES:%.*]] = bitcast [[DSTTY]] [[TMP]] to [[SRCTY]] @@ -1274,7 +1297,7 @@ __m128i test_mm_mask_max_epi16(__m128i __W, __mmask8 __M, __m128i __A, __m128i _ return _mm_mask_max_epi16(__W,__M,__A,__B); } __m256i test_mm256_maskz_max_epi16(__mmask16 __M, __m256i __A, __m256i __B) { - // CHECK-LABEL: @test_mm256_maskz_max_epi16 + // CHECK-LABEL: test_mm256_maskz_max_epi16 // CHECK: [[RES:%.*]] = call <16 x i16> @llvm.smax.v16i16(<16 x i16> %{{.*}}, <16 x i16> %{{.*}}) // CHECK: [[TMP:%.*]] = bitcast [[SRCTY:<16 x i16>]] [[RES]] to [[DSTTY:<4 x i64>]] // CHECK: [[RES:%.*]] = bitcast [[DSTTY]] [[TMP]] to [[SRCTY]] @@ -1282,7 +1305,7 @@ __m256i test_mm256_maskz_max_epi16(__mmask16 __M, __m256i __A, __m256i __B) { return _mm256_maskz_max_epi16(__M,__A,__B); } __m256i test_mm256_mask_max_epi16(__m256i __W, __mmask16 __M, __m256i __A, __m256i __B) { - // CHECK-LABEL: @test_mm256_mask_max_epi16 + // CHECK-LABEL: test_mm256_mask_max_epi16 // CHECK: [[RES:%.*]] = call <16 x i16> @llvm.smax.v16i16(<16 x i16> %{{.*}}, <16 x i16> %{{.*}}) // CHECK: [[TMP:%.*]] = bitcast [[SRCTY:<16 x i16>]] [[RES]] to [[DSTTY:<4 x i64>]] // CHECK: [[RES:%.*]] = bitcast [[DSTTY]] [[TMP]] to [[SRCTY]] @@ -1290,7 +1313,7 @@ __m256i test_mm256_mask_max_epi16(__m256i __W, __mmask16 __M, __m256i __A, __m25 return _mm256_mask_max_epi16(__W,__M,__A,__B); } __m128i test_mm_maskz_max_epu8(__mmask16 __M, __m128i __A, __m128i __B) { - // CHECK-LABEL: @test_mm_maskz_max_epu8 + // CHECK-LABEL: test_mm_maskz_max_epu8 // CHECK: [[RES:%.*]] = call <16 x i8> @llvm.umax.v16i8(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}) // CHECK: [[TMP:%.*]] = bitcast [[SRCTY:<16 x i8>]] [[RES]] to [[DSTTY:<2 x i64>]] // CHECK: [[RES:%.*]] = bitcast [[DSTTY]] [[TMP]] to [[SRCTY]] @@ -1298,7 +1321,7 @@ __m128i test_mm_maskz_max_epu8(__mmask16 __M, __m128i __A, __m128i __B) { return _mm_maskz_max_epu8(__M,__A,__B); } __m128i test_mm_mask_max_epu8(__m128i __W, __mmask16 __M, __m128i __A, __m128i __B) { - // CHECK-LABEL: @test_mm_mask_max_epu8 + // CHECK-LABEL: test_mm_mask_max_epu8 // CHECK: [[RES:%.*]] = call <16 x i8> @llvm.umax.v16i8(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}) // CHECK: [[TMP:%.*]] = bitcast [[SRCTY:<16 x i8>]] [[RES]] to [[DSTTY:<2 x i64>]] // CHECK: [[RES:%.*]] = bitcast [[DSTTY]] [[TMP]] to [[SRCTY]] @@ -1306,7 +1329,7 @@ __m128i test_mm_mask_max_epu8(__m128i __W, __mmask16 __M, __m128i __A, __m128i _ return _mm_mask_max_epu8(__W,__M,__A,__B); } __m256i test_mm256_maskz_max_epu8(__mmask32 __M, __m256i __A, __m256i __B) { - // CHECK-LABEL: @test_mm256_maskz_max_epu8 + // CHECK-LABEL: test_mm256_maskz_max_epu8 // CHECK: [[RES:%.*]] = call <32 x i8> @llvm.umax.v32i8(<32 x i8> %{{.*}}, <32 x i8> %{{.*}}) // CHECK: [[TMP:%.*]] = bitcast [[SRCTY:<32 x i8>]] [[RES]] to [[DSTTY:<4 x i64>]] // CHECK: [[RES:%.*]] = bitcast [[DSTTY]] [[TMP]] to [[SRCTY]] @@ -1314,7 +1337,7 @@ __m256i test_mm256_maskz_max_epu8(__mmask32 __M, __m256i __A, __m256i __B) { return _mm256_maskz_max_epu8(__M,__A,__B); } __m256i test_mm256_mask_max_epu8(__m256i __W, __mmask32 __M, __m256i __A, __m256i __B) { - // CHECK-LABEL: @test_mm256_mask_max_epu8 + // CHECK-LABEL: test_mm256_mask_max_epu8 // CHECK: [[RES:%.*]] = call <32 x i8> @llvm.umax.v32i8(<32 x i8> %{{.*}}, <32 x i8> %{{.*}}) // CHECK: [[TMP:%.*]] = bitcast [[SRCTY:<32 x i8>]] [[RES]] to [[DSTTY:<4 x i64>]] // CHECK: [[RES:%.*]] = bitcast [[DSTTY]] [[TMP]] to [[SRCTY]] @@ -1322,7 +1345,7 @@ __m256i test_mm256_mask_max_epu8(__m256i __W, __mmask32 __M, __m256i __A, __m256 return _mm256_mask_max_epu8(__W,__M,__A,__B); } __m128i test_mm_maskz_max_epu16(__mmask8 __M, __m128i __A, __m128i __B) { - // CHECK-LABEL: @test_mm_maskz_max_epu16 + // CHECK-LABEL: test_mm_maskz_max_epu16 // CHECK: [[RES:%.*]] = call <8 x i16> @llvm.umax.v8i16(<8 x i16> %{{.*}}, <8 x i16> %{{.*}}) // CHECK: [[TMP:%.*]] = bitcast [[SRCTY:<8 x i16>]] [[RES]] to [[DSTTY:<2 x i64>]] // CHECK: [[RES:%.*]] = bitcast [[DSTTY]] [[TMP]] to [[SRCTY]] @@ -1330,7 +1353,7 @@ __m128i test_mm_maskz_max_epu16(__mmask8 __M, __m128i __A, __m128i __B) { return _mm_maskz_max_epu16(__M,__A,__B); } __m128i test_mm_mask_max_epu16(__m128i __W, __mmask8 __M, __m128i __A, __m128i __B) { - // CHECK-LABEL: @test_mm_mask_max_epu16 + // CHECK-LABEL: test_mm_mask_max_epu16 // CHECK: [[RES:%.*]] = call <8 x i16> @llvm.umax.v8i16(<8 x i16> %{{.*}}, <8 x i16> %{{.*}}) // CHECK: [[TMP:%.*]] = bitcast [[SRCTY:<8 x i16>]] [[RES]] to [[DSTTY:<2 x i64>]] // CHECK: [[RES:%.*]] = bitcast [[DSTTY]] [[TMP]] to [[SRCTY]] @@ -1338,7 +1361,7 @@ __m128i test_mm_mask_max_epu16(__m128i __W, __mmask8 __M, __m128i __A, __m128i _ return _mm_mask_max_epu16(__W,__M,__A,__B); } __m256i test_mm256_maskz_max_epu16(__mmask16 __M, __m256i __A, __m256i __B) { - // CHECK-LABEL: @test_mm256_maskz_max_epu16 + // CHECK-LABEL: test_mm256_maskz_max_epu16 // CHECK: [[RES:%.*]] = call <16 x i16> @llvm.umax.v16i16(<16 x i16> %{{.*}}, <16 x i16> %{{.*}}) // CHECK: [[TMP:%.*]] = bitcast [[SRCTY:<16 x i16>]] [[RES]] to [[DSTTY:<4 x i64>]] // CHECK: [[RES:%.*]] = bitcast [[DSTTY]] [[TMP]] to [[SRCTY]] @@ -1346,7 +1369,7 @@ __m256i test_mm256_maskz_max_epu16(__mmask16 __M, __m256i __A, __m256i __B) { return _mm256_maskz_max_epu16(__M,__A,__B); } __m256i test_mm256_mask_max_epu16(__m256i __W, __mmask16 __M, __m256i __A, __m256i __B) { - // CHECK-LABEL: @test_mm256_mask_max_epu16 + // CHECK-LABEL: test_mm256_mask_max_epu16 // CHECK: [[RES:%.*]] = call <16 x i16> @llvm.umax.v16i16(<16 x i16> %{{.*}}, <16 x i16> %{{.*}}) // CHECK: [[TMP:%.*]] = bitcast [[SRCTY:<16 x i16>]] [[RES]] to [[DSTTY:<4 x i64>]] // CHECK: [[RES:%.*]] = bitcast [[DSTTY]] [[TMP]] to [[SRCTY]] @@ -1354,7 +1377,7 @@ __m256i test_mm256_mask_max_epu16(__m256i __W, __mmask16 __M, __m256i __A, __m25 return _mm256_mask_max_epu16(__W,__M,__A,__B); } __m128i test_mm_maskz_min_epi8(__mmask16 __M, __m128i __A, __m128i __B) { - // CHECK-LABEL: @test_mm_maskz_min_epi8 + // CHECK-LABEL: test_mm_maskz_min_epi8 // CHECK: [[RES:%.*]] = call <16 x i8> @llvm.smin.v16i8(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}) // CHECK: [[TMP:%.*]] = bitcast [[SRCTY:<16 x i8>]] [[RES]] to [[DSTTY:<2 x i64>]] // CHECK: [[RES:%.*]] = bitcast [[DSTTY]] [[TMP]] to [[SRCTY]] @@ -1362,7 +1385,7 @@ __m128i test_mm_maskz_min_epi8(__mmask16 __M, __m128i __A, __m128i __B) { return _mm_maskz_min_epi8(__M,__A,__B); } __m128i test_mm_mask_min_epi8(__m128i __W, __mmask16 __M, __m128i __A, __m128i __B) { - // CHECK-LABEL: @test_mm_mask_min_epi8 + // CHECK-LABEL: test_mm_mask_min_epi8 // CHECK: [[RES:%.*]] = call <16 x i8> @llvm.smin.v16i8(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}) // CHECK: [[TMP:%.*]] = bitcast [[SRCTY:<16 x i8>]] [[RES]] to [[DSTTY:<2 x i64>]] // CHECK: [[RES:%.*]] = bitcast [[DSTTY]] [[TMP]] to [[SRCTY]] @@ -1370,7 +1393,7 @@ __m128i test_mm_mask_min_epi8(__m128i __W, __mmask16 __M, __m128i __A, __m128i _ return _mm_mask_min_epi8(__W,__M,__A,__B); } __m256i test_mm256_maskz_min_epi8(__mmask32 __M, __m256i __A, __m256i __B) { - // CHECK-LABEL: @test_mm256_maskz_min_epi8 + // CHECK-LABEL: test_mm256_maskz_min_epi8 // CHECK: [[RES:%.*]] = call <32 x i8> @llvm.smin.v32i8(<32 x i8> %{{.*}}, <32 x i8> %{{.*}}) // CHECK: [[TMP:%.*]] = bitcast [[SRCTY:<32 x i8>]] [[RES]] to [[DSTTY:<4 x i64>]] // CHECK: [[RES:%.*]] = bitcast [[DSTTY]] [[TMP]] to [[SRCTY]] @@ -1378,7 +1401,7 @@ __m256i test_mm256_maskz_min_epi8(__mmask32 __M, __m256i __A, __m256i __B) { return _mm256_maskz_min_epi8(__M,__A,__B); } __m256i test_mm256_mask_min_epi8(__m256i __W, __mmask32 __M, __m256i __A, __m256i __B) { - // CHECK-LABEL: @test_mm256_mask_min_epi8 + // CHECK-LABEL: test_mm256_mask_min_epi8 // CHECK: [[RES:%.*]] = call <32 x i8> @llvm.smin.v32i8(<32 x i8> %{{.*}}, <32 x i8> %{{.*}}) // CHECK: [[TMP:%.*]] = bitcast [[SRCTY:<32 x i8>]] [[RES]] to [[DSTTY:<4 x i64>]] // CHECK: [[RES:%.*]] = bitcast [[DSTTY]] [[TMP]] to [[SRCTY]] @@ -1386,7 +1409,7 @@ __m256i test_mm256_mask_min_epi8(__m256i __W, __mmask32 __M, __m256i __A, __m256 return _mm256_mask_min_epi8(__W,__M,__A,__B); } __m128i test_mm_maskz_min_epi16(__mmask8 __M, __m128i __A, __m128i __B) { - // CHECK-LABEL: @test_mm_maskz_min_epi16 + // CHECK-LABEL: test_mm_maskz_min_epi16 // CHECK: [[RES:%.*]] = call <8 x i16> @llvm.smin.v8i16(<8 x i16> %{{.*}}, <8 x i16> %{{.*}}) // CHECK: [[TMP:%.*]] = bitcast [[SRCTY:<8 x i16>]] [[RES]] to [[DSTTY:<2 x i64>]] // CHECK: [[RES:%.*]] = bitcast [[DSTTY]] [[TMP]] to [[SRCTY]] @@ -1394,7 +1417,7 @@ __m128i test_mm_maskz_min_epi16(__mmask8 __M, __m128i __A, __m128i __B) { return _mm_maskz_min_epi16(__M,__A,__B); } __m128i test_mm_mask_min_epi16(__m128i __W, __mmask8 __M, __m128i __A, __m128i __B) { - // CHECK-LABEL: @test_mm_mask_min_epi16 + // CHECK-LABEL: test_mm_mask_min_epi16 // CHECK: [[RES:%.*]] = call <8 x i16> @llvm.smin.v8i16(<8 x i16> %{{.*}}, <8 x i16> %{{.*}}) // CHECK: [[TMP:%.*]] = bitcast [[SRCTY:<8 x i16>]] [[RES]] to [[DSTTY:<2 x i64>]] // CHECK: [[RES:%.*]] = bitcast [[DSTTY]] [[TMP]] to [[SRCTY]] @@ -1402,7 +1425,7 @@ __m128i test_mm_mask_min_epi16(__m128i __W, __mmask8 __M, __m128i __A, __m128i _ return _mm_mask_min_epi16(__W,__M,__A,__B); } __m256i test_mm256_maskz_min_epi16(__mmask16 __M, __m256i __A, __m256i __B) { - // CHECK-LABEL: @test_mm256_maskz_min_epi16 + // CHECK-LABEL: test_mm256_maskz_min_epi16 // CHECK: [[RES:%.*]] = call <16 x i16> @llvm.smin.v16i16(<16 x i16> %{{.*}}, <16 x i16> %{{.*}}) // CHECK: [[TMP:%.*]] = bitcast [[SRCTY:<16 x i16>]] [[RES]] to [[DSTTY:<4 x i64>]] // CHECK: [[RES:%.*]] = bitcast [[DSTTY]] [[TMP]] to [[SRCTY]] @@ -1410,7 +1433,7 @@ __m256i test_mm256_maskz_min_epi16(__mmask16 __M, __m256i __A, __m256i __B) { return _mm256_maskz_min_epi16(__M,__A,__B); } __m256i test_mm256_mask_min_epi16(__m256i __W, __mmask16 __M, __m256i __A, __m256i __B) { - // CHECK-LABEL: @test_mm256_mask_min_epi16 + // CHECK-LABEL: test_mm256_mask_min_epi16 // CHECK: [[RES:%.*]] = call <16 x i16> @llvm.smin.v16i16(<16 x i16> %{{.*}}, <16 x i16> %{{.*}}) // CHECK: [[TMP:%.*]] = bitcast [[SRCTY:<16 x i16>]] [[RES]] to [[DSTTY:<4 x i64>]] // CHECK: [[RES:%.*]] = bitcast [[DSTTY]] [[TMP]] to [[SRCTY]] @@ -1418,7 +1441,7 @@ __m256i test_mm256_mask_min_epi16(__m256i __W, __mmask16 __M, __m256i __A, __m25 return _mm256_mask_min_epi16(__W,__M,__A,__B); } __m128i test_mm_maskz_min_epu8(__mmask16 __M, __m128i __A, __m128i __B) { - // CHECK-LABEL: @test_mm_maskz_min_epu8 + // CHECK-LABEL: test_mm_maskz_min_epu8 // CHECK: [[RES:%.*]] = call <16 x i8> @llvm.umin.v16i8(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}) // CHECK: [[TMP:%.*]] = bitcast [[SRCTY:<16 x i8>]] [[RES]] to [[DSTTY:<2 x i64>]] // CHECK: [[RES:%.*]] = bitcast [[DSTTY]] [[TMP]] to [[SRCTY]] @@ -1426,7 +1449,7 @@ __m128i test_mm_maskz_min_epu8(__mmask16 __M, __m128i __A, __m128i __B) { return _mm_maskz_min_epu8(__M,__A,__B); } __m128i test_mm_mask_min_epu8(__m128i __W, __mmask16 __M, __m128i __A, __m128i __B) { - // CHECK-LABEL: @test_mm_mask_min_epu8 + // CHECK-LABEL: test_mm_mask_min_epu8 // CHECK: [[RES:%.*]] = call <16 x i8> @llvm.umin.v16i8(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}) // CHECK: [[TMP:%.*]] = bitcast [[SRCTY:<16 x i8>]] [[RES]] to [[DSTTY:<2 x i64>]] // CHECK: [[RES:%.*]] = bitcast [[DSTTY]] [[TMP]] to [[SRCTY]] @@ -1434,7 +1457,7 @@ __m128i test_mm_mask_min_epu8(__m128i __W, __mmask16 __M, __m128i __A, __m128i _ return _mm_mask_min_epu8(__W,__M,__A,__B); } __m256i test_mm256_maskz_min_epu8(__mmask32 __M, __m256i __A, __m256i __B) { - // CHECK-LABEL: @test_mm256_maskz_min_epu8 + // CHECK-LABEL: test_mm256_maskz_min_epu8 // CHECK: [[RES:%.*]] = call <32 x i8> @llvm.umin.v32i8(<32 x i8> %{{.*}}, <32 x i8> %{{.*}}) // CHECK: [[TMP:%.*]] = bitcast [[SRCTY:<32 x i8>]] [[RES]] to [[DSTTY:<4 x i64>]] // CHECK: [[RES:%.*]] = bitcast [[DSTTY]] [[TMP]] to [[SRCTY]] @@ -1442,7 +1465,7 @@ __m256i test_mm256_maskz_min_epu8(__mmask32 __M, __m256i __A, __m256i __B) { return _mm256_maskz_min_epu8(__M,__A,__B); } __m256i test_mm256_mask_min_epu8(__m256i __W, __mmask32 __M, __m256i __A, __m256i __B) { - // CHECK-LABEL: @test_mm256_mask_min_epu8 + // CHECK-LABEL: test_mm256_mask_min_epu8 // CHECK: [[RES:%.*]] = call <32 x i8> @llvm.umin.v32i8(<32 x i8> %{{.*}}, <32 x i8> %{{.*}}) // CHECK: [[TMP:%.*]] = bitcast [[SRCTY:<32 x i8>]] [[RES]] to [[DSTTY:<4 x i64>]] // CHECK: [[RES:%.*]] = bitcast [[DSTTY]] [[TMP]] to [[SRCTY]] @@ -1450,7 +1473,7 @@ __m256i test_mm256_mask_min_epu8(__m256i __W, __mmask32 __M, __m256i __A, __m256 return _mm256_mask_min_epu8(__W,__M,__A,__B); } __m128i test_mm_maskz_min_epu16(__mmask8 __M, __m128i __A, __m128i __B) { - // CHECK-LABEL: @test_mm_maskz_min_epu16 + // CHECK-LABEL: test_mm_maskz_min_epu16 // CHECK: [[RES:%.*]] = call <8 x i16> @llvm.umin.v8i16(<8 x i16> %{{.*}}, <8 x i16> %{{.*}}) // CHECK: [[TMP:%.*]] = bitcast [[SRCTY:<8 x i16>]] [[RES]] to [[DSTTY:<2 x i64>]] // CHECK: [[RES:%.*]] = bitcast [[DSTTY]] [[TMP]] to [[SRCTY]] @@ -1458,7 +1481,7 @@ __m128i test_mm_maskz_min_epu16(__mmask8 __M, __m128i __A, __m128i __B) { return _mm_maskz_min_epu16(__M,__A,__B); } __m128i test_mm_mask_min_epu16(__m128i __W, __mmask8 __M, __m128i __A, __m128i __B) { - // CHECK-LABEL: @test_mm_mask_min_epu16 + // CHECK-LABEL: test_mm_mask_min_epu16 // CHECK: [[RES:%.*]] = call <8 x i16> @llvm.umin.v8i16(<8 x i16> %{{.*}}, <8 x i16> %{{.*}}) // CHECK: [[TMP:%.*]] = bitcast [[SRCTY:<8 x i16>]] [[RES]] to [[DSTTY:<2 x i64>]] // CHECK: [[RES:%.*]] = bitcast [[DSTTY]] [[TMP]] to [[SRCTY]] @@ -1466,7 +1489,7 @@ __m128i test_mm_mask_min_epu16(__m128i __W, __mmask8 __M, __m128i __A, __m128i _ return _mm_mask_min_epu16(__W,__M,__A,__B); } __m256i test_mm256_maskz_min_epu16(__mmask16 __M, __m256i __A, __m256i __B) { - // CHECK-LABEL: @test_mm256_maskz_min_epu16 + // CHECK-LABEL: test_mm256_maskz_min_epu16 // CHECK: [[RES:%.*]] = call <16 x i16> @llvm.umin.v16i16(<16 x i16> %{{.*}}, <16 x i16> %{{.*}}) // CHECK: [[TMP:%.*]] = bitcast [[SRCTY:<16 x i16>]] [[RES]] to [[DSTTY:<4 x i64>]] // CHECK: [[RES:%.*]] = bitcast [[DSTTY]] [[TMP]] to [[SRCTY]] @@ -1474,7 +1497,7 @@ __m256i test_mm256_maskz_min_epu16(__mmask16 __M, __m256i __A, __m256i __B) { return _mm256_maskz_min_epu16(__M,__A,__B); } __m256i test_mm256_mask_min_epu16(__m256i __W, __mmask16 __M, __m256i __A, __m256i __B) { - // CHECK-LABEL: @test_mm256_mask_min_epu16 + // CHECK-LABEL: test_mm256_mask_min_epu16 // CHECK: [[RES:%.*]] = call <16 x i16> @llvm.umin.v16i16(<16 x i16> %{{.*}}, <16 x i16> %{{.*}}) // CHECK: [[TMP:%.*]] = bitcast [[SRCTY:<16 x i16>]] [[RES]] to [[DSTTY:<4 x i64>]] // CHECK: [[RES:%.*]] = bitcast [[DSTTY]] [[TMP]] to [[SRCTY]] @@ -1482,128 +1505,128 @@ __m256i test_mm256_mask_min_epu16(__m256i __W, __mmask16 __M, __m256i __A, __m25 return _mm256_mask_min_epu16(__W,__M,__A,__B); } __m128i test_mm_mask_shuffle_epi8(__m128i __W, __mmask16 __U, __m128i __A, __m128i __B) { - // CHECK-LABEL: @test_mm_mask_shuffle_epi8 + // CHECK-LABEL: test_mm_mask_shuffle_epi8 // CHECK: @llvm.x86.ssse3.pshuf.b // CHECK: select <16 x i1> %{{.*}}, <16 x i8> %{{.*}}, <16 x i8> %{{.*}} return _mm_mask_shuffle_epi8(__W,__U,__A,__B); } __m128i test_mm_maskz_shuffle_epi8(__mmask16 __U, __m128i __A, __m128i __B) { - // CHECK-LABEL: @test_mm_maskz_shuffle_epi8 + // CHECK-LABEL: test_mm_maskz_shuffle_epi8 // CHECK: @llvm.x86.ssse3.pshuf.b // CHECK: select <16 x i1> %{{.*}}, <16 x i8> %{{.*}}, <16 x i8> %{{.*}} return _mm_maskz_shuffle_epi8(__U,__A,__B); } __m256i test_mm256_mask_shuffle_epi8(__m256i __W, __mmask32 __U, __m256i __A, __m256i __B) { - // CHECK-LABEL: @test_mm256_mask_shuffle_epi8 + // CHECK-LABEL: test_mm256_mask_shuffle_epi8 // CHECK: @llvm.x86.avx2.pshuf.b // CHECK: select <32 x i1> %{{.*}}, <32 x i8> %{{.*}}, <32 x i8> %{{.*}} return _mm256_mask_shuffle_epi8(__W,__U,__A,__B); } __m256i test_mm256_maskz_shuffle_epi8(__mmask32 __U, __m256i __A, __m256i __B) { - // CHECK-LABEL: @test_mm256_maskz_shuffle_epi8 + // CHECK-LABEL: test_mm256_maskz_shuffle_epi8 // CHECK: @llvm.x86.avx2.pshuf.b // CHECK: select <32 x i1> %{{.*}}, <32 x i8> %{{.*}}, <32 x i8> %{{.*}} return _mm256_maskz_shuffle_epi8(__U,__A,__B); } __m128i test_mm_mask_subs_epi8(__m128i __W, __mmask16 __U, __m128i __A, __m128i __B) { - // CHECK-LABEL: @test_mm_mask_subs_epi8 + // CHECK-LABEL: test_mm_mask_subs_epi8 // CHECK: @llvm.ssub.sat.v16i8 // CHECK: select <16 x i1> %{{.*}}, <16 x i8> %{{.*}}, <16 x i8> %{{.*}} return _mm_mask_subs_epi8(__W,__U,__A,__B); } __m128i test_mm_maskz_subs_epi8(__mmask16 __U, __m128i __A, __m128i __B) { - // CHECK-LABEL: @test_mm_maskz_subs_epi8 + // CHECK-LABEL: test_mm_maskz_subs_epi8 // CHECK: @llvm.ssub.sat.v16i8 // CHECK: select <16 x i1> %{{.*}}, <16 x i8> %{{.*}}, <16 x i8> %{{.*}} return _mm_maskz_subs_epi8(__U,__A,__B); } __m256i test_mm256_mask_subs_epi8(__m256i __W, __mmask32 __U, __m256i __A, __m256i __B) { - // CHECK-LABEL: @test_mm256_mask_subs_epi8 + // CHECK-LABEL: test_mm256_mask_subs_epi8 // CHECK: @llvm.ssub.sat.v32i8 // CHECK: select <32 x i1> %{{.*}}, <32 x i8> %{{.*}}, <32 x i8> %{{.*}} return _mm256_mask_subs_epi8(__W,__U,__A,__B); } __m256i test_mm256_maskz_subs_epi8(__mmask32 __U, __m256i __A, __m256i __B) { - // CHECK-LABEL: @test_mm256_maskz_subs_epi8 + // CHECK-LABEL: test_mm256_maskz_subs_epi8 // CHECK: @llvm.ssub.sat.v32i8 // CHECK: select <32 x i1> %{{.*}}, <32 x i8> %{{.*}}, <32 x i8> %{{.*}} return _mm256_maskz_subs_epi8(__U,__A,__B); } __m128i test_mm_mask_subs_epi16(__m128i __W, __mmask8 __U, __m128i __A, __m128i __B) { - // CHECK-LABEL: @test_mm_mask_subs_epi16 + // CHECK-LABEL: test_mm_mask_subs_epi16 // CHECK: @llvm.ssub.sat.v8i16 // CHECK: select <8 x i1> %{{.*}}, <8 x i16> %{{.*}}, <8 x i16> %{{.*}} return _mm_mask_subs_epi16(__W,__U,__A,__B); } __m128i test_mm_maskz_subs_epi16(__mmask8 __U, __m128i __A, __m128i __B) { - // CHECK-LABEL: @test_mm_maskz_subs_epi16 + // CHECK-LABEL: test_mm_maskz_subs_epi16 // CHECK: @llvm.ssub.sat.v8i16 // CHECK: select <8 x i1> %{{.*}}, <8 x i16> %{{.*}}, <8 x i16> %{{.*}} return _mm_maskz_subs_epi16(__U,__A,__B); } __m256i test_mm256_mask_subs_epi16(__m256i __W, __mmask16 __U, __m256i __A, __m256i __B) { - // CHECK-LABEL: @test_mm256_mask_subs_epi16 + // CHECK-LABEL: test_mm256_mask_subs_epi16 // CHECK: @llvm.ssub.sat.v16i16 // CHECK: select <16 x i1> %{{.*}}, <16 x i16> %{{.*}}, <16 x i16> %{{.*}} return _mm256_mask_subs_epi16(__W,__U,__A,__B); } __m256i test_mm256_maskz_subs_epi16(__mmask16 __U, __m256i __A, __m256i __B) { - // CHECK-LABEL: @test_mm256_maskz_subs_epi16 + // CHECK-LABEL: test_mm256_maskz_subs_epi16 // CHECK: @llvm.ssub.sat.v16i16 // CHECK: select <16 x i1> %{{.*}}, <16 x i16> %{{.*}}, <16 x i16> %{{.*}} return _mm256_maskz_subs_epi16(__U,__A,__B); } __m128i test_mm_mask_subs_epu8(__m128i __W, __mmask16 __U, __m128i __A, __m128i __B) { - // CHECK-LABEL: @test_mm_mask_subs_epu8 + // CHECK-LABEL: test_mm_mask_subs_epu8 // CHECK-NOT: @llvm.x86.sse2.psubus.b // CHECK: call <16 x i8> @llvm.usub.sat.v16i8(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}) // CHECK: select <16 x i1> %{{.*}}, <16 x i8> %{{.*}}, <16 x i8> %{{.*}} return _mm_mask_subs_epu8(__W,__U,__A,__B); } __m128i test_mm_maskz_subs_epu8(__mmask16 __U, __m128i __A, __m128i __B) { - // CHECK-LABEL: @test_mm_maskz_subs_epu8 + // CHECK-LABEL: test_mm_maskz_subs_epu8 // CHECK-NOT: @llvm.x86.sse2.psubus.b // CHECK: call <16 x i8> @llvm.usub.sat.v16i8(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}) // CHECK: select <16 x i1> %{{.*}}, <16 x i8> %{{.*}}, <16 x i8> %{{.*}} return _mm_maskz_subs_epu8(__U,__A,__B); } __m256i test_mm256_mask_subs_epu8(__m256i __W, __mmask32 __U, __m256i __A, __m256i __B) { - // CHECK-LABEL: @test_mm256_mask_subs_epu8 + // CHECK-LABEL: test_mm256_mask_subs_epu8 // CHECK-NOT: @llvm.x86.avx2.psubus.b // CHECK: call <32 x i8> @llvm.usub.sat.v32i8(<32 x i8> %{{.*}}, <32 x i8> %{{.*}}) // CHECK: select <32 x i1> %{{.*}}, <32 x i8> %{{.*}}, <32 x i8> %{{.*}} return _mm256_mask_subs_epu8(__W,__U,__A,__B); } __m256i test_mm256_maskz_subs_epu8(__mmask32 __U, __m256i __A, __m256i __B) { - // CHECK-LABEL: @test_mm256_maskz_subs_epu8 + // CHECK-LABEL: test_mm256_maskz_subs_epu8 // CHECK-NOT: @llvm.x86.avx2.psubus.b // CHECK: call <32 x i8> @llvm.usub.sat.v32i8(<32 x i8> %{{.*}}, <32 x i8> %{{.*}}) // CHECK: select <32 x i1> %{{.*}}, <32 x i8> %{{.*}}, <32 x i8> %{{.*}} return _mm256_maskz_subs_epu8(__U,__A,__B); } __m128i test_mm_mask_subs_epu16(__m128i __W, __mmask8 __U, __m128i __A, __m128i __B) { - // CHECK-LABEL: @test_mm_mask_subs_epu16 + // CHECK-LABEL: test_mm_mask_subs_epu16 // CHECK-NOT: @llvm.x86.sse2.psubus.w // CHECK: call <8 x i16> @llvm.usub.sat.v8i16(<8 x i16> %{{.*}}, <8 x i16> %{{.*}}) // CHECK: select <8 x i1> %{{.*}}, <8 x i16> %{{.*}}, <8 x i16> %{{.*}} return _mm_mask_subs_epu16(__W,__U,__A,__B); } __m128i test_mm_maskz_subs_epu16(__mmask8 __U, __m128i __A, __m128i __B) { - // CHECK-LABEL: @test_mm_maskz_subs_epu16 + // CHECK-LABEL: test_mm_maskz_subs_epu16 // CHECK-NOT: @llvm.x86.sse2.psubus.w // CHECK: call <8 x i16> @llvm.usub.sat.v8i16(<8 x i16> %{{.*}}, <8 x i16> %{{.*}}) // CHECK: select <8 x i1> %{{.*}}, <8 x i16> %{{.*}}, <8 x i16> %{{.*}} return _mm_maskz_subs_epu16(__U,__A,__B); } __m256i test_mm256_mask_subs_epu16(__m256i __W, __mmask16 __U, __m256i __A, __m256i __B) { - // CHECK-LABEL: @test_mm256_mask_subs_epu16 + // CHECK-LABEL: test_mm256_mask_subs_epu16 // CHECK-NOT: @llvm.x86.avx2.psubus.w // CHECK: call <16 x i16> @llvm.usub.sat.v16i16(<16 x i16> %{{.*}}, <16 x i16> %{{.*}}) // CHECK: select <16 x i1> %{{.*}}, <16 x i16> %{{.*}}, <16 x i16> %{{.*}} return _mm256_mask_subs_epu16(__W,__U,__A,__B); } __m256i test_mm256_maskz_subs_epu16(__mmask16 __U, __m256i __A, __m256i __B) { - // CHECK-LABEL: @test_mm256_maskz_subs_epu16 + // CHECK-LABEL: test_mm256_maskz_subs_epu16 // CHECK-NOT: @llvm.x86.avx2.psubus.w // CHECK: call <16 x i16> @llvm.usub.sat.v16i16(<16 x i16> %{{.*}}, <16 x i16> %{{.*}}) // CHECK: select <16 x i1> %{{.*}}, <16 x i16> %{{.*}}, <16 x i16> %{{.*}} @@ -1612,1019 +1635,1038 @@ __m256i test_mm256_maskz_subs_epu16(__mmask16 __U, __m256i __A, __m256i __B) { __m128i test_mm_mask2_permutex2var_epi16(__m128i __A, __m128i __I, __mmask8 __U, __m128i __B) { - // CHECK-LABEL: @test_mm_mask2_permutex2var_epi16 + // CHECK-LABEL: test_mm_mask2_permutex2var_epi16 // CHECK: @llvm.x86.avx512.vpermi2var.hi.128 // CHECK: select <8 x i1> %{{.*}}, <8 x i16> %{{.*}}, <8 x i16> %{{.*}} return _mm_mask2_permutex2var_epi16(__A,__I,__U,__B); } __m256i test_mm256_mask2_permutex2var_epi16(__m256i __A, __m256i __I, __mmask16 __U, __m256i __B) { - // CHECK-LABEL: @test_mm256_mask2_permutex2var_epi16 + // CHECK-LABEL: test_mm256_mask2_permutex2var_epi16 // CHECK: @llvm.x86.avx512.vpermi2var.hi.256 // CHECK: select <16 x i1> %{{.*}}, <16 x i16> %{{.*}}, <16 x i16> %{{.*}} return _mm256_mask2_permutex2var_epi16(__A,__I,__U,__B); } __m128i test_mm_permutex2var_epi16(__m128i __A, __m128i __I, __m128i __B) { - // CHECK-LABEL: @test_mm_permutex2var_epi16 + // CHECK-LABEL: test_mm_permutex2var_epi16 // CHECK: @llvm.x86.avx512.vpermi2var.hi.128 return _mm_permutex2var_epi16(__A,__I,__B); } __m128i test_mm_mask_permutex2var_epi16(__m128i __A, __mmask8 __U, __m128i __I, __m128i __B) { - // CHECK-LABEL: @test_mm_mask_permutex2var_epi16 + // CHECK-LABEL: test_mm_mask_permutex2var_epi16 // CHECK: @llvm.x86.avx512.vpermi2var.hi.128 // CHECK: select <8 x i1> %{{.*}}, <8 x i16> %{{.*}}, <8 x i16> %{{.*}} return _mm_mask_permutex2var_epi16(__A,__U,__I,__B); } __m128i test_mm_maskz_permutex2var_epi16(__mmask8 __U, __m128i __A, __m128i __I, __m128i __B) { - // CHECK-LABEL: @test_mm_maskz_permutex2var_epi16 + // CHECK-LABEL: test_mm_maskz_permutex2var_epi16 // CHECK: @llvm.x86.avx512.vpermi2var.hi.128 // CHECK: select <8 x i1> %{{.*}}, <8 x i16> %{{.*}}, <8 x i16> %{{.*}} return _mm_maskz_permutex2var_epi16(__U,__A,__I,__B); } __m256i test_mm256_permutex2var_epi16(__m256i __A, __m256i __I, __m256i __B) { - // CHECK-LABEL: @test_mm256_permutex2var_epi16 + // CHECK-LABEL: test_mm256_permutex2var_epi16 // CHECK: @llvm.x86.avx512.vpermi2var.hi.256 return _mm256_permutex2var_epi16(__A,__I,__B); } __m256i test_mm256_mask_permutex2var_epi16(__m256i __A, __mmask16 __U, __m256i __I, __m256i __B) { - // CHECK-LABEL: @test_mm256_mask_permutex2var_epi16 + // CHECK-LABEL: test_mm256_mask_permutex2var_epi16 // CHECK: @llvm.x86.avx512.vpermi2var.hi.256 // CHECK: select <16 x i1> %{{.*}}, <16 x i16> %{{.*}}, <16 x i16> %{{.*}} return _mm256_mask_permutex2var_epi16(__A,__U,__I,__B); } __m256i test_mm256_maskz_permutex2var_epi16(__mmask16 __U, __m256i __A, __m256i __I, __m256i __B) { - // CHECK-LABEL: @test_mm256_maskz_permutex2var_epi16 + // CHECK-LABEL: test_mm256_maskz_permutex2var_epi16 // CHECK: @llvm.x86.avx512.vpermi2var.hi.256 // CHECK: select <16 x i1> %{{.*}}, <16 x i16> %{{.*}}, <16 x i16> %{{.*}} return _mm256_maskz_permutex2var_epi16(__U,__A,__I,__B); } __m128i test_mm_mask_maddubs_epi16(__m128i __W, __mmask8 __U, __m128i __X, __m128i __Y) { - // CHECK-LABEL: @test_mm_mask_maddubs_epi16 + // CHECK-LABEL: test_mm_mask_maddubs_epi16 // CHECK: @llvm.x86.ssse3.pmadd.ub.sw // CHECK: select <8 x i1> %{{.*}}, <8 x i16> %{{.*}}, <8 x i16> %{{.*}} return _mm_mask_maddubs_epi16(__W, __U, __X, __Y); } __m128i test_mm_maskz_maddubs_epi16(__mmask8 __U, __m128i __X, __m128i __Y) { - // CHECK-LABEL: @test_mm_maskz_maddubs_epi16 + // CHECK-LABEL: test_mm_maskz_maddubs_epi16 // CHECK: @llvm.x86.ssse3.pmadd.ub.sw // CHECK: select <8 x i1> %{{.*}}, <8 x i16> %{{.*}}, <8 x i16> %{{.*}} return _mm_maskz_maddubs_epi16(__U, __X, __Y); } __m256i test_mm256_mask_maddubs_epi16(__m256i __W, __mmask16 __U, __m256i __X, __m256i __Y) { - // CHECK-LABEL: @test_mm256_mask_maddubs_epi16 + // CHECK-LABEL: test_mm256_mask_maddubs_epi16 // CHECK: @llvm.x86.avx2.pmadd.ub.sw // CHECK: select <16 x i1> %{{.*}}, <16 x i16> %{{.*}}, <16 x i16> %{{.*}} return _mm256_mask_maddubs_epi16(__W, __U, __X, __Y); } __m256i test_mm256_maskz_maddubs_epi16(__mmask16 __U, __m256i __X, __m256i __Y) { - // CHECK-LABEL: @test_mm256_maskz_maddubs_epi16 + // CHECK-LABEL: test_mm256_maskz_maddubs_epi16 // CHECK: @llvm.x86.avx2.pmadd.ub.sw // CHECK: select <16 x i1> %{{.*}}, <16 x i16> %{{.*}}, <16 x i16> %{{.*}} return _mm256_maskz_maddubs_epi16(__U, __X, __Y); } __m128i test_mm_mask_madd_epi16(__m128i __W, __mmask8 __U, __m128i __A, __m128i __B) { - // CHECK-LABEL: @test_mm_mask_madd_epi16 + // CHECK-LABEL: test_mm_mask_madd_epi16 // CHECK: @llvm.x86.sse2.pmadd.wd // CHECK: select <4 x i1> %{{.*}}, <4 x i32> %{{.*}}, <4 x i32> %{{.*}} return _mm_mask_madd_epi16(__W, __U, __A, __B); } __m128i test_mm_maskz_madd_epi16(__mmask8 __U, __m128i __A, __m128i __B) { - // CHECK-LABEL: @test_mm_maskz_madd_epi16 + // CHECK-LABEL: test_mm_maskz_madd_epi16 // CHECK: @llvm.x86.sse2.pmadd.wd // CHECK: select <4 x i1> %{{.*}}, <4 x i32> %{{.*}}, <4 x i32> %{{.*}} return _mm_maskz_madd_epi16(__U, __A, __B); } __m256i test_mm256_mask_madd_epi16(__m256i __W, __mmask8 __U, __m256i __A, __m256i __B) { - // CHECK-LABEL: @test_mm256_mask_madd_epi16 + // CHECK-LABEL: test_mm256_mask_madd_epi16 // CHECK: @llvm.x86.avx2.pmadd.wd // CHECK: select <8 x i1> %{{.*}}, <8 x i32> %{{.*}}, <8 x i32> %{{.*}} return _mm256_mask_madd_epi16(__W, __U, __A, __B); } __m256i test_mm256_maskz_madd_epi16(__mmask8 __U, __m256i __A, __m256i __B) { - // CHECK-LABEL: @test_mm256_maskz_madd_epi16 + // CHECK-LABEL: test_mm256_maskz_madd_epi16 // CHECK: @llvm.x86.avx2.pmadd.wd // CHECK: select <8 x i1> %{{.*}}, <8 x i32> %{{.*}}, <8 x i32> %{{.*}} return _mm256_maskz_madd_epi16(__U, __A, __B); } __m128i test_mm_cvtsepi16_epi8(__m128i __A) { - // CHECK-LABEL: @test_mm_cvtsepi16_epi8 + // CHECK-LABEL: test_mm_cvtsepi16_epi8 // CHECK: @llvm.x86.avx512.mask.pmovs.wb.128 return _mm_cvtsepi16_epi8(__A); } __m128i test_mm_mask_cvtsepi16_epi8(__m128i __O, __mmask8 __M, __m128i __A) { - // CHECK-LABEL: @test_mm_mask_cvtsepi16_epi8 + // CHECK-LABEL: test_mm_mask_cvtsepi16_epi8 // CHECK: @llvm.x86.avx512.mask.pmovs.wb.128 return _mm_mask_cvtsepi16_epi8(__O, __M, __A); } __m128i test_mm_maskz_cvtsepi16_epi8(__mmask8 __M, __m128i __A) { - // CHECK-LABEL: @test_mm_maskz_cvtsepi16_epi8 + // CHECK-LABEL: test_mm_maskz_cvtsepi16_epi8 // CHECK: @llvm.x86.avx512.mask.pmovs.wb.128 return _mm_maskz_cvtsepi16_epi8(__M, __A); } __m128i test_mm256_cvtsepi16_epi8(__m256i __A) { - // CHECK-LABEL: @test_mm256_cvtsepi16_epi8 + // CHECK-LABEL: test_mm256_cvtsepi16_epi8 // CHECK: @llvm.x86.avx512.mask.pmovs.wb.256 return _mm256_cvtsepi16_epi8(__A); } __m128i test_mm256_mask_cvtsepi16_epi8(__m128i __O, __mmask16 __M, __m256i __A) { - // CHECK-LABEL: @test_mm256_mask_cvtsepi16_epi8 + // CHECK-LABEL: test_mm256_mask_cvtsepi16_epi8 // CHECK: @llvm.x86.avx512.mask.pmovs.wb.256 return _mm256_mask_cvtsepi16_epi8(__O, __M, __A); } __m128i test_mm256_maskz_cvtsepi16_epi8(__mmask16 __M, __m256i __A) { - // CHECK-LABEL: @test_mm256_maskz_cvtsepi16_epi8 + // CHECK-LABEL: test_mm256_maskz_cvtsepi16_epi8 // CHECK: @llvm.x86.avx512.mask.pmovs.wb.256 return _mm256_maskz_cvtsepi16_epi8(__M, __A); } __m128i test_mm_cvtusepi16_epi8(__m128i __A) { - // CHECK-LABEL: @test_mm_cvtusepi16_epi8 + // CHECK-LABEL: test_mm_cvtusepi16_epi8 // CHECK: @llvm.x86.avx512.mask.pmovus.wb.128 return _mm_cvtusepi16_epi8(__A); } __m128i test_mm_mask_cvtusepi16_epi8(__m128i __O, __mmask8 __M, __m128i __A) { - // CHECK-LABEL: @test_mm_mask_cvtusepi16_epi8 + // CHECK-LABEL: test_mm_mask_cvtusepi16_epi8 // CHECK: @llvm.x86.avx512.mask.pmovus.wb.128 return _mm_mask_cvtusepi16_epi8(__O, __M, __A); } __m128i test_mm_maskz_cvtusepi16_epi8(__mmask8 __M, __m128i __A) { - // CHECK-LABEL: @test_mm_maskz_cvtusepi16_epi8 + // CHECK-LABEL: test_mm_maskz_cvtusepi16_epi8 // CHECK: @llvm.x86.avx512.mask.pmovus.wb.128 return _mm_maskz_cvtusepi16_epi8(__M, __A); } __m128i test_mm256_cvtusepi16_epi8(__m256i __A) { - // CHECK-LABEL: @test_mm256_cvtusepi16_epi8 + // CHECK-LABEL: test_mm256_cvtusepi16_epi8 // CHECK: @llvm.x86.avx512.mask.pmovus.wb.256 return _mm256_cvtusepi16_epi8(__A); } __m128i test_mm256_mask_cvtusepi16_epi8(__m128i __O, __mmask16 __M, __m256i __A) { - // CHECK-LABEL: @test_mm256_mask_cvtusepi16_epi8 + // CHECK-LABEL: test_mm256_mask_cvtusepi16_epi8 // CHECK: @llvm.x86.avx512.mask.pmovus.wb.256 return _mm256_mask_cvtusepi16_epi8(__O, __M, __A); } __m128i test_mm256_maskz_cvtusepi16_epi8(__mmask16 __M, __m256i __A) { - // CHECK-LABEL: @test_mm256_maskz_cvtusepi16_epi8 + // CHECK-LABEL: test_mm256_maskz_cvtusepi16_epi8 // CHECK: @llvm.x86.avx512.mask.pmovus.wb.256 return _mm256_maskz_cvtusepi16_epi8(__M, __A); } __m128i test_mm_cvtepi16_epi8(__m128i __A) { - // CHECK-LABEL: @test_mm_cvtepi16_epi8 + // CHECK-LABEL: test_mm_cvtepi16_epi8 // CHECK: trunc <8 x i16> %{{.*}} to <8 x i8> // CHECK: shufflevector <8 x i8> %{{.*}}, <8 x i8> %{{.*}}, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15> return _mm_cvtepi16_epi8(__A); } __m128i test_mm_mask_cvtepi16_epi8(__m128i __O, __mmask8 __M, __m128i __A) { - // CHECK-LABEL: @test_mm_mask_cvtepi16_epi8 + // CHECK-LABEL: test_mm_mask_cvtepi16_epi8 // CHECK: @llvm.x86.avx512.mask.pmov.wb.128 return _mm_mask_cvtepi16_epi8(__O, __M, __A); } __m128i test_mm_maskz_cvtepi16_epi8(__mmask8 __M, __m128i __A) { - // CHECK-LABEL: @test_mm_maskz_cvtepi16_epi8 + // CHECK-LABEL: test_mm_maskz_cvtepi16_epi8 // CHECK: @llvm.x86.avx512.mask.pmov.wb.128 return _mm_maskz_cvtepi16_epi8(__M, __A); } __m128i test_mm256_cvtepi16_epi8(__m256i __A) { - // CHECK-LABEL: @test_mm256_cvtepi16_epi8 + // CHECK-LABEL: test_mm256_cvtepi16_epi8 // CHECK: trunc <16 x i16> %{{.*}} to <16 x i8> return _mm256_cvtepi16_epi8(__A); } __m128i test_mm256_mask_cvtepi16_epi8(__m128i __O, __mmask16 __M, __m256i __A) { - // CHECK-LABEL: @test_mm256_mask_cvtepi16_epi8 + // CHECK-LABEL: test_mm256_mask_cvtepi16_epi8 // CHECK: trunc <16 x i16> %{{.*}} to <16 x i8> // CHECK: select <16 x i1> %{{.*}}, <16 x i8> %{{.*}}, <16 x i8> %{{.*}} return _mm256_mask_cvtepi16_epi8(__O, __M, __A); } __m128i test_mm256_maskz_cvtepi16_epi8(__mmask16 __M, __m256i __A) { - // CHECK-LABEL: @test_mm256_maskz_cvtepi16_epi8 + // CHECK-LABEL: test_mm256_maskz_cvtepi16_epi8 // CHECK: trunc <16 x i16> %{{.*}} to <16 x i8> // CHECK: select <16 x i1> %{{.*}}, <16 x i8> %{{.*}}, <16 x i8> %{{.*}} return _mm256_maskz_cvtepi16_epi8(__M, __A); } __m128i test_mm_mask_mulhrs_epi16(__m128i __W, __mmask8 __U, __m128i __X, __m128i __Y) { - // CHECK-LABEL: @test_mm_mask_mulhrs_epi16 + // CHECK-LABEL: test_mm_mask_mulhrs_epi16 // CHECK: @llvm.x86.ssse3.pmul.hr.sw // CHECK: select <8 x i1> %{{.*}}, <8 x i16> %{{.*}}, <8 x i16> %{{.*}} return _mm_mask_mulhrs_epi16(__W, __U, __X, __Y); } __m128i test_mm_maskz_mulhrs_epi16(__mmask8 __U, __m128i __X, __m128i __Y) { - // CHECK-LABEL: @test_mm_maskz_mulhrs_epi16 + // CHECK-LABEL: test_mm_maskz_mulhrs_epi16 // CHECK: @llvm.x86.ssse3.pmul.hr.sw // CHECK: select <8 x i1> %{{.*}}, <8 x i16> %{{.*}}, <8 x i16> %{{.*}} return _mm_maskz_mulhrs_epi16(__U, __X, __Y); } __m256i test_mm256_mask_mulhrs_epi16(__m256i __W, __mmask16 __U, __m256i __X, __m256i __Y) { - // CHECK-LABEL: @test_mm256_mask_mulhrs_epi16 + // CHECK-LABEL: test_mm256_mask_mulhrs_epi16 // CHECK: @llvm.x86.avx2.pmul.hr.sw // CHECK: select <16 x i1> %{{.*}}, <16 x i16> %{{.*}}, <16 x i16> %{{.*}} return _mm256_mask_mulhrs_epi16(__W, __U, __X, __Y); } __m256i test_mm256_maskz_mulhrs_epi16(__mmask16 __U, __m256i __X, __m256i __Y) { - // CHECK-LABEL: @test_mm256_maskz_mulhrs_epi16 + // CHECK-LABEL: test_mm256_maskz_mulhrs_epi16 // CHECK: @llvm.x86.avx2.pmul.hr.sw // CHECK: select <16 x i1> %{{.*}}, <16 x i16> %{{.*}}, <16 x i16> %{{.*}} return _mm256_maskz_mulhrs_epi16(__U, __X, __Y); } __m128i test_mm_mask_mulhi_epu16(__m128i __W, __mmask8 __U, __m128i __A, __m128i __B) { - // CHECK-LABEL: @test_mm_mask_mulhi_epu16 + // CHECK-LABEL: test_mm_mask_mulhi_epu16 // CHECK: @llvm.x86.sse2.pmulhu.w // CHECK: select <8 x i1> %{{.*}}, <8 x i16> %{{.*}}, <8 x i16> %{{.*}} return _mm_mask_mulhi_epu16(__W, __U, __A, __B); } +TEST_CONSTEXPR(match_v8hi(_mm_mask_mulhi_epu16(_mm_set1_epi16(1), 0x3C, (__m128i)(__v8hi){+1, -2, +3, -4, +5, -6, +7, -8}, (__m128i)(__v8hi){-16, -14, +12, +10, -8, +6, -4, +2}), 1, 1, 0, 9, 4, 5, 1, 1)); __m128i test_mm_maskz_mulhi_epu16(__mmask8 __U, __m128i __A, __m128i __B) { - // CHECK-LABEL: @test_mm_maskz_mulhi_epu16 + // CHECK-LABEL: test_mm_maskz_mulhi_epu16 // CHECK: @llvm.x86.sse2.pmulhu.w // CHECK: select <8 x i1> %{{.*}}, <8 x i16> %{{.*}}, <8 x i16> %{{.*}} return _mm_maskz_mulhi_epu16(__U, __A, __B); } +TEST_CONSTEXPR(match_v8hi(_mm_maskz_mulhi_epu16(0x87, (__m128i)(__v8hi){+1, -2, +3, -4, +5, -6, +7, -8}, (__m128i)(__v8hi){-16, -14, +12, +10, -8, +6, -4, +2}), 0, -16, 0, 0, 0, 0, 0, 1)); __m256i test_mm256_mask_mulhi_epu16(__m256i __W, __mmask16 __U, __m256i __A, __m256i __B) { - // CHECK-LABEL: @test_mm256_mask_mulhi_epu16 + // CHECK-LABEL: test_mm256_mask_mulhi_epu16 // CHECK: @llvm.x86.avx2.pmulhu.w // CHECK: select <16 x i1> %{{.*}}, <16 x i16> %{{.*}}, <16 x i16> %{{.*}} return _mm256_mask_mulhi_epu16(__W, __U, __A, __B); } +TEST_CONSTEXPR(match_v16hi(_mm256_mask_mulhi_epu16(_mm256_set1_epi16(1), 0xF00F, (__m256i)(__v16hi){+1, -2, +3, -4, +5, -6, +7, -8, +9, -10, +11, -12, +13, -14, +15, -16}, (__m256i)(__v16hi){-32, -30, +28, +26, -24, -22, +20, +18, -16, -14, +12, +10, -8, +6, -4, +2}), 0, -32, 0, 25, 1, 1, 1, 1, 1, 1, 1, 1, 12, 5, 14, 1)); __m256i test_mm256_maskz_mulhi_epu16(__mmask16 __U, __m256i __A, __m256i __B) { - // CHECK-LABEL: @test_mm256_maskz_mulhi_epu16 + // CHECK-LABEL: test_mm256_maskz_mulhi_epu16 // CHECK: @llvm.x86.avx2.pmulhu.w // CHECK: select <16 x i1> %{{.*}}, <16 x i16> %{{.*}}, <16 x i16> %{{.*}} return _mm256_maskz_mulhi_epu16(__U, __A, __B); } +TEST_CONSTEXPR(match_v16hi(_mm256_maskz_mulhi_epu16(0x0FF0, (__m256i)(__v16hi){+1, -2, +3, -4, +5, -6, +7, -8, +9, -10, +11, -12, +13, -14, +15, -16}, (__m256i)(__v16hi){-32, -30, +28, +26, -24, -22, +20, +18, -16, -14, +12, +10, -8, +6, -4, +2}), 0, 0, 0, 0, 4, -28, 0, 17, 8, -24, 0, 9, 0, 0, 0, 0)); __m128i test_mm_mask_mulhi_epi16(__m128i __W, __mmask8 __U, __m128i __A, __m128i __B) { - // CHECK-LABEL: @test_mm_mask_mulhi_epi16 + // CHECK-LABEL: test_mm_mask_mulhi_epi16 // CHECK: @llvm.x86.sse2.pmulh.w // CHECK: select <8 x i1> %{{.*}}, <8 x i16> %{{.*}}, <8 x i16> %{{.*}} return _mm_mask_mulhi_epi16(__W, __U, __A, __B); } +TEST_CONSTEXPR(match_v8hi(_mm_mask_mulhi_epu16(_mm_set1_epi16(1), 0x78, (__m128i)(__v8hi){+1, -2, +3, -4, +5, -6, +7, -8}, (__m128i)(__v8hi){-16, -14, +12, +10, -8, +6, -4, +2}), 1, 1, 1, 9, 4, 5, 6, 1)); __m128i test_mm_maskz_mulhi_epi16(__mmask8 __U, __m128i __A, __m128i __B) { - // CHECK-LABEL: @test_mm_maskz_mulhi_epi16 + // CHECK-LABEL: test_mm_maskz_mulhi_epi16 // CHECK: @llvm.x86.sse2.pmulh.w // CHECK: select <8 x i1> %{{.*}}, <8 x i16> %{{.*}}, <8 x i16> %{{.*}} return _mm_maskz_mulhi_epi16(__U, __A, __B); } +TEST_CONSTEXPR(match_v8hi(_mm_maskz_mulhi_epi16(0xC3, (__m128i)(__v8hi){+1, -2, +3, -4, +5, -6, +7, -8}, (__m128i)(__v8hi){-16, -14, +12, +10, -8, +6, -4, +2}), -1, 0, 0, 0, 0, 0, -1, -1)); __m256i test_mm256_mask_mulhi_epi16(__m256i __W, __mmask16 __U, __m256i __A, __m256i __B) { - // CHECK-LABEL: @test_mm256_mask_mulhi_epi16 + // CHECK-LABEL: test_mm256_mask_mulhi_epi16 // CHECK: @llvm.x86.avx2.pmulh.w // CHECK: select <16 x i1> %{{.*}}, <16 x i16> %{{.*}}, <16 x i16> %{{.*}} return _mm256_mask_mulhi_epi16(__W, __U, __A, __B); } +TEST_CONSTEXPR(match_v16hi(_mm256_mask_mulhi_epi16(_mm256_set1_epi16(1), 0x0FF0, (__m256i)(__v16hi){+1, -2, +3, -4, +5, -6, +7, -8, +9, -10, +11, -12, +13, -14, +15, -16}, (__m256i)(__v16hi){-32, -30, +28, +26, -24, -22, +20, +18, -16, -14, +12, +10, -8, +6, -4, +2}), 1, 1, 1, 1, -1, 0, 0, -1, -1, 0, 0, -1, 1, 1, 1, 1)); __m256i test_mm256_maskz_mulhi_epi16(__mmask16 __U, __m256i __A, __m256i __B) { - // CHECK-LABEL: @test_mm256_maskz_mulhi_epi16 + // CHECK-LABEL: test_mm256_maskz_mulhi_epi16 // CHECK: @llvm.x86.avx2.pmulh.w // CHECK: select <16 x i1> %{{.*}}, <16 x i16> %{{.*}}, <16 x i16> %{{.*}} return _mm256_maskz_mulhi_epi16(__U, __A, __B); } +TEST_CONSTEXPR(match_v16hi(_mm256_maskz_mulhi_epi16(0xF00F, (__m256i)(__v16hi){+1, -2, +3, -4, +5, -6, +7, -8, +9, -10, +11, -12, +13, -14, +15, -16}, (__m256i)(__v16hi){-32, -30, +28, +26, -24, -22, +20, +18, -16, -14, +12, +10, -8, +6, -4, +2}), -1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, -1, -1, -1, -1)); __m128i test_mm_mask_unpackhi_epi8(__m128i __W, __mmask16 __U, __m128i __A, __m128i __B) { - // CHECK-LABEL: @test_mm_mask_unpackhi_epi8 + // CHECK-LABEL: test_mm_mask_unpackhi_epi8 // CHECK: shufflevector <16 x i8> %{{.*}}, <16 x i8> %{{.*}}, <16 x i32> <i32 8, i32 24, i32 9, i32 25, i32 10, i32 26, i32 11, i32 27, i32 12, i32 28, i32 13, i32 29, i32 14, i32 30, i32 15, i32 31> // CHECK: select <16 x i1> %{{.*}}, <16 x i8> %{{.*}}, <16 x i8> %{{.*}} return _mm_mask_unpackhi_epi8(__W, __U, __A, __B); } __m128i test_mm_maskz_unpackhi_epi8(__mmask16 __U, __m128i __A, __m128i __B) { - // CHECK-LABEL: @test_mm_maskz_unpackhi_epi8 + // CHECK-LABEL: test_mm_maskz_unpackhi_epi8 // CHECK: shufflevector <16 x i8> %{{.*}}, <16 x i8> %{{.*}}, <16 x i32> <i32 8, i32 24, i32 9, i32 25, i32 10, i32 26, i32 11, i32 27, i32 12, i32 28, i32 13, i32 29, i32 14, i32 30, i32 15, i32 31> // CHECK: select <16 x i1> %{{.*}}, <16 x i8> %{{.*}}, <16 x i8> %{{.*}} return _mm_maskz_unpackhi_epi8(__U, __A, __B); } __m256i test_mm256_mask_unpackhi_epi8(__m256i __W, __mmask32 __U, __m256i __A, __m256i __B) { - // CHECK-LABEL: @test_mm256_mask_unpackhi_epi8 + // CHECK-LABEL: test_mm256_mask_unpackhi_epi8 // CHECK: shufflevector <32 x i8> %{{.*}}, <32 x i8> %{{.*}}, <32 x i32> <i32 8, i32 40, i32 9, i32 41, i32 10, i32 42, i32 11, i32 43, i32 12, i32 44, i32 13, i32 45, i32 14, i32 46, i32 15, i32 47, i32 24, i32 56, i32 25, i32 57, i32 26, i32 58, i32 27, i32 59, i32 28, i32 60, i32 29, i32 61, i32 30, i32 62, i32 31, i32 63> // CHECK: select <32 x i1> %{{.*}}, <32 x i8> %{{.*}}, <32 x i8> %{{.*}} return _mm256_mask_unpackhi_epi8(__W, __U, __A, __B); } __m256i test_mm256_maskz_unpackhi_epi8(__mmask32 __U, __m256i __A, __m256i __B) { - // CHECK-LABEL: @test_mm256_maskz_unpackhi_epi8 + // CHECK-LABEL: test_mm256_maskz_unpackhi_epi8 // CHECK: shufflevector <32 x i8> %{{.*}}, <32 x i8> %{{.*}}, <32 x i32> <i32 8, i32 40, i32 9, i32 41, i32 10, i32 42, i32 11, i32 43, i32 12, i32 44, i32 13, i32 45, i32 14, i32 46, i32 15, i32 47, i32 24, i32 56, i32 25, i32 57, i32 26, i32 58, i32 27, i32 59, i32 28, i32 60, i32 29, i32 61, i32 30, i32 62, i32 31, i32 63> // CHECK: select <32 x i1> %{{.*}}, <32 x i8> %{{.*}}, <32 x i8> %{{.*}} return _mm256_maskz_unpackhi_epi8(__U, __A, __B); } __m128i test_mm_mask_unpackhi_epi16(__m128i __W, __mmask8 __U, __m128i __A, __m128i __B) { - // CHECK-LABEL: @test_mm_mask_unpackhi_epi16 + // CHECK-LABEL: test_mm_mask_unpackhi_epi16 // CHECK: shufflevector <8 x i16> %{{.*}}, <8 x i16> %{{.*}}, <8 x i32> <i32 4, i32 12, i32 5, i32 13, i32 6, i32 14, i32 7, i32 15> // CHECK: select <8 x i1> %{{.*}}, <8 x i16> %{{.*}}, <8 x i16> %{{.*}} return _mm_mask_unpackhi_epi16(__W, __U, __A, __B); } __m128i test_mm_maskz_unpackhi_epi16(__mmask8 __U, __m128i __A, __m128i __B) { - // CHECK-LABEL: @test_mm_maskz_unpackhi_epi16 + // CHECK-LABEL: test_mm_maskz_unpackhi_epi16 // CHECK: shufflevector <8 x i16> %{{.*}}, <8 x i16> %{{.*}}, <8 x i32> <i32 4, i32 12, i32 5, i32 13, i32 6, i32 14, i32 7, i32 15> // CHECK: select <8 x i1> %{{.*}}, <8 x i16> %{{.*}}, <8 x i16> %{{.*}} return _mm_maskz_unpackhi_epi16(__U, __A, __B); } __m256i test_mm256_mask_unpackhi_epi16(__m256i __W, __mmask16 __U, __m256i __A, __m256i __B) { - // CHECK-LABEL: @test_mm256_mask_unpackhi_epi16 + // CHECK-LABEL: test_mm256_mask_unpackhi_epi16 // CHECK: shufflevector <16 x i16> %{{.*}}, <16 x i16> %{{.*}}, <16 x i32> <i32 4, i32 20, i32 5, i32 21, i32 6, i32 22, i32 7, i32 23, i32 12, i32 28, i32 13, i32 29, i32 14, i32 30, i32 15, i32 31> // CHECK: select <16 x i1> %{{.*}}, <16 x i16> %{{.*}}, <16 x i16> %{{.*}} return _mm256_mask_unpackhi_epi16(__W, __U, __A, __B); } __m256i test_mm256_maskz_unpackhi_epi16(__mmask16 __U, __m256i __A, __m256i __B) { - // CHECK-LABEL: @test_mm256_maskz_unpackhi_epi16 + // CHECK-LABEL: test_mm256_maskz_unpackhi_epi16 // CHECK: shufflevector <16 x i16> %{{.*}}, <16 x i16> %{{.*}}, <16 x i32> <i32 4, i32 20, i32 5, i32 21, i32 6, i32 22, i32 7, i32 23, i32 12, i32 28, i32 13, i32 29, i32 14, i32 30, i32 15, i32 31> // CHECK: select <16 x i1> %{{.*}}, <16 x i16> %{{.*}}, <16 x i16> %{{.*}} return _mm256_maskz_unpackhi_epi16(__U, __A, __B); } __m128i test_mm_mask_unpacklo_epi8(__m128i __W, __mmask16 __U, __m128i __A, __m128i __B) { - // CHECK-LABEL: @test_mm_mask_unpacklo_epi8 + // CHECK-LABEL: test_mm_mask_unpacklo_epi8 // CHECK: shufflevector <16 x i8> %{{.*}}, <16 x i8> %{{.*}}, <16 x i32> <i32 0, i32 16, i32 1, i32 17, i32 2, i32 18, i32 3, i32 19, i32 4, i32 20, i32 5, i32 21, i32 6, i32 22, i32 7, i32 23> // CHECK: select <16 x i1> %{{.*}}, <16 x i8> %{{.*}}, <16 x i8> %{{.*}} return _mm_mask_unpacklo_epi8(__W, __U, __A, __B); } __m128i test_mm_maskz_unpacklo_epi8(__mmask16 __U, __m128i __A, __m128i __B) { - // CHECK-LABEL: @test_mm_maskz_unpacklo_epi8 + // CHECK-LABEL: test_mm_maskz_unpacklo_epi8 // CHECK: shufflevector <16 x i8> %{{.*}}, <16 x i8> %{{.*}}, <16 x i32> <i32 0, i32 16, i32 1, i32 17, i32 2, i32 18, i32 3, i32 19, i32 4, i32 20, i32 5, i32 21, i32 6, i32 22, i32 7, i32 23> // CHECK: select <16 x i1> %{{.*}}, <16 x i8> %{{.*}}, <16 x i8> %{{.*}} return _mm_maskz_unpacklo_epi8(__U, __A, __B); } __m256i test_mm256_mask_unpacklo_epi8(__m256i __W, __mmask32 __U, __m256i __A, __m256i __B) { - // CHECK-LABEL: @test_mm256_mask_unpacklo_epi8 + // CHECK-LABEL: test_mm256_mask_unpacklo_epi8 // CHECK: shufflevector <32 x i8> %{{.*}}, <32 x i8> %{{.*}}, <32 x i32> <i32 0, i32 32, i32 1, i32 33, i32 2, i32 34, i32 3, i32 35, i32 4, i32 36, i32 5, i32 37, i32 6, i32 38, i32 7, i32 39, i32 16, i32 48, i32 17, i32 49, i32 18, i32 50, i32 19, i32 51, i32 20, i32 52, i32 21, i32 53, i32 22, i32 54, i32 23, i32 55> // CHECK: select <32 x i1> %{{.*}}, <32 x i8> %{{.*}}, <32 x i8> %{{.*}} return _mm256_mask_unpacklo_epi8(__W, __U, __A, __B); } __m256i test_mm256_maskz_unpacklo_epi8(__mmask32 __U, __m256i __A, __m256i __B) { - // CHECK-LABEL: @test_mm256_maskz_unpacklo_epi8 + // CHECK-LABEL: test_mm256_maskz_unpacklo_epi8 // CHECK: shufflevector <32 x i8> %{{.*}}, <32 x i8> %{{.*}}, <32 x i32> <i32 0, i32 32, i32 1, i32 33, i32 2, i32 34, i32 3, i32 35, i32 4, i32 36, i32 5, i32 37, i32 6, i32 38, i32 7, i32 39, i32 16, i32 48, i32 17, i32 49, i32 18, i32 50, i32 19, i32 51, i32 20, i32 52, i32 21, i32 53, i32 22, i32 54, i32 23, i32 55> // CHECK: select <32 x i1> %{{.*}}, <32 x i8> %{{.*}}, <32 x i8> %{{.*}} return _mm256_maskz_unpacklo_epi8(__U, __A, __B); } __m128i test_mm_mask_unpacklo_epi16(__m128i __W, __mmask8 __U, __m128i __A, __m128i __B) { - // CHECK-LABEL: @test_mm_mask_unpacklo_epi16 + // CHECK-LABEL: test_mm_mask_unpacklo_epi16 // CHECK: shufflevector <8 x i16> %{{.*}}, <8 x i16> %{{.*}}, <8 x i32> <i32 0, i32 8, i32 1, i32 9, i32 2, i32 10, i32 3, i32 11> // CHECK: select <8 x i1> %{{.*}}, <8 x i16> %{{.*}}, <8 x i16> %{{.*}} return _mm_mask_unpacklo_epi16(__W, __U, __A, __B); } __m128i test_mm_maskz_unpacklo_epi16(__mmask8 __U, __m128i __A, __m128i __B) { - // CHECK-LABEL: @test_mm_maskz_unpacklo_epi16 + // CHECK-LABEL: test_mm_maskz_unpacklo_epi16 // CHECK: shufflevector <8 x i16> %{{.*}}, <8 x i16> %{{.*}}, <8 x i32> <i32 0, i32 8, i32 1, i32 9, i32 2, i32 10, i32 3, i32 11> // CHECK: select <8 x i1> %{{.*}}, <8 x i16> %{{.*}}, <8 x i16> %{{.*}} return _mm_maskz_unpacklo_epi16(__U, __A, __B); } __m256i test_mm256_mask_unpacklo_epi16(__m256i __W, __mmask16 __U, __m256i __A, __m256i __B) { - // CHECK-LABEL: @test_mm256_mask_unpacklo_epi16 + // CHECK-LABEL: test_mm256_mask_unpacklo_epi16 // CHECK: shufflevector <16 x i16> %{{.*}}, <16 x i16> %{{.*}}, <16 x i32> <i32 0, i32 16, i32 1, i32 17, i32 2, i32 18, i32 3, i32 19, i32 8, i32 24, i32 9, i32 25, i32 10, i32 26, i32 11, i32 27> // CHECK: select <16 x i1> %{{.*}}, <16 x i16> %{{.*}}, <16 x i16> %{{.*}} return _mm256_mask_unpacklo_epi16(__W, __U, __A, __B); } __m256i test_mm256_maskz_unpacklo_epi16(__mmask16 __U, __m256i __A, __m256i __B) { - // CHECK-LABEL: @test_mm256_maskz_unpacklo_epi16 + // CHECK-LABEL: test_mm256_maskz_unpacklo_epi16 // CHECK: shufflevector <16 x i16> %{{.*}}, <16 x i16> %{{.*}}, <16 x i32> <i32 0, i32 16, i32 1, i32 17, i32 2, i32 18, i32 3, i32 19, i32 8, i32 24, i32 9, i32 25, i32 10, i32 26, i32 11, i32 27> // CHECK: select <16 x i1> %{{.*}}, <16 x i16> %{{.*}}, <16 x i16> %{{.*}} return _mm256_maskz_unpacklo_epi16(__U, __A, __B); } __m128i test_mm_mask_cvtepi8_epi16(__m128i __W, __mmask8 __U, __m128i __A) { - // CHECK-LABEL: @test_mm_mask_cvtepi8_epi16 + // CHECK-LABEL: test_mm_mask_cvtepi8_epi16 // CHECK: sext <8 x i8> %{{.*}} to <8 x i16> // CHECK: select <8 x i1> %{{.*}}, <8 x i16> %{{.*}}, <8 x i16> %{{.*}} return _mm_mask_cvtepi8_epi16(__W, __U, __A); } __m128i test_mm_maskz_cvtepi8_epi16(__mmask8 __U, __m128i __A) { - // CHECK-LABEL: @test_mm_maskz_cvtepi8_epi16 + // CHECK-LABEL: test_mm_maskz_cvtepi8_epi16 // CHECK: sext <8 x i8> %{{.*}} to <8 x i16> // CHECK: select <8 x i1> %{{.*}}, <8 x i16> %{{.*}}, <8 x i16> %{{.*}} return _mm_maskz_cvtepi8_epi16(__U, __A); } __m256i test_mm256_mask_cvtepi8_epi16(__m256i __W, __mmask16 __U, __m128i __A) { - // CHECK-LABEL: @test_mm256_mask_cvtepi8_epi16 + // CHECK-LABEL: test_mm256_mask_cvtepi8_epi16 // CHECK: sext <16 x i8> %{{.*}} to <16 x i16> // CHECK: select <16 x i1> %{{.*}}, <16 x i16> %{{.*}}, <16 x i16> %{{.*}} return _mm256_mask_cvtepi8_epi16(__W, __U, __A); } __m256i test_mm256_maskz_cvtepi8_epi16(__mmask16 __U, __m128i __A) { - // CHECK-LABEL: @test_mm256_maskz_cvtepi8_epi16 + // CHECK-LABEL: test_mm256_maskz_cvtepi8_epi16 // CHECK: sext <16 x i8> %{{.*}} to <16 x i16> // CHECK: select <16 x i1> %{{.*}}, <16 x i16> %{{.*}}, <16 x i16> %{{.*}} return _mm256_maskz_cvtepi8_epi16(__U, __A); } __m128i test_mm_mask_cvtepu8_epi16(__m128i __W, __mmask8 __U, __m128i __A) { - // CHECK-LABEL: @test_mm_mask_cvtepu8_epi16 + // CHECK-LABEL: test_mm_mask_cvtepu8_epi16 // CHECK: zext <8 x i8> %{{.*}} to <8 x i16> // CHECK: select <8 x i1> %{{.*}}, <8 x i16> %{{.*}}, <8 x i16> %{{.*}} return _mm_mask_cvtepu8_epi16(__W, __U, __A); } __m128i test_mm_maskz_cvtepu8_epi16(__mmask8 __U, __m128i __A) { - // CHECK-LABEL: @test_mm_maskz_cvtepu8_epi16 + // CHECK-LABEL: test_mm_maskz_cvtepu8_epi16 // CHECK: zext <8 x i8> %{{.*}} to <8 x i16> // CHECK: select <8 x i1> %{{.*}}, <8 x i16> %{{.*}}, <8 x i16> %{{.*}} return _mm_maskz_cvtepu8_epi16(__U, __A); } __m256i test_mm256_mask_cvtepu8_epi16(__m256i __W, __mmask16 __U, __m128i __A) { - // CHECK-LABEL: @test_mm256_mask_cvtepu8_epi16 + // CHECK-LABEL: test_mm256_mask_cvtepu8_epi16 // CHECK: zext <16 x i8> %{{.*}} to <16 x i16> // CHECK: select <16 x i1> %{{.*}}, <16 x i16> %{{.*}}, <16 x i16> %{{.*}} return _mm256_mask_cvtepu8_epi16(__W, __U, __A); } __m256i test_mm256_maskz_cvtepu8_epi16(__mmask16 __U, __m128i __A) { - // CHECK-LABEL: @test_mm256_maskz_cvtepu8_epi16 + // CHECK-LABEL: test_mm256_maskz_cvtepu8_epi16 // CHECK: zext <16 x i8> %{{.*}} to <16 x i16> // CHECK: select <16 x i1> %{{.*}}, <16 x i16> %{{.*}}, <16 x i16> %{{.*}} return _mm256_maskz_cvtepu8_epi16(__U, __A); } __m256i test_mm256_sllv_epi16(__m256i __A, __m256i __B) { - // CHECK-LABEL: @test_mm256_sllv_epi16 + // CHECK-LABEL: test_mm256_sllv_epi16 // CHECK: @llvm.x86.avx512.psllv.w.256( return _mm256_sllv_epi16(__A, __B); } __m256i test_mm256_mask_sllv_epi16(__m256i __W, __mmask16 __U, __m256i __A, __m256i __B) { - // CHECK-LABEL: @test_mm256_mask_sllv_epi16 + // CHECK-LABEL: test_mm256_mask_sllv_epi16 // CHECK: @llvm.x86.avx512.psllv.w.256( // CHECK: select <16 x i1> %{{.*}}, <16 x i16> %{{.*}}, <16 x i16> %{{.*}} return _mm256_mask_sllv_epi16(__W, __U, __A, __B); } __m256i test_mm256_maskz_sllv_epi16(__mmask16 __U, __m256i __A, __m256i __B) { - // CHECK-LABEL: @test_mm256_maskz_sllv_epi16 + // CHECK-LABEL: test_mm256_maskz_sllv_epi16 // CHECK: @llvm.x86.avx512.psllv.w.256( // CHECK: select <16 x i1> %{{.*}}, <16 x i16> %{{.*}}, <16 x i16> %{{.*}} return _mm256_maskz_sllv_epi16(__U, __A, __B); } __m128i test_mm_sllv_epi16(__m128i __A, __m128i __B) { - // CHECK-LABEL: @test_mm_sllv_epi16 + // CHECK-LABEL: test_mm_sllv_epi16 // CHECK: @llvm.x86.avx512.psllv.w.128( return _mm_sllv_epi16(__A, __B); } __m128i test_mm_mask_sllv_epi16(__m128i __W, __mmask8 __U, __m128i __A, __m128i __B) { - // CHECK-LABEL: @test_mm_mask_sllv_epi16 + // CHECK-LABEL: test_mm_mask_sllv_epi16 // CHECK: @llvm.x86.avx512.psllv.w.128( // CHECK: select <8 x i1> %{{.*}}, <8 x i16> %{{.*}}, <8 x i16> %{{.*}} return _mm_mask_sllv_epi16(__W, __U, __A, __B); } __m128i test_mm_maskz_sllv_epi16(__mmask8 __U, __m128i __A, __m128i __B) { - // CHECK-LABEL: @test_mm_maskz_sllv_epi16 + // CHECK-LABEL: test_mm_maskz_sllv_epi16 // CHECK: @llvm.x86.avx512.psllv.w.128( // CHECK: select <8 x i1> %{{.*}}, <8 x i16> %{{.*}}, <8 x i16> %{{.*}} return _mm_maskz_sllv_epi16(__U, __A, __B); } __m128i test_mm_mask_sll_epi16(__m128i __W, __mmask8 __U, __m128i __A, __m128i __B) { - // CHECK-LABEL: @test_mm_mask_sll_epi16 + // CHECK-LABEL: test_mm_mask_sll_epi16 // CHECK: @llvm.x86.sse2.psll.w // CHECK: select <8 x i1> %{{.*}}, <8 x i16> %{{.*}}, <8 x i16> %{{.*}} return _mm_mask_sll_epi16(__W, __U, __A, __B); } __m128i test_mm_maskz_sll_epi16(__mmask8 __U, __m128i __A, __m128i __B) { - // CHECK-LABEL: @test_mm_maskz_sll_epi16 + // CHECK-LABEL: test_mm_maskz_sll_epi16 // CHECK: @llvm.x86.sse2.psll.w // CHECK: select <8 x i1> %{{.*}}, <8 x i16> %{{.*}}, <8 x i16> %{{.*}} return _mm_maskz_sll_epi16(__U, __A, __B); } __m256i test_mm256_mask_sll_epi16(__m256i __W, __mmask16 __U, __m256i __A, __m128i __B) { - // CHECK-LABEL: @test_mm256_mask_sll_epi16 + // CHECK-LABEL: test_mm256_mask_sll_epi16 // CHECK: @llvm.x86.avx2.psll.w // CHECK: select <16 x i1> %{{.*}}, <16 x i16> %{{.*}}, <16 x i16> %{{.*}} return _mm256_mask_sll_epi16(__W, __U, __A, __B); } __m256i test_mm256_maskz_sll_epi16(__mmask16 __U, __m256i __A, __m128i __B) { - // CHECK-LABEL: @test_mm256_maskz_sll_epi16 + // CHECK-LABEL: test_mm256_maskz_sll_epi16 // CHECK: @llvm.x86.avx2.psll.w // CHECK: select <16 x i1> %{{.*}}, <16 x i16> %{{.*}}, <16 x i16> %{{.*}} return _mm256_maskz_sll_epi16(__U, __A, __B); } __m128i test_mm_mask_slli_epi16(__m128i __W, __mmask8 __U, __m128i __A) { - // CHECK-LABEL: @test_mm_mask_slli_epi16 + // CHECK-LABEL: test_mm_mask_slli_epi16 // CHECK: @llvm.x86.sse2.pslli.w // CHECK: select <8 x i1> %{{.*}}, <8 x i16> %{{.*}}, <8 x i16> %{{.*}} return _mm_mask_slli_epi16(__W, __U, __A, 5); } __m128i test_mm_mask_slli_epi16_2(__m128i __W, __mmask8 __U, __m128i __A, unsigned int __B) { - // CHECK-LABEL: @test_mm_mask_slli_epi16_2 + // CHECK-LABEL: test_mm_mask_slli_epi16_2 // CHECK: @llvm.x86.sse2.pslli.w // CHECK: select <8 x i1> %{{.*}}, <8 x i16> %{{.*}}, <8 x i16> %{{.*}} return _mm_mask_slli_epi16(__W, __U, __A, __B); } __m128i test_mm_maskz_slli_epi16(__mmask8 __U, __m128i __A) { - // CHECK-LABEL: @test_mm_maskz_slli_epi16 + // CHECK-LABEL: test_mm_maskz_slli_epi16 // CHECK: @llvm.x86.sse2.pslli.w // CHECK: select <8 x i1> %{{.*}}, <8 x i16> %{{.*}}, <8 x i16> %{{.*}} return _mm_maskz_slli_epi16(__U, __A, 5); } __m128i test_mm_maskz_slli_epi16_2(__mmask8 __U, __m128i __A, unsigned int __B) { - // CHECK-LABEL: @test_mm_maskz_slli_epi16_2 + // CHECK-LABEL: test_mm_maskz_slli_epi16_2 // CHECK: @llvm.x86.sse2.pslli.w // CHECK: select <8 x i1> %{{.*}}, <8 x i16> %{{.*}}, <8 x i16> %{{.*}} return _mm_maskz_slli_epi16(__U, __A, __B); } __m256i test_mm256_mask_slli_epi16(__m256i __W, __mmask16 __U, __m256i __A) { - // CHECK-LABEL: @test_mm256_mask_slli_epi16 + // CHECK-LABEL: test_mm256_mask_slli_epi16 // CHECK: @llvm.x86.avx2.pslli.w // CHECK: select <16 x i1> %{{.*}}, <16 x i16> %{{.*}}, <16 x i16> %{{.*}} return _mm256_mask_slli_epi16(__W, __U, __A, 5); } +TEST_CONSTEXPR(match_v16hi(_mm256_mask_slli_epi16((__m256i)(__v16hi){100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115}, (__mmask16)0xAAAA, (__m256i)(__v16hi){0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, 20), 100, 0, 102, 0, 104, 0, 106, 0, 108, 0, 110, 0, 112, 0, 114, 0)); __m256i test_mm256_mask_slli_epi16_2(__m256i __W, __mmask16 __U, __m256i __A, unsigned int __B) { - // CHECK-LABEL: @test_mm256_mask_slli_epi16_2 + // CHECK-LABEL: test_mm256_mask_slli_epi16_2 // CHECK: @llvm.x86.avx2.pslli.w // CHECK: select <16 x i1> %{{.*}}, <16 x i16> %{{.*}}, <16 x i16> %{{.*}} return _mm256_mask_slli_epi16(__W, __U, __A, __B); } __m256i test_mm256_maskz_slli_epi16(__mmask16 __U, __m256i __A) { - // CHECK-LABEL: @test_mm256_maskz_slli_epi16 + // CHECK-LABEL: test_mm256_maskz_slli_epi16 // CHECK: @llvm.x86.avx2.pslli.w // CHECK: select <16 x i1> %{{.*}}, <16 x i16> %{{.*}}, <16 x i16> %{{.*}} return _mm256_maskz_slli_epi16(__U, __A, 5); } +TEST_CONSTEXPR(match_v16hi(_mm256_maskz_slli_epi16((__mmask16)0x00ffcc71, (__m256i)(__v16hi){0xff, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, 32), 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)); +TEST_CONSTEXPR(match_v16hi(_mm256_maskz_slli_epi16((__mmask16)0, (__m256i)(__v16hi){0xff, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, 16), 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)); +TEST_CONSTEXPR(match_v16hi(_mm256_maskz_slli_epi16((__mmask16)0xffff, (__m256i)(__v16hi){0xff, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, 1), 0x1fe, 0x2, 0x4, 0x6, 0x8, 0xa, 0xc, 0xe, 0x10, 0x12, 0x14, 0x16, 0x18, 0x1a, 0x1c, 0x1e)); +TEST_CONSTEXPR(match_v16hi(_mm256_maskz_slli_epi16((__mmask16)0x7, (__m256i)(__v16hi){0xff, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, 1), 0x1fe, 0x2, 0x4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)); +TEST_CONSTEXPR(match_v16hi(_mm256_maskz_slli_epi16((__mmask16)0x71, (__m256i)(__v16hi){0xff, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, 1), 0x1fe, 0, 0, 0, 0x8, 0xa, 0xc, 0, 0, 0, 0, 0, 0, 0, 0, 0)); __m256i test_mm256_maskz_slli_epi16_2(__mmask16 __U, __m256i __A, unsigned int __B) { - // CHECK-LABEL: @test_mm256_maskz_slli_epi16_2 + // CHECK-LABEL: test_mm256_maskz_slli_epi16_2 // CHECK: @llvm.x86.avx2.pslli.w // CHECK: select <16 x i1> %{{.*}}, <16 x i16> %{{.*}}, <16 x i16> %{{.*}} return _mm256_maskz_slli_epi16(__U, __A, __B); } __m256i test_mm256_srlv_epi16(__m256i __A, __m256i __B) { - // CHECK-LABEL: @test_mm256_srlv_epi16 + // CHECK-LABEL: test_mm256_srlv_epi16 // CHECK: @llvm.x86.avx512.psrlv.w.256( return _mm256_srlv_epi16(__A, __B); } __m256i test_mm256_mask_srlv_epi16(__m256i __W, __mmask16 __U, __m256i __A, __m256i __B) { - // CHECK-LABEL: @test_mm256_mask_srlv_epi16 + // CHECK-LABEL: test_mm256_mask_srlv_epi16 // CHECK: @llvm.x86.avx512.psrlv.w.256( // CHECK: select <16 x i1> %{{.*}}, <16 x i16> %{{.*}}, <16 x i16> %{{.*}} return _mm256_mask_srlv_epi16(__W, __U, __A, __B); } __m256i test_mm256_maskz_srlv_epi16(__mmask16 __U, __m256i __A, __m256i __B) { - // CHECK-LABEL: @test_mm256_maskz_srlv_epi16 + // CHECK-LABEL: test_mm256_maskz_srlv_epi16 // CHECK: @llvm.x86.avx512.psrlv.w.256( // CHECK: select <16 x i1> %{{.*}}, <16 x i16> %{{.*}}, <16 x i16> %{{.*}} return _mm256_maskz_srlv_epi16(__U, __A, __B); } __m128i test_mm_srlv_epi16(__m128i __A, __m128i __B) { - // CHECK-LABEL: @test_mm_srlv_epi16 + // CHECK-LABEL: test_mm_srlv_epi16 // CHECK: @llvm.x86.avx512.psrlv.w.128( return _mm_srlv_epi16(__A, __B); } __m128i test_mm_mask_srlv_epi16(__m128i __W, __mmask8 __U, __m128i __A, __m128i __B) { - // CHECK-LABEL: @test_mm_mask_srlv_epi16 + // CHECK-LABEL: test_mm_mask_srlv_epi16 // CHECK: @llvm.x86.avx512.psrlv.w.128( // CHECK: select <8 x i1> %{{.*}}, <8 x i16> %{{.*}}, <8 x i16> %{{.*}} return _mm_mask_srlv_epi16(__W, __U, __A, __B); } __m128i test_mm_maskz_srlv_epi16(__mmask8 __U, __m128i __A, __m128i __B) { - // CHECK-LABEL: @test_mm_maskz_srlv_epi16 + // CHECK-LABEL: test_mm_maskz_srlv_epi16 // CHECK: @llvm.x86.avx512.psrlv.w.128( // CHECK: select <8 x i1> %{{.*}}, <8 x i16> %{{.*}}, <8 x i16> %{{.*}} return _mm_maskz_srlv_epi16(__U, __A, __B); } __m128i test_mm_mask_srl_epi16(__m128i __W, __mmask8 __U, __m128i __A, __m128i __B) { - // CHECK-LABEL: @test_mm_mask_srl_epi16 + // CHECK-LABEL: test_mm_mask_srl_epi16 // CHECK: @llvm.x86.sse2.psrl.w // CHECK: select <8 x i1> %{{.*}}, <8 x i16> %{{.*}}, <8 x i16> %{{.*}} return _mm_mask_srl_epi16(__W, __U, __A, __B); } __m128i test_mm_maskz_srl_epi16(__mmask8 __U, __m128i __A, __m128i __B) { - // CHECK-LABEL: @test_mm_maskz_srl_epi16 + // CHECK-LABEL: test_mm_maskz_srl_epi16 // CHECK: @llvm.x86.sse2.psrl.w // CHECK: select <8 x i1> %{{.*}}, <8 x i16> %{{.*}}, <8 x i16> %{{.*}} return _mm_maskz_srl_epi16(__U, __A, __B); } __m256i test_mm256_mask_srl_epi16(__m256i __W, __mmask16 __U, __m256i __A, __m128i __B) { - // CHECK-LABEL: @test_mm256_mask_srl_epi16 + // CHECK-LABEL: test_mm256_mask_srl_epi16 // CHECK: @llvm.x86.avx2.psrl.w // CHECK: select <16 x i1> %{{.*}}, <16 x i16> %{{.*}}, <16 x i16> %{{.*}} return _mm256_mask_srl_epi16(__W, __U, __A, __B); } __m256i test_mm256_maskz_srl_epi16(__mmask16 __U, __m256i __A, __m128i __B) { - // CHECK-LABEL: @test_mm256_maskz_srl_epi16 + // CHECK-LABEL: test_mm256_maskz_srl_epi16 // CHECK: @llvm.x86.avx2.psrl.w // CHECK: select <16 x i1> %{{.*}}, <16 x i16> %{{.*}}, <16 x i16> %{{.*}} return _mm256_maskz_srl_epi16(__U, __A, __B); } __m128i test_mm_mask_srli_epi16(__m128i __W, __mmask8 __U, __m128i __A) { - // CHECK-LABEL: @test_mm_mask_srli_epi16 + // CHECK-LABEL: test_mm_mask_srli_epi16 // CHECK: @llvm.x86.sse2.psrli.w // CHECK: select <8 x i1> %{{.*}}, <8 x i16> %{{.*}}, <8 x i16> %{{.*}} return _mm_mask_srli_epi16(__W, __U, __A, 5); } __m128i test_mm_mask_srli_epi16_2(__m128i __W, __mmask8 __U, __m128i __A, int __B) { - // CHECK-LABEL: @test_mm_mask_srli_epi16_2 + // CHECK-LABEL: test_mm_mask_srli_epi16_2 // CHECK: @llvm.x86.sse2.psrli.w // CHECK: select <8 x i1> %{{.*}}, <8 x i16> %{{.*}}, <8 x i16> %{{.*}} return _mm_mask_srli_epi16(__W, __U, __A, __B); } __m128i test_mm_maskz_srli_epi16(__mmask8 __U, __m128i __A) { - // CHECK-LABEL: @test_mm_maskz_srli_epi16 + // CHECK-LABEL: test_mm_maskz_srli_epi16 // CHECK: @llvm.x86.sse2.psrli.w // CHECK: select <8 x i1> %{{.*}}, <8 x i16> %{{.*}}, <8 x i16> %{{.*}} return _mm_maskz_srli_epi16(__U, __A, 5); } __m128i test_mm_maskz_srli_epi16_2(__mmask8 __U, __m128i __A, int __B) { - // CHECK-LABEL: @test_mm_maskz_srli_epi16_2 + // CHECK-LABEL: test_mm_maskz_srli_epi16_2 // CHECK: @llvm.x86.sse2.psrli.w // CHECK: select <8 x i1> %{{.*}}, <8 x i16> %{{.*}}, <8 x i16> %{{.*}} return _mm_maskz_srli_epi16(__U, __A, __B); } __m256i test_mm256_mask_srli_epi16(__m256i __W, __mmask16 __U, __m256i __A) { - // CHECK-LABEL: @test_mm256_mask_srli_epi16 + // CHECK-LABEL: test_mm256_mask_srli_epi16 // CHECK: @llvm.x86.avx2.psrli.w // CHECK: select <16 x i1> %{{.*}}, <16 x i16> %{{.*}}, <16 x i16> %{{.*}} return _mm256_mask_srli_epi16(__W, __U, __A, 5); } +TEST_CONSTEXPR(match_v16hi(_mm256_mask_srli_epi16((__m256i)(__v16hi){100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115}, (__mmask16)0xAAAA, (__m256i)(__v16hi){0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, 20), 100, 0, 102, 0, 104, 0, 106, 0, 108, 0, 110, 0, 112, 0, 114, 0)); +TEST_CONSTEXPR(match_v16hi(_mm256_mask_srli_epi16((__m256i)(__v16hi){100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115}, (__mmask16)0xAAAA, (__m256i)(__v16hi){0, 32, 64, 96, 128, 160, 192, 224, 256, 288, 320, 352, 384, 416, 448, 480}, 5), 100, 1, 102, 3, 104, 5, 106, 7, 108, 9, 110, 11, 112, 13, 114, 15)); __m256i test_mm256_mask_srli_epi16_2(__m256i __W, __mmask16 __U, __m256i __A, int __B) { - // CHECK-LABEL: @test_mm256_mask_srli_epi16_2 + // CHECK-LABEL: test_mm256_mask_srli_epi16_2 // CHECK: @llvm.x86.avx2.psrli.w // CHECK: select <16 x i1> %{{.*}}, <16 x i16> %{{.*}}, <16 x i16> %{{.*}} return _mm256_mask_srli_epi16(__W, __U, __A, __B); } __m256i test_mm256_maskz_srli_epi16(__mmask16 __U, __m256i __A) { - // CHECK-LABEL: @test_mm256_maskz_srli_epi16 + // CHECK-LABEL: test_mm256_maskz_srli_epi16 // CHECK: @llvm.x86.avx2.psrli.w // CHECK: select <16 x i1> %{{.*}}, <16 x i16> %{{.*}}, <16 x i16> %{{.*}} return _mm256_maskz_srli_epi16(__U, __A, 5); } +TEST_CONSTEXPR(match_v16hi(_mm256_maskz_srli_epi16((__mmask16)0x71, (__m256i)(__v16hi){0xff, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, 1), 0x7f, 0, 0, 0, 0x2, 0x2, 0x3, 0, 0, 0, 0, 0, 0, 0, 0, 0)); __m256i test_mm256_maskz_srli_epi16_2(__mmask16 __U, __m256i __A, int __B) { - // CHECK-LABEL: @test_mm256_maskz_srli_epi16_2 + // CHECK-LABEL: test_mm256_maskz_srli_epi16_2 // CHECK: @llvm.x86.avx2.psrli.w // CHECK: select <16 x i1> %{{.*}}, <16 x i16> %{{.*}}, <16 x i16> %{{.*}} return _mm256_maskz_srli_epi16(__U, __A, __B); } __m256i test_mm256_srav_epi16(__m256i __A, __m256i __B) { - // CHECK-LABEL: @test_mm256_srav_epi16 + // CHECK-LABEL: test_mm256_srav_epi16 // CHECK: @llvm.x86.avx512.psrav.w.256( return _mm256_srav_epi16(__A, __B); } __m256i test_mm256_mask_srav_epi16(__m256i __W, __mmask16 __U, __m256i __A, __m256i __B) { - // CHECK-LABEL: @test_mm256_mask_srav_epi16 + // CHECK-LABEL: test_mm256_mask_srav_epi16 // CHECK: @llvm.x86.avx512.psrav.w.256( // CHECK: select <16 x i1> %{{.*}}, <16 x i16> %{{.*}}, <16 x i16> %{{.*}} return _mm256_mask_srav_epi16(__W, __U, __A, __B); } __m256i test_mm256_maskz_srav_epi16(__mmask16 __U, __m256i __A, __m256i __B) { - // CHECK-LABEL: @test_mm256_maskz_srav_epi16 + // CHECK-LABEL: test_mm256_maskz_srav_epi16 // CHECK: @llvm.x86.avx512.psrav.w.256( // CHECK: select <16 x i1> %{{.*}}, <16 x i16> %{{.*}}, <16 x i16> %{{.*}} return _mm256_maskz_srav_epi16(__U, __A, __B); } __m128i test_mm_srav_epi16(__m128i __A, __m128i __B) { - // CHECK-LABEL: @test_mm_srav_epi16 + // CHECK-LABEL: test_mm_srav_epi16 // CHECK: @llvm.x86.avx512.psrav.w.128( return _mm_srav_epi16(__A, __B); } __m128i test_mm_mask_srav_epi16(__m128i __W, __mmask8 __U, __m128i __A, __m128i __B) { - // CHECK-LABEL: @test_mm_mask_srav_epi16 + // CHECK-LABEL: test_mm_mask_srav_epi16 // CHECK: @llvm.x86.avx512.psrav.w.128( // CHECK: select <8 x i1> %{{.*}}, <8 x i16> %{{.*}}, <8 x i16> %{{.*}} return _mm_mask_srav_epi16(__W, __U, __A, __B); } __m128i test_mm_maskz_srav_epi16(__mmask8 __U, __m128i __A, __m128i __B) { - // CHECK-LABEL: @test_mm_maskz_srav_epi16 + // CHECK-LABEL: test_mm_maskz_srav_epi16 // CHECK: @llvm.x86.avx512.psrav.w.128( // CHECK: select <8 x i1> %{{.*}}, <8 x i16> %{{.*}}, <8 x i16> %{{.*}} return _mm_maskz_srav_epi16(__U, __A, __B); } __m128i test_mm_mask_sra_epi16(__m128i __W, __mmask8 __U, __m128i __A, __m128i __B) { - // CHECK-LABEL: @test_mm_mask_sra_epi16 + // CHECK-LABEL: test_mm_mask_sra_epi16 // CHECK: @llvm.x86.sse2.psra.w // CHECK: select <8 x i1> %{{.*}}, <8 x i16> %{{.*}}, <8 x i16> %{{.*}} return _mm_mask_sra_epi16(__W, __U, __A, __B); } __m128i test_mm_maskz_sra_epi16(__mmask8 __U, __m128i __A, __m128i __B) { - // CHECK-LABEL: @test_mm_maskz_sra_epi16 + // CHECK-LABEL: test_mm_maskz_sra_epi16 // CHECK: @llvm.x86.sse2.psra.w // CHECK: select <8 x i1> %{{.*}}, <8 x i16> %{{.*}}, <8 x i16> %{{.*}} return _mm_maskz_sra_epi16(__U, __A, __B); } __m256i test_mm256_mask_sra_epi16(__m256i __W, __mmask16 __U, __m256i __A, __m128i __B) { - // CHECK-LABEL: @test_mm256_mask_sra_epi16 + // CHECK-LABEL: test_mm256_mask_sra_epi16 // CHECK: @llvm.x86.avx2.psra.w // CHECK: select <16 x i1> %{{.*}}, <16 x i16> %{{.*}}, <16 x i16> %{{.*}} return _mm256_mask_sra_epi16(__W, __U, __A, __B); } __m256i test_mm256_maskz_sra_epi16(__mmask16 __U, __m256i __A, __m128i __B) { - // CHECK-LABEL: @test_mm256_maskz_sra_epi16 + // CHECK-LABEL: test_mm256_maskz_sra_epi16 // CHECK: @llvm.x86.avx2.psra.w // CHECK: select <16 x i1> %{{.*}}, <16 x i16> %{{.*}}, <16 x i16> %{{.*}} return _mm256_maskz_sra_epi16(__U, __A, __B); } __m128i test_mm_mask_srai_epi16(__m128i __W, __mmask8 __U, __m128i __A) { - // CHECK-LABEL: @test_mm_mask_srai_epi16 + // CHECK-LABEL: test_mm_mask_srai_epi16 // CHECK: @llvm.x86.sse2.psrai.w // CHECK: select <8 x i1> %{{.*}}, <8 x i16> %{{.*}}, <8 x i16> %{{.*}} return _mm_mask_srai_epi16(__W, __U, __A, 5); } __m128i test_mm_mask_srai_epi16_2(__m128i __W, __mmask8 __U, __m128i __A, unsigned int __B) { - // CHECK-LABEL: @test_mm_mask_srai_epi16_2 + // CHECK-LABEL: test_mm_mask_srai_epi16_2 // CHECK: @llvm.x86.sse2.psrai.w // CHECK: select <8 x i1> %{{.*}}, <8 x i16> %{{.*}}, <8 x i16> %{{.*}} return _mm_mask_srai_epi16(__W, __U, __A, __B); } __m128i test_mm_maskz_srai_epi16(__mmask8 __U, __m128i __A) { - // CHECK-LABEL: @test_mm_maskz_srai_epi16 + // CHECK-LABEL: test_mm_maskz_srai_epi16 // CHECK: @llvm.x86.sse2.psrai.w // CHECK: select <8 x i1> %{{.*}}, <8 x i16> %{{.*}}, <8 x i16> %{{.*}} return _mm_maskz_srai_epi16(__U, __A, 5); } __m128i test_mm_maskz_srai_epi16_2(__mmask8 __U, __m128i __A, unsigned int __B) { - // CHECK-LABEL: @test_mm_maskz_srai_epi16_2 + // CHECK-LABEL: test_mm_maskz_srai_epi16_2 // CHECK: @llvm.x86.sse2.psrai.w // CHECK: select <8 x i1> %{{.*}}, <8 x i16> %{{.*}}, <8 x i16> %{{.*}} return _mm_maskz_srai_epi16(__U, __A, __B); } __m256i test_mm256_mask_srai_epi16(__m256i __W, __mmask16 __U, __m256i __A) { - // CHECK-LABEL: @test_mm256_mask_srai_epi16 + // CHECK-LABEL: test_mm256_mask_srai_epi16 // CHECK: @llvm.x86.avx2.psrai.w // CHECK: select <16 x i1> %{{.*}}, <16 x i16> %{{.*}}, <16 x i16> %{{.*}} return _mm256_mask_srai_epi16(__W, __U, __A, 5); } +TEST_CONSTEXPR(match_v16hi(_mm256_mask_srai_epi16((__m256i)(__v16hi){100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115}, (__mmask16)0xAAAA, (__m256i)(__v16hi){0, -1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, 20), 100, 0Xffff, 102, 0, 104, 0, 106, 0, 108, 0, 110, 0, 112, 0, 114, 0)); __m256i test_mm256_mask_srai_epi16_2(__m256i __W, __mmask16 __U, __m256i __A, unsigned int __B) { - // CHECK-LABEL: @test_mm256_mask_srai_epi16_2 + // CHECK-LABEL: test_mm256_mask_srai_epi16_2 // CHECK: @llvm.x86.avx2.psrai.w // CHECK: select <16 x i1> %{{.*}}, <16 x i16> %{{.*}}, <16 x i16> %{{.*}} return _mm256_mask_srai_epi16(__W, __U, __A, __B); } __m256i test_mm256_maskz_srai_epi16(__mmask16 __U, __m256i __A) { - // CHECK-LABEL: @test_mm256_maskz_srai_epi16 + // CHECK-LABEL: test_mm256_maskz_srai_epi16 // CHECK: @llvm.x86.avx2.psrai.w // CHECK: select <16 x i1> %{{.*}}, <16 x i16> %{{.*}}, <16 x i16> %{{.*}} return _mm256_maskz_srai_epi16(__U, __A, 5); } +TEST_CONSTEXPR(match_v16hi(_mm256_maskz_srai_epi16((__mmask16)0x71, (__m256i)(__v16hi){0xff, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, 1), 0x7f, 0, 0, 0, 0x2, 0x2, 0x3, 0, 0, 0, 0, 0, 0, 0, 0, 0)); __m256i test_mm256_maskz_srai_epi16_2(__mmask16 __U, __m256i __A, unsigned int __B) { - // CHECK-LABEL: @test_mm256_maskz_srai_epi16_2 + // CHECK-LABEL: test_mm256_maskz_srai_epi16_2 // CHECK: @llvm.x86.avx2.psrai.w // CHECK: select <16 x i1> %{{.*}}, <16 x i16> %{{.*}}, <16 x i16> %{{.*}} return _mm256_maskz_srai_epi16(__U, __A, __B); } __m128i test_mm_mask_mov_epi16(__m128i __W, __mmask8 __U, __m128i __A) { - // CHECK-LABEL: @test_mm_mask_mov_epi16 + // CHECK-LABEL: test_mm_mask_mov_epi16 // CHECK: select <8 x i1> %{{.*}}, <8 x i16> %{{.*}}, <8 x i16> %{{.*}} return _mm_mask_mov_epi16(__W, __U, __A); } __m128i test_mm_maskz_mov_epi16(__mmask8 __U, __m128i __A) { - // CHECK-LABEL: @test_mm_maskz_mov_epi16 + // CHECK-LABEL: test_mm_maskz_mov_epi16 // CHECK: select <8 x i1> %{{.*}}, <8 x i16> %{{.*}}, <8 x i16> %{{.*}} return _mm_maskz_mov_epi16(__U, __A); } __m256i test_mm256_mask_mov_epi16(__m256i __W, __mmask16 __U, __m256i __A) { - // CHECK-LABEL: @test_mm256_mask_mov_epi16 + // CHECK-LABEL: test_mm256_mask_mov_epi16 // CHECK: select <16 x i1> %{{.*}}, <16 x i16> %{{.*}}, <16 x i16> %{{.*}} return _mm256_mask_mov_epi16(__W, __U, __A); } __m256i test_mm256_maskz_mov_epi16(__mmask16 __U, __m256i __A) { - // CHECK-LABEL: @test_mm256_maskz_mov_epi16 + // CHECK-LABEL: test_mm256_maskz_mov_epi16 // CHECK: select <16 x i1> %{{.*}}, <16 x i16> %{{.*}}, <16 x i16> %{{.*}} return _mm256_maskz_mov_epi16(__U, __A); } __m128i test_mm_mask_mov_epi8(__m128i __W, __mmask16 __U, __m128i __A) { - // CHECK-LABEL: @test_mm_mask_mov_epi8 + // CHECK-LABEL: test_mm_mask_mov_epi8 // CHECK: select <16 x i1> %{{.*}}, <16 x i8> %{{.*}}, <16 x i8> %{{.*}} return _mm_mask_mov_epi8(__W, __U, __A); } __m128i test_mm_maskz_mov_epi8(__mmask16 __U, __m128i __A) { - // CHECK-LABEL: @test_mm_maskz_mov_epi8 + // CHECK-LABEL: test_mm_maskz_mov_epi8 // CHECK: select <16 x i1> %{{.*}}, <16 x i8> %{{.*}}, <16 x i8> %{{.*}} return _mm_maskz_mov_epi8(__U, __A); } __m256i test_mm256_mask_mov_epi8(__m256i __W, __mmask32 __U, __m256i __A) { - // CHECK-LABEL: @test_mm256_mask_mov_epi8 + // CHECK-LABEL: test_mm256_mask_mov_epi8 // CHECK: select <32 x i1> %{{.*}}, <32 x i8> %{{.*}}, <32 x i8> %{{.*}} return _mm256_mask_mov_epi8(__W, __U, __A); } __m256i test_mm256_maskz_mov_epi8(__mmask32 __U, __m256i __A) { - // CHECK-LABEL: @test_mm256_maskz_mov_epi8 + // CHECK-LABEL: test_mm256_maskz_mov_epi8 // CHECK: select <32 x i1> %{{.*}}, <32 x i8> %{{.*}}, <32 x i8> %{{.*}} return _mm256_maskz_mov_epi8(__U, __A); } __m128i test_mm_loadu_epi16(void const *__P) { - // CHECK-LABEL: @test_mm_loadu_epi16 + // CHECK-LABEL: test_mm_loadu_epi16 // CHECK: load <2 x i64>, ptr %{{.*}}, align 1{{$}} return _mm_loadu_epi16(__P); } __m128i test_mm_mask_loadu_epi16(__m128i __W, __mmask8 __U, void const *__P) { - // CHECK-LABEL: @test_mm_mask_loadu_epi16 + // CHECK-LABEL: test_mm_mask_loadu_epi16 // CHECK: @llvm.masked.load.v8i16.p0(ptr %{{.*}}, i32 1, <8 x i1> %{{.*}}, <8 x i16> %{{.*}}) return _mm_mask_loadu_epi16(__W, __U, __P); } __m128i test_mm_maskz_loadu_epi16(__mmask8 __U, void const *__P) { - // CHECK-LABEL: @test_mm_maskz_loadu_epi16 + // CHECK-LABEL: test_mm_maskz_loadu_epi16 // CHECK: @llvm.masked.load.v8i16.p0(ptr %{{.*}}, i32 1, <8 x i1> %{{.*}}, <8 x i16> %{{.*}}) return _mm_maskz_loadu_epi16(__U, __P); } __m256i test_mm256_loadu_epi16(void const *__P) { - // CHECK-LABEL: @test_mm256_loadu_epi16 + // CHECK-LABEL: test_mm256_loadu_epi16 // CHECK: load <4 x i64>, ptr %{{.*}}, align 1{{$}} return _mm256_loadu_epi16(__P); } __m256i test_mm256_mask_loadu_epi16(__m256i __W, __mmask16 __U, void const *__P) { - // CHECK-LABEL: @test_mm256_mask_loadu_epi16 + // CHECK-LABEL: test_mm256_mask_loadu_epi16 // CHECK: @llvm.masked.load.v16i16.p0(ptr %{{.*}}, i32 1, <16 x i1> %{{.*}}, <16 x i16> %{{.*}}) return _mm256_mask_loadu_epi16(__W, __U, __P); } __m256i test_mm256_maskz_loadu_epi16(__mmask16 __U, void const *__P) { - // CHECK-LABEL: @test_mm256_maskz_loadu_epi16 + // CHECK-LABEL: test_mm256_maskz_loadu_epi16 // CHECK: @llvm.masked.load.v16i16.p0(ptr %{{.*}}, i32 1, <16 x i1> %{{.*}}, <16 x i16> %{{.*}}) return _mm256_maskz_loadu_epi16(__U, __P); } __m128i test_mm_loadu_epi8(void const *__P) { - // CHECK-LABEL: @test_mm_loadu_epi8 + // CHECK-LABEL: test_mm_loadu_epi8 // CHECK: load <2 x i64>, ptr %{{.*}}, align 1{{$}} return _mm_loadu_epi8(__P); } __m128i test_mm_mask_loadu_epi8(__m128i __W, __mmask16 __U, void const *__P) { - // CHECK-LABEL: @test_mm_mask_loadu_epi8 + // CHECK-LABEL: test_mm_mask_loadu_epi8 // CHECK: @llvm.masked.load.v16i8.p0(ptr %{{.*}}, i32 1, <16 x i1> %{{.*}}, <16 x i8> %{{.*}}) return _mm_mask_loadu_epi8(__W, __U, __P); } __m128i test_mm_maskz_loadu_epi8(__mmask16 __U, void const *__P) { - // CHECK-LABEL: @test_mm_maskz_loadu_epi8 + // CHECK-LABEL: test_mm_maskz_loadu_epi8 // CHECK: @llvm.masked.load.v16i8.p0(ptr %{{.*}}, i32 1, <16 x i1> %{{.*}}, <16 x i8> %{{.*}}) return _mm_maskz_loadu_epi8(__U, __P); } __m256i test_mm256_loadu_epi8(void const *__P) { - // CHECK-LABEL: @test_mm256_loadu_epi8 + // CHECK-LABEL: test_mm256_loadu_epi8 // CHECK: load <4 x i64>, ptr %{{.*}}, align 1{{$}} return _mm256_loadu_epi8(__P); } __m256i test_mm256_mask_loadu_epi8(__m256i __W, __mmask32 __U, void const *__P) { - // CHECK-LABEL: @test_mm256_mask_loadu_epi8 + // CHECK-LABEL: test_mm256_mask_loadu_epi8 // CHECK: @llvm.masked.load.v32i8.p0(ptr %{{.*}}, i32 1, <32 x i1> %{{.*}}, <32 x i8> %{{.*}}) return _mm256_mask_loadu_epi8(__W, __U, __P); } __m256i test_mm256_maskz_loadu_epi8(__mmask32 __U, void const *__P) { - // CHECK-LABEL: @test_mm256_maskz_loadu_epi8 + // CHECK-LABEL: test_mm256_maskz_loadu_epi8 // CHECK: @llvm.masked.load.v32i8.p0(ptr %{{.*}}, i32 1, <32 x i1> %{{.*}}, <32 x i8> %{{.*}}) return _mm256_maskz_loadu_epi8(__U, __P); } void test_mm_storeu_epi16(void *__p, __m128i __a) { - // check-label: @test_mm_storeu_epi16 + // CHECK-LABEL: test_mm_storeu_epi16 // check: store <2 x i64> %{{.*}}, ptr %{{.*}}, align 1{{$}} return _mm_storeu_epi16(__p, __a); } void test_mm_mask_storeu_epi16(void *__P, __mmask8 __U, __m128i __A) { - // CHECK-LABEL: @test_mm_mask_storeu_epi16 + // CHECK-LABEL: test_mm_mask_storeu_epi16 // CHECK: @llvm.masked.store.v8i16.p0(<8 x i16> %{{.*}}, ptr %{{.*}}, i32 1, <8 x i1> %{{.*}}) return _mm_mask_storeu_epi16(__P, __U, __A); } void test_mm256_storeu_epi16(void *__P, __m256i __A) { - // CHECK-LABEL: @test_mm256_storeu_epi16 + // CHECK-LABEL: test_mm256_storeu_epi16 // CHECK: store <4 x i64> %{{.*}}, ptr %{{.*}}, align 1{{$}} return _mm256_storeu_epi16(__P, __A); } void test_mm256_mask_storeu_epi16(void *__P, __mmask16 __U, __m256i __A) { - // CHECK-LABEL: @test_mm256_mask_storeu_epi16 + // CHECK-LABEL: test_mm256_mask_storeu_epi16 // CHECK: @llvm.masked.store.v16i16.p0(<16 x i16> %{{.*}}, ptr %{{.*}}, i32 1, <16 x i1> %{{.*}}) return _mm256_mask_storeu_epi16(__P, __U, __A); } void test_mm_storeu_epi8(void *__p, __m128i __a) { - // check-label: @test_mm_storeu_epi8 + // CHECK-LABEL: test_mm_storeu_epi8 // check: store <2 x i64> %{{.*}}, ptr %{{.*}}, align 1{{$}} return _mm_storeu_epi8(__p, __a); } void test_mm_mask_storeu_epi8(void *__P, __mmask16 __U, __m128i __A) { - // CHECK-LABEL: @test_mm_mask_storeu_epi8 + // CHECK-LABEL: test_mm_mask_storeu_epi8 // CHECK: @llvm.masked.store.v16i8.p0(<16 x i8> %{{.*}}, ptr %{{.*}}, i32 1, <16 x i1> %{{.*}}) return _mm_mask_storeu_epi8(__P, __U, __A); } void test_mm256_storeu_epi8(void *__P, __m256i __A) { - // CHECK-LABEL: @test_mm256_storeu_epi8 + // CHECK-LABEL: test_mm256_storeu_epi8 // CHECK: store <4 x i64> %{{.*}}, ptr %{{.*}}, align 1{{$}} return _mm256_storeu_epi8(__P, __A); } void test_mm256_mask_storeu_epi8(void *__P, __mmask32 __U, __m256i __A) { - // CHECK-LABEL: @test_mm256_mask_storeu_epi8 + // CHECK-LABEL: test_mm256_mask_storeu_epi8 // CHECK: @llvm.masked.store.v32i8.p0(<32 x i8> %{{.*}}, ptr %{{.*}}, i32 1, <32 x i1> %{{.*}}) return _mm256_mask_storeu_epi8(__P, __U, __A); } __mmask16 test_mm_test_epi8_mask(__m128i __A, __m128i __B) { - // CHECK-LABEL: @test_mm_test_epi8_mask + // CHECK-LABEL: test_mm_test_epi8_mask // CHECK: and <2 x i64> %{{.*}}, %{{.*}} // CHECK: icmp ne <16 x i8> %{{.*}}, %{{.*}} return _mm_test_epi8_mask(__A, __B); } __mmask16 test_mm_mask_test_epi8_mask(__mmask16 __U, __m128i __A, __m128i __B) { - // CHECK-LABEL: @test_mm_mask_test_epi8_mask + // CHECK-LABEL: test_mm_mask_test_epi8_mask // CHECK: and <2 x i64> %{{.*}}, %{{.*}} // CHECK: icmp ne <16 x i8> %{{.*}}, %{{.*}} // CHECK: and <16 x i1> %{{.*}}, %{{.*}} @@ -2632,14 +2674,14 @@ __mmask16 test_mm_mask_test_epi8_mask(__mmask16 __U, __m128i __A, __m128i __B) { } __mmask32 test_mm256_test_epi8_mask(__m256i __A, __m256i __B) { - // CHECK-LABEL: @test_mm256_test_epi8_mask + // CHECK-LABEL: test_mm256_test_epi8_mask // CHECK: and <4 x i64> %{{.*}}, %{{.*}} // CHECK: icmp ne <32 x i8> %{{.*}}, %{{.*}} return _mm256_test_epi8_mask(__A, __B); } __mmask32 test_mm256_mask_test_epi8_mask(__mmask32 __U, __m256i __A, __m256i __B) { - // CHECK-LABEL: @test_mm256_mask_test_epi8_mask + // CHECK-LABEL: test_mm256_mask_test_epi8_mask // CHECK: and <4 x i64> %{{.*}}, %{{.*}} // CHECK: icmp ne <32 x i8> %{{.*}}, %{{.*}} // CHECK: and <32 x i1> %{{.*}}, %{{.*}} @@ -2647,14 +2689,14 @@ __mmask32 test_mm256_mask_test_epi8_mask(__mmask32 __U, __m256i __A, __m256i __B } __mmask8 test_mm_test_epi16_mask(__m128i __A, __m128i __B) { - // CHECK-LABEL: @test_mm_test_epi16_mask + // CHECK-LABEL: test_mm_test_epi16_mask // CHECK: and <2 x i64> %{{.*}}, %{{.*}} // CHECK: icmp ne <8 x i16> %{{.*}}, %{{.*}} return _mm_test_epi16_mask(__A, __B); } __mmask8 test_mm_mask_test_epi16_mask(__mmask8 __U, __m128i __A, __m128i __B) { - // CHECK-LABEL: @test_mm_mask_test_epi16_mask + // CHECK-LABEL: test_mm_mask_test_epi16_mask // CHECK: and <2 x i64> %{{.*}}, %{{.*}} // CHECK: icmp ne <8 x i16> %{{.*}}, %{{.*}} // CHECK: and <8 x i1> %{{.*}}, %{{.*}} @@ -2662,14 +2704,14 @@ __mmask8 test_mm_mask_test_epi16_mask(__mmask8 __U, __m128i __A, __m128i __B) { } __mmask16 test_mm256_test_epi16_mask(__m256i __A, __m256i __B) { - // CHECK-LABEL: @test_mm256_test_epi16_mask + // CHECK-LABEL: test_mm256_test_epi16_mask // CHECK: and <4 x i64> %{{.*}}, %{{.*}} // CHECK: icmp ne <16 x i16> %{{.*}}, %{{.*}} return _mm256_test_epi16_mask(__A, __B); } __mmask16 test_mm256_mask_test_epi16_mask(__mmask16 __U, __m256i __A, __m256i __B) { - // CHECK-LABEL: @test_mm256_mask_test_epi16_mask + // CHECK-LABEL: test_mm256_mask_test_epi16_mask // CHECK: and <4 x i64> %{{.*}}, %{{.*}} // CHECK: icmp ne <16 x i16> %{{.*}}, %{{.*}} // CHECK: and <16 x i1> %{{.*}}, %{{.*}} @@ -2677,14 +2719,14 @@ __mmask16 test_mm256_mask_test_epi16_mask(__mmask16 __U, __m256i __A, __m256i __ } __mmask16 test_mm_testn_epi8_mask(__m128i __A, __m128i __B) { - // CHECK-LABEL: @test_mm_testn_epi8_mask + // CHECK-LABEL: test_mm_testn_epi8_mask // CHECK: and <2 x i64> %{{.*}}, %{{.*}} // CHECK: icmp eq <16 x i8> %{{.*}}, %{{.*}} return _mm_testn_epi8_mask(__A, __B); } __mmask16 test_mm_mask_testn_epi8_mask(__mmask16 __U, __m128i __A, __m128i __B) { - // CHECK-LABEL: @test_mm_mask_testn_epi8_mask + // CHECK-LABEL: test_mm_mask_testn_epi8_mask // CHECK: and <2 x i64> %{{.*}}, %{{.*}} // CHECK: icmp eq <16 x i8> %{{.*}}, %{{.*}} // CHECK: and <16 x i1> %{{.*}}, %{{.*}} @@ -2692,14 +2734,14 @@ __mmask16 test_mm_mask_testn_epi8_mask(__mmask16 __U, __m128i __A, __m128i __B) } __mmask32 test_mm256_testn_epi8_mask(__m256i __A, __m256i __B) { - // CHECK-LABEL: @test_mm256_testn_epi8_mask + // CHECK-LABEL: test_mm256_testn_epi8_mask // CHECK: and <4 x i64> %{{.*}}, %{{.*}} // CHECK: icmp eq <32 x i8> %{{.*}}, %{{.*}} return _mm256_testn_epi8_mask(__A, __B); } __mmask32 test_mm256_mask_testn_epi8_mask(__mmask32 __U, __m256i __A, __m256i __B) { - // CHECK-LABEL: @test_mm256_mask_testn_epi8_mask + // CHECK-LABEL: test_mm256_mask_testn_epi8_mask // CHECK: and <4 x i64> %{{.*}}, %{{.*}} // CHECK: icmp eq <32 x i8> %{{.*}}, %{{.*}} // CHECK: and <32 x i1> %{{.*}}, %{{.*}} @@ -2707,14 +2749,14 @@ __mmask32 test_mm256_mask_testn_epi8_mask(__mmask32 __U, __m256i __A, __m256i __ } __mmask8 test_mm_testn_epi16_mask(__m128i __A, __m128i __B) { - // CHECK-LABEL: @test_mm_testn_epi16_mask + // CHECK-LABEL: test_mm_testn_epi16_mask // CHECK: and <2 x i64> %{{.*}}, %{{.*}} // CHECK: icmp eq <8 x i16> %{{.*}}, %{{.*}} return _mm_testn_epi16_mask(__A, __B); } __mmask8 test_mm_mask_testn_epi16_mask(__mmask8 __U, __m128i __A, __m128i __B) { - // CHECK-LABEL: @test_mm_mask_testn_epi16_mask + // CHECK-LABEL: test_mm_mask_testn_epi16_mask // CHECK: and <2 x i64> %{{.*}}, %{{.*}} // CHECK: icmp eq <8 x i16> %{{.*}}, %{{.*}} // CHECK: and <8 x i1> %{{.*}}, %{{.*}} @@ -2722,14 +2764,14 @@ __mmask8 test_mm_mask_testn_epi16_mask(__mmask8 __U, __m128i __A, __m128i __B) { } __mmask16 test_mm256_testn_epi16_mask(__m256i __A, __m256i __B) { - // CHECK-LABEL: @test_mm256_testn_epi16_mask + // CHECK-LABEL: test_mm256_testn_epi16_mask // CHECK: and <4 x i64> %{{.*}}, %{{.*}} // CHECK: icmp eq <16 x i16> %{{.*}}, %{{.*}} return _mm256_testn_epi16_mask(__A, __B); } __mmask16 test_mm256_mask_testn_epi16_mask(__mmask16 __U, __m256i __A, __m256i __B) { - // CHECK-LABEL: @test_mm256_mask_testn_epi16_mask + // CHECK-LABEL: test_mm256_mask_testn_epi16_mask // CHECK: and <4 x i64> %{{.*}}, %{{.*}} // CHECK: icmp eq <16 x i16> %{{.*}}, %{{.*}} // CHECK: and <16 x i1> %{{.*}}, %{{.*}} @@ -2737,102 +2779,102 @@ __mmask16 test_mm256_mask_testn_epi16_mask(__mmask16 __U, __m256i __A, __m256i _ } __mmask16 test_mm_movepi8_mask(__m128i __A) { - // CHECK-LABEL: @test_mm_movepi8_mask + // CHECK-LABEL: test_mm_movepi8_mask // CHECK: [[CMP:%.*]] = icmp slt <16 x i8> %{{.*}}, zeroinitializer return _mm_movepi8_mask(__A); } __mmask32 test_mm256_movepi8_mask(__m256i __A) { - // CHECK-LABEL: @test_mm256_movepi8_mask + // CHECK-LABEL: test_mm256_movepi8_mask // CHECK: [[CMP:%.*]] = icmp slt <32 x i8> %{{.*}}, zeroinitializer return _mm256_movepi8_mask(__A); } __m128i test_mm_movm_epi8(__mmask16 __A) { - // CHECK-LABEL: @test_mm_movm_epi8 + // CHECK-LABEL: test_mm_movm_epi8 // CHECK: %{{.*}} = bitcast i16 %{{.*}} to <16 x i1> // CHECK: %vpmovm2.i = sext <16 x i1> %{{.*}} to <16 x i8> return _mm_movm_epi8(__A); } __m256i test_mm256_movm_epi8(__mmask32 __A) { - // CHECK-LABEL: @test_mm256_movm_epi8 + // CHECK-LABEL: test_mm256_movm_epi8 // CHECK: %{{.*}} = bitcast i32 %{{.*}} to <32 x i1> // CHECK: %vpmovm2.i = sext <32 x i1> %{{.*}} to <32 x i8> return _mm256_movm_epi8(__A); } __m128i test_mm_movm_epi16(__mmask8 __A) { - // CHECK-LABEL: @test_mm_movm_epi16 + // CHECK-LABEL: test_mm_movm_epi16 // CHECK: %{{.*}} = bitcast i8 %{{.*}} to <8 x i1> // CHECK: %vpmovm2.i = sext <8 x i1> %{{.*}} to <8 x i16> return _mm_movm_epi16(__A); } __m256i test_mm256_movm_epi16(__mmask16 __A) { - // CHECK-LABEL: @test_mm256_movm_epi16 + // CHECK-LABEL: test_mm256_movm_epi16 // CHECK: %{{.*}} = bitcast i16 %{{.*}} to <16 x i1> // CHECK: %vpmovm2.i = sext <16 x i1> %{{.*}} to <16 x i16> return _mm256_movm_epi16(__A); } __m128i test_mm_mask_broadcastb_epi8(__m128i __O, __mmask16 __M, __m128i __A) { - // CHECK-LABEL: @test_mm_mask_broadcastb_epi8 + // CHECK-LABEL: test_mm_mask_broadcastb_epi8 // CHECK: shufflevector <16 x i8> %{{.*}}, <16 x i8> %{{.*}}, <16 x i32> zeroinitializer // CHECK: select <16 x i1> %{{.*}}, <16 x i8> %{{.*}}, <16 x i8> %{{.*}} return _mm_mask_broadcastb_epi8(__O, __M, __A); } __m128i test_mm_maskz_broadcastb_epi8(__mmask16 __M, __m128i __A) { - // CHECK-LABEL: @test_mm_maskz_broadcastb_epi8 + // CHECK-LABEL: test_mm_maskz_broadcastb_epi8 // CHECK: shufflevector <16 x i8> %{{.*}}, <16 x i8> %{{.*}}, <16 x i32> zeroinitializer // CHECK: select <16 x i1> %{{.*}}, <16 x i8> %{{.*}}, <16 x i8> %{{.*}} return _mm_maskz_broadcastb_epi8(__M, __A); } __m256i test_mm256_mask_broadcastb_epi8(__m256i __O, __mmask32 __M, __m128i __A) { - // CHECK-LABEL: @test_mm256_mask_broadcastb_epi8 + // CHECK-LABEL: test_mm256_mask_broadcastb_epi8 // CHECK: shufflevector <16 x i8> %{{.*}}, <16 x i8> %{{.*}}, <32 x i32> zeroinitializer // CHECK: select <32 x i1> %{{.*}}, <32 x i8> %{{.*}}, <32 x i8> %{{.*}} return _mm256_mask_broadcastb_epi8(__O, __M, __A); } __m256i test_mm256_maskz_broadcastb_epi8(__mmask32 __M, __m128i __A) { - // CHECK-LABEL: @test_mm256_maskz_broadcastb_epi8 + // CHECK-LABEL: test_mm256_maskz_broadcastb_epi8 // CHECK: shufflevector <16 x i8> %{{.*}}, <16 x i8> %{{.*}}, <32 x i32> zeroinitializer // CHECK: select <32 x i1> %{{.*}}, <32 x i8> %{{.*}}, <32 x i8> %{{.*}} return _mm256_maskz_broadcastb_epi8(__M, __A); } __m128i test_mm_mask_broadcastw_epi16(__m128i __O, __mmask8 __M, __m128i __A) { - // CHECK-LABEL: @test_mm_mask_broadcastw_epi16 + // CHECK-LABEL: test_mm_mask_broadcastw_epi16 // CHECK: shufflevector <8 x i16> %{{.*}}, <8 x i16> %{{.*}}, <8 x i32> zeroinitializer // CHECK: select <8 x i1> %{{.*}}, <8 x i16> %{{.*}}, <8 x i16> %{{.*}} return _mm_mask_broadcastw_epi16(__O, __M, __A); } __m128i test_mm_maskz_broadcastw_epi16(__mmask8 __M, __m128i __A) { - // CHECK-LABEL: @test_mm_maskz_broadcastw_epi16 + // CHECK-LABEL: test_mm_maskz_broadcastw_epi16 // CHECK: shufflevector <8 x i16> %{{.*}}, <8 x i16> %{{.*}}, <8 x i32> zeroinitializer // CHECK: select <8 x i1> %{{.*}}, <8 x i16> %{{.*}}, <8 x i16> %{{.*}} return _mm_maskz_broadcastw_epi16(__M, __A); } __m256i test_mm256_mask_broadcastw_epi16(__m256i __O, __mmask16 __M, __m128i __A) { - // CHECK-LABEL: @test_mm256_mask_broadcastw_epi16 + // CHECK-LABEL: test_mm256_mask_broadcastw_epi16 // CHECK: shufflevector <8 x i16> %{{.*}}, <8 x i16> %{{.*}}, <16 x i32> zeroinitializer // CHECK: select <16 x i1> %{{.*}}, <16 x i16> %{{.*}}, <16 x i16> %{{.*}} return _mm256_mask_broadcastw_epi16(__O, __M, __A); } __m256i test_mm256_maskz_broadcastw_epi16(__mmask16 __M, __m128i __A) { - // CHECK-LABEL: @test_mm256_maskz_broadcastw_epi16 + // CHECK-LABEL: test_mm256_maskz_broadcastw_epi16 // CHECK: shufflevector <8 x i16> %{{.*}}, <8 x i16> %{{.*}}, <16 x i32> zeroinitializer // CHECK: select <16 x i1> %{{.*}}, <16 x i16> %{{.*}}, <16 x i16> %{{.*}} return _mm256_maskz_broadcastw_epi16(__M, __A); } __m128i test_mm_mask_set1_epi8 (__m128i __O, __mmask16 __M, char __A){ - // CHECK-LABEL: @test_mm_mask_set1_epi8 + // CHECK-LABEL: test_mm_mask_set1_epi8 // CHECK: insertelement <16 x i8> poison, i8 %{{.*}}, i32 0 // CHECK: insertelement <16 x i8> %{{.*}}, i8 %{{.*}}, i32 1 // CHECK: insertelement <16 x i8> %{{.*}}, i8 %{{.*}}, i32 2 @@ -2853,7 +2895,7 @@ __m128i test_mm_mask_set1_epi8 (__m128i __O, __mmask16 __M, char __A){ return _mm_mask_set1_epi8(__O, __M, __A); } __m128i test_mm_maskz_set1_epi8 ( __mmask16 __M, char __A){ - // CHECK-LABEL: @test_mm_maskz_set1_epi8 + // CHECK-LABEL: test_mm_maskz_set1_epi8 // CHECK: insertelement <16 x i8> poison, i8 %{{.*}}, i32 0 // CHECK: insertelement <16 x i8> %{{.*}}, i8 %{{.*}}, i32 1 // CHECK: insertelement <16 x i8> %{{.*}}, i8 %{{.*}}, i32 2 @@ -2875,7 +2917,7 @@ __m128i test_mm_maskz_set1_epi8 ( __mmask16 __M, char __A){ } __m256i test_mm256_mask_set1_epi8(__m256i __O, __mmask32 __M, char __A) { - // CHECK-LABEL: @test_mm256_mask_set1_epi8 + // CHECK-LABEL: test_mm256_mask_set1_epi8 // CHECK: insertelement <32 x i8> poison, i8 %{{.*}}, i32 0 // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 1 // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 2 @@ -2913,7 +2955,7 @@ __m256i test_mm256_mask_set1_epi8(__m256i __O, __mmask32 __M, char __A) { } __m256i test_mm256_maskz_set1_epi8( __mmask32 __M, char __A) { - // CHECK-LABEL: @test_mm256_maskz_set1_epi8 + // CHECK-LABEL: test_mm256_maskz_set1_epi8 // CHECK: insertelement <32 x i8> poison, i8 %{{.*}}, i32 0 // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 1 // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 2 @@ -2952,7 +2994,7 @@ __m256i test_mm256_maskz_set1_epi8( __mmask32 __M, char __A) { __m256i test_mm256_mask_set1_epi16(__m256i __O, __mmask16 __M, short __A) { - // CHECK-LABEL: @test_mm256_mask_set1_epi16 + // CHECK-LABEL: test_mm256_mask_set1_epi16 // CHECK: insertelement <16 x i16> poison, i16 %{{.*}}, i32 0 // CHECK: insertelement <16 x i16> %{{.*}}, i16 %{{.*}}, i32 1 // CHECK: insertelement <16 x i16> %{{.*}}, i16 %{{.*}}, i32 2 @@ -2974,7 +3016,7 @@ __m256i test_mm256_mask_set1_epi16(__m256i __O, __mmask16 __M, short __A) { } __m256i test_mm256_maskz_set1_epi16(__mmask16 __M, short __A) { - // CHECK-LABEL: @test_mm256_maskz_set1_epi16 + // CHECK-LABEL: test_mm256_maskz_set1_epi16 // CHECK: insertelement <16 x i16> poison, i16 %{{.*}}, i32 0 // CHECK: insertelement <16 x i16> %{{.*}}, i16 %{{.*}}, i32 1 // CHECK: insertelement <16 x i16> %{{.*}}, i16 %{{.*}}, i32 2 @@ -2996,7 +3038,7 @@ __m256i test_mm256_maskz_set1_epi16(__mmask16 __M, short __A) { } __m128i test_mm_mask_set1_epi16(__m128i __O, __mmask8 __M, short __A) { - // CHECK-LABEL: @test_mm_mask_set1_epi16 + // CHECK-LABEL: test_mm_mask_set1_epi16 // CHECK: insertelement <8 x i16> poison, i16 %{{.*}}, i32 0 // CHECK: insertelement <8 x i16> %{{.*}}, i16 %{{.*}}, i32 1 // CHECK: insertelement <8 x i16> %{{.*}}, i16 %{{.*}}, i32 2 @@ -3010,7 +3052,7 @@ __m128i test_mm_mask_set1_epi16(__m128i __O, __mmask8 __M, short __A) { } __m128i test_mm_maskz_set1_epi16(__mmask8 __M, short __A) { - // CHECK-LABEL: @test_mm_maskz_set1_epi16 + // CHECK-LABEL: test_mm_maskz_set1_epi16 // CHECK: insertelement <8 x i16> poison, i16 %{{.*}}, i32 0 // CHECK: insertelement <8 x i16> %{{.*}}, i16 %{{.*}}, i32 1 // CHECK: insertelement <8 x i16> %{{.*}}, i16 %{{.*}}, i32 2 @@ -3023,174 +3065,174 @@ __m128i test_mm_maskz_set1_epi16(__mmask8 __M, short __A) { return _mm_maskz_set1_epi16(__M, __A); } __m128i test_mm_permutexvar_epi16(__m128i __A, __m128i __B) { - // CHECK-LABEL: @test_mm_permutexvar_epi16 + // CHECK-LABEL: test_mm_permutexvar_epi16 // CHECK: @llvm.x86.avx512.permvar.hi.128 return _mm_permutexvar_epi16(__A, __B); } __m128i test_mm_maskz_permutexvar_epi16(__mmask8 __M, __m128i __A, __m128i __B) { - // CHECK-LABEL: @test_mm_maskz_permutexvar_epi16 + // CHECK-LABEL: test_mm_maskz_permutexvar_epi16 // CHECK: @llvm.x86.avx512.permvar.hi.128 // CHECK: select <8 x i1> %{{.*}}, <8 x i16> %{{.*}}, <8 x i16> %{{.*}} return _mm_maskz_permutexvar_epi16(__M, __A, __B); } __m128i test_mm_mask_permutexvar_epi16(__m128i __W, __mmask8 __M, __m128i __A, __m128i __B) { - // CHECK-LABEL: @test_mm_mask_permutexvar_epi16 + // CHECK-LABEL: test_mm_mask_permutexvar_epi16 // CHECK: @llvm.x86.avx512.permvar.hi.128 // CHECK: select <8 x i1> %{{.*}}, <8 x i16> %{{.*}}, <8 x i16> %{{.*}} return _mm_mask_permutexvar_epi16(__W, __M, __A, __B); } __m256i test_mm256_permutexvar_epi16(__m256i __A, __m256i __B) { - // CHECK-LABEL: @test_mm256_permutexvar_epi16 + // CHECK-LABEL: test_mm256_permutexvar_epi16 // CHECK: @llvm.x86.avx512.permvar.hi.256 return _mm256_permutexvar_epi16(__A, __B); } __m256i test_mm256_maskz_permutexvar_epi16(__mmask16 __M, __m256i __A, __m256i __B) { - // CHECK-LABEL: @test_mm256_maskz_permutexvar_epi16 + // CHECK-LABEL: test_mm256_maskz_permutexvar_epi16 // CHECK: @llvm.x86.avx512.permvar.hi.256 // CHECK: select <16 x i1> %{{.*}}, <16 x i16> %{{.*}}, <16 x i16> %{{.*}} return _mm256_maskz_permutexvar_epi16(__M, __A, __B); } __m256i test_mm256_mask_permutexvar_epi16(__m256i __W, __mmask16 __M, __m256i __A, __m256i __B) { - // CHECK-LABEL: @test_mm256_mask_permutexvar_epi16 + // CHECK-LABEL: test_mm256_mask_permutexvar_epi16 // CHECK: @llvm.x86.avx512.permvar.hi.256 // CHECK: select <16 x i1> %{{.*}}, <16 x i16> %{{.*}}, <16 x i16> %{{.*}} return _mm256_mask_permutexvar_epi16(__W, __M, __A, __B); } __m128i test_mm_mask_alignr_epi8(__m128i __W, __mmask16 __U, __m128i __A, __m128i __B) { - // CHECK-LABEL: @test_mm_mask_alignr_epi8 + // CHECK-LABEL: test_mm_mask_alignr_epi8 // CHECK: shufflevector <16 x i8> %{{.*}}, <16 x i8> %{{.*}}, <16 x i32> <i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15, i32 16, i32 17> // CHECK: select <16 x i1> %{{.*}}, <16 x i8> %{{.*}}, <16 x i8> %{{.*}} return _mm_mask_alignr_epi8(__W, __U, __A, __B, 2); } __m128i test_mm_maskz_alignr_epi8(__mmask16 __U, __m128i __A, __m128i __B) { - // CHECK-LABEL: @test_mm_maskz_alignr_epi8 + // CHECK-LABEL: test_mm_maskz_alignr_epi8 // CHECK: shufflevector <16 x i8> %{{.*}}, <16 x i8> %{{.*}}, <16 x i32> <i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15, i32 16, i32 17> // CHECK: select <16 x i1> %{{.*}}, <16 x i8> %{{.*}}, <16 x i8> %{{.*}} return _mm_maskz_alignr_epi8(__U, __A, __B, 2); } __m256i test_mm256_mask_alignr_epi8(__m256i __W, __mmask32 __U, __m256i __A, __m256i __B) { - // CHECK-LABEL: @test_mm256_mask_alignr_epi8 + // CHECK-LABEL: test_mm256_mask_alignr_epi8 // CHECK: shufflevector <32 x i8> %{{.*}}, <32 x i8> %{{.*}}, <32 x i32> <i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15, i32 32, i32 33, i32 18, i32 19, i32 20, i32 21, i32 22, i32 23, i32 24, i32 25, i32 26, i32 27, i32 28, i32 29, i32 30, i32 31, i32 48, i32 49> // CHECK: select <32 x i1> %{{.*}}, <32 x i8> %{{.*}}, <32 x i8> %{{.*}} return _mm256_mask_alignr_epi8(__W, __U, __A, __B, 2); } __m256i test_mm256_maskz_alignr_epi8(__mmask32 __U, __m256i __A, __m256i __B) { - // CHECK-LABEL: @test_mm256_maskz_alignr_epi8 + // CHECK-LABEL: test_mm256_maskz_alignr_epi8 // CHECK: shufflevector <32 x i8> %{{.*}}, <32 x i8> %{{.*}}, <32 x i32> <i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15, i32 32, i32 33, i32 18, i32 19, i32 20, i32 21, i32 22, i32 23, i32 24, i32 25, i32 26, i32 27, i32 28, i32 29, i32 30, i32 31, i32 48, i32 49> // CHECK: select <32 x i1> %{{.*}}, <32 x i8> %{{.*}}, <32 x i8> %{{.*}} return _mm256_maskz_alignr_epi8(__U, __A, __B, 2); } __m128i test_mm_dbsad_epu8(__m128i __A, __m128i __B) { - // CHECK-LABEL: @test_mm_dbsad_epu8 + // CHECK-LABEL: test_mm_dbsad_epu8 // CHECK: @llvm.x86.avx512.dbpsadbw.128 return _mm_dbsad_epu8(__A, __B, 170); } __m128i test_mm_mask_dbsad_epu8(__m128i __W, __mmask8 __U, __m128i __A, __m128i __B) { - // CHECK-LABEL: @test_mm_mask_dbsad_epu8 + // CHECK-LABEL: test_mm_mask_dbsad_epu8 // CHECK: @llvm.x86.avx512.dbpsadbw.128 // CHECK: select <8 x i1> %{{.*}}, <8 x i16> %{{.*}}, <8 x i16> %{{.*}} return _mm_mask_dbsad_epu8(__W, __U, __A, __B, 170); } __m128i test_mm_maskz_dbsad_epu8(__mmask8 __U, __m128i __A, __m128i __B) { - // CHECK-LABEL: @test_mm_maskz_dbsad_epu8 + // CHECK-LABEL: test_mm_maskz_dbsad_epu8 // CHECK: @llvm.x86.avx512.dbpsadbw.128 // CHECK: select <8 x i1> %{{.*}}, <8 x i16> %{{.*}}, <8 x i16> %{{.*}} return _mm_maskz_dbsad_epu8(__U, __A, __B, 170); } __m256i test_mm256_dbsad_epu8(__m256i __A, __m256i __B) { - // CHECK-LABEL: @test_mm256_dbsad_epu8 + // CHECK-LABEL: test_mm256_dbsad_epu8 // CHECK: @llvm.x86.avx512.dbpsadbw.256 return _mm256_dbsad_epu8(__A, __B, 170); } __m256i test_mm256_mask_dbsad_epu8(__m256i __W, __mmask16 __U, __m256i __A, __m256i __B) { - // CHECK-LABEL: @test_mm256_mask_dbsad_epu8 + // CHECK-LABEL: test_mm256_mask_dbsad_epu8 // CHECK: @llvm.x86.avx512.dbpsadbw.256 // CHECK: select <16 x i1> %{{.*}}, <16 x i16> %{{.*}}, <16 x i16> %{{.*}} return _mm256_mask_dbsad_epu8(__W, __U, __A, __B, 170); } __m256i test_mm256_maskz_dbsad_epu8(__mmask16 __U, __m256i __A, __m256i __B) { - // CHECK-LABEL: @test_mm256_maskz_dbsad_epu8 + // CHECK-LABEL: test_mm256_maskz_dbsad_epu8 // CHECK: @llvm.x86.avx512.dbpsadbw.256 // CHECK: select <16 x i1> %{{.*}}, <16 x i16> %{{.*}}, <16 x i16> %{{.*}} return _mm256_maskz_dbsad_epu8(__U, __A, __B, 170); } __mmask8 test_mm_movepi16_mask(__m128i __A) { - // CHECK-LABEL: @test_mm_movepi16_mask + // CHECK-LABEL: test_mm_movepi16_mask // CHECK: [[CMP:%.*]] = icmp slt <8 x i16> %{{.*}}, zeroinitializer return _mm_movepi16_mask(__A); } __mmask16 test_mm256_movepi16_mask(__m256i __A) { - // CHECK-LABEL: @test_mm256_movepi16_mask + // CHECK-LABEL: test_mm256_movepi16_mask // CHECK: [[CMP:%.*]] = icmp slt <16 x i16> %{{.*}}, zeroinitializer return _mm256_movepi16_mask(__A); } __m128i test_mm_mask_shufflehi_epi16(__m128i __W, __mmask8 __U, __m128i __A) { - // CHECK-LABEL: @test_mm_mask_shufflehi_epi16 + // CHECK-LABEL: test_mm_mask_shufflehi_epi16 // CHECK: shufflevector <8 x i16> %{{.*}}, <8 x i16> poison, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 5, i32 5, i32 4, i32 4> // CHECK: select <8 x i1> %{{.*}}, <8 x i16> %{{.*}}, <8 x i16> %{{.*}} return _mm_mask_shufflehi_epi16(__W, __U, __A, 5); } __m128i test_mm_maskz_shufflehi_epi16(__mmask8 __U, __m128i __A) { - // CHECK-LABEL: @test_mm_maskz_shufflehi_epi16 + // CHECK-LABEL: test_mm_maskz_shufflehi_epi16 // CHECK: shufflevector <8 x i16> %{{.*}}, <8 x i16> poison, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 5, i32 5, i32 4, i32 4> // CHECK: select <8 x i1> %{{.*}}, <8 x i16> %{{.*}}, <8 x i16> %{{.*}} return _mm_maskz_shufflehi_epi16(__U, __A, 5); } __m128i test_mm_mask_shufflelo_epi16(__m128i __W, __mmask8 __U, __m128i __A) { - // CHECK-LABEL: @test_mm_mask_shufflelo_epi16 + // CHECK-LABEL: test_mm_mask_shufflelo_epi16 // CHECK: shufflevector <8 x i16> %{{.*}}, <8 x i16> poison, <8 x i32> <i32 1, i32 1, i32 0, i32 0, i32 4, i32 5, i32 6, i32 7> // CHECK: select <8 x i1> %{{.*}}, <8 x i16> %{{.*}}, <8 x i16> %{{.*}} return _mm_mask_shufflelo_epi16(__W, __U, __A, 5); } __m128i test_mm_maskz_shufflelo_epi16(__mmask8 __U, __m128i __A) { - // CHECK-LABEL: @test_mm_maskz_shufflelo_epi16 + // CHECK-LABEL: test_mm_maskz_shufflelo_epi16 // CHECK: shufflevector <8 x i16> %{{.*}}, <8 x i16> poison, <8 x i32> <i32 1, i32 1, i32 0, i32 0, i32 4, i32 5, i32 6, i32 7> // CHECK: select <8 x i1> %{{.*}}, <8 x i16> %{{.*}}, <8 x i16> %{{.*}} return _mm_maskz_shufflelo_epi16(__U, __A, 5); } __m256i test_mm256_mask_shufflehi_epi16(__m256i __W, __mmask16 __U, __m256i __A) { - // CHECK-LABEL: @test_mm256_mask_shufflehi_epi16 + // CHECK-LABEL: test_mm256_mask_shufflehi_epi16 // CHECK: shufflevector <16 x i16> %{{.*}}, <16 x i16> poison, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 5, i32 5, i32 4, i32 4, i32 8, i32 9, i32 10, i32 11, i32 13, i32 13, i32 12, i32 12> // CHECK: select <16 x i1> %{{.*}}, <16 x i16> %{{.*}}, <16 x i16> %{{.*}} return _mm256_mask_shufflehi_epi16(__W, __U, __A, 5); } __m256i test_mm256_maskz_shufflehi_epi16(__mmask16 __U, __m256i __A) { - // CHECK-LABEL: @test_mm256_maskz_shufflehi_epi16 + // CHECK-LABEL: test_mm256_maskz_shufflehi_epi16 // CHECK: shufflevector <16 x i16> %{{.*}}, <16 x i16> poison, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 5, i32 5, i32 4, i32 4, i32 8, i32 9, i32 10, i32 11, i32 13, i32 13, i32 12, i32 12> // CHECK: select <16 x i1> %{{.*}}, <16 x i16> %{{.*}}, <16 x i16> %{{.*}} return _mm256_maskz_shufflehi_epi16(__U, __A, 5); } __m256i test_mm256_mask_shufflelo_epi16(__m256i __W, __mmask16 __U, __m256i __A) { - // CHECK-LABEL: @test_mm256_mask_shufflelo_epi16 + // CHECK-LABEL: test_mm256_mask_shufflelo_epi16 // CHECK: shufflevector <16 x i16> %{{.*}}, <16 x i16> poison, <16 x i32> <i32 1, i32 1, i32 0, i32 0, i32 4, i32 5, i32 6, i32 7, i32 9, i32 9, i32 8, i32 8, i32 12, i32 13, i32 14, i32 15> // CHECK: select <16 x i1> %{{.*}}, <16 x i16> %{{.*}}, <16 x i16> %{{.*}} return _mm256_mask_shufflelo_epi16(__W, __U, __A, 5); } __m256i test_mm256_maskz_shufflelo_epi16(__mmask16 __U, __m256i __A) { - // CHECK-LABEL: @test_mm256_maskz_shufflelo_epi16 + // CHECK-LABEL: test_mm256_maskz_shufflelo_epi16 // CHECK: shufflevector <16 x i16> %{{.*}}, <16 x i16> poison, <16 x i32> <i32 1, i32 1, i32 0, i32 0, i32 4, i32 5, i32 6, i32 7, i32 9, i32 9, i32 8, i32 8, i32 12, i32 13, i32 14, i32 15> // CHECK: select <16 x i1> %{{.*}}, <16 x i16> %{{.*}}, <16 x i16> %{{.*}} return _mm256_maskz_shufflelo_epi16(__U, __A, 5); @@ -3198,42 +3240,42 @@ __m256i test_mm256_maskz_shufflelo_epi16(__mmask16 __U, __m256i __A) { void test_mm_mask_cvtepi16_storeu_epi8 (void * __P, __mmask8 __M, __m128i __A) { - // CHECK-LABEL:@test_mm_mask_cvtepi16_storeu_epi8 + // CHECK-LABEL: test_mm_mask_cvtepi16_storeu_epi8 // CHECK: @llvm.x86.avx512.mask.pmov.wb.mem.128 _mm_mask_cvtepi16_storeu_epi8 (__P, __M, __A); } void test_mm_mask_cvtsepi16_storeu_epi8 (void * __P, __mmask8 __M, __m128i __A) { - // CHECK-LABEL:@test_mm_mask_cvtsepi16_storeu_epi8 + // CHECK-LABEL: test_mm_mask_cvtsepi16_storeu_epi8 // CHECK: @llvm.x86.avx512.mask.pmovs.wb.mem.128 _mm_mask_cvtsepi16_storeu_epi8 ( __P, __M, __A); } void test_mm_mask_cvtusepi16_storeu_epi8 (void * __P, __mmask8 __M, __m128i __A) { - // CHECK-LABEL:@test_mm_mask_cvtusepi16_storeu_epi8 + // CHECK-LABEL: test_mm_mask_cvtusepi16_storeu_epi8 // CHECK: @llvm.x86.avx512.mask.pmovus.wb.mem.128 _mm_mask_cvtusepi16_storeu_epi8 (__P, __M, __A); } void test_mm256_mask_cvtusepi16_storeu_epi8 (void * __P, __mmask16 __M, __m256i __A) { - // CHECK-LABEL:@test_mm256_mask_cvtusepi16_storeu_epi8 + // CHECK-LABEL: test_mm256_mask_cvtusepi16_storeu_epi8 // CHECK: @llvm.x86.avx512.mask.pmovus.wb.mem.256 _mm256_mask_cvtusepi16_storeu_epi8 ( __P, __M, __A); } void test_mm256_mask_cvtepi16_storeu_epi8 (void * __P, __mmask16 __M, __m256i __A) { - // CHECK-LABEL:@test_mm256_mask_cvtepi16_storeu_epi8 + // CHECK-LABEL: test_mm256_mask_cvtepi16_storeu_epi8 // CHECK: @llvm.x86.avx512.mask.pmov.wb.mem.256 _mm256_mask_cvtepi16_storeu_epi8 ( __P, __M, __A); } void test_mm256_mask_cvtsepi16_storeu_epi8 (void * __P, __mmask16 __M, __m256i __A) { - // CHECK-LABEL:@test_mm256_mask_cvtsepi16_storeu_epi8 + // CHECK-LABEL: test_mm256_mask_cvtsepi16_storeu_epi8 // CHECK: @llvm.x86.avx512.mask.pmovs.wb.mem.256 _mm256_mask_cvtsepi16_storeu_epi8 ( __P, __M, __A); } diff --git a/clang/test/CodeGen/X86/avx512vlbw-reduceIntrin.c b/clang/test/CodeGen/X86/avx512vlbw-reduceIntrin.c index 0a16920..6b76da3 100644 --- a/clang/test/CodeGen/X86/avx512vlbw-reduceIntrin.c +++ b/clang/test/CodeGen/X86/avx512vlbw-reduceIntrin.c @@ -1,420 +1,532 @@ -// RUN: %clang_cc1 -ffreestanding %s -O0 -triple=x86_64 -target-feature +avx512bw -target-feature +avx512vl -emit-llvm -o - -Wall -Werror | FileCheck %s -// RUN: %clang_cc1 -ffreestanding %s -O0 -triple=i386 -target-feature +avx512bw -target-feature +avx512vl -emit-llvm -o - -Wall -Werror | FileCheck %s +// RUN: %clang_cc1 -x c -ffreestanding %s -O0 -triple=x86_64 -target-feature +avx512bw -target-feature +avx512vl -emit-llvm -o - -Wall -Werror | FileCheck %s +// RUN: %clang_cc1 -x c -ffreestanding %s -O0 -triple=x86_64 -target-feature +avx512bw -target-feature +avx512vl -fno-signed-char -emit-llvm -o - -Wall -Werror | FileCheck %s +// RUN: %clang_cc1 -x c -ffreestanding %s -O0 -triple=i386 -target-feature +avx512bw -target-feature +avx512vl -emit-llvm -o - -Wall -Werror | FileCheck %s +// RUN: %clang_cc1 -x c -ffreestanding %s -O0 -triple=i386 -target-feature +avx512bw -target-feature +avx512vl -fno-signed-char -emit-llvm -o - -Wall -Werror | FileCheck %s +// RUN: %clang_cc1 -x c++ -ffreestanding %s -O0 -triple=x86_64 -target-feature +avx512bw -target-feature +avx512vl -emit-llvm -o - -Wall -Werror | FileCheck %s +// RUN: %clang_cc1 -x c++ -ffreestanding %s -O0 -triple=x86_64 -target-feature +avx512bw -target-feature +avx512vl -fno-signed-char -emit-llvm -o - -Wall -Werror | FileCheck %s +// RUN: %clang_cc1 -x c++ -ffreestanding %s -O0 -triple=i386 -target-feature +avx512bw -target-feature +avx512vl -emit-llvm -o - -Wall -Werror | FileCheck %s +// RUN: %clang_cc1 -x c++ -ffreestanding %s -O0 -triple=i386 -target-feature +avx512bw -target-feature +avx512vl -fno-signed-char -emit-llvm -o - -Wall -Werror | FileCheck %s + +// RUN: %clang_cc1 -x c -ffreestanding %s -O0 -triple=x86_64 -target-feature +avx512bw -target-feature +avx512vl -emit-llvm -o - -Wall -Werror -fexperimental-new-constant-interpreter | FileCheck %s +// RUN: %clang_cc1 -x c -ffreestanding %s -O0 -triple=x86_64 -target-feature +avx512bw -target-feature +avx512vl -fno-signed-char -emit-llvm -o - -Wall -Werror -fexperimental-new-constant-interpreter | FileCheck %s +// RUN: %clang_cc1 -x c -ffreestanding %s -O0 -triple=i386 -target-feature +avx512bw -target-feature +avx512vl -emit-llvm -o - -Wall -Werror -fexperimental-new-constant-interpreter | FileCheck %s +// RUN: %clang_cc1 -x c -ffreestanding %s -O0 -triple=i386 -target-feature +avx512bw -target-feature +avx512vl -fno-signed-char -emit-llvm -o - -Wall -Werror -fexperimental-new-constant-interpreter | FileCheck %s +// RUN: %clang_cc1 -x c++ -ffreestanding %s -O0 -triple=x86_64 -target-feature +avx512bw -target-feature +avx512vl -emit-llvm -o - -Wall -Werror -fexperimental-new-constant-interpreter | FileCheck %s +// RUN: %clang_cc1 -x c++ -ffreestanding %s -O0 -triple=x86_64 -target-feature +avx512bw -target-feature +avx512vl -fno-signed-char -emit-llvm -o - -Wall -Werror -fexperimental-new-constant-interpreter | FileCheck %s +// RUN: %clang_cc1 -x c++ -ffreestanding %s -O0 -triple=i386 -target-feature +avx512bw -target-feature +avx512vl -emit-llvm -o - -Wall -Werror -fexperimental-new-constant-interpreter | FileCheck %s +// RUN: %clang_cc1 -x c++ -ffreestanding %s -O0 -triple=i386 -target-feature +avx512bw -target-feature +avx512vl -fno-signed-char -emit-llvm -o - -Wall -Werror -fexperimental-new-constant-interpreter | FileCheck %s #include <immintrin.h> +#include "builtin_test_helpers.h" short test_mm_reduce_add_epi16(__m128i __W){ -// CHECK-LABEL: @test_mm_reduce_add_epi16( -// CHECK: call i16 @llvm.vector.reduce.add.v8i16(<8 x i16> %{{.*}}) +// CHECK-LABEL: test_mm_reduce_add_epi16 +// CHECK: call {{.*}}i16 @llvm.vector.reduce.add.v8i16(<8 x i16> %{{.*}}) return _mm_reduce_add_epi16(__W); } +TEST_CONSTEXPR(_mm_reduce_add_epi16((__m128i)(__v8hi){1,2,3,4,5,6,7,8}) == 36); short test_mm_reduce_mul_epi16(__m128i __W){ -// CHECK-LABEL: @test_mm_reduce_mul_epi16( -// CHECK: call i16 @llvm.vector.reduce.mul.v8i16(<8 x i16> %{{.*}}) +// CHECK-LABEL: test_mm_reduce_mul_epi16 +// CHECK: call {{.*}}i16 @llvm.vector.reduce.mul.v8i16(<8 x i16> %{{.*}}) return _mm_reduce_mul_epi16(__W); } +TEST_CONSTEXPR(_mm_reduce_mul_epi16((__m128i)(__v8hi){1,2,3,1,2,3,1,2}) == 72); short test_mm_reduce_or_epi16(__m128i __W){ -// CHECK-LABEL: @test_mm_reduce_or_epi16( -// CHECK: call i16 @llvm.vector.reduce.or.v8i16(<8 x i16> %{{.*}}) +// CHECK-LABEL: test_mm_reduce_or_epi16 +// CHECK: call {{.*}}i16 @llvm.vector.reduce.or.v8i16(<8 x i16> %{{.*}}) return _mm_reduce_or_epi16(__W); } +TEST_CONSTEXPR(_mm_reduce_or_epi16((__m128i)(__v8hi){1,2,4,8,0,0,0,0}) == 15); short test_mm_reduce_and_epi16(__m128i __W){ -// CHECK-LABEL: @test_mm_reduce_and_epi16( -// CHECK: call i16 @llvm.vector.reduce.and.v8i16(<8 x i16> %{{.*}}) +// CHECK-LABEL: test_mm_reduce_and_epi16 +// CHECK: call {{.*}}i16 @llvm.vector.reduce.and.v8i16(<8 x i16> %{{.*}}) return _mm_reduce_and_epi16(__W); } +TEST_CONSTEXPR(_mm_reduce_and_epi16((__m128i)(__v8hi){1,3,5,7,9,11,13,15}) == 1); short test_mm_mask_reduce_add_epi16(__mmask8 __M, __m128i __W){ -// CHECK-LABEL: @test_mm_mask_reduce_add_epi16( +// CHECK-LABEL: test_mm_mask_reduce_add_epi16 // CHECK: select <8 x i1> %{{.*}}, <8 x i16> %{{.*}}, <8 x i16> %{{.*}} -// CHECK: call i16 @llvm.vector.reduce.add.v8i16(<8 x i16> %{{.*}}) +// CHECK: call {{.*}}i16 @llvm.vector.reduce.add.v8i16(<8 x i16> %{{.*}}) return _mm_mask_reduce_add_epi16(__M, __W); } +TEST_CONSTEXPR(_mm_mask_reduce_add_epi16((__mmask8)0b11110000, (__m128i)(__v8hi){1,2,3,4,5,6,7,8}) == 26); +TEST_CONSTEXPR(_mm_mask_reduce_add_epi16((__mmask8)0b00001111, (__m128i)(__v8hi){1,2,3,4,5,6,7,8}) == 10); short test_mm_mask_reduce_mul_epi16(__mmask8 __M, __m128i __W){ -// CHECK-LABEL: @test_mm_mask_reduce_mul_epi16( +// CHECK-LABEL: test_mm_mask_reduce_mul_epi16 // CHECK: select <8 x i1> %{{.*}}, <8 x i16> %{{.*}}, <8 x i16> %{{.*}} -// CHECK: call i16 @llvm.vector.reduce.mul.v8i16(<8 x i16> %{{.*}}) +// CHECK: call {{.*}}i16 @llvm.vector.reduce.mul.v8i16(<8 x i16> %{{.*}}) return _mm_mask_reduce_mul_epi16(__M, __W); } +TEST_CONSTEXPR(_mm_mask_reduce_mul_epi16((__mmask8)0b11110000, (__m128i)(__v8hi){1,2,3,1,2,3,1,2}) == 12); +TEST_CONSTEXPR(_mm_mask_reduce_mul_epi16((__mmask8)0b00001111, (__m128i)(__v8hi){1,2,3,1,2,3,1,2}) == 6); short test_mm_mask_reduce_and_epi16(__mmask8 __M, __m128i __W){ -// CHECK-LABEL: @test_mm_mask_reduce_and_epi16( +// CHECK-LABEL: test_mm_mask_reduce_and_epi16 // CHECK: select <8 x i1> %{{.*}}, <8 x i16> %{{.*}}, <8 x i16> %{{.*}} -// CHECK: call i16 @llvm.vector.reduce.and.v8i16(<8 x i16> %{{.*}} +// CHECK: call {{.*}}i16 @llvm.vector.reduce.and.v8i16(<8 x i16> %{{.*}} return _mm_mask_reduce_and_epi16(__M, __W); } +TEST_CONSTEXPR(_mm_mask_reduce_and_epi16((__mmask8)0b11110000, (__m128i)(__v8hi){1,3,5,7,0,0,0,0}) == 0); +TEST_CONSTEXPR(_mm_mask_reduce_and_epi16((__mmask8)0b00001111, (__m128i)(__v8hi){1,3,5,7,0,0,0,0}) == 1); short test_mm_mask_reduce_or_epi16(__mmask8 __M, __m128i __W){ -// CHECK-LABEL: @test_mm_mask_reduce_or_epi16( +// CHECK-LABEL: test_mm_mask_reduce_or_epi16 // CHECK: select <8 x i1> %{{.*}}, <8 x i16> %{{.*}}, <8 x i16> %{{.*}} -// CHECK: call i16 @llvm.vector.reduce.or.v8i16(<8 x i16> %{{.*}}) +// CHECK: call {{.*}}i16 @llvm.vector.reduce.or.v8i16(<8 x i16> %{{.*}}) return _mm_mask_reduce_or_epi16(__M, __W); } +TEST_CONSTEXPR(_mm_mask_reduce_or_epi16((__mmask8)0b11110000, (__m128i)(__v8hi){1,2,4,8,0,0,0,0}) == 0); +TEST_CONSTEXPR(_mm_mask_reduce_or_epi16((__mmask8)0b00001111, (__m128i)(__v8hi){1,2,4,8,0,0,0,0}) == 15); short test_mm256_reduce_add_epi16(__m256i __W){ -// CHECK-LABEL: @test_mm256_reduce_add_epi16( -// CHECK: call i16 @llvm.vector.reduce.add.v16i16(<16 x i16> %{{.*}}) +// CHECK-LABEL: test_mm256_reduce_add_epi16 +// CHECK: call {{.*}}i16 @llvm.vector.reduce.add.v16i16(<16 x i16> %{{.*}}) return _mm256_reduce_add_epi16(__W); } +TEST_CONSTEXPR(_mm256_reduce_add_epi16((__m256i)(__v16hi){1,2,3,4,5,6,7,8,9,10,11,12,13,14,15}) == 120); short test_mm256_reduce_mul_epi16(__m256i __W){ -// CHECK-LABEL: @test_mm256_reduce_mul_epi16( -// CHECK: call i16 @llvm.vector.reduce.mul.v16i16(<16 x i16> %{{.*}}) +// CHECK-LABEL: test_mm256_reduce_mul_epi16 +// CHECK: call {{.*}}i16 @llvm.vector.reduce.mul.v16i16(<16 x i16> %{{.*}}) return _mm256_reduce_mul_epi16(__W); } +TEST_CONSTEXPR(_mm256_reduce_mul_epi16((__m256i)(__v16hi){1,2,3,1,2,3,1,2,3,1,2,3,1,2,3,1}) == 7776); short test_mm256_reduce_or_epi16(__m256i __W){ -// CHECK-LABEL: @test_mm256_reduce_or_epi16( -// CHECK: call i16 @llvm.vector.reduce.or.v16i16(<16 x i16> %{{.*}}) +// CHECK-LABEL: test_mm256_reduce_or_epi16 +// CHECK: call {{.*}}i16 @llvm.vector.reduce.or.v16i16(<16 x i16> %{{.*}}) return _mm256_reduce_or_epi16(__W); } +TEST_CONSTEXPR(_mm256_reduce_or_epi16((__m256i)(__v16hi){1,2,4,8,16,32,64,128,0,0,0,0,0,0,0,0}) == 255); short test_mm256_reduce_and_epi16(__m256i __W){ -// CHECK-LABEL: @test_mm256_reduce_and_epi16( -// CHECK: call i16 @llvm.vector.reduce.and.v16i16(<16 x i16> %{{.*}}) +// CHECK-LABEL: test_mm256_reduce_and_epi16 +// CHECK: call {{.*}}i16 @llvm.vector.reduce.and.v16i16(<16 x i16> %{{.*}}) return _mm256_reduce_and_epi16(__W); } +TEST_CONSTEXPR(_mm256_reduce_and_epi16((__m256i)(__v16hi){1,3,5,7,9,11,13,15,17,19,21,23,25,27,29,31}) == 1); short test_mm256_mask_reduce_add_epi16(__mmask16 __M, __m256i __W){ -// CHECK-LABEL: @test_mm256_mask_reduce_add_epi16( +// CHECK-LABEL: test_mm256_mask_reduce_add_epi16 // CHECK: select <16 x i1> %{{.*}}, <16 x i16> %{{.*}}, <16 x i16> %{{.*}} -// CHECK: call i16 @llvm.vector.reduce.add.v16i16(<16 x i16> %{{.*}}) +// CHECK: call {{.*}}i16 @llvm.vector.reduce.add.v16i16(<16 x i16> %{{.*}}) return _mm256_mask_reduce_add_epi16(__M, __W); } +TEST_CONSTEXPR(_mm256_mask_reduce_add_epi16((__mmask16)0b1111111100000000, (__m256i)(__v16hi){1,2,3,4,5,6,7,8,9,10,11,12,13,14,15}) == 84); +TEST_CONSTEXPR(_mm256_mask_reduce_add_epi16((__mmask16)0b0000000011111111, (__m256i)(__v16hi){1,2,3,4,5,6,7,8,9,10,11,12,13,14,15}) == 36); short test_mm256_mask_reduce_mul_epi16(__mmask16 __M, __m256i __W){ -// CHECK-LABEL: @test_mm256_mask_reduce_mul_epi16( +// CHECK-LABEL: test_mm256_mask_reduce_mul_epi16 // CHECK: select <16 x i1> %{{.*}}, <16 x i16> %{{.*}}, <16 x i16> %{{.*}} -// CHECK: call i16 @llvm.vector.reduce.mul.v16i16(<16 x i16> %{{.*}}) +// CHECK: call {{.*}}i16 @llvm.vector.reduce.mul.v16i16(<16 x i16> %{{.*}}) return _mm256_mask_reduce_mul_epi16(__M, __W); } +TEST_CONSTEXPR(_mm256_mask_reduce_mul_epi16((__mmask16)0b1111111100000000, (__m256i)(__v16hi){1,2,3,1,2,3,1,2,3,1,2,3,1,2,3,1}) == 108); +TEST_CONSTEXPR(_mm256_mask_reduce_mul_epi16((__mmask16)0b0000000011111111, (__m256i)(__v16hi){1,2,3,1,2,3,1,2,3,1,2,3,1,2,3,1}) == 72); short test_mm256_mask_reduce_and_epi16(__mmask16 __M, __m256i __W){ -// CHECK-LABEL: @test_mm256_mask_reduce_and_epi16( +// CHECK-LABEL: test_mm256_mask_reduce_and_epi16 // CHECK: select <16 x i1> %{{.*}}, <16 x i16> %{{.*}}, <16 x i16> %{{.*}} -// CHECK: call i16 @llvm.vector.reduce.and.v16i16(<16 x i16> %{{.*}}) +// CHECK: call {{.*}}i16 @llvm.vector.reduce.and.v16i16(<16 x i16> %{{.*}}) return _mm256_mask_reduce_and_epi16(__M, __W); } +TEST_CONSTEXPR(_mm256_mask_reduce_and_epi16((__mmask16)0b1111111100000000, (__m256i)(__v16hi){1,3,5,7,9,11,13,15,0,0,0,0,0,0,0,0}) == 0); +TEST_CONSTEXPR(_mm256_mask_reduce_and_epi16((__mmask16)0b0000000011111111, (__m256i)(__v16hi){1,3,5,7,9,11,13,15,0,0,0,0,0,0,0,0}) == 1); short test_mm256_mask_reduce_or_epi16(__mmask16 __M, __m256i __W){ -// CHECK-LABEL: @test_mm256_mask_reduce_or_epi16( +// CHECK-LABEL: test_mm256_mask_reduce_or_epi16 // CHECK: select <16 x i1> %{{.*}}, <16 x i16> %{{.*}}, <16 x i16> %{{.*}} -// CHECK: call i16 @llvm.vector.reduce.or.v16i16(<16 x i16> %{{.*}}) +// CHECK: call {{.*}}i16 @llvm.vector.reduce.or.v16i16(<16 x i16> %{{.*}}) return _mm256_mask_reduce_or_epi16(__M, __W); } +TEST_CONSTEXPR(_mm256_mask_reduce_or_epi16((__mmask16)0b1111111100000000, (__m256i)(__v16hi){1,2,4,8,16,32,64,128,0,0,0,0,0,0,0,0}) == 0); +TEST_CONSTEXPR(_mm256_mask_reduce_or_epi16((__mmask16)0b0000000011111111, (__m256i)(__v16hi){1,2,4,8,16,32,64,128,0,0,0,0,0,0,0,0}) == 255); signed char test_mm_reduce_add_epi8(__m128i __W){ -// CHECK-LABEL: @test_mm_reduce_add_epi8( -// CHECK: call i8 @llvm.vector.reduce.add.v16i8(<16 x i8> %{{.*}}) +// CHECK-LABEL: test_mm_reduce_add_epi8 +// CHECK: call {{.*}}i8 @llvm.vector.reduce.add.v16i8(<16 x i8> %{{.*}}) return _mm_reduce_add_epi8(__W); } +TEST_CONSTEXPR(_mm_reduce_add_epi8((__m128i)(__v16qs){1,2,3,4,5,6,7,8,9,10,11,12,13,14,15}) == 120); signed char test_mm_reduce_mul_epi8(__m128i __W){ -// CHECK-LABEL: @test_mm_reduce_mul_epi8( -// CHECK: call i8 @llvm.vector.reduce.mul.v16i8(<16 x i8> %{{.*}}) +// CHECK-LABEL: test_mm_reduce_mul_epi8 +// CHECK: call {{.*}}i8 @llvm.vector.reduce.mul.v16i8(<16 x i8> %{{.*}}) return _mm_reduce_mul_epi8(__W); } +TEST_CONSTEXPR(_mm_reduce_mul_epi8((__m128i)(__v16qs){1,2,1,1,2,1,1,2,1,1,2,1,1,2,1,1}) == 32); signed char test_mm_reduce_and_epi8(__m128i __W){ -// CHECK-LABEL: @test_mm_reduce_and_epi8( -// CHECK: call i8 @llvm.vector.reduce.and.v16i8(<16 x i8> %{{.*}}) +// CHECK-LABEL: test_mm_reduce_and_epi8 +// CHECK: call {{.*}}i8 @llvm.vector.reduce.and.v16i8(<16 x i8> %{{.*}}) return _mm_reduce_and_epi8(__W); } +TEST_CONSTEXPR(_mm_reduce_and_epi8((__m128i)(__v16qs){1,3,5,7,9,11,13,15,17,19,21,23,25,27,29,31}) == 1); signed char test_mm_reduce_or_epi8(__m128i __W){ -// CHECK-LABEL: @test_mm_reduce_or_epi8( -// CHECK: call i8 @llvm.vector.reduce.or.v16i8(<16 x i8> %{{.*}}) +// CHECK-LABEL: test_mm_reduce_or_epi8 +// CHECK: call {{.*}}i8 @llvm.vector.reduce.or.v16i8(<16 x i8> %{{.*}}) return _mm_reduce_or_epi8(__W); } +TEST_CONSTEXPR(_mm_reduce_or_epi8((__m128i)(__v16qs){0,1,2,4,8,16,32,64,0,0,0,0,0,0,0,0}) == 127); signed char test_mm_mask_reduce_add_epi8(__mmask16 __M, __m128i __W){ -// CHECK-LABEL: @test_mm_mask_reduce_add_epi8( +// CHECK-LABEL: test_mm_mask_reduce_add_epi8 // CHECK: select <16 x i1> %{{.*}}, <16 x i8> %{{.*}}, <16 x i8> %{{.*}} -// CHECK: call i8 @llvm.vector.reduce.add.v16i8(<16 x i8> %{{.*}}) +// CHECK: call {{.*}}i8 @llvm.vector.reduce.add.v16i8(<16 x i8> %{{.*}}) return _mm_mask_reduce_add_epi8(__M, __W); } +TEST_CONSTEXPR(_mm_mask_reduce_add_epi8((__mmask16)0b1111111100000000, (__m128i)(__v16qs){1,2,3,4,5,6,7,8,9,10,11,12,13,14,15}) == 84); +TEST_CONSTEXPR(_mm_mask_reduce_add_epi8((__mmask16)0b0000000011111111, (__m128i)(__v16qs){1,2,3,4,5,6,7,8,9,10,11,12,13,14,15}) == 36); signed char test_mm_mask_reduce_mul_epi8(__mmask16 __M, __m128i __W){ -// CHECK-LABEL: @test_mm_mask_reduce_mul_epi8( +// CHECK-LABEL: test_mm_mask_reduce_mul_epi8 // CHECK: select <16 x i1> %{{.*}}, <16 x i8> %{{.*}}, <16 x i8> %{{.*}} -// CHECK: call i8 @llvm.vector.reduce.mul.v16i8(<16 x i8> %{{.*}}) +// CHECK: call {{.*}}i8 @llvm.vector.reduce.mul.v16i8(<16 x i8> %{{.*}}) return _mm_mask_reduce_mul_epi8(__M, __W); } +TEST_CONSTEXPR(_mm_mask_reduce_mul_epi8((__mmask16)0b1111111100000000, (__m128i)(__v16qs){1,2,1,1,2,1,1,2,1,1,2,1,1,2,1,1}) == 4); +TEST_CONSTEXPR(_mm_mask_reduce_mul_epi8((__mmask16)0b0000000011111111, (__m128i)(__v16qs){1,2,1,1,2,1,1,2,1,1,2,1,1,2,1,1}) == 8); signed char test_mm_mask_reduce_and_epi8(__mmask16 __M, __m128i __W){ -// CHECK-LABEL: @test_mm_mask_reduce_and_epi8( +// CHECK-LABEL: test_mm_mask_reduce_and_epi8 // CHECK: select <16 x i1> %{{.*}}, <16 x i8> %{{.*}}, <16 x i8> %{{.*}} -// CHECK: call i8 @llvm.vector.reduce.and.v16i8(<16 x i8> %{{.*}}) +// CHECK: call {{.*}}i8 @llvm.vector.reduce.and.v16i8(<16 x i8> %{{.*}}) return _mm_mask_reduce_and_epi8(__M, __W); } +TEST_CONSTEXPR(_mm_mask_reduce_and_epi8((__mmask16)0b1111111100000000, (__m128i)(__v16qs){1,3,5,7,9,11,13,15,0,0,0,0,0,0,0,0}) == 0); +TEST_CONSTEXPR(_mm_mask_reduce_and_epi8((__mmask16)0b0000000011111111, (__m128i)(__v16qs){1,3,5,7,9,11,13,15,0,0,0,0,0,0,0,0}) == 1); signed char test_mm_mask_reduce_or_epi8(__mmask16 __M, __m128i __W){ -// CHECK-LABEL: @test_mm_mask_reduce_or_epi8( +// CHECK-LABEL: test_mm_mask_reduce_or_epi8 // CHECK: select <16 x i1> %{{.*}}, <16 x i8> %{{.*}}, <16 x i8> %{{.*}} -// CHECK: call i8 @llvm.vector.reduce.or.v16i8(<16 x i8> %{{.*}}) +// CHECK: call {{.*}}i8 @llvm.vector.reduce.or.v16i8(<16 x i8> %{{.*}}) return _mm_mask_reduce_or_epi8(__M, __W); } +TEST_CONSTEXPR(_mm_mask_reduce_or_epi8((__mmask16)0b1111111100000000, (__m128i)(__v16qs){0,1,2,4,8,16,32,64,0,0,0,0,0,0,0,0}) == 0); +TEST_CONSTEXPR(_mm_mask_reduce_or_epi8((__mmask16)0b0000000011111111, (__m128i)(__v16qs){0,1,2,4,8,16,32,64,0,0,0,0,0,0,0,0}) == 127); signed char test_mm256_reduce_add_epi8(__m256i __W){ -// CHECK-LABEL: @test_mm256_reduce_add_epi8( -// CHECK: call i8 @llvm.vector.reduce.add.v32i8(<32 x i8> %{{.*}}) +// CHECK-LABEL: test_mm256_reduce_add_epi8 +// CHECK: call {{.*}}i8 @llvm.vector.reduce.add.v32i8(<32 x i8> %{{.*}}) return _mm256_reduce_add_epi8(__W); } +TEST_CONSTEXPR(_mm256_reduce_add_epi8((__m256i)(__v32qs){0,1,2,3,4,5,6,7,0,1,2,3,4,5,6,7,0,1,2,3,4,5,6,7,0,1,2,3,4,5,6,7}) == 112); signed char test_mm256_reduce_mul_epi8(__m256i __W){ -// CHECK-LABEL: @test_mm256_reduce_mul_epi8( -// CHECK: call i8 @llvm.vector.reduce.mul.v32i8(<32 x i8> %{{.*}}) +// CHECK-LABEL: test_mm256_reduce_mul_epi8 +// CHECK: call {{.*}}i8 @llvm.vector.reduce.mul.v32i8(<32 x i8> %{{.*}}) return _mm256_reduce_mul_epi8(__W); } +TEST_CONSTEXPR(_mm256_reduce_mul_epi8((__m256i)(__v32qs){1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,2}) == 16); signed char test_mm256_reduce_and_epi8(__m256i __W){ -// CHECK-LABEL: @test_mm256_reduce_and_epi8( -// CHECK: call i8 @llvm.vector.reduce.and.v32i8(<32 x i8> %{{.*}}) +// CHECK-LABEL: test_mm256_reduce_and_epi8 +// CHECK: call {{.*}}i8 @llvm.vector.reduce.and.v32i8(<32 x i8> %{{.*}}) return _mm256_reduce_and_epi8(__W); } +TEST_CONSTEXPR(_mm256_reduce_and_epi8((__m256i)(__v32qs){1,3,5,7,9,11,13,15,17,19,21,23,25,27,29,31,33,35,37,39,41,43,45,47,49,51,53,55,57,59,61,63}) == 1); signed char test_mm256_reduce_or_epi8(__m256i __W){ -// CHECK-LABEL: @test_mm256_reduce_or_epi8( -// CHECK: call i8 @llvm.vector.reduce.or.v32i8(<32 x i8> %{{.*}}) +// CHECK-LABEL: test_mm256_reduce_or_epi8 +// CHECK: call {{.*}}i8 @llvm.vector.reduce.or.v32i8(<32 x i8> %{{.*}}) return _mm256_reduce_or_epi8(__W); } +TEST_CONSTEXPR(_mm256_reduce_or_epi8((__m256i)(__v32qs){1,2,4,8,16,32,64,127,1,2,4,8,16,32,64,127,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}) == 127); signed char test_mm256_mask_reduce_add_epi8(__mmask32 __M, __m256i __W){ -// CHECK-LABEL: @test_mm256_mask_reduce_add_epi8( +// CHECK-LABEL: test_mm256_mask_reduce_add_epi8 // CHECK: select <32 x i1> %{{.*}}, <32 x i8> %{{.*}}, <32 x i8> %{{.*}} -// CHECK: call i8 @llvm.vector.reduce.add.v32i8(<32 x i8> %{{.*}}) +// CHECK: call {{.*}}i8 @llvm.vector.reduce.add.v32i8(<32 x i8> %{{.*}}) return _mm256_mask_reduce_add_epi8(__M, __W); } +TEST_CONSTEXPR(_mm256_mask_reduce_add_epi8((__mmask32)0b11111111111111110000000000000000, (__m256i)(__v32qs){0,1,2,3,4,5,6,7,0,1,2,3,4,5,6,7,0,1,2,3,4,5,6,7,0,1,2,3,4,5,6,7}) == 56); +TEST_CONSTEXPR(_mm256_mask_reduce_add_epi8((__mmask32)0b00000000000000001111111111111111, (__m256i)(__v32qs){8,1,2,3,4,5,6,7,0,1,2,3,4,5,6,7,0,1,2,3,4,5,6,7,0,1,2,3,4,5,6,7}) == 64); signed char test_mm256_mask_reduce_mul_epi8(__mmask32 __M, __m256i __W){ -// CHECK-LABEL: @test_mm256_mask_reduce_mul_epi8( +// CHECK-LABEL: test_mm256_mask_reduce_mul_epi8 // CHECK: select <32 x i1> %{{.*}}, <32 x i8> %{{.*}}, <32 x i8> %{{.*}} -// CHECK: call i8 @llvm.vector.reduce.mul.v32i8(<32 x i8> %{{.*}}) +// CHECK: call {{.*}}i8 @llvm.vector.reduce.mul.v32i8(<32 x i8> %{{.*}}) return _mm256_mask_reduce_mul_epi8(__M, __W); } +TEST_CONSTEXPR(_mm256_mask_reduce_mul_epi8((__mmask32)0b11111111111111110000000000000000, (__m256i)(__v32qs){1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,2}) == 4); +TEST_CONSTEXPR(_mm256_mask_reduce_mul_epi8((__mmask32)0b00000000000000001111111111111111, (__m256i)(__v32qs){4,1,1,1,1,1,1,2,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,2}) == 16); signed char test_mm256_mask_reduce_and_epi8(__mmask32 __M, __m256i __W){ -// CHECK-LABEL: @test_mm256_mask_reduce_and_epi8( +// CHECK-LABEL: test_mm256_mask_reduce_and_epi8 // CHECK: select <32 x i1> %{{.*}}, <32 x i8> %{{.*}}, <32 x i8> %{{.*}} -// CHECK: call i8 @llvm.vector.reduce.and.v32i8(<32 x i8> %{{.*}}) +// CHECK: call {{.*}}i8 @llvm.vector.reduce.and.v32i8(<32 x i8> %{{.*}}) return _mm256_mask_reduce_and_epi8(__M, __W); } +TEST_CONSTEXPR(_mm256_mask_reduce_and_epi8((__mmask32)0b11111111111111110000000000000000, (__m256i)(__v32qs){1,3,5,7,9,11,13,15,17,19,21,23,25,27,29,31,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}) == 0); +TEST_CONSTEXPR(_mm256_mask_reduce_and_epi8((__mmask32)0b00000000000000001111111111111111, (__m256i)(__v32qs){1,3,5,7,9,11,13,15,17,19,21,23,25,27,29,31,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}) == 1); signed char test_mm256_mask_reduce_or_epi8(__mmask32 __M, __m256i __W){ -// CHECK-LABEL: @test_mm256_mask_reduce_or_epi8( +// CHECK-LABEL: test_mm256_mask_reduce_or_epi8 // CHECK: select <32 x i1> %{{.*}}, <32 x i8> %{{.*}}, <32 x i8> %{{.*}} -// CHECK: call i8 @llvm.vector.reduce.or.v32i8(<32 x i8> %{{.*}}) +// CHECK: call {{.*}}i8 @llvm.vector.reduce.or.v32i8(<32 x i8> %{{.*}}) return _mm256_mask_reduce_or_epi8(__M, __W); } +TEST_CONSTEXPR(_mm256_mask_reduce_or_epi8((__mmask32)0b11111111111111110000000000000000, (__m256i)(__v32qs){1,2,4,8,16,32,64,127,1,2,4,8,16,32,64,127,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}) == 0); +TEST_CONSTEXPR(_mm256_mask_reduce_or_epi8((__mmask32)0b00000000000000001111111111111111, (__m256i)(__v32qs){1,2,4,8,16,32,64,127,1,2,4,8,16,32,64,127,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}) == 127); short test_mm_reduce_max_epi16(__m128i __W){ // CHECK-LABEL: test_mm_reduce_max_epi16 -// CHECK: call i16 @llvm.vector.reduce.smax.v8i16(<8 x i16> %{{.*}}) +// CHECK: call {{.*}}i16 @llvm.vector.reduce.smax.v8i16(<8 x i16> %{{.*}}) return _mm_reduce_max_epi16(__W); } +TEST_CONSTEXPR(_mm_reduce_max_epi16((__m128i)(__v8hi){-4,-3,-2,-1,1,2,3,4}) == 4); short test_mm_reduce_min_epi16(__m128i __W){ // CHECK-LABEL: test_mm_reduce_min_epi16 -// CHECK: call i16 @llvm.vector.reduce.smin.v8i16(<8 x i16> %{{.*}}) +// CHECK: call {{.*}}i16 @llvm.vector.reduce.smin.v8i16(<8 x i16> %{{.*}}) return _mm_reduce_min_epi16(__W); } +TEST_CONSTEXPR(_mm_reduce_min_epi16((__m128i)(__v8hi){-4,-3,-2,-1,1,2,3,4}) == -4); unsigned short test_mm_reduce_max_epu16(__m128i __W){ // CHECK-LABEL: test_mm_reduce_max_epu16 -// CHECK: call i16 @llvm.vector.reduce.umax.v8i16(<8 x i16> %{{.*}}) +// CHECK: call {{.*}}i16 @llvm.vector.reduce.umax.v8i16(<8 x i16> %{{.*}}) return _mm_reduce_max_epu16(__W); } +TEST_CONSTEXPR(_mm_reduce_max_epu16((__m128i)(__v8hu){1,2,3,4,5,6,7,8}) == 8); unsigned short test_mm_reduce_min_epu16(__m128i __W){ // CHECK-LABEL: test_mm_reduce_min_epu16 -// CHECK: call i16 @llvm.vector.reduce.umin.v8i16(<8 x i16> %{{.*}}) +// CHECK: call {{.*}}i16 @llvm.vector.reduce.umin.v8i16(<8 x i16> %{{.*}}) return _mm_reduce_min_epu16(__W); } +TEST_CONSTEXPR(_mm_reduce_min_epu16((__m128i)(__v8hu){1,2,3,4,5,6,7,8}) == 1); short test_mm_mask_reduce_max_epi16(__mmask8 __M, __m128i __W){ // CHECK-LABEL: test_mm_mask_reduce_max_epi16 // CHECK: select <8 x i1> %{{.*}}, <8 x i16> %{{.*}}, <8 x i16> %{{.*}} -// CHECK: call i16 @llvm.vector.reduce.smax.v8i16(<8 x i16> %{{.*}}) +// CHECK: call {{.*}}i16 @llvm.vector.reduce.smax.v8i16(<8 x i16> %{{.*}}) return _mm_mask_reduce_max_epi16(__M, __W); } +TEST_CONSTEXPR(_mm_mask_reduce_max_epi16((__mmask8)0b11110000, (__m128i)(__v8hi){-4,-3,-2,-1,1,2,3,4}) == 4); +TEST_CONSTEXPR(_mm_mask_reduce_max_epi16((__mmask8)0b00001111, (__m128i)(__v8hi){-4,-3,-2,-1,1,2,3,4}) == -1); short test_mm_mask_reduce_min_epi16(__mmask8 __M, __m128i __W){ // CHECK-LABEL: test_mm_mask_reduce_min_epi16 // CHECK: select <8 x i1> %{{.*}}, <8 x i16> %{{.*}}, <8 x i16> %{{.*}} -// CHECK: call i16 @llvm.vector.reduce.smin.v8i16(<8 x i16> %{{.*}}) +// CHECK: call {{.*}}i16 @llvm.vector.reduce.smin.v8i16(<8 x i16> %{{.*}}) return _mm_mask_reduce_min_epi16(__M, __W); } +TEST_CONSTEXPR(_mm_mask_reduce_min_epi16((__mmask8)0b11110000, (__m128i)(__v8hi){-4,-3,-2,-1,1,2,3,4}) == 1); +TEST_CONSTEXPR(_mm_mask_reduce_min_epi16((__mmask8)0b00001111, (__m128i)(__v8hi){-4,-3,-2,-1,1,2,3,4}) == -4); unsigned short test_mm_mask_reduce_max_epu16(__mmask8 __M, __m128i __W){ // CHECK-LABEL: test_mm_mask_reduce_max_epu16 // CHECK: select <8 x i1> %{{.*}}, <8 x i16> %{{.*}}, <8 x i16> %{{.*}} -// CHECK: call i16 @llvm.vector.reduce.umax.v8i16(<8 x i16> %{{.*}}) +// CHECK: call {{.*}}i16 @llvm.vector.reduce.umax.v8i16(<8 x i16> %{{.*}}) return _mm_mask_reduce_max_epu16(__M, __W); } +TEST_CONSTEXPR(_mm_mask_reduce_max_epu16((__mmask8)0b11110000, (__m128i)(__v8hu){1,2,3,4,5,6,7,8}) == 8); +TEST_CONSTEXPR(_mm_mask_reduce_max_epu16((__mmask8)0b00001111, (__m128i)(__v8hu){1,2,3,4,5,6,7,8}) == 4); unsigned short test_mm_mask_reduce_min_epu16(__mmask8 __M, __m128i __W){ // CHECK-LABEL: test_mm_mask_reduce_min_epu16 // CHECK: select <8 x i1> %{{.*}}, <8 x i16> %{{.*}}, <8 x i16> %{{.*}} -// CHECK: call i16 @llvm.vector.reduce.umin.v8i16(<8 x i16> %{{.*}}) +// CHECK: call {{.*}}i16 @llvm.vector.reduce.umin.v8i16(<8 x i16> %{{.*}}) return _mm_mask_reduce_min_epu16(__M, __W); } +TEST_CONSTEXPR(_mm_mask_reduce_min_epu16((__mmask8)0b11110000, (__m128i)(__v8hu){1,2,3,4,5,6,7,8}) == 5); +TEST_CONSTEXPR(_mm_mask_reduce_min_epu16((__mmask8)0b00001111, (__m128i)(__v8hu){1,2,3,4,5,6,7,8}) == 1); short test_mm256_reduce_max_epi16(__m256i __W){ // CHECK-LABEL: test_mm256_reduce_max_epi16 -// CHECK: call i16 @llvm.vector.reduce.smax.v16i16(<16 x i16> %{{.*}}) +// CHECK: call {{.*}}i16 @llvm.vector.reduce.smax.v16i16(<16 x i16> %{{.*}}) return _mm256_reduce_max_epi16(__W); } +TEST_CONSTEXPR(_mm256_reduce_max_epi16((__m256i)(__v16hi){-8,-7,-6,-5,-4,-3,-2,-1,1,2,3,4,5,6,7,8}) == 8); short test_mm256_reduce_min_epi16(__m256i __W){ // CHECK-LABEL: test_mm256_reduce_min_epi16 -// CHECK: call i16 @llvm.vector.reduce.smin.v16i16(<16 x i16> %{{.*}}) +// CHECK: call {{.*}}i16 @llvm.vector.reduce.smin.v16i16(<16 x i16> %{{.*}}) return _mm256_reduce_min_epi16(__W); } +TEST_CONSTEXPR(_mm256_reduce_min_epi16((__m256i)(__v16hi){-8,-7,-6,-5,-4,-3,-2,-1,1,2,3,4,5,6,7,8}) == -8); unsigned short test_mm256_reduce_max_epu16(__m256i __W){ // CHECK-LABEL: test_mm256_reduce_max_epu16 -// CHECK: call i16 @llvm.vector.reduce.umax.v16i16(<16 x i16> %{{.*}}) +// CHECK: call {{.*}}i16 @llvm.vector.reduce.umax.v16i16(<16 x i16> %{{.*}}) return _mm256_reduce_max_epu16(__W); } +TEST_CONSTEXPR(_mm256_reduce_max_epu16((__m256i)(__v16hu){1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16}) == 16); unsigned short test_mm256_reduce_min_epu16(__m256i __W){ // CHECK-LABEL: test_mm256_reduce_min_epu16 -// CHECK: call i16 @llvm.vector.reduce.umin.v16i16(<16 x i16> %{{.*}}) +// CHECK: call {{.*}}i16 @llvm.vector.reduce.umin.v16i16(<16 x i16> %{{.*}}) return _mm256_reduce_min_epu16(__W); } +TEST_CONSTEXPR(_mm256_reduce_min_epu16((__m256i)(__v16hu){1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16}) == 1); short test_mm256_mask_reduce_max_epi16(__mmask16 __M, __m256i __W){ // CHECK-LABEL: test_mm256_mask_reduce_max_epi16 // CHECK: select <16 x i1> %{{.*}}, <16 x i16> %{{.*}}, <16 x i16> %{{.*}} -// CHECK: call i16 @llvm.vector.reduce.smax.v16i16(<16 x i16> %{{.*}}) +// CHECK: call {{.*}}i16 @llvm.vector.reduce.smax.v16i16(<16 x i16> %{{.*}}) return _mm256_mask_reduce_max_epi16(__M, __W); } +TEST_CONSTEXPR(_mm256_mask_reduce_max_epi16((__mmask16){0b1111111100000000}, (__m256i)(__v16hi){-8,-7,-6,-5,-4,-3,-2,-1,1,2,3,4,5,6,7,8}) == 8); +TEST_CONSTEXPR(_mm256_mask_reduce_max_epi16((__mmask16){0b0000000011111111}, (__m256i)(__v16hi){-8,-7,-6,-5,-4,-3,-2,-1,1,2,3,4,5,6,7,8}) == -1); short test_mm256_mask_reduce_min_epi16(__mmask16 __M, __m256i __W){ // CHECK-LABEL: test_mm256_mask_reduce_min_epi16 // CHECK: select <16 x i1> %{{.*}}, <16 x i16> %{{.*}}, <16 x i16> %{{.*}} -// CHECK: call i16 @llvm.vector.reduce.smin.v16i16(<16 x i16> %{{.*}}) +// CHECK: call {{.*}}i16 @llvm.vector.reduce.smin.v16i16(<16 x i16> %{{.*}}) return _mm256_mask_reduce_min_epi16(__M, __W); } +TEST_CONSTEXPR(_mm256_mask_reduce_min_epi16((__mmask16){0b1111111100000000}, (__m256i)(__v16hi){-8,-7,-6,-5,-4,-3,-2,-1,1,2,3,4,5,6,7,8}) == 1); +TEST_CONSTEXPR(_mm256_mask_reduce_min_epi16((__mmask16){0b0000000011111111}, (__m256i)(__v16hi){-8,-7,-6,-5,-4,-3,-2,-1,1,2,3,4,5,6,7,8}) == -8); unsigned short test_mm256_mask_reduce_max_epu16(__mmask16 __M, __m256i __W){ // CHECK-LABEL: test_mm256_mask_reduce_max_epu16 // CHECK: select <16 x i1> %{{.*}}, <16 x i16> %{{.*}}, <16 x i16> %{{.*}} -// CHECK: call i16 @llvm.vector.reduce.umax.v16i16(<16 x i16> %{{.*}}) +// CHECK: call {{.*}}i16 @llvm.vector.reduce.umax.v16i16(<16 x i16> %{{.*}}) return _mm256_mask_reduce_max_epu16(__M, __W); } +TEST_CONSTEXPR(_mm256_mask_reduce_max_epu16((__mmask16){0b1111111100000000}, (__m256i)(__v16hu){1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16}) == 16); +TEST_CONSTEXPR(_mm256_mask_reduce_max_epu16((__mmask16){0b0000000011111111}, (__m256i)(__v16hu){1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16}) == 8); unsigned short test_mm256_mask_reduce_min_epu16(__mmask16 __M, __m256i __W){ // CHECK-LABEL: test_mm256_mask_reduce_min_epu16 // CHECK: select <16 x i1> %{{.*}}, <16 x i16> %{{.*}}, <16 x i16> %{{.*}} -// CHECK: call i16 @llvm.vector.reduce.umin.v16i16(<16 x i16> %{{.*}}) +// CHECK: call {{.*}}i16 @llvm.vector.reduce.umin.v16i16(<16 x i16> %{{.*}}) return _mm256_mask_reduce_min_epu16(__M, __W); } +TEST_CONSTEXPR(_mm256_mask_reduce_min_epu16((__mmask16){0b1111111100000000}, (__m256i)(__v16hu){1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16}) == 9); +TEST_CONSTEXPR(_mm256_mask_reduce_min_epu16((__mmask16){0b0000000011111111}, (__m256i)(__v16hu){1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16}) == 1); signed char test_mm_reduce_max_epi8(__m128i __W){ // CHECK-LABEL: test_mm_reduce_max_epi8 -// CHECK: call i8 @llvm.vector.reduce.smax.v16i8(<16 x i8> %{{.*}}) +// CHECK: call {{.*}}i8 @llvm.vector.reduce.smax.v16i8(<16 x i8> %{{.*}}) return _mm_reduce_max_epi8(__W); } +TEST_CONSTEXPR(_mm_reduce_max_epi8((__m128i)(__v16qs){-8,-7,-6,-5,-4,-3,-2,-1,1,2,3,4,5,6,7,8}) == 8); signed char test_mm_reduce_min_epi8(__m128i __W){ // CHECK-LABEL: test_mm_reduce_min_epi8 -// CHECK: call i8 @llvm.vector.reduce.smin.v16i8(<16 x i8> %{{.*}}) +// CHECK: call {{.*}}i8 @llvm.vector.reduce.smin.v16i8(<16 x i8> %{{.*}}) return _mm_reduce_min_epi8(__W); } +TEST_CONSTEXPR(_mm_reduce_min_epi8((__m128i)(__v16qs){-8,-7,-6,-5,-4,-3,-2,-1,1,2,3,4,5,6,7,8}) == -8); unsigned char test_mm_reduce_max_epu8(__m128i __W){ // CHECK-LABEL: test_mm_reduce_max_epu8 -// CHECK: call i8 @llvm.vector.reduce.umax.v16i8(<16 x i8> %{{.*}}) +// CHECK: call {{.*}}i8 @llvm.vector.reduce.umax.v16i8(<16 x i8> %{{.*}}) return _mm_reduce_max_epu8(__W); } +TEST_CONSTEXPR(_mm_reduce_max_epu8((__m128i)(__v16qu){1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16}) == 16); unsigned char test_mm_reduce_min_epu8(__m128i __W){ // CHECK-LABEL: test_mm_reduce_min_epu8 -// CHECK: call i8 @llvm.vector.reduce.umin.v16i8(<16 x i8> %{{.*}}) +// CHECK: call {{.*}}i8 @llvm.vector.reduce.umin.v16i8(<16 x i8> %{{.*}}) return _mm_reduce_min_epu8(__W); } +TEST_CONSTEXPR(_mm_reduce_min_epu8((__m128i)(__v16qu){1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16}) == 1); signed char test_mm_mask_reduce_max_epi8(__mmask16 __M, __m128i __W){ // CHECK-LABEL: test_mm_mask_reduce_max_epi8 // CHECK: select <16 x i1> %{{.*}}, <16 x i8> %{{.*}}, <16 x i8> %{{.*}} -// CHECK: call i8 @llvm.vector.reduce.smax.v16i8(<16 x i8> %{{.*}}) +// CHECK: call {{.*}}i8 @llvm.vector.reduce.smax.v16i8(<16 x i8> %{{.*}}) return _mm_mask_reduce_max_epi8(__M, __W); } +TEST_CONSTEXPR(_mm_mask_reduce_max_epi8((__mmask16)0b1111111100000000, (__m128i)(__v16qs){-8,-7,-6,-5,-4,-3,-2,-1,1,2,3,4,5,6,7,8}) == 8); +TEST_CONSTEXPR(_mm_mask_reduce_max_epi8((__mmask16)0b0000000011111111, (__m128i)(__v16qs){-8,-7,-6,-5,-4,-3,-2,-1,1,2,3,4,5,6,7,8}) == -1); signed char test_mm_mask_reduce_min_epi8(__mmask16 __M, __m128i __W){ // CHECK-LABEL: test_mm_mask_reduce_min_epi8 // CHECK: select <16 x i1> %{{.*}}, <16 x i8> %{{.*}}, <16 x i8> %{{.*}} -// CHECK: call i8 @llvm.vector.reduce.smin.v16i8(<16 x i8> %{{.*}}) +// CHECK: call {{.*}}i8 @llvm.vector.reduce.smin.v16i8(<16 x i8> %{{.*}}) return _mm_mask_reduce_min_epi8(__M, __W); } +TEST_CONSTEXPR(_mm_mask_reduce_min_epi8((__mmask16)0b1111111100000000, (__m128i)(__v16qs){-8,-7,-6,-5,-4,-3,-2,-1,1,2,3,4,5,6,7,8}) == 1); +TEST_CONSTEXPR(_mm_mask_reduce_min_epi8((__mmask16)0b0000000011111111, (__m128i)(__v16qs){-8,-7,-6,-5,-4,-3,-2,-1,1,2,3,4,5,6,7,8}) == -8); unsigned char test_mm_mask_reduce_max_epu8(__mmask16 __M, __m128i __W){ // CHECK-LABEL: test_mm_mask_reduce_max_epu8 // CHECK: select <16 x i1> %{{.*}}, <16 x i8> %{{.*}}, <16 x i8> %{{.*}} -// CHECK: call i8 @llvm.vector.reduce.umax.v16i8(<16 x i8> %{{.*}}) +// CHECK: call {{.*}}i8 @llvm.vector.reduce.umax.v16i8(<16 x i8> %{{.*}}) return _mm_mask_reduce_max_epu8(__M, __W); } +TEST_CONSTEXPR(_mm_mask_reduce_max_epu8((__mmask16)0b1111111100000000, (__m128i)(__v16qs){1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16}) == 16); +TEST_CONSTEXPR(_mm_mask_reduce_max_epu8((__mmask16)0b0000000011111111, (__m128i)(__v16qs){1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16}) == 8); unsigned char test_mm_mask_reduce_min_epu8(__mmask16 __M, __m128i __W){ // CHECK-LABEL: test_mm_mask_reduce_min_epu8 // CHECK: select <16 x i1> %{{.*}}, <16 x i8> %{{.*}}, <16 x i8> %{{.*}} -// CHECK: call i8 @llvm.vector.reduce.umin.v16i8(<16 x i8> %{{.*}}) +// CHECK: call {{.*}}i8 @llvm.vector.reduce.umin.v16i8(<16 x i8> %{{.*}}) return _mm_mask_reduce_min_epu8(__M, __W); } +TEST_CONSTEXPR(_mm_mask_reduce_min_epu8((__mmask16)0b1111111100000000, (__m128i)(__v16qs){1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16}) == 9); +TEST_CONSTEXPR(_mm_mask_reduce_min_epu8((__mmask16)0b0000000011111111, (__m128i)(__v16qs){1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16}) == 1); signed char test_mm256_reduce_max_epi8(__m256i __W){ // CHECK-LABEL: test_mm256_reduce_max_epi8 -// CHECK: call i8 @llvm.vector.reduce.smax.v32i8(<32 x i8> %{{.*}}) +// CHECK: call {{.*}}i8 @llvm.vector.reduce.smax.v32i8(<32 x i8> %{{.*}}) return _mm256_reduce_max_epi8(__W); } +TEST_CONSTEXPR(_mm256_reduce_max_epi8((__m256i)(__v32qs){-16,-15,-14,-13,-12,-11,-10,-9,-8,-7,-6,-5,-4,-3,-2,-1,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16}) == 16); signed char test_mm256_reduce_min_epi8(__m256i __W){ // CHECK-LABEL: test_mm256_reduce_min_epi8 -// CHECK: call i8 @llvm.vector.reduce.smin.v32i8(<32 x i8> %{{.*}}) +// CHECK: call {{.*}}i8 @llvm.vector.reduce.smin.v32i8(<32 x i8> %{{.*}}) return _mm256_reduce_min_epi8(__W); } +TEST_CONSTEXPR(_mm256_reduce_min_epi8((__m256i)(__v32qs){-16,-15,-14,-13,-12,-11,-10,-9,-8,-7,-6,-5,-4,-3,-2,-1,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16}) == -16); unsigned char test_mm256_reduce_max_epu8(__m256i __W){ // CHECK-LABEL: test_mm256_reduce_max_epu8 -// CHECK: call i8 @llvm.vector.reduce.umax.v32i8(<32 x i8> %{{.*}}) +// CHECK: call {{.*}}i8 @llvm.vector.reduce.umax.v32i8(<32 x i8> %{{.*}}) return _mm256_reduce_max_epu8(__W); } +TEST_CONSTEXPR(_mm256_reduce_max_epu8((__m256i)(__v32qu){1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32}) == 32); unsigned char test_mm256_reduce_min_epu8(__m256i __W){ // CHECK-LABEL: test_mm256_reduce_min_epu8 -// CHECK: call i8 @llvm.vector.reduce.umin.v32i8(<32 x i8> %{{.*}}) +// CHECK: call {{.*}}i8 @llvm.vector.reduce.umin.v32i8(<32 x i8> %{{.*}}) return _mm256_reduce_min_epu8(__W); } +TEST_CONSTEXPR(_mm256_reduce_min_epu8((__m256i)(__v32qu){1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32}) == 1); signed char test_mm256_mask_reduce_max_epi8(__mmask32 __M, __m256i __W){ // CHECK-LABEL: test_mm256_mask_reduce_max_epi8 // CHECK: select <32 x i1> %{{.*}}, <32 x i8> %{{.*}}, <32 x i8> %{{.*}} -// CHECK: call i8 @llvm.vector.reduce.smax.v32i8(<32 x i8> %{{.*}}) +// CHECK: call {{.*}}i8 @llvm.vector.reduce.smax.v32i8(<32 x i8> %{{.*}}) return _mm256_mask_reduce_max_epi8(__M, __W); } +TEST_CONSTEXPR(_mm256_mask_reduce_max_epi8((__mmask32)0b11111111111111110000000000000000, (__m256i)(__v32qs){-16,-15,-14,-13,-12,-11,-10,-9,-8,-7,-6,-5,-4,-3,-2,-1,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16}) == 16); +TEST_CONSTEXPR(_mm256_mask_reduce_max_epi8((__mmask32)0b00000000000000001111111111111111, (__m256i)(__v32qs){-16,-15,-14,-13,-12,-11,-10,-9,-8,-7,-6,-5,-4,-3,-2,-1,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16}) == -1); signed char test_mm256_mask_reduce_min_epi8(__mmask32 __M, __m256i __W){ // CHECK-LABEL: test_mm256_mask_reduce_min_epi8 // CHECK: select <32 x i1> %{{.*}}, <32 x i8> %{{.*}}, <32 x i8> %{{.*}} -// CHECK: call i8 @llvm.vector.reduce.smin.v32i8(<32 x i8> %{{.*}}) +// CHECK: call {{.*}}i8 @llvm.vector.reduce.smin.v32i8(<32 x i8> %{{.*}}) return _mm256_mask_reduce_min_epi8(__M, __W); } +TEST_CONSTEXPR(_mm256_mask_reduce_min_epi8((__mmask32)0b11111111111111110000000000000000, (__m256i)(__v32qs){-16,-15,-14,-13,-12,-11,-10,-9,-8,-7,-6,-5,-4,-3,-2,-1,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16}) == 1); +TEST_CONSTEXPR(_mm256_mask_reduce_min_epi8((__mmask32)0b00000000000000001111111111111111, (__m256i)(__v32qs){-16,-15,-14,-13,-12,-11,-10,-9,-8,-7,-6,-5,-4,-3,-2,-1,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16}) == -16); unsigned char test_mm256_mask_reduce_max_epu8(__mmask32 __M, __m256i __W){ // CHECK-LABEL: test_mm256_mask_reduce_max_epu8 // CHECK: select <32 x i1> %{{.*}}, <32 x i8> %{{.*}}, <32 x i8> %{{.*}} -// CHECK: call i8 @llvm.vector.reduce.umax.v32i8(<32 x i8> %{{.*}}) +// CHECK: call {{.*}}i8 @llvm.vector.reduce.umax.v32i8(<32 x i8> %{{.*}}) return _mm256_mask_reduce_max_epu8(__M, __W); } +TEST_CONSTEXPR(_mm256_mask_reduce_max_epu8((__mmask32)0b11111111111111110000000000000000, (__m256i)(__v32qu){1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32}) == 32); +TEST_CONSTEXPR(_mm256_mask_reduce_max_epu8((__mmask32)0b00000000000000001111111111111111, (__m256i)(__v32qu){1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32}) == 16); unsigned char test_mm256_mask_reduce_min_epu8(__mmask32 __M, __m256i __W){ // CHECK-LABEL: test_mm256_mask_reduce_min_epu8 // CHECK: select <32 x i1> %{{.*}}, <32 x i8> %{{.*}}, <32 x i8> %{{.*}} -// CHECK: call i8 @llvm.vector.reduce.umin.v32i8(<32 x i8> %{{.*}}) +// CHECK: call {{.*}}i8 @llvm.vector.reduce.umin.v32i8(<32 x i8> %{{.*}}) return _mm256_mask_reduce_min_epu8(__M, __W); } +TEST_CONSTEXPR(_mm256_mask_reduce_min_epu8((__mmask32)0b11111111111111110000000000000000, (__m256i)(__v32qu){1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32}) == 17); +TEST_CONSTEXPR(_mm256_mask_reduce_min_epu8((__mmask32)0b00000000000000001111111111111111, (__m256i)(__v32qu){1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32}) == 1); diff --git a/clang/test/CodeGen/X86/avx512vlcd-builtins.c b/clang/test/CodeGen/X86/avx512vlcd-builtins.c index b784809..1619305 100644 --- a/clang/test/CodeGen/X86/avx512vlcd-builtins.c +++ b/clang/test/CodeGen/X86/avx512vlcd-builtins.c @@ -1,10 +1,18 @@ -// RUN: %clang_cc1 -flax-vector-conversions=none -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +avx512vl -target-feature +avx512cd -emit-llvm -o - -Wall -Werror | FileCheck %s +// RUN: %clang_cc1 -x c -flax-vector-conversions=none -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +avx512vl -target-feature +avx512cd -emit-llvm -o - -Wall -Werror | FileCheck %s +// RUN: %clang_cc1 -x c -flax-vector-conversions=none -ffreestanding %s -triple=i386-apple-darwin -target-feature +avx512vl -target-feature +avx512cd -emit-llvm -o - -Wall -Werror | FileCheck %s +// RUN: %clang_cc1 -x c++ -flax-vector-conversions=none -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +avx512vl -target-feature +avx512cd -emit-llvm -o - -Wall -Werror | FileCheck %s +// RUN: %clang_cc1 -x c++ -flax-vector-conversions=none -ffreestanding %s -triple=i386-apple-darwin -target-feature +avx512vl -target-feature +avx512cd -emit-llvm -o - -Wall -Werror | FileCheck %s +// RUN: %clang_cc1 -x c -flax-vector-conversions=none -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +avx512vl -target-feature +avx512cd -emit-llvm -o - -Wall -Werror -fexperimental-new-constant-interpreter | FileCheck %s +// RUN: %clang_cc1 -x c -flax-vector-conversions=none -ffreestanding %s -triple=i386-apple-darwin -target-feature +avx512vl -target-feature +avx512cd -emit-llvm -o - -Wall -Werror -fexperimental-new-constant-interpreter | FileCheck %s +// RUN: %clang_cc1 -x c++ -flax-vector-conversions=none -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +avx512vl -target-feature +avx512cd -emit-llvm -o - -Wall -Werror -fexperimental-new-constant-interpreter | FileCheck %s +// RUN: %clang_cc1 -x c++ -flax-vector-conversions=none -ffreestanding %s -triple=i386-apple-darwin -target-feature +avx512vl -target-feature +avx512cd -emit-llvm -o - -Wall -Werror -fexperimental-new-constant-interpreter | FileCheck %s #include <immintrin.h> +#include "builtin_test_helpers.h" __m128i test_mm_broadcastmb_epi64(__m128i a,__m128i b) { - // CHECK-LABEL: @test_mm_broadcastmb_epi64 + // CHECK-LABEL: test_mm_broadcastmb_epi64 // CHECK: icmp eq <4 x i32> %{{.*}}, %{{.*}} // CHECK: shufflevector <4 x i1> %{{.*}}, <4 x i1> zeroinitializer, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7> // CHECK: zext i8 %{{.*}} to i64 @@ -14,7 +22,7 @@ __m128i test_mm_broadcastmb_epi64(__m128i a,__m128i b) { } __m256i test_mm256_broadcastmb_epi64(__m256i a, __m256i b) { - // CHECK-LABEL: @test_mm256_broadcastmb_epi64 + // CHECK-LABEL: test_mm256_broadcastmb_epi64 // CHECK: icmp eq <4 x i64> %{{.*}}, %{{.*}} // CHECK: shufflevector <4 x i1> %{{.*}}, <4 x i1> zeroinitializer, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7> // CHECK: zext i8 %{{.*}} to i64 @@ -26,7 +34,7 @@ __m256i test_mm256_broadcastmb_epi64(__m256i a, __m256i b) { } __m128i test_mm_broadcastmw_epi32(__m512i a, __m512i b) { - // CHECK-LABEL: @test_mm_broadcastmw_epi32 + // CHECK-LABEL: test_mm_broadcastmw_epi32 // CHECK: icmp eq <16 x i32> %{{.*}}, %{{.*}} // CHECK: zext i16 %{{.*}} to i32 // CHECK: insertelement <4 x i32> poison, i32 %{{.*}}, i32 0 @@ -37,7 +45,7 @@ __m128i test_mm_broadcastmw_epi32(__m512i a, __m512i b) { } __m256i test_mm256_broadcastmw_epi32(__m512i a, __m512i b) { - // CHECK-LABEL: @test_mm256_broadcastmw_epi32 + // CHECK-LABEL: test_mm256_broadcastmw_epi32 // CHECK: icmp eq <16 x i32> %{{.*}}, %{{.*}} // CHECK: zext i16 %{{.*}} to i32 // CHECK: insertelement <8 x i32> poison, i32 %{{.*}}, i32 0 @@ -52,161 +60,213 @@ __m256i test_mm256_broadcastmw_epi32(__m512i a, __m512i b) { } __m128i test_mm_conflict_epi64(__m128i __A) { - // CHECK-LABEL: @test_mm_conflict_epi64 - // CHECK: @llvm.x86.avx512.conflict.q.128 + // CHECK-LABEL: test_mm_conflict_epi64 + // CHECK: call {{.*}}<2 x i64> @llvm.x86.avx512.conflict.q.128(<2 x i64> %{{.*}}) return _mm_conflict_epi64(__A); } __m128i test_mm_mask_conflict_epi64(__m128i __W, __mmask8 __U, __m128i __A) { - // CHECK-LABEL: @test_mm_mask_conflict_epi64 - // CHECK: @llvm.x86.avx512.conflict.q.128 + // CHECK-LABEL: test_mm_mask_conflict_epi64 + // CHECK: call {{.*}}<2 x i64> @llvm.x86.avx512.conflict.q.128(<2 x i64> %{{.*}}) // CHECK: select <2 x i1> %{{.*}}, <2 x i64> %{{.*}}, <2 x i64> %{{.*}} return _mm_mask_conflict_epi64(__W, __U, __A); } __m128i test_mm_maskz_conflict_epi64(__mmask8 __U, __m128i __A) { - // CHECK-LABEL: @test_mm_maskz_conflict_epi64 - // CHECK: @llvm.x86.avx512.conflict.q.128 + // CHECK-LABEL: test_mm_maskz_conflict_epi64 + // CHECK: call {{.*}}<2 x i64> @llvm.x86.avx512.conflict.q.128(<2 x i64> %{{.*}}) // CHECK: select <2 x i1> %{{.*}}, <2 x i64> %{{.*}}, <2 x i64> %{{.*}} return _mm_maskz_conflict_epi64(__U, __A); } __m256i test_mm256_conflict_epi64(__m256i __A) { - // CHECK-LABEL: @test_mm256_conflict_epi64 - // CHECK: @llvm.x86.avx512.conflict.q.256 + // CHECK-LABEL: test_mm256_conflict_epi64 + // CHECK: call {{.*}}<4 x i64> @llvm.x86.avx512.conflict.q.256(<4 x i64> %{{.*}}) return _mm256_conflict_epi64(__A); } __m256i test_mm256_mask_conflict_epi64(__m256i __W, __mmask8 __U, __m256i __A) { - // CHECK-LABEL: @test_mm256_mask_conflict_epi64 - // CHECK: @llvm.x86.avx512.conflict.q.256 + // CHECK-LABEL: test_mm256_mask_conflict_epi64 + // CHECK: call {{.*}}<4 x i64> @llvm.x86.avx512.conflict.q.256(<4 x i64> %{{.*}}) // CHECK: select <4 x i1> %{{.*}}, <4 x i64> %{{.*}}, <4 x i64> %{{.*}} return _mm256_mask_conflict_epi64(__W, __U, __A); } __m256i test_mm256_maskz_conflict_epi64(__mmask8 __U, __m256i __A) { - // CHECK-LABEL: @test_mm256_maskz_conflict_epi64 - // CHECK: @llvm.x86.avx512.conflict.q.256 + // CHECK-LABEL: test_mm256_maskz_conflict_epi64 + // CHECK: call {{.*}}<4 x i64> @llvm.x86.avx512.conflict.q.256(<4 x i64> %{{.*}}) // CHECK: select <4 x i1> %{{.*}}, <4 x i64> %{{.*}}, <4 x i64> %{{.*}} return _mm256_maskz_conflict_epi64(__U, __A); } __m128i test_mm_conflict_epi32(__m128i __A) { - // CHECK-LABEL: @test_mm_conflict_epi32 - // CHECK: @llvm.x86.avx512.conflict.d.128 + // CHECK-LABEL: test_mm_conflict_epi32 + // CHECK: call <4 x i32> @llvm.x86.avx512.conflict.d.128(<4 x i32> %{{.*}}) return _mm_conflict_epi32(__A); } __m128i test_mm_mask_conflict_epi32(__m128i __W, __mmask8 __U, __m128i __A) { - // CHECK-LABEL: @test_mm_mask_conflict_epi32 - // CHECK: @llvm.x86.avx512.conflict.d.128 + // CHECK-LABEL: test_mm_mask_conflict_epi32 + // CHECK: call <4 x i32> @llvm.x86.avx512.conflict.d.128(<4 x i32> %{{.*}}) // CHECK: select <4 x i1> %{{.*}}, <4 x i32> %{{.*}}, <4 x i32> %{{.*}} return _mm_mask_conflict_epi32(__W, __U, __A); } __m128i test_mm_maskz_conflict_epi32(__mmask8 __U, __m128i __A) { - // CHECK-LABEL: @test_mm_maskz_conflict_epi32 - // CHECK: @llvm.x86.avx512.conflict.d.128 + // CHECK-LABEL: test_mm_maskz_conflict_epi32 + // CHECK: call <4 x i32> @llvm.x86.avx512.conflict.d.128(<4 x i32> %{{.*}}) // CHECK: select <4 x i1> %{{.*}}, <4 x i32> %{{.*}}, <4 x i32> %{{.*}} return _mm_maskz_conflict_epi32(__U, __A); } __m256i test_mm256_conflict_epi32(__m256i __A) { - // CHECK-LABEL: @test_mm256_conflict_epi32 - // CHECK: @llvm.x86.avx512.conflict.d.256 + // CHECK-LABEL: test_mm256_conflict_epi32 + // CHECK: call <8 x i32> @llvm.x86.avx512.conflict.d.256(<8 x i32> %{{.*}}) return _mm256_conflict_epi32(__A); } __m256i test_mm256_mask_conflict_epi32(__m256i __W, __mmask8 __U, __m256i __A) { - // CHECK-LABEL: @test_mm256_mask_conflict_epi32 - // CHECK: @llvm.x86.avx512.conflict.d.256 + // CHECK-LABEL: test_mm256_mask_conflict_epi32 + // CHECK: call <8 x i32> @llvm.x86.avx512.conflict.d.256(<8 x i32> %{{.*}}) // CHECK: select <8 x i1> %{{.*}}, <8 x i32> %{{.*}}, <8 x i32> %{{.*}} return _mm256_mask_conflict_epi32(__W, __U, __A); } __m256i test_mm256_maskz_conflict_epi32(__mmask8 __U, __m256i __A) { - // CHECK-LABEL: @test_mm256_maskz_conflict_epi32 - // CHECK: @llvm.x86.avx512.conflict.d.256 + // CHECK-LABEL: test_mm256_maskz_conflict_epi32 + // CHECK: call <8 x i32> @llvm.x86.avx512.conflict.d.256(<8 x i32> %{{.*}}) // CHECK: select <8 x i1> %{{.*}}, <8 x i32> %{{.*}}, <8 x i32> %{{.*}} return _mm256_maskz_conflict_epi32(__U, __A); } __m128i test_mm_lzcnt_epi32(__m128i __A) { - // CHECK-LABEL: @test_mm_lzcnt_epi32 - // CHECK: call <4 x i32> @llvm.ctlz.v4i32(<4 x i32> %{{.*}}, i1 false) + // CHECK-LABEL: test_mm_lzcnt_epi32 + // CHECK: call <4 x i32> @llvm.ctlz.v4i32(<4 x i32> %{{.*}}, i1 true) + // CHECK: [[ISZERO:%.+]] = icmp eq <4 x i32> %{{.*}}, zeroinitializer + // CHECK: select <4 x i1> [[ISZERO]], <4 x i32> %{{.*}}, <4 x i32> %{{.*}} return _mm_lzcnt_epi32(__A); } +TEST_CONSTEXPR(match_v4si(_mm_lzcnt_epi32((__m128i)(__v4si){8, 16, 32, 64}), 28, 27, 26, 25)); +TEST_CONSTEXPR(match_v4si(_mm_lzcnt_epi32((__m128i)(__v4si){0, 0, 0, 0}), 32, 32, 32, 32)); + __m128i test_mm_mask_lzcnt_epi32(__m128i __W, __mmask8 __U, __m128i __A) { - // CHECK-LABEL: @test_mm_mask_lzcnt_epi32 - // CHECK: call <4 x i32> @llvm.ctlz.v4i32(<4 x i32> %{{.*}}, i1 false) + // CHECK-LABEL: test_mm_mask_lzcnt_epi32 + // CHECK: call <4 x i32> @llvm.ctlz.v4i32(<4 x i32> %{{.*}}, i1 true) + // CHECK: [[ISZERO:%.+]] = icmp eq <4 x i32> %{{.*}}, zeroinitializer + // CHECK: select <4 x i1> [[ISZERO]], <4 x i32> %{{.*}}, <4 x i32> %{{.*}} // CHECK: select <4 x i1> %{{.*}}, <4 x i32> %{{.*}}, <4 x i32> %{{.*}} return _mm_mask_lzcnt_epi32(__W, __U, __A); } +TEST_CONSTEXPR(match_v4si(_mm_mask_lzcnt_epi32(_mm_set1_epi32(32), /*0000 0101=*/0x5, (__m128i)(__v4si){8, 16, 32, 64}), 28, 32, 26, 32)); + __m128i test_mm_maskz_lzcnt_epi32(__mmask8 __U, __m128i __A) { - // CHECK-LABEL: @test_mm_maskz_lzcnt_epi32 - // CHECK: call <4 x i32> @llvm.ctlz.v4i32(<4 x i32> %{{.*}}, i1 false) + // CHECK-LABEL: test_mm_maskz_lzcnt_epi32 + // CHECK: call <4 x i32> @llvm.ctlz.v4i32(<4 x i32> %{{.*}}, i1 true) + // CHECK: [[ISZERO:%.+]] = icmp eq <4 x i32> %{{.*}}, zeroinitializer + // CHECK: select <4 x i1> [[ISZERO]], <4 x i32> %{{.*}}, <4 x i32> %{{.*}} // CHECK: select <4 x i1> %{{.*}}, <4 x i32> %{{.*}}, <4 x i32> %{{.*}} return _mm_maskz_lzcnt_epi32(__U, __A); } +TEST_CONSTEXPR(match_v4si(_mm_maskz_lzcnt_epi32(/*0000 0101=*/0x5, (__m128i)(__v4si){8, 16, 32, 64}), 28, 0, 26, 0)); + __m256i test_mm256_lzcnt_epi32(__m256i __A) { - // CHECK-LABEL: @test_mm256_lzcnt_epi32 - // CHECK: call <8 x i32> @llvm.ctlz.v8i32(<8 x i32> %{{.*}}, i1 false) + // CHECK-LABEL: test_mm256_lzcnt_epi32 + // CHECK: call <8 x i32> @llvm.ctlz.v8i32(<8 x i32> %{{.*}}, i1 true) + // CHECK: [[ISZERO:%.+]] = icmp eq <8 x i32> %{{.*}}, zeroinitializer + // CHECK: select <8 x i1> [[ISZERO]], <8 x i32> %{{.*}}, <8 x i32> %{{.*}} return _mm256_lzcnt_epi32(__A); } +TEST_CONSTEXPR(match_v8si(_mm256_lzcnt_epi32((__m256i)(__v8si){1, 2, 4, 8, 16, 32, 64, 128}), 31, 30, 29, 28, 27, 26, 25, 24)); +TEST_CONSTEXPR(match_v8si(_mm256_lzcnt_epi32((__m256i)(__v8si){0, 0, 0, 0, 0, 0, 0, 0}), 32, 32, 32, 32, 32, 32, 32, 32)); + __m256i test_mm256_mask_lzcnt_epi32(__m256i __W, __mmask8 __U, __m256i __A) { - // CHECK-LABEL: @test_mm256_mask_lzcnt_epi32 - // CHECK: call <8 x i32> @llvm.ctlz.v8i32(<8 x i32> %{{.*}}, i1 false) + // CHECK-LABEL: test_mm256_mask_lzcnt_epi32 + // CHECK: call <8 x i32> @llvm.ctlz.v8i32(<8 x i32> %{{.*}}, i1 true) + // CHECK: [[ISZERO:%.+]] = icmp eq <8 x i32> %{{.*}}, zeroinitializer + // CHECK: select <8 x i1> [[ISZERO]], <8 x i32> %{{.*}}, <8 x i32> %{{.*}} // CHECK: select <8 x i1> %{{.*}}, <8 x i32> %{{.*}}, <8 x i32> %{{.*}} return _mm256_mask_lzcnt_epi32(__W, __U, __A); } +TEST_CONSTEXPR(match_v8si(_mm256_mask_lzcnt_epi32(_mm256_set1_epi32(32), /*0101 0101=*/0x55, (__m256i)(__v8si){1, 2, 4, 8, 16, 32, 64, 128}), 31, 32, 29, 32, 27, 32, 25, 32)); + __m256i test_mm256_maskz_lzcnt_epi32(__mmask8 __U, __m256i __A) { - // CHECK-LABEL: @test_mm256_maskz_lzcnt_epi32 - // CHECK: call <8 x i32> @llvm.ctlz.v8i32(<8 x i32> %{{.*}}, i1 false) + // CHECK-LABEL: test_mm256_maskz_lzcnt_epi32 + // CHECK: call <8 x i32> @llvm.ctlz.v8i32(<8 x i32> %{{.*}}, i1 true) + // CHECK: [[ISZERO:%.+]] = icmp eq <8 x i32> %{{.*}}, zeroinitializer + // CHECK: select <8 x i1> [[ISZERO]], <8 x i32> %{{.*}}, <8 x i32> %{{.*}} // CHECK: select <8 x i1> %{{.*}}, <8 x i32> %{{.*}}, <8 x i32> %{{.*}} return _mm256_maskz_lzcnt_epi32(__U, __A); } +TEST_CONSTEXPR(match_v8si(_mm256_maskz_lzcnt_epi32(/*0101 0101=*/0x55, (__m256i)(__v8si){1, 2, 4, 8, 16, 32, 64, 128}), 31, 0, 29, 0, 27, 0, 25, 0)); + __m128i test_mm_lzcnt_epi64(__m128i __A) { - // CHECK-LABEL: @test_mm_lzcnt_epi64 - // CHECK: call <2 x i64> @llvm.ctlz.v2i64(<2 x i64> %{{.*}}, i1 false) + // CHECK-LABEL: test_mm_lzcnt_epi64 + // CHECK: call {{.*}}<2 x i64> @llvm.ctlz.v2i64(<2 x i64> %{{.*}}, i1 true) + // CHECK: [[ISZERO:%.+]] = icmp eq <2 x i64> %{{.*}}, zeroinitializer + // CHECK: select <2 x i1> [[ISZERO]], <2 x i64> %{{.*}}, <2 x i64> %{{.*}} return _mm_lzcnt_epi64(__A); } +TEST_CONSTEXPR(match_v2di(_mm_lzcnt_epi64((__m128i)(__v2di){1, 2}), 63, 62)); +TEST_CONSTEXPR(match_v2di(_mm_lzcnt_epi64((__m128i)(__v2di){0, 0}), 64, 64)); + __m128i test_mm_mask_lzcnt_epi64(__m128i __W, __mmask8 __U, __m128i __A) { - // CHECK-LABEL: @test_mm_mask_lzcnt_epi64 - // CHECK: call <2 x i64> @llvm.ctlz.v2i64(<2 x i64> %{{.*}}, i1 false) + // CHECK-LABEL: test_mm_mask_lzcnt_epi64 + // CHECK: call {{.*}}<2 x i64> @llvm.ctlz.v2i64(<2 x i64> %{{.*}}, i1 true) + // CHECK: [[ISZERO:%.+]] = icmp eq <2 x i64> %{{.*}}, zeroinitializer + // CHECK: select <2 x i1> [[ISZERO]], <2 x i64> %{{.*}}, <2 x i64> %{{.*}} // CHECK: select <2 x i1> %{{.*}}, <2 x i64> %{{.*}}, <2 x i64> %{{.*}} return _mm_mask_lzcnt_epi64(__W, __U, __A); } +TEST_CONSTEXPR(match_v2di(_mm_mask_lzcnt_epi64(_mm_set1_epi64x((long long)64), /*0000 0010=*/0x2, (__m128i)(__v2di){1, 2}), 64, 62)); + __m128i test_mm_maskz_lzcnt_epi64(__mmask8 __U, __m128i __A) { - // CHECK-LABEL: @test_mm_maskz_lzcnt_epi64 - // CHECK: call <2 x i64> @llvm.ctlz.v2i64(<2 x i64> %{{.*}}, i1 false) + // CHECK-LABEL: test_mm_maskz_lzcnt_epi64 + // CHECK: call {{.*}}<2 x i64> @llvm.ctlz.v2i64(<2 x i64> %{{.*}}, i1 true) + // CHECK: [[ISZERO:%.+]] = icmp eq <2 x i64> %{{.*}}, zeroinitializer + // CHECK: select <2 x i1> [[ISZERO]], <2 x i64> %{{.*}}, <2 x i64> %{{.*}} // CHECK: select <2 x i1> %{{.*}}, <2 x i64> %{{.*}}, <2 x i64> %{{.*}} return _mm_maskz_lzcnt_epi64(__U, __A); } +TEST_CONSTEXPR(match_v2di(_mm_maskz_lzcnt_epi64(/*0000 0010=*/0x2, (__m128i)(__v2di){1, 2}), 0, 62)); + __m256i test_mm256_lzcnt_epi64(__m256i __A) { - // CHECK-LABEL: @test_mm256_lzcnt_epi64 - // CHECK: call <4 x i64> @llvm.ctlz.v4i64(<4 x i64> %{{.*}}, i1 false) + // CHECK-LABEL: test_mm256_lzcnt_epi64 + // CHECK: call {{.*}}<4 x i64> @llvm.ctlz.v4i64(<4 x i64> %{{.*}}, i1 true) + // CHECK: [[ISZERO:%.+]] = icmp eq <4 x i64> %{{.*}}, zeroinitializer + // CHECK: select <4 x i1> [[ISZERO]], <4 x i64> %{{.*}}, <4 x i64> %{{.*}} return _mm256_lzcnt_epi64(__A); } +TEST_CONSTEXPR(match_v4di(_mm256_lzcnt_epi64((__m256i)(__v4di){1, 2, 4, 8}), 63, 62, 61, 60)); +TEST_CONSTEXPR(match_v4di(_mm256_lzcnt_epi64((__m256i)(__v4di){0, 0, 0, 0}), 64, 64, 64, 64)); + __m256i test_mm256_mask_lzcnt_epi64(__m256i __W, __mmask8 __U, __m256i __A) { - // CHECK-LABEL: @test_mm256_mask_lzcnt_epi64 - // CHECK: call <4 x i64> @llvm.ctlz.v4i64(<4 x i64> %{{.*}}, i1 false) + // CHECK-LABEL: test_mm256_mask_lzcnt_epi64 + // CHECK: call {{.*}}<4 x i64> @llvm.ctlz.v4i64(<4 x i64> %{{.*}}, i1 true) + // CHECK: [[ISZERO:%.+]] = icmp eq <4 x i64> %{{.*}}, zeroinitializer + // CHECK: select <4 x i1> [[ISZERO]], <4 x i64> %{{.*}}, <4 x i64> %{{.*}} // CHECK: select <4 x i1> %{{.*}}, <4 x i64> %{{.*}}, <4 x i64> %{{.*}} return _mm256_mask_lzcnt_epi64(__W, __U, __A); } +TEST_CONSTEXPR(match_v4di(_mm256_mask_lzcnt_epi64(_mm256_set1_epi64x((long long) 64), /*0000 0110=*/0x6, (__m256i)(__v4di){1, 2, 4, 8}), 64, 62, 61, 64)); + __m256i test_mm256_maskz_lzcnt_epi64(__mmask8 __U, __m256i __A) { - // CHECK-LABEL: @test_mm256_maskz_lzcnt_epi64 - // CHECK: call <4 x i64> @llvm.ctlz.v4i64(<4 x i64> %{{.*}}, i1 false) + // CHECK-LABEL: test_mm256_maskz_lzcnt_epi64 + // CHECK: call {{.*}}<4 x i64> @llvm.ctlz.v4i64(<4 x i64> %{{.*}}, i1 true) + // CHECK: [[ISZERO:%.+]] = icmp eq <4 x i64> %{{.*}}, zeroinitializer + // CHECK: select <4 x i1> [[ISZERO]], <4 x i64> %{{.*}}, <4 x i64> %{{.*}} // CHECK: select <4 x i1> %{{.*}}, <4 x i64> %{{.*}}, <4 x i64> %{{.*}} return _mm256_maskz_lzcnt_epi64(__U, __A); } + +TEST_CONSTEXPR(match_v4di(_mm256_maskz_lzcnt_epi64(/*0000 0011*/0x3, (__m256i)(__v4di){1, 2, 4, 8}), 63, 62, 0, 0)); diff --git a/clang/test/CodeGen/X86/avx512vldq-builtins.c b/clang/test/CodeGen/X86/avx512vldq-builtins.c index cdbd19a..e1e8916 100644 --- a/clang/test/CodeGen/X86/avx512vldq-builtins.c +++ b/clang/test/CodeGen/X86/avx512vldq-builtins.c @@ -1,50 +1,65 @@ -// RUN: %clang_cc1 -flax-vector-conversions=none -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +avx512dq -target-feature +avx512vl -emit-llvm -o - -Wall -Werror | FileCheck %s +// RUN: %clang_cc1 -x c -flax-vector-conversions=none -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +avx512dq -target-feature +avx512vl -emit-llvm -o - -Wall -Werror | FileCheck %s +// RUN: %clang_cc1 -x c -flax-vector-conversions=none -ffreestanding %s -triple=i386-apple-darwin -target-feature +avx512dq -target-feature +avx512vl -emit-llvm -o - -Wall -Werror | FileCheck %s +// RUN: %clang_cc1 -x c++ -flax-vector-conversions=none -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +avx512dq -target-feature +avx512vl -emit-llvm -o - -Wall -Werror | FileCheck %s +// RUN: %clang_cc1 -x c++ -flax-vector-conversions=none -ffreestanding %s -triple=i386-apple-darwin -target-feature +avx512dq -target-feature +avx512vl -emit-llvm -o - -Wall -Werror | FileCheck %s + +// RUN: %clang_cc1 -x c -flax-vector-conversions=none -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +avx512dq -target-feature +avx512vl -emit-llvm -o - -Wall -Werror -fexperimental-new-constant-interpreter | FileCheck %s +// RUN: %clang_cc1 -x c -flax-vector-conversions=none -ffreestanding %s -triple=i386-apple-darwin -target-feature +avx512dq -target-feature +avx512vl -emit-llvm -o - -Wall -Werror -fexperimental-new-constant-interpreter | FileCheck %s +// RUN: %clang_cc1 -x c++ -flax-vector-conversions=none -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +avx512dq -target-feature +avx512vl -emit-llvm -o - -Wall -Werror -fexperimental-new-constant-interpreter | FileCheck %s +// RUN: %clang_cc1 -x c++ -flax-vector-conversions=none -ffreestanding %s -triple=i386-apple-darwin -target-feature +avx512dq -target-feature +avx512vl -emit-llvm -o - -Wall -Werror -fexperimental-new-constant-interpreter | FileCheck %s #include <immintrin.h> +#include "builtin_test_helpers.h" __m256i test_mm256_mullo_epi64 (__m256i __A, __m256i __B) { - // CHECK-LABEL: @test_mm256_mullo_epi64 + // CHECK-LABEL: test_mm256_mullo_epi64 // CHECK: mul <4 x i64> return _mm256_mullo_epi64(__A, __B); } +TEST_CONSTEXPR(match_v4di(_mm256_mullo_epi64((__m256i)(__v4di){+1, -2, +3, -4}, (__m256i)(__v4di){-2, +3, +4, -5}), -2, -6, +12, +20)); __m256i test_mm256_mask_mullo_epi64 (__m256i __W, __mmask8 __U, __m256i __A, __m256i __B) { - // CHECK-LABEL: @test_mm256_mask_mullo_epi64 + // CHECK-LABEL: test_mm256_mask_mullo_epi64 // CHECK: mul <4 x i64> %{{.*}}, %{{.*}} // CHECK: select <4 x i1> %{{.*}}, <4 x i64> %{{.*}}, <4 x i64> %{{.*}} return (__m256i) _mm256_mask_mullo_epi64 ( __W, __U, __A, __B); } +TEST_CONSTEXPR(match_v4di(_mm256_mask_mullo_epi64((__m256i)(__v4di){-100, +200, -300, +400}, 0x03, (__m256i)(__v4di){+1, -2, +3, -4}, (__m256i)(__v4di){-2, +3, +4, -5}), -2, -6, -300, +400)); __m256i test_mm256_maskz_mullo_epi64 (__mmask8 __U, __m256i __A, __m256i __B) { - // CHECK-LABEL: @test_mm256_maskz_mullo_epi64 + // CHECK-LABEL: test_mm256_maskz_mullo_epi64 // CHECK: mul <4 x i64> %{{.*}}, %{{.*}} // CHECK: select <4 x i1> %{{.*}}, <4 x i64> %{{.*}}, <4 x i64> %{{.*}} return (__m256i) _mm256_maskz_mullo_epi64 (__U, __A, __B); } +TEST_CONSTEXPR(match_v4di(_mm256_maskz_mullo_epi64(0x03, (__m256i)(__v4di){+1, -2, +3, -4}, (__m256i)(__v4di){-2, +3, +4, -5}), -2, -6, 0, 0)); __m128i test_mm_mullo_epi64 (__m128i __A, __m128i __B) { - // CHECK-LABEL: @test_mm_mullo_epi64 + // CHECK-LABEL: test_mm_mullo_epi64 // CHECK: mul <2 x i64> return (__m128i) _mm_mullo_epi64(__A, __B); } +TEST_CONSTEXPR(match_v2di(_mm_mullo_epi64((__m128i)(__v2di){+1, -2}, (__m128i)(__v2di){-3, +4}), -3, -8)); __m128i test_mm_mask_mullo_epi64 (__m128i __W, __mmask8 __U, __m128i __A, __m128i __B) { - // CHECK-LABEL: @test_mm_mask_mullo_epi64 + // CHECK-LABEL: test_mm_mask_mullo_epi64 // CHECK: mul <2 x i64> %{{.*}}, %{{.*}} // CHECK: select <2 x i1> %{{.*}}, <2 x i64> %{{.*}}, <2 x i64> %{{.*}} return (__m128i) _mm_mask_mullo_epi64 ( __W, __U, __A, __B); } +TEST_CONSTEXPR(match_v2di(_mm_mask_mullo_epi64((__m128i)(__v2di){-100, +200}, 0x01, (__m128i)(__v2di){+1, -2}, (__m128i)(__v2di){-3, +4}), -3, +200)); __m128i test_mm_maskz_mullo_epi64 (__mmask8 __U, __m128i __A, __m128i __B) { - // CHECK-LABEL: @test_mm_maskz_mullo_epi64 + // CHECK-LABEL: test_mm_maskz_mullo_epi64 // CHECK: mul <2 x i64> %{{.*}}, %{{.*}} // CHECK: select <2 x i1> %{{.*}}, <2 x i64> %{{.*}}, <2 x i64> %{{.*}} return (__m128i) _mm_maskz_mullo_epi64 (__U, __A, __B); } +TEST_CONSTEXPR(match_v2di(_mm_maskz_mullo_epi64(0x01, (__m128i)(__v2di){+1, -2}, (__m128i)(__v2di){-3, +4}), -3, 0)); __m256d test_mm256_mask_andnot_pd (__m256d __W, __mmask8 __U, __m256d __A, __m256d __B) { - // CHECK-LABEL: @test_mm256_mask_andnot_pd + // CHECK-LABEL: test_mm256_mask_andnot_pd // CHECK: xor <4 x i64> %{{.*}}, splat (i64 -1) // CHECK: and <4 x i64> %{{.*}}, %{{.*}} // CHECK: select <4 x i1> %{{.*}}, <4 x double> %{{.*}}, <4 x double> %{{.*}} @@ -52,7 +67,7 @@ __m256d test_mm256_mask_andnot_pd (__m256d __W, __mmask8 __U, __m256d __A, __m25 } __m256d test_mm256_maskz_andnot_pd (__mmask8 __U, __m256d __A, __m256d __B) { - // CHECK-LABEL: @test_mm256_maskz_andnot_pd + // CHECK-LABEL: test_mm256_maskz_andnot_pd // CHECK: xor <4 x i64> %{{.*}}, splat (i64 -1) // CHECK: and <4 x i64> %{{.*}}, %{{.*}} // CHECK: select <4 x i1> %{{.*}}, <4 x double> %{{.*}}, <4 x double> %{{.*}} @@ -60,7 +75,7 @@ __m256d test_mm256_maskz_andnot_pd (__mmask8 __U, __m256d __A, __m256d __B) { } __m128d test_mm_mask_andnot_pd (__m128d __W, __mmask8 __U, __m128d __A, __m128d __B) { - // CHECK-LABEL: @test_mm_mask_andnot_pd + // CHECK-LABEL: test_mm_mask_andnot_pd // CHECK: xor <2 x i64> %{{.*}}, splat (i64 -1) // CHECK: and <2 x i64> %{{.*}}, %{{.*}} // CHECK: select <2 x i1> %{{.*}}, <2 x double> %{{.*}}, <2 x double> %{{.*}} @@ -68,7 +83,7 @@ __m128d test_mm_mask_andnot_pd (__m128d __W, __mmask8 __U, __m128d __A, __m128d } __m128d test_mm_maskz_andnot_pd (__mmask8 __U, __m128d __A, __m128d __B) { - // CHECK-LABEL: @test_mm_maskz_andnot_pd + // CHECK-LABEL: test_mm_maskz_andnot_pd // CHECK: xor <2 x i64> %{{.*}}, splat (i64 -1) // CHECK: and <2 x i64> %{{.*}}, %{{.*}} // CHECK: select <2 x i1> %{{.*}}, <2 x double> %{{.*}}, <2 x double> %{{.*}} @@ -76,7 +91,7 @@ __m128d test_mm_maskz_andnot_pd (__mmask8 __U, __m128d __A, __m128d __B) { } __m256 test_mm256_mask_andnot_ps (__m256 __W, __mmask8 __U, __m256 __A, __m256 __B) { - // CHECK-LABEL: @test_mm256_mask_andnot_ps + // CHECK-LABEL: test_mm256_mask_andnot_ps // CHECK: xor <8 x i32> %{{.*}}, splat (i32 -1) // CHECK: and <8 x i32> %{{.*}}, %{{.*}} // CHECK: select <8 x i1> %{{.*}}, <8 x float> %{{.*}}, <8 x float> %{{.*}} @@ -84,7 +99,7 @@ __m256 test_mm256_mask_andnot_ps (__m256 __W, __mmask8 __U, __m256 __A, __m256 _ } __m256 test_mm256_maskz_andnot_ps (__mmask8 __U, __m256 __A, __m256 __B) { - // CHECK-LABEL: @test_mm256_maskz_andnot_ps + // CHECK-LABEL: test_mm256_maskz_andnot_ps // CHECK: xor <8 x i32> %{{.*}}, splat (i32 -1) // CHECK: and <8 x i32> %{{.*}}, %{{.*}} // CHECK: select <8 x i1> %{{.*}}, <8 x float> %{{.*}}, <8 x float> %{{.*}} @@ -92,7 +107,7 @@ __m256 test_mm256_maskz_andnot_ps (__mmask8 __U, __m256 __A, __m256 __B) { } __m128 test_mm_mask_andnot_ps (__m128 __W, __mmask8 __U, __m128 __A, __m128 __B) { - // CHECK-LABEL: @test_mm_mask_andnot_ps + // CHECK-LABEL: test_mm_mask_andnot_ps // CHECK: xor <4 x i32> %{{.*}}, splat (i32 -1) // CHECK: and <4 x i32> %{{.*}}, %{{.*}} // CHECK: select <4 x i1> %{{.*}}, <4 x float> %{{.*}}, <4 x float> %{{.*}} @@ -100,7 +115,7 @@ __m128 test_mm_mask_andnot_ps (__m128 __W, __mmask8 __U, __m128 __A, __m128 __B) } __m128 test_mm_maskz_andnot_ps (__mmask8 __U, __m128 __A, __m128 __B) { - // CHECK-LABEL: @test_mm_maskz_andnot_ps + // CHECK-LABEL: test_mm_maskz_andnot_ps // CHECK: xor <4 x i32> %{{.*}}, splat (i32 -1) // CHECK: and <4 x i32> %{{.*}}, %{{.*}} // CHECK: select <4 x i1> %{{.*}}, <4 x float> %{{.*}}, <4 x float> %{{.*}} @@ -108,776 +123,776 @@ __m128 test_mm_maskz_andnot_ps (__mmask8 __U, __m128 __A, __m128 __B) { } __m256d test_mm256_mask_and_pd (__m256d __W, __mmask8 __U, __m256d __A, __m256d __B) { - // CHECK-LABEL: @test_mm256_mask_and_pd + // CHECK-LABEL: test_mm256_mask_and_pd // CHECK: and <4 x i64> %{{.*}}, %{{.*}} // CHECK: select <4 x i1> %{{.*}}, <4 x double> %{{.*}}, <4 x double> %{{.*}} return (__m256d) _mm256_mask_and_pd ( __W, __U, __A, __B); } __m256d test_mm256_maskz_and_pd (__mmask8 __U, __m256d __A, __m256d __B) { - // CHECK-LABEL: @test_mm256_maskz_and_pd + // CHECK-LABEL: test_mm256_maskz_and_pd // CHECK: and <4 x i64> %{{.*}}, %{{.*}} // CHECK: select <4 x i1> %{{.*}}, <4 x double> %{{.*}}, <4 x double> %{{.*}} return (__m256d) _mm256_maskz_and_pd (__U, __A, __B); } __m128d test_mm_mask_and_pd (__m128d __W, __mmask8 __U, __m128d __A, __m128d __B) { - // CHECK-LABEL: @test_mm_mask_and_pd + // CHECK-LABEL: test_mm_mask_and_pd // CHECK: and <2 x i64> %{{.*}}, %{{.*}} // CHECK: select <2 x i1> %{{.*}}, <2 x double> %{{.*}}, <2 x double> %{{.*}} return (__m128d) _mm_mask_and_pd ( __W, __U, __A, __B); } __m128d test_mm_maskz_and_pd (__mmask8 __U, __m128d __A, __m128d __B) { - // CHECK-LABEL: @test_mm_maskz_and_pd + // CHECK-LABEL: test_mm_maskz_and_pd // CHECK: and <2 x i64> %{{.*}}, %{{.*}} // CHECK: select <2 x i1> %{{.*}}, <2 x double> %{{.*}}, <2 x double> %{{.*}} return (__m128d) _mm_maskz_and_pd (__U, __A, __B); } __m256 test_mm256_mask_and_ps (__m256 __W, __mmask8 __U, __m256 __A, __m256 __B) { - // CHECK-LABEL: @test_mm256_mask_and_ps + // CHECK-LABEL: test_mm256_mask_and_ps // CHECK: and <8 x i32> %{{.*}}, %{{.*}} // CHECK: select <8 x i1> %{{.*}}, <8 x float> %{{.*}}, <8 x float> %{{.*}} return (__m256) _mm256_mask_and_ps ( __W, __U, __A, __B); } __m256 test_mm256_maskz_and_ps (__mmask8 __U, __m256 __A, __m256 __B) { - // CHECK-LABEL: @test_mm256_maskz_and_ps + // CHECK-LABEL: test_mm256_maskz_and_ps // CHECK: and <8 x i32> %{{.*}}, %{{.*}} // CHECK: select <8 x i1> %{{.*}}, <8 x float> %{{.*}}, <8 x float> %{{.*}} return (__m256) _mm256_maskz_and_ps (__U, __A, __B); } __m128 test_mm_mask_and_ps (__m128 __W, __mmask8 __U, __m128 __A, __m128 __B) { - // CHECK-LABEL: @test_mm_mask_and_ps + // CHECK-LABEL: test_mm_mask_and_ps // CHECK: and <4 x i32> %{{.*}}, %{{.*}} // CHECK: select <4 x i1> %{{.*}}, <4 x float> %{{.*}}, <4 x float> %{{.*}} return (__m128) _mm_mask_and_ps ( __W, __U, __A, __B); } __m128 test_mm_maskz_and_ps (__mmask8 __U, __m128 __A, __m128 __B) { - // CHECK-LABEL: @test_mm_maskz_and_ps + // CHECK-LABEL: test_mm_maskz_and_ps // CHECK: and <4 x i32> %{{.*}}, %{{.*}} // CHECK: select <4 x i1> %{{.*}}, <4 x float> %{{.*}}, <4 x float> %{{.*}} return (__m128) _mm_maskz_and_ps (__U, __A, __B); } __m256d test_mm256_mask_xor_pd (__m256d __W, __mmask8 __U, __m256d __A, __m256d __B) { - // CHECK-LABEL: @test_mm256_mask_xor_pd + // CHECK-LABEL: test_mm256_mask_xor_pd // CHECK: xor <4 x i64> %{{.*}}, %{{.*}} // CHECK: select <4 x i1> %{{.*}}, <4 x double> %{{.*}}, <4 x double> %{{.*}} return (__m256d) _mm256_mask_xor_pd ( __W, __U, __A, __B); } __m256d test_mm256_maskz_xor_pd (__mmask8 __U, __m256d __A, __m256d __B) { - // CHECK-LABEL: @test_mm256_maskz_xor_pd + // CHECK-LABEL: test_mm256_maskz_xor_pd // CHECK: xor <4 x i64> %{{.*}}, %{{.*}} // CHECK: select <4 x i1> %{{.*}}, <4 x double> %{{.*}}, <4 x double> %{{.*}} return (__m256d) _mm256_maskz_xor_pd (__U, __A, __B); } __m128d test_mm_mask_xor_pd (__m128d __W, __mmask8 __U, __m128d __A, __m128d __B) { - // CHECK-LABEL: @test_mm_mask_xor_pd + // CHECK-LABEL: test_mm_mask_xor_pd // CHECK: xor <2 x i64> %{{.*}}, %{{.*}} // CHECK: select <2 x i1> %{{.*}}, <2 x double> %{{.*}}, <2 x double> %{{.*}} return (__m128d) _mm_mask_xor_pd ( __W, __U, __A, __B); } __m128d test_mm_maskz_xor_pd (__mmask8 __U, __m128d __A, __m128d __B) { - // CHECK-LABEL: @test_mm_maskz_xor_pd + // CHECK-LABEL: test_mm_maskz_xor_pd // CHECK: xor <2 x i64> %{{.*}}, %{{.*}} // CHECK: select <2 x i1> %{{.*}}, <2 x double> %{{.*}}, <2 x double> %{{.*}} return (__m128d) _mm_maskz_xor_pd (__U, __A, __B); } __m256 test_mm256_mask_xor_ps (__m256 __W, __mmask8 __U, __m256 __A, __m256 __B) { - // CHECK-LABEL: @test_mm256_mask_xor_ps + // CHECK-LABEL: test_mm256_mask_xor_ps // CHECK: xor <8 x i32> %{{.*}}, %{{.*}} // CHECK: select <8 x i1> %{{.*}}, <8 x float> %{{.*}}, <8 x float> %{{.*}} return (__m256) _mm256_mask_xor_ps ( __W, __U, __A, __B); } __m256 test_mm256_maskz_xor_ps (__mmask8 __U, __m256 __A, __m256 __B) { - // CHECK-LABEL: @test_mm256_maskz_xor_ps + // CHECK-LABEL: test_mm256_maskz_xor_ps // CHECK: xor <8 x i32> %{{.*}}, %{{.*}} // CHECK: select <8 x i1> %{{.*}}, <8 x float> %{{.*}}, <8 x float> %{{.*}} return (__m256) _mm256_maskz_xor_ps (__U, __A, __B); } __m128 test_mm_mask_xor_ps (__m128 __W, __mmask8 __U, __m128 __A, __m128 __B) { - // CHECK-LABEL: @test_mm_mask_xor_ps + // CHECK-LABEL: test_mm_mask_xor_ps // CHECK: xor <4 x i32> %{{.*}}, %{{.*}} // CHECK: select <4 x i1> %{{.*}}, <4 x float> %{{.*}}, <4 x float> %{{.*}} return (__m128) _mm_mask_xor_ps ( __W, __U, __A, __B); } __m128 test_mm_maskz_xor_ps (__mmask8 __U, __m128 __A, __m128 __B) { - // CHECK-LABEL: @test_mm_maskz_xor_ps + // CHECK-LABEL: test_mm_maskz_xor_ps // CHECK: xor <4 x i32> %{{.*}}, %{{.*}} // CHECK: select <4 x i1> %{{.*}}, <4 x float> %{{.*}}, <4 x float> %{{.*}} return (__m128) _mm_maskz_xor_ps (__U, __A, __B); } __m256d test_mm256_mask_or_pd (__m256d __W, __mmask8 __U, __m256d __A, __m256d __B) { - // CHECK-LABEL: @test_mm256_mask_or_pd + // CHECK-LABEL: test_mm256_mask_or_pd // CHECK: or <4 x i64> %{{.*}}, %{{.*}} // CHECK: select <4 x i1> %{{.*}}, <4 x double> %{{.*}}, <4 x double> %{{.*}} return (__m256d) _mm256_mask_or_pd ( __W, __U, __A, __B); } __m256d test_mm256_maskz_or_pd (__mmask8 __U, __m256d __A, __m256d __B) { - // CHECK-LABEL: @test_mm256_maskz_or_pd + // CHECK-LABEL: test_mm256_maskz_or_pd // CHECK: or <4 x i64> %{{.*}}, %{{.*}} // CHECK: select <4 x i1> %{{.*}}, <4 x double> %{{.*}}, <4 x double> %{{.*}} return (__m256d) _mm256_maskz_or_pd (__U, __A, __B); } __m128d test_mm_mask_or_pd (__m128d __W, __mmask8 __U, __m128d __A, __m128d __B) { - // CHECK-LABEL: @test_mm_mask_or_pd + // CHECK-LABEL: test_mm_mask_or_pd // CHECK: or <2 x i64> %{{.*}}, %{{.*}} // CHECK: select <2 x i1> %{{.*}}, <2 x double> %{{.*}}, <2 x double> %{{.*}} return (__m128d) _mm_mask_or_pd ( __W, __U, __A, __B); } __m128d test_mm_maskz_or_pd (__mmask8 __U, __m128d __A, __m128d __B) { - // CHECK-LABEL: @test_mm_maskz_or_pd + // CHECK-LABEL: test_mm_maskz_or_pd // CHECK: or <2 x i64> %{{.*}}, %{{.*}} // CHECK: select <2 x i1> %{{.*}}, <2 x double> %{{.*}}, <2 x double> %{{.*}} return (__m128d) _mm_maskz_or_pd (__U, __A, __B); } __m256 test_mm256_mask_or_ps (__m256 __W, __mmask8 __U, __m256 __A, __m256 __B) { - // CHECK-LABEL: @test_mm256_mask_or_ps + // CHECK-LABEL: test_mm256_mask_or_ps // CHECK: or <8 x i32> %{{.*}}, %{{.*}} // CHECK: select <8 x i1> %{{.*}}, <8 x float> %{{.*}}, <8 x float> %{{.*}} return (__m256) _mm256_mask_or_ps ( __W, __U, __A, __B); } __m256 test_mm256_maskz_or_ps (__mmask8 __U, __m256 __A, __m256 __B) { - // CHECK-LABEL: @test_mm256_maskz_or_ps + // CHECK-LABEL: test_mm256_maskz_or_ps // CHECK: or <8 x i32> %{{.*}}, %{{.*}} // CHECK: select <8 x i1> %{{.*}}, <8 x float> %{{.*}}, <8 x float> %{{.*}} return (__m256) _mm256_maskz_or_ps (__U, __A, __B); } __m128 test_mm_mask_or_ps (__m128 __W, __mmask8 __U, __m128 __A, __m128 __B) { - // CHECK-LABEL: @test_mm_mask_or_ps + // CHECK-LABEL: test_mm_mask_or_ps // CHECK: or <4 x i32> %{{.*}}, %{{.*}} // CHECK: select <4 x i1> %{{.*}}, <4 x float> %{{.*}}, <4 x float> %{{.*}} return (__m128) _mm_mask_or_ps ( __W, __U, __A, __B); } __m128 test_mm_maskz_or_ps (__mmask8 __U, __m128 __A, __m128 __B) { - // CHECK-LABEL: @test_mm_maskz_or_ps + // CHECK-LABEL: test_mm_maskz_or_ps // CHECK: or <4 x i32> %{{.*}}, %{{.*}} // CHECK: select <4 x i1> %{{.*}}, <4 x float> %{{.*}}, <4 x float> %{{.*}} return (__m128) _mm_maskz_or_ps(__U, __A, __B); } __m128i test_mm_cvtpd_epi64(__m128d __A) { - // CHECK-LABEL: @test_mm_cvtpd_epi64 + // CHECK-LABEL: test_mm_cvtpd_epi64 // CHECK: @llvm.x86.avx512.mask.cvtpd2qq.128 return _mm_cvtpd_epi64(__A); } __m128i test_mm_mask_cvtpd_epi64(__m128i __W, __mmask8 __U, __m128d __A) { - // CHECK-LABEL: @test_mm_mask_cvtpd_epi64 + // CHECK-LABEL: test_mm_mask_cvtpd_epi64 // CHECK: @llvm.x86.avx512.mask.cvtpd2qq.128 return _mm_mask_cvtpd_epi64(__W, __U, __A); } __m128i test_mm_maskz_cvtpd_epi64(__mmask8 __U, __m128d __A) { - // CHECK-LABEL: @test_mm_maskz_cvtpd_epi64 + // CHECK-LABEL: test_mm_maskz_cvtpd_epi64 // CHECK: @llvm.x86.avx512.mask.cvtpd2qq.128 return _mm_maskz_cvtpd_epi64(__U, __A); } __m256i test_mm256_cvtpd_epi64(__m256d __A) { - // CHECK-LABEL: @test_mm256_cvtpd_epi64 + // CHECK-LABEL: test_mm256_cvtpd_epi64 // CHECK: @llvm.x86.avx512.mask.cvtpd2qq.256 return _mm256_cvtpd_epi64(__A); } __m256i test_mm256_mask_cvtpd_epi64(__m256i __W, __mmask8 __U, __m256d __A) { - // CHECK-LABEL: @test_mm256_mask_cvtpd_epi64 + // CHECK-LABEL: test_mm256_mask_cvtpd_epi64 // CHECK: @llvm.x86.avx512.mask.cvtpd2qq.256 return _mm256_mask_cvtpd_epi64(__W, __U, __A); } __m256i test_mm256_maskz_cvtpd_epi64(__mmask8 __U, __m256d __A) { - // CHECK-LABEL: @test_mm256_maskz_cvtpd_epi64 + // CHECK-LABEL: test_mm256_maskz_cvtpd_epi64 // CHECK: @llvm.x86.avx512.mask.cvtpd2qq.256 return _mm256_maskz_cvtpd_epi64(__U, __A); } __m128i test_mm_cvtpd_epu64(__m128d __A) { - // CHECK-LABEL: @test_mm_cvtpd_epu64 + // CHECK-LABEL: test_mm_cvtpd_epu64 // CHECK: @llvm.x86.avx512.mask.cvtpd2uqq.128 return _mm_cvtpd_epu64(__A); } __m128i test_mm_mask_cvtpd_epu64(__m128i __W, __mmask8 __U, __m128d __A) { - // CHECK-LABEL: @test_mm_mask_cvtpd_epu64 + // CHECK-LABEL: test_mm_mask_cvtpd_epu64 // CHECK: @llvm.x86.avx512.mask.cvtpd2uqq.128 return _mm_mask_cvtpd_epu64(__W, __U, __A); } __m128i test_mm_maskz_cvtpd_epu64(__mmask8 __U, __m128d __A) { - // CHECK-LABEL: @test_mm_maskz_cvtpd_epu64 + // CHECK-LABEL: test_mm_maskz_cvtpd_epu64 // CHECK: @llvm.x86.avx512.mask.cvtpd2uqq.128 return _mm_maskz_cvtpd_epu64(__U, __A); } __m256i test_mm256_cvtpd_epu64(__m256d __A) { - // CHECK-LABEL: @test_mm256_cvtpd_epu64 + // CHECK-LABEL: test_mm256_cvtpd_epu64 // CHECK: @llvm.x86.avx512.mask.cvtpd2uqq.256 return _mm256_cvtpd_epu64(__A); } __m256i test_mm256_mask_cvtpd_epu64(__m256i __W, __mmask8 __U, __m256d __A) { - // CHECK-LABEL: @test_mm256_mask_cvtpd_epu64 + // CHECK-LABEL: test_mm256_mask_cvtpd_epu64 // CHECK: @llvm.x86.avx512.mask.cvtpd2uqq.256 return _mm256_mask_cvtpd_epu64(__W, __U, __A); } __m256i test_mm256_maskz_cvtpd_epu64(__mmask8 __U, __m256d __A) { - // CHECK-LABEL: @test_mm256_maskz_cvtpd_epu64 + // CHECK-LABEL: test_mm256_maskz_cvtpd_epu64 // CHECK: @llvm.x86.avx512.mask.cvtpd2uqq.256 return _mm256_maskz_cvtpd_epu64(__U, __A); } __m128i test_mm_cvtps_epi64(__m128 __A) { - // CHECK-LABEL: @test_mm_cvtps_epi64 + // CHECK-LABEL: test_mm_cvtps_epi64 // CHECK: @llvm.x86.avx512.mask.cvtps2qq.128 return _mm_cvtps_epi64(__A); } __m128i test_mm_mask_cvtps_epi64(__m128i __W, __mmask8 __U, __m128 __A) { - // CHECK-LABEL: @test_mm_mask_cvtps_epi64 + // CHECK-LABEL: test_mm_mask_cvtps_epi64 // CHECK: @llvm.x86.avx512.mask.cvtps2qq.128 return _mm_mask_cvtps_epi64(__W, __U, __A); } __m128i test_mm_maskz_cvtps_epi64(__mmask8 __U, __m128 __A) { - // CHECK-LABEL: @test_mm_maskz_cvtps_epi64 + // CHECK-LABEL: test_mm_maskz_cvtps_epi64 // CHECK: @llvm.x86.avx512.mask.cvtps2qq.128 return _mm_maskz_cvtps_epi64(__U, __A); } __m256i test_mm256_cvtps_epi64(__m128 __A) { - // CHECK-LABEL: @test_mm256_cvtps_epi64 + // CHECK-LABEL: test_mm256_cvtps_epi64 // CHECK: @llvm.x86.avx512.mask.cvtps2qq.256 return _mm256_cvtps_epi64(__A); } __m256i test_mm256_mask_cvtps_epi64(__m256i __W, __mmask8 __U, __m128 __A) { - // CHECK-LABEL: @test_mm256_mask_cvtps_epi64 + // CHECK-LABEL: test_mm256_mask_cvtps_epi64 // CHECK: @llvm.x86.avx512.mask.cvtps2qq.256 return _mm256_mask_cvtps_epi64(__W, __U, __A); } __m256i test_mm256_maskz_cvtps_epi64(__mmask8 __U, __m128 __A) { - // CHECK-LABEL: @test_mm256_maskz_cvtps_epi64 + // CHECK-LABEL: test_mm256_maskz_cvtps_epi64 // CHECK: @llvm.x86.avx512.mask.cvtps2qq.256 return _mm256_maskz_cvtps_epi64(__U, __A); } __m128i test_mm_cvtps_epu64(__m128 __A) { - // CHECK-LABEL: @test_mm_cvtps_epu64 + // CHECK-LABEL: test_mm_cvtps_epu64 // CHECK: @llvm.x86.avx512.mask.cvtps2uqq.128 return _mm_cvtps_epu64(__A); } __m128i test_mm_mask_cvtps_epu64(__m128i __W, __mmask8 __U, __m128 __A) { - // CHECK-LABEL: @test_mm_mask_cvtps_epu64 + // CHECK-LABEL: test_mm_mask_cvtps_epu64 // CHECK: @llvm.x86.avx512.mask.cvtps2uqq.128 return _mm_mask_cvtps_epu64(__W, __U, __A); } __m128i test_mm_maskz_cvtps_epu64(__mmask8 __U, __m128 __A) { - // CHECK-LABEL: @test_mm_maskz_cvtps_epu64 + // CHECK-LABEL: test_mm_maskz_cvtps_epu64 // CHECK: @llvm.x86.avx512.mask.cvtps2uqq.128 return _mm_maskz_cvtps_epu64(__U, __A); } __m256i test_mm256_cvtps_epu64(__m128 __A) { - // CHECK-LABEL: @test_mm256_cvtps_epu64 + // CHECK-LABEL: test_mm256_cvtps_epu64 // CHECK: @llvm.x86.avx512.mask.cvtps2uqq.256 return _mm256_cvtps_epu64(__A); } __m256i test_mm256_mask_cvtps_epu64(__m256i __W, __mmask8 __U, __m128 __A) { - // CHECK-LABEL: @test_mm256_mask_cvtps_epu64 + // CHECK-LABEL: test_mm256_mask_cvtps_epu64 // CHECK: @llvm.x86.avx512.mask.cvtps2uqq.256 return _mm256_mask_cvtps_epu64(__W, __U, __A); } __m256i test_mm256_maskz_cvtps_epu64(__mmask8 __U, __m128 __A) { - // CHECK-LABEL: @test_mm256_maskz_cvtps_epu64 + // CHECK-LABEL: test_mm256_maskz_cvtps_epu64 // CHECK: @llvm.x86.avx512.mask.cvtps2uqq.256 return _mm256_maskz_cvtps_epu64(__U, __A); } __m128d test_mm_cvtepi64_pd(__m128i __A) { - // CHECK-LABEL: @test_mm_cvtepi64_pd + // CHECK-LABEL: test_mm_cvtepi64_pd // CHECK: sitofp <2 x i64> %{{.*}} to <2 x double> return _mm_cvtepi64_pd(__A); } __m128d test_mm_mask_cvtepi64_pd(__m128d __W, __mmask8 __U, __m128i __A) { - // CHECK-LABEL: @test_mm_mask_cvtepi64_pd + // CHECK-LABEL: test_mm_mask_cvtepi64_pd // CHECK: sitofp <2 x i64> %{{.*}} to <2 x double> // CHECK: select <2 x i1> %{{.*}}, <2 x double> %{{.*}}, <2 x double> %{{.*}} return _mm_mask_cvtepi64_pd(__W, __U, __A); } __m128d test_mm_maskz_cvtepi64_pd(__mmask8 __U, __m128i __A) { - // CHECK-LABEL: @test_mm_maskz_cvtepi64_pd + // CHECK-LABEL: test_mm_maskz_cvtepi64_pd // CHECK: sitofp <2 x i64> %{{.*}} to <2 x double> // CHECK: select <2 x i1> %{{.*}}, <2 x double> %{{.*}}, <2 x double> %{{.*}} return _mm_maskz_cvtepi64_pd(__U, __A); } __m256d test_mm256_cvtepi64_pd(__m256i __A) { - // CHECK-LABEL: @test_mm256_cvtepi64_pd + // CHECK-LABEL: test_mm256_cvtepi64_pd // CHECK: sitofp <4 x i64> %{{.*}} to <4 x double> return _mm256_cvtepi64_pd(__A); } __m256d test_mm256_mask_cvtepi64_pd(__m256d __W, __mmask8 __U, __m256i __A) { - // CHECK-LABEL: @test_mm256_mask_cvtepi64_pd + // CHECK-LABEL: test_mm256_mask_cvtepi64_pd // CHECK: sitofp <4 x i64> %{{.*}} to <4 x double> // CHECK: select <4 x i1> %{{.*}}, <4 x double> %{{.*}}, <4 x double> %{{.*}} return _mm256_mask_cvtepi64_pd(__W, __U, __A); } __m256d test_mm256_maskz_cvtepi64_pd(__mmask8 __U, __m256i __A) { - // CHECK-LABEL: @test_mm256_maskz_cvtepi64_pd + // CHECK-LABEL: test_mm256_maskz_cvtepi64_pd // CHECK: sitofp <4 x i64> %{{.*}} to <4 x double> // CHECK: select <4 x i1> %{{.*}}, <4 x double> %{{.*}}, <4 x double> %{{.*}} return _mm256_maskz_cvtepi64_pd(__U, __A); } __m128 test_mm_cvtepi64_ps(__m128i __A) { - // CHECK-LABEL: @test_mm_cvtepi64_ps + // CHECK-LABEL: test_mm_cvtepi64_ps // CHECK: @llvm.x86.avx512.mask.cvtqq2ps.128 return _mm_cvtepi64_ps(__A); } __m128 test_mm_mask_cvtepi64_ps(__m128 __W, __mmask8 __U, __m128i __A) { - // CHECK-LABEL: @test_mm_mask_cvtepi64_ps + // CHECK-LABEL: test_mm_mask_cvtepi64_ps // CHECK: @llvm.x86.avx512.mask.cvtqq2ps.128 return _mm_mask_cvtepi64_ps(__W, __U, __A); } __m128 test_mm_maskz_cvtepi64_ps(__mmask8 __U, __m128i __A) { - // CHECK-LABEL: @test_mm_maskz_cvtepi64_ps + // CHECK-LABEL: test_mm_maskz_cvtepi64_ps // CHECK: @llvm.x86.avx512.mask.cvtqq2ps.128 return _mm_maskz_cvtepi64_ps(__U, __A); } __m128 test_mm256_cvtepi64_ps(__m256i __A) { - // CHECK-LABEL: @test_mm256_cvtepi64_ps + // CHECK-LABEL: test_mm256_cvtepi64_ps // CHECK: sitofp <4 x i64> %{{.*}} to <4 x float> return _mm256_cvtepi64_ps(__A); } __m128 test_mm256_mask_cvtepi64_ps(__m128 __W, __mmask8 __U, __m256i __A) { - // CHECK-LABEL: @test_mm256_mask_cvtepi64_ps + // CHECK-LABEL: test_mm256_mask_cvtepi64_ps // CHECK: sitofp <4 x i64> %{{.*}} to <4 x float> // select <4 x i1> %{{.*}}, <4 x float> %{{.*}}, <4 x float> %{{.*}} return _mm256_mask_cvtepi64_ps(__W, __U, __A); } __m128 test_mm256_maskz_cvtepi64_ps(__mmask8 __U, __m256i __A) { - // CHECK-LABEL: @test_mm256_maskz_cvtepi64_ps + // CHECK-LABEL: test_mm256_maskz_cvtepi64_ps // CHECK: sitofp <4 x i64> %{{.*}} to <4 x float> // select <4 x i1> %{{.*}}, <4 x float> %{{.*}}, <4 x float> %{{.*}} return _mm256_maskz_cvtepi64_ps(__U, __A); } __m128i test_mm_cvttpd_epi64(__m128d __A) { - // CHECK-LABEL: @test_mm_cvttpd_epi64 + // CHECK-LABEL: test_mm_cvttpd_epi64 // CHECK: @llvm.x86.avx512.mask.cvttpd2qq.128 return _mm_cvttpd_epi64(__A); } __m128i test_mm_mask_cvttpd_epi64(__m128i __W, __mmask8 __U, __m128d __A) { - // CHECK-LABEL: @test_mm_mask_cvttpd_epi64 + // CHECK-LABEL: test_mm_mask_cvttpd_epi64 // CHECK: @llvm.x86.avx512.mask.cvttpd2qq.128 return _mm_mask_cvttpd_epi64(__W, __U, __A); } __m128i test_mm_maskz_cvttpd_epi64(__mmask8 __U, __m128d __A) { - // CHECK-LABEL: @test_mm_maskz_cvttpd_epi64 + // CHECK-LABEL: test_mm_maskz_cvttpd_epi64 // CHECK: @llvm.x86.avx512.mask.cvttpd2qq.128 return _mm_maskz_cvttpd_epi64(__U, __A); } __m256i test_mm256_cvttpd_epi64(__m256d __A) { - // CHECK-LABEL: @test_mm256_cvttpd_epi64 + // CHECK-LABEL: test_mm256_cvttpd_epi64 // CHECK: @llvm.x86.avx512.mask.cvttpd2qq.256 return _mm256_cvttpd_epi64(__A); } __m256i test_mm256_mask_cvttpd_epi64(__m256i __W, __mmask8 __U, __m256d __A) { - // CHECK-LABEL: @test_mm256_mask_cvttpd_epi64 + // CHECK-LABEL: test_mm256_mask_cvttpd_epi64 // CHECK: @llvm.x86.avx512.mask.cvttpd2qq.256 return _mm256_mask_cvttpd_epi64(__W, __U, __A); } __m256i test_mm256_maskz_cvttpd_epi64(__mmask8 __U, __m256d __A) { - // CHECK-LABEL: @test_mm256_maskz_cvttpd_epi64 + // CHECK-LABEL: test_mm256_maskz_cvttpd_epi64 // CHECK: @llvm.x86.avx512.mask.cvttpd2qq.256 return _mm256_maskz_cvttpd_epi64(__U, __A); } __m128i test_mm_cvttpd_epu64(__m128d __A) { - // CHECK-LABEL: @test_mm_cvttpd_epu64 + // CHECK-LABEL: test_mm_cvttpd_epu64 // CHECK: @llvm.x86.avx512.mask.cvttpd2uqq.128 return _mm_cvttpd_epu64(__A); } __m128i test_mm_mask_cvttpd_epu64(__m128i __W, __mmask8 __U, __m128d __A) { - // CHECK-LABEL: @test_mm_mask_cvttpd_epu64 + // CHECK-LABEL: test_mm_mask_cvttpd_epu64 // CHECK: @llvm.x86.avx512.mask.cvttpd2uqq.128 return _mm_mask_cvttpd_epu64(__W, __U, __A); } __m128i test_mm_maskz_cvttpd_epu64(__mmask8 __U, __m128d __A) { - // CHECK-LABEL: @test_mm_maskz_cvttpd_epu64 + // CHECK-LABEL: test_mm_maskz_cvttpd_epu64 // CHECK: @llvm.x86.avx512.mask.cvttpd2uqq.128 return _mm_maskz_cvttpd_epu64(__U, __A); } __m256i test_mm256_cvttpd_epu64(__m256d __A) { - // CHECK-LABEL: @test_mm256_cvttpd_epu64 + // CHECK-LABEL: test_mm256_cvttpd_epu64 // CHECK: @llvm.x86.avx512.mask.cvttpd2uqq.256 return _mm256_cvttpd_epu64(__A); } __m256i test_mm256_mask_cvttpd_epu64(__m256i __W, __mmask8 __U, __m256d __A) { - // CHECK-LABEL: @test_mm256_mask_cvttpd_epu64 + // CHECK-LABEL: test_mm256_mask_cvttpd_epu64 // CHECK: @llvm.x86.avx512.mask.cvttpd2uqq.256 return _mm256_mask_cvttpd_epu64(__W, __U, __A); } __m256i test_mm256_maskz_cvttpd_epu64(__mmask8 __U, __m256d __A) { - // CHECK-LABEL: @test_mm256_maskz_cvttpd_epu64 + // CHECK-LABEL: test_mm256_maskz_cvttpd_epu64 // CHECK: @llvm.x86.avx512.mask.cvttpd2uqq.256 return _mm256_maskz_cvttpd_epu64(__U, __A); } __m128i test_mm_cvttps_epi64(__m128 __A) { - // CHECK-LABEL: @test_mm_cvttps_epi64 + // CHECK-LABEL: test_mm_cvttps_epi64 // CHECK: @llvm.x86.avx512.mask.cvttps2qq.128 return _mm_cvttps_epi64(__A); } __m128i test_mm_mask_cvttps_epi64(__m128i __W, __mmask8 __U, __m128 __A) { - // CHECK-LABEL: @test_mm_mask_cvttps_epi64 + // CHECK-LABEL: test_mm_mask_cvttps_epi64 // CHECK: @llvm.x86.avx512.mask.cvttps2qq.128 return _mm_mask_cvttps_epi64(__W, __U, __A); } __m128i test_mm_maskz_cvttps_epi64(__mmask8 __U, __m128 __A) { - // CHECK-LABEL: @test_mm_maskz_cvttps_epi64 + // CHECK-LABEL: test_mm_maskz_cvttps_epi64 // CHECK: @llvm.x86.avx512.mask.cvttps2qq.128 return _mm_maskz_cvttps_epi64(__U, __A); } __m256i test_mm256_cvttps_epi64(__m128 __A) { - // CHECK-LABEL: @test_mm256_cvttps_epi64 + // CHECK-LABEL: test_mm256_cvttps_epi64 // CHECK: @llvm.x86.avx512.mask.cvttps2qq.256 return _mm256_cvttps_epi64(__A); } __m256i test_mm256_mask_cvttps_epi64(__m256i __W, __mmask8 __U, __m128 __A) { - // CHECK-LABEL: @test_mm256_mask_cvttps_epi64 + // CHECK-LABEL: test_mm256_mask_cvttps_epi64 // CHECK: @llvm.x86.avx512.mask.cvttps2qq.256 return _mm256_mask_cvttps_epi64(__W, __U, __A); } __m256i test_mm256_maskz_cvttps_epi64(__mmask8 __U, __m128 __A) { - // CHECK-LABEL: @test_mm256_maskz_cvttps_epi64 + // CHECK-LABEL: test_mm256_maskz_cvttps_epi64 // CHECK: @llvm.x86.avx512.mask.cvttps2qq.256 return _mm256_maskz_cvttps_epi64(__U, __A); } __m128i test_mm_cvttps_epu64(__m128 __A) { - // CHECK-LABEL: @test_mm_cvttps_epu64 + // CHECK-LABEL: test_mm_cvttps_epu64 // CHECK: @llvm.x86.avx512.mask.cvttps2uqq.128 return _mm_cvttps_epu64(__A); } __m128i test_mm_mask_cvttps_epu64(__m128i __W, __mmask8 __U, __m128 __A) { - // CHECK-LABEL: @test_mm_mask_cvttps_epu64 + // CHECK-LABEL: test_mm_mask_cvttps_epu64 // CHECK: @llvm.x86.avx512.mask.cvttps2uqq.128 return _mm_mask_cvttps_epu64(__W, __U, __A); } __m128i test_mm_maskz_cvttps_epu64(__mmask8 __U, __m128 __A) { - // CHECK-LABEL: @test_mm_maskz_cvttps_epu64 + // CHECK-LABEL: test_mm_maskz_cvttps_epu64 // CHECK: @llvm.x86.avx512.mask.cvttps2uqq.128 return _mm_maskz_cvttps_epu64(__U, __A); } __m256i test_mm256_cvttps_epu64(__m128 __A) { - // CHECK-LABEL: @test_mm256_cvttps_epu64 + // CHECK-LABEL: test_mm256_cvttps_epu64 // CHECK: @llvm.x86.avx512.mask.cvttps2uqq.256 return _mm256_cvttps_epu64(__A); } __m256i test_mm256_mask_cvttps_epu64(__m256i __W, __mmask8 __U, __m128 __A) { - // CHECK-LABEL: @test_mm256_mask_cvttps_epu64 + // CHECK-LABEL: test_mm256_mask_cvttps_epu64 // CHECK: @llvm.x86.avx512.mask.cvttps2uqq.256 return _mm256_mask_cvttps_epu64(__W, __U, __A); } __m256i test_mm256_maskz_cvttps_epu64(__mmask8 __U, __m128 __A) { - // CHECK-LABEL: @test_mm256_maskz_cvttps_epu64 + // CHECK-LABEL: test_mm256_maskz_cvttps_epu64 // CHECK: @llvm.x86.avx512.mask.cvttps2uqq.256 return _mm256_maskz_cvttps_epu64(__U, __A); } __m128d test_mm_cvtepu64_pd(__m128i __A) { - // CHECK-LABEL: @test_mm_cvtepu64_pd + // CHECK-LABEL: test_mm_cvtepu64_pd // CHECK: uitofp <2 x i64> %{{.*}} to <2 x double> return _mm_cvtepu64_pd(__A); } __m128d test_mm_mask_cvtepu64_pd(__m128d __W, __mmask8 __U, __m128i __A) { - // CHECK-LABEL: @test_mm_mask_cvtepu64_pd + // CHECK-LABEL: test_mm_mask_cvtepu64_pd // CHECK: uitofp <2 x i64> %{{.*}} to <2 x double> // CHECK: select <2 x i1> %{{.*}}, <2 x double> %{{.*}}, <2 x double> %{{.*}} return _mm_mask_cvtepu64_pd(__W, __U, __A); } __m128d test_mm_maskz_cvtepu64_pd(__mmask8 __U, __m128i __A) { - // CHECK-LABEL: @test_mm_maskz_cvtepu64_pd + // CHECK-LABEL: test_mm_maskz_cvtepu64_pd // CHECK: uitofp <2 x i64> %{{.*}} to <2 x double> // CHECK: select <2 x i1> %{{.*}}, <2 x double> %{{.*}}, <2 x double> %{{.*}} return _mm_maskz_cvtepu64_pd(__U, __A); } __m256d test_mm256_cvtepu64_pd(__m256i __A) { - // CHECK-LABEL: @test_mm256_cvtepu64_pd + // CHECK-LABEL: test_mm256_cvtepu64_pd // CHECK: uitofp <4 x i64> %{{.*}} to <4 x double> return _mm256_cvtepu64_pd(__A); } __m256d test_mm256_mask_cvtepu64_pd(__m256d __W, __mmask8 __U, __m256i __A) { - // CHECK-LABEL: @test_mm256_mask_cvtepu64_pd + // CHECK-LABEL: test_mm256_mask_cvtepu64_pd // CHECK: uitofp <4 x i64> %{{.*}} to <4 x double> // CHECK: select <4 x i1> %{{.*}}, <4 x double> %{{.*}}, <4 x double> %{{.*}} return _mm256_mask_cvtepu64_pd(__W, __U, __A); } __m256d test_mm256_maskz_cvtepu64_pd(__mmask8 __U, __m256i __A) { - // CHECK-LABEL: @test_mm256_maskz_cvtepu64_pd + // CHECK-LABEL: test_mm256_maskz_cvtepu64_pd // CHECK: uitofp <4 x i64> %{{.*}} to <4 x double> // CHECK: select <4 x i1> %{{.*}}, <4 x double> %{{.*}}, <4 x double> %{{.*}} return _mm256_maskz_cvtepu64_pd(__U, __A); } __m128 test_mm_cvtepu64_ps(__m128i __A) { - // CHECK-LABEL: @test_mm_cvtepu64_ps + // CHECK-LABEL: test_mm_cvtepu64_ps // CHECK: @llvm.x86.avx512.mask.cvtuqq2ps.128 return _mm_cvtepu64_ps(__A); } __m128 test_mm_mask_cvtepu64_ps(__m128 __W, __mmask8 __U, __m128i __A) { - // CHECK-LABEL: @test_mm_mask_cvtepu64_ps + // CHECK-LABEL: test_mm_mask_cvtepu64_ps // CHECK: @llvm.x86.avx512.mask.cvtuqq2ps.128 return _mm_mask_cvtepu64_ps(__W, __U, __A); } __m128 test_mm_maskz_cvtepu64_ps(__mmask8 __U, __m128i __A) { - // CHECK-LABEL: @test_mm_maskz_cvtepu64_ps + // CHECK-LABEL: test_mm_maskz_cvtepu64_ps // CHECK: @llvm.x86.avx512.mask.cvtuqq2ps.128 return _mm_maskz_cvtepu64_ps(__U, __A); } __m128 test_mm256_cvtepu64_ps(__m256i __A) { - // CHECK-LABEL: @test_mm256_cvtepu64_ps + // CHECK-LABEL: test_mm256_cvtepu64_ps // CHECK: uitofp <4 x i64> %{{.*}} to <4 x float> return _mm256_cvtepu64_ps(__A); } __m128 test_mm256_mask_cvtepu64_ps(__m128 __W, __mmask8 __U, __m256i __A) { - // CHECK-LABEL: @test_mm256_mask_cvtepu64_ps + // CHECK-LABEL: test_mm256_mask_cvtepu64_ps // CHECK: uitofp <4 x i64> %{{.*}} to <4 x float> // CHECK: select <4 x i1> %{{.*}}, <4 x float> %{{.*}}, <4 x float> %{{.*}} return _mm256_mask_cvtepu64_ps(__W, __U, __A); } __m128 test_mm256_maskz_cvtepu64_ps(__mmask8 __U, __m256i __A) { - // CHECK-LABEL: @test_mm256_maskz_cvtepu64_ps + // CHECK-LABEL: test_mm256_maskz_cvtepu64_ps // CHECK: uitofp <4 x i64> %{{.*}} to <4 x float> // CHECK: select <4 x i1> %{{.*}}, <4 x float> %{{.*}}, <4 x float> %{{.*}} return _mm256_maskz_cvtepu64_ps(__U, __A); } __m128d test_mm_range_pd(__m128d __A, __m128d __B) { - // CHECK-LABEL: @test_mm_range_pd + // CHECK-LABEL: test_mm_range_pd // CHECK: @llvm.x86.avx512.mask.range.pd.128 return _mm_range_pd(__A, __B, 4); } __m128d test_mm_mask_range_pd(__m128d __W, __mmask8 __U, __m128d __A, __m128d __B) { - // CHECK-LABEL: @test_mm_mask_range_pd + // CHECK-LABEL: test_mm_mask_range_pd // CHECK: @llvm.x86.avx512.mask.range.pd.128 return _mm_mask_range_pd(__W, __U, __A, __B, 4); } __m128d test_mm_maskz_range_pd(__mmask8 __U, __m128d __A, __m128d __B) { - // CHECK-LABEL: @test_mm_maskz_range_pd + // CHECK-LABEL: test_mm_maskz_range_pd // CHECK: @llvm.x86.avx512.mask.range.pd.128 return _mm_maskz_range_pd(__U, __A, __B, 4); } __m256d test_mm256_range_pd(__m256d __A, __m256d __B) { - // CHECK-LABEL: @test_mm256_range_pd + // CHECK-LABEL: test_mm256_range_pd // CHECK: @llvm.x86.avx512.mask.range.pd.256 return _mm256_range_pd(__A, __B, 4); } __m256d test_mm256_mask_range_pd(__m256d __W, __mmask8 __U, __m256d __A, __m256d __B) { - // CHECK-LABEL: @test_mm256_mask_range_pd + // CHECK-LABEL: test_mm256_mask_range_pd // CHECK: @llvm.x86.avx512.mask.range.pd.256 return _mm256_mask_range_pd(__W, __U, __A, __B, 4); } __m256d test_mm256_maskz_range_pd(__mmask8 __U, __m256d __A, __m256d __B) { - // CHECK-LABEL: @test_mm256_maskz_range_pd + // CHECK-LABEL: test_mm256_maskz_range_pd // CHECK: @llvm.x86.avx512.mask.range.pd.256 return _mm256_maskz_range_pd(__U, __A, __B, 4); } __m128 test_mm_range_ps(__m128 __A, __m128 __B) { - // CHECK-LABEL: @test_mm_range_ps + // CHECK-LABEL: test_mm_range_ps // CHECK: @llvm.x86.avx512.mask.range.ps.128 return _mm_range_ps(__A, __B, 4); } __m128 test_mm_mask_range_ps(__m128 __W, __mmask8 __U, __m128 __A, __m128 __B) { - // CHECK-LABEL: @test_mm_mask_range_ps + // CHECK-LABEL: test_mm_mask_range_ps // CHECK: @llvm.x86.avx512.mask.range.ps.128 return _mm_mask_range_ps(__W, __U, __A, __B, 4); } __m128 test_mm_maskz_range_ps(__mmask8 __U, __m128 __A, __m128 __B) { - // CHECK-LABEL: @test_mm_maskz_range_ps + // CHECK-LABEL: test_mm_maskz_range_ps // CHECK: @llvm.x86.avx512.mask.range.ps.128 return _mm_maskz_range_ps(__U, __A, __B, 4); } __m256 test_mm256_range_ps(__m256 __A, __m256 __B) { - // CHECK-LABEL: @test_mm256_range_ps + // CHECK-LABEL: test_mm256_range_ps // CHECK: @llvm.x86.avx512.mask.range.ps.256 return _mm256_range_ps(__A, __B, 4); } __m256 test_mm256_mask_range_ps(__m256 __W, __mmask8 __U, __m256 __A, __m256 __B) { - // CHECK-LABEL: @test_mm256_mask_range_ps + // CHECK-LABEL: test_mm256_mask_range_ps // CHECK: @llvm.x86.avx512.mask.range.ps.256 return _mm256_mask_range_ps(__W, __U, __A, __B, 4); } __m256 test_mm256_maskz_range_ps(__mmask8 __U, __m256 __A, __m256 __B) { - // CHECK-LABEL: @test_mm256_maskz_range_ps + // CHECK-LABEL: test_mm256_maskz_range_ps // CHECK: @llvm.x86.avx512.mask.range.ps.256 return _mm256_maskz_range_ps(__U, __A, __B, 4); } __m128d test_mm_reduce_pd(__m128d __A) { - // CHECK-LABEL: @test_mm_reduce_pd + // CHECK-LABEL: test_mm_reduce_pd // CHECK: @llvm.x86.avx512.mask.reduce.pd.128 return _mm_reduce_pd(__A, 4); } __m128d test_mm_mask_reduce_pd(__m128d __W, __mmask8 __U, __m128d __A) { - // CHECK-LABEL: @test_mm_mask_reduce_pd + // CHECK-LABEL: test_mm_mask_reduce_pd // CHECK: @llvm.x86.avx512.mask.reduce.pd.128 return _mm_mask_reduce_pd(__W, __U, __A, 4); } __m128d test_mm_maskz_reduce_pd(__mmask8 __U, __m128d __A) { - // CHECK-LABEL: @test_mm_maskz_reduce_pd + // CHECK-LABEL: test_mm_maskz_reduce_pd // CHECK: @llvm.x86.avx512.mask.reduce.pd.128 return _mm_maskz_reduce_pd(__U, __A, 4); } __m256d test_mm256_reduce_pd(__m256d __A) { - // CHECK-LABEL: @test_mm256_reduce_pd + // CHECK-LABEL: test_mm256_reduce_pd // CHECK: @llvm.x86.avx512.mask.reduce.pd.256 return _mm256_reduce_pd(__A, 4); } __m256d test_mm256_mask_reduce_pd(__m256d __W, __mmask8 __U, __m256d __A) { - // CHECK-LABEL: @test_mm256_mask_reduce_pd + // CHECK-LABEL: test_mm256_mask_reduce_pd // CHECK: @llvm.x86.avx512.mask.reduce.pd.256 return _mm256_mask_reduce_pd(__W, __U, __A, 4); } __m256d test_mm256_maskz_reduce_pd(__mmask8 __U, __m256d __A) { - // CHECK-LABEL: @test_mm256_maskz_reduce_pd + // CHECK-LABEL: test_mm256_maskz_reduce_pd // CHECK: @llvm.x86.avx512.mask.reduce.pd.256 return _mm256_maskz_reduce_pd(__U, __A, 4); } __m128 test_mm_reduce_ps(__m128 __A) { - // CHECK-LABEL: @test_mm_reduce_ps + // CHECK-LABEL: test_mm_reduce_ps // CHECK: @llvm.x86.avx512.mask.reduce.ps.128 return _mm_reduce_ps(__A, 4); } __m128 test_mm_mask_reduce_ps(__m128 __W, __mmask8 __U, __m128 __A) { - // CHECK-LABEL: @test_mm_mask_reduce_ps + // CHECK-LABEL: test_mm_mask_reduce_ps // CHECK: @llvm.x86.avx512.mask.reduce.ps.128 return _mm_mask_reduce_ps(__W, __U, __A, 4); } __m128 test_mm_maskz_reduce_ps(__mmask8 __U, __m128 __A) { - // CHECK-LABEL: @test_mm_maskz_reduce_ps + // CHECK-LABEL: test_mm_maskz_reduce_ps // CHECK: @llvm.x86.avx512.mask.reduce.ps.128 return _mm_maskz_reduce_ps(__U, __A, 4); } __m256 test_mm256_reduce_ps(__m256 __A) { - // CHECK-LABEL: @test_mm256_reduce_ps + // CHECK-LABEL: test_mm256_reduce_ps // CHECK: @llvm.x86.avx512.mask.reduce.ps.256 return _mm256_reduce_ps(__A, 4); } __m256 test_mm256_mask_reduce_ps(__m256 __W, __mmask8 __U, __m256 __A) { - // CHECK-LABEL: @test_mm256_mask_reduce_ps + // CHECK-LABEL: test_mm256_mask_reduce_ps // CHECK: @llvm.x86.avx512.mask.reduce.ps.256 return _mm256_mask_reduce_ps(__W, __U, __A, 4); } __m256 test_mm256_maskz_reduce_ps(__mmask8 __U, __m256 __A) { - // CHECK-LABEL: @test_mm256_maskz_reduce_ps + // CHECK-LABEL: test_mm256_maskz_reduce_ps // CHECK: @llvm.x86.avx512.mask.reduce.ps.256 return _mm256_maskz_reduce_ps(__U, __A, 4); } __mmask8 test_mm_movepi32_mask(__m128i __A) { - // CHECK-LABEL: @test_mm_movepi32_mask + // CHECK-LABEL: test_mm_movepi32_mask // CHECK: [[CMP:%.*]] = icmp slt <4 x i32> %{{.*}}, zeroinitializer // CHECK: [[SHUF:%.*]] = shufflevector <4 x i1> [[CMP]], <4 x i1> zeroinitializer, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7> return _mm_movepi32_mask(__A); } __mmask8 test_mm256_movepi32_mask(__m256i __A) { - // CHECK-LABEL: @test_mm256_movepi32_mask + // CHECK-LABEL: test_mm256_movepi32_mask // CHECK: [[CMP:%.*]] = icmp slt <8 x i32> %{{.*}}, zeroinitializer return _mm256_movepi32_mask(__A); } __m128i test_mm_movm_epi32(__mmask8 __A) { - // CHECK-LABEL: @test_mm_movm_epi32 + // CHECK-LABEL: test_mm_movm_epi32 // CHECK: %{{.*}} = bitcast i8 %{{.*}} to <8 x i1> // CHECK: %extract.i = shufflevector <8 x i1> %{{.*}}, <8 x i1> %{{.*}}, <4 x i32> <i32 0, i32 1, i32 2, i32 3> // CHECK: %vpmovm2.i = sext <4 x i1> %extract.i to <4 x i32> @@ -885,14 +900,14 @@ __m128i test_mm_movm_epi32(__mmask8 __A) { } __m256i test_mm256_movm_epi32(__mmask8 __A) { - // CHECK-LABEL: @test_mm256_movm_epi32 + // CHECK-LABEL: test_mm256_movm_epi32 // CHECK: %{{.*}} = bitcast i8 %{{.*}} to <8 x i1> // CHECK: %vpmovm2.i = sext <8 x i1> %{{.*}} to <8 x i32> return _mm256_movm_epi32(__A); } __m128i test_mm_movm_epi64(__mmask8 __A) { - // CHECK-LABEL: @test_mm_movm_epi64 + // CHECK-LABEL: test_mm_movm_epi64 // CHECK: %{{.*}} = bitcast i8 %{{.*}} to <8 x i1> // CHECK: %extract.i = shufflevector <8 x i1> %{{.*}}, <8 x i1> %{{.*}}, <2 x i32> <i32 0, i32 1> // CHECK: %vpmovm2.i = sext <2 x i1> %extract.i to <2 x i64> @@ -900,7 +915,7 @@ __m128i test_mm_movm_epi64(__mmask8 __A) { } __m256i test_mm256_movm_epi64(__mmask8 __A) { - // CHECK-LABEL: @test_mm256_movm_epi64 + // CHECK-LABEL: test_mm256_movm_epi64 // CHECK: %{{.*}} = bitcast i8 %{{.*}} to <8 x i1> // CHECK: %extract.i = shufflevector <8 x i1> %{{.*}}, <8 x i1> %{{.*}}, <4 x i32> <i32 0, i32 1, i32 2, i32 3> // CHECK: %vpmovm2.i = sext <4 x i1> %extract.i to <4 x i64> @@ -908,14 +923,14 @@ __m256i test_mm256_movm_epi64(__mmask8 __A) { } __mmask8 test_mm_movepi64_mask(__m128i __A) { - // CHECK-LABEL: @test_mm_movepi64_mask + // CHECK-LABEL: test_mm_movepi64_mask // CHECK: [[CMP:%.*]] = icmp slt <2 x i64> %{{.*}}, zeroinitializer // CHECK: [[SHUF:%.*]] = shufflevector <2 x i1> [[CMP]], <2 x i1> zeroinitializer, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 2, i32 3, i32 2, i32 3> return _mm_movepi64_mask(__A); } __mmask8 test_mm256_movepi64_mask(__m256i __A) { - // CHECK-LABEL: @test_mm256_movepi64_mask + // CHECK-LABEL: test_mm256_movepi64_mask // CHECK: [[CMP:%.*]] = icmp slt <4 x i64> %{{.*}}, zeroinitializer // CHECK: [[SHUF:%.*]] = shufflevector <4 x i1> [[CMP]], <4 x i1> zeroinitializer, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7> return _mm256_movepi64_mask(__A); @@ -923,229 +938,234 @@ __mmask8 test_mm256_movepi64_mask(__m256i __A) { __m256 test_mm256_broadcast_f32x2(__m128 __A) { - // CHECK-LABEL: @test_mm256_broadcast_f32x2 + // CHECK-LABEL: test_mm256_broadcast_f32x2 // CHECK: shufflevector <4 x float> %{{.*}}, <4 x float> %{{.*}}, <8 x i32> <i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1> return _mm256_broadcast_f32x2(__A); } +TEST_CONSTEXPR(match_m256(_mm256_broadcast_f32x2((__m128)(__v4sf){1.0f, -2.0f, 3.0f, -4.0f}), 1.0f, -2.0f, 1.0f, -2.0f, 1.0f, -2.0f, 1.0f, -2.0f)); __m256 test_mm256_mask_broadcast_f32x2(__m256 __O, __mmask8 __M, __m128 __A) { - // CHECK-LABEL: @test_mm256_mask_broadcast_f32x2 + // CHECK-LABEL: test_mm256_mask_broadcast_f32x2 // CHECK: shufflevector <4 x float> %{{.*}}, <4 x float> %{{.*}}, <8 x i32> <i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1> // CHECK: select <8 x i1> %{{.*}}, <8 x float> %{{.*}}, <8 x float> %{{.*}} return _mm256_mask_broadcast_f32x2(__O, __M, __A); } __m256 test_mm256_maskz_broadcast_f32x2(__mmask8 __M, __m128 __A) { - // CHECK-LABEL: @test_mm256_maskz_broadcast_f32x2 + // CHECK-LABEL: test_mm256_maskz_broadcast_f32x2 // CHECK: shufflevector <4 x float> %{{.*}}, <4 x float> %{{.*}}, <8 x i32> <i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1> // CHECK: select <8 x i1> %{{.*}}, <8 x float> %{{.*}}, <8 x float> %{{.*}} return _mm256_maskz_broadcast_f32x2(__M, __A); } __m256d test_mm256_broadcast_f64x2(double const* __A) { - // CHECK-LABEL: @test_mm256_broadcast_f64x2 + // CHECK-LABEL: test_mm256_broadcast_f64x2 // CHECK: shufflevector <2 x double> %{{.*}}, <2 x double> %{{.*}}, <4 x i32> <i32 0, i32 1, i32 0, i32 1> return _mm256_broadcast_f64x2(_mm_loadu_pd(__A)); } +TEST_CONSTEXPR(match_m256d(_mm256_broadcast_f64x2((__m128d)(__v2df){1.0, -2.0}), 1.0, -2.0, 1.0, -2.0)); __m256d test_mm256_mask_broadcast_f64x2(__m256d __O, __mmask8 __M, double const* __A) { - // CHECK-LABEL: @test_mm256_mask_broadcast_f64x2 + // CHECK-LABEL: test_mm256_mask_broadcast_f64x2 // CHECK: shufflevector <2 x double> %{{.*}}, <2 x double> %{{.*}}, <4 x i32> <i32 0, i32 1, i32 0, i32 1> // CHECK: select <4 x i1> %{{.*}}, <4 x double> %{{.*}}, <4 x double> %{{.*}} return _mm256_mask_broadcast_f64x2(__O, __M, _mm_loadu_pd(__A)); } __m256d test_mm256_maskz_broadcast_f64x2(__mmask8 __M, double const* __A) { - // CHECK-LABEL: @test_mm256_maskz_broadcast_f64x2 + // CHECK-LABEL: test_mm256_maskz_broadcast_f64x2 // CHECK: shufflevector <2 x double> %{{.*}}, <2 x double> %{{.*}}, <4 x i32> <i32 0, i32 1, i32 0, i32 1> // CHECK: select <4 x i1> %{{.*}}, <4 x double> %{{.*}}, <4 x double> %{{.*}} return _mm256_maskz_broadcast_f64x2(__M, _mm_loadu_pd(__A)); } __m128i test_mm_broadcast_i32x2(__m128i __A) { - // CHECK-LABEL: @test_mm_broadcast_i32x2 + // CHECK-LABEL: test_mm_broadcast_i32x2 // CHECK: shufflevector <4 x i32> %{{.*}}, <4 x i32> %{{.*}}, <4 x i32> <i32 0, i32 1, i32 0, i32 1> return _mm_broadcast_i32x2(__A); } +TEST_CONSTEXPR(match_v4si(_mm_broadcast_i32x2((__m128i)(__v4si){1, -2, 3, -4}), 1, -2, 1, -2)); __m128i test_mm_mask_broadcast_i32x2(__m128i __O, __mmask8 __M, __m128i __A) { - // CHECK-LABEL: @test_mm_mask_broadcast_i32x2 + // CHECK-LABEL: test_mm_mask_broadcast_i32x2 // CHECK: shufflevector <4 x i32> %{{.*}}, <4 x i32> %{{.*}}, <4 x i32> <i32 0, i32 1, i32 0, i32 1> // CHECK: select <4 x i1> %{{.*}}, <4 x i32> %{{.*}}, <4 x i32> %{{.*}} return _mm_mask_broadcast_i32x2(__O, __M, __A); } __m128i test_mm_maskz_broadcast_i32x2(__mmask8 __M, __m128i __A) { - // CHECK-LABEL: @test_mm_maskz_broadcast_i32x2 + // CHECK-LABEL: test_mm_maskz_broadcast_i32x2 // CHECK: shufflevector <4 x i32> %{{.*}}, <4 x i32> %{{.*}}, <4 x i32> <i32 0, i32 1, i32 0, i32 1> // CHECK: select <4 x i1> %{{.*}}, <4 x i32> %{{.*}}, <4 x i32> %{{.*}} return _mm_maskz_broadcast_i32x2(__M, __A); } __m256i test_mm256_broadcast_i32x2(__m128i __A) { - // CHECK-LABEL: @test_mm256_broadcast_i32x2 + // CHECK-LABEL: test_mm256_broadcast_i32x2 // CHECK: shufflevector <4 x i32> %{{.*}}, <4 x i32> %{{.*}}, <8 x i32> <i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1> return _mm256_broadcast_i32x2(__A); } +TEST_CONSTEXPR(match_v8si(_mm256_broadcast_i32x2((__m128i)(__v4si){1, -2, 3, -4}), 1, -2, 1, -2, 1, -2, 1, -2)); __m256i test_mm256_mask_broadcast_i32x2(__m256i __O, __mmask8 __M, __m128i __A) { - // CHECK-LABEL: @test_mm256_mask_broadcast_i32x2 + // CHECK-LABEL: test_mm256_mask_broadcast_i32x2 // CHECK: shufflevector <4 x i32> %{{.*}}, <4 x i32> %{{.*}}, <8 x i32> <i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1> // CHECK: select <8 x i1> %{{.*}}, <8 x i32> %{{.*}}, <8 x i32> %{{.*}} return _mm256_mask_broadcast_i32x2(__O, __M, __A); } __m256i test_mm256_maskz_broadcast_i32x2(__mmask8 __M, __m128i __A) { - // CHECK-LABEL: @test_mm256_maskz_broadcast_i32x2 + // CHECK-LABEL: test_mm256_maskz_broadcast_i32x2 // CHECK: shufflevector <4 x i32> %{{.*}}, <4 x i32> %{{.*}}, <8 x i32> <i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1> // CHECK: select <8 x i1> %{{.*}}, <8 x i32> %{{.*}}, <8 x i32> %{{.*}} return _mm256_maskz_broadcast_i32x2(__M, __A); } __m256i test_mm256_broadcast_i64x2(__m128i const* __A) { - // CHECK-LABEL: @test_mm256_broadcast_i64x2 + // CHECK-LABEL: test_mm256_broadcast_i64x2 // CHECK: shufflevector <2 x i64> %{{.*}}, <2 x i64> %{{.*}}, <4 x i32> <i32 0, i32 1, i32 0, i32 1> return _mm256_broadcast_i64x2(_mm_loadu_si128(__A)); } +TEST_CONSTEXPR(match_v4di(_mm256_broadcast_i64x2((__m128i)(__v2di){1, -2}), 1, -2, 1, -2)); __m256i test_mm256_mask_broadcast_i64x2(__m256i __O, __mmask8 __M, __m128i const* __A) { - // CHECK-LABEL: @test_mm256_mask_broadcast_i64x2 + // CHECK-LABEL: test_mm256_mask_broadcast_i64x2 // CHECK: shufflevector <2 x i64> %{{.*}}, <2 x i64> %{{.*}}, <4 x i32> <i32 0, i32 1, i32 0, i32 1> // CHECK: select <4 x i1> %{{.*}}, <4 x i64> %{{.*}}, <4 x i64> %{{.*}} return _mm256_mask_broadcast_i64x2(__O, __M, _mm_loadu_si128(__A)); } __m256i test_mm256_maskz_broadcast_i64x2(__mmask8 __M, __m128i const* __A) { - // CHECK-LABEL: @test_mm256_maskz_broadcast_i64x2 + // CHECK-LABEL: test_mm256_maskz_broadcast_i64x2 // CHECK: shufflevector <2 x i64> %{{.*}}, <2 x i64> %{{.*}}, <4 x i32> <i32 0, i32 1, i32 0, i32 1> // CHECK: select <4 x i1> %{{.*}}, <4 x i64> %{{.*}}, <4 x i64> %{{.*}} return _mm256_maskz_broadcast_i64x2(__M, _mm_loadu_si128(__A)); } __m128d test_mm256_extractf64x2_pd(__m256d __A) { - // CHECK-LABEL: @test_mm256_extractf64x2_pd + // CHECK-LABEL: test_mm256_extractf64x2_pd // CHECK: shufflevector <4 x double> %{{.*}}, <4 x double> poison, <2 x i32> <i32 2, i32 3> return _mm256_extractf64x2_pd(__A, 1); } __m128d test_mm256_mask_extractf64x2_pd(__m128d __W, __mmask8 __U, __m256d __A) { - // CHECK-LABEL: @test_mm256_mask_extractf64x2_pd + // CHECK-LABEL: test_mm256_mask_extractf64x2_pd // CHECK: shufflevector <4 x double> %{{.*}}, <4 x double> poison, <2 x i32> <i32 2, i32 3> // CHECK: select <2 x i1> %{{.*}}, <2 x double> %{{.*}}, <2 x double> %{{.*}} return _mm256_mask_extractf64x2_pd(__W, __U, __A, 1); } __m128d test_mm256_maskz_extractf64x2_pd(__mmask8 __U, __m256d __A) { - // CHECK-LABEL: @test_mm256_maskz_extractf64x2_pd + // CHECK-LABEL: test_mm256_maskz_extractf64x2_pd // CHECK: shufflevector <4 x double> %{{.*}}, <4 x double> poison, <2 x i32> <i32 2, i32 3> // CHECK: select <2 x i1> %{{.*}}, <2 x double> %{{.*}}, <2 x double> %{{.*}} return _mm256_maskz_extractf64x2_pd(__U, __A, 1); } __m128i test_mm256_extracti64x2_epi64(__m256i __A) { - // CHECK-LABEL: @test_mm256_extracti64x2_epi64 + // CHECK-LABEL: test_mm256_extracti64x2_epi64 // CHECK: shufflevector <4 x i64> %{{.*}}, <4 x i64> poison, <2 x i32> <i32 2, i32 3> return _mm256_extracti64x2_epi64(__A, 1); } __m128i test_mm256_mask_extracti64x2_epi64(__m128i __W, __mmask8 __U, __m256i __A) { - // CHECK-LABEL: @test_mm256_mask_extracti64x2_epi64 + // CHECK-LABEL: test_mm256_mask_extracti64x2_epi64 // CHECK: shufflevector <4 x i64> %{{.*}}, <4 x i64> poison, <2 x i32> <i32 2, i32 3> // CHECK: select <2 x i1> %{{.*}}, <2 x i64> %{{.*}}, <2 x i64> %{{.*}} return _mm256_mask_extracti64x2_epi64(__W, __U, __A, 1); } __m128i test_mm256_maskz_extracti64x2_epi64(__mmask8 __U, __m256i __A) { - // CHECK-LABEL: @test_mm256_maskz_extracti64x2_epi64 + // CHECK-LABEL: test_mm256_maskz_extracti64x2_epi64 // CHECK: shufflevector <4 x i64> %{{.*}}, <4 x i64> poison, <2 x i32> <i32 2, i32 3> // CHECK: select <2 x i1> %{{.*}}, <2 x i64> %{{.*}}, <2 x i64> %{{.*}} return _mm256_maskz_extracti64x2_epi64(__U, __A, 1); } __m256d test_mm256_insertf64x2(__m256d __A, __m128d __B) { - // CHECK-LABEL: @test_mm256_insertf64x2 + // CHECK-LABEL: test_mm256_insertf64x2 // CHECK: shufflevector <4 x double> %{{.*}}, <4 x double> %{{.*}}, <4 x i32> <i32 0, i32 1, i32 4, i32 5> return _mm256_insertf64x2(__A, __B, 1); } __m256d test_mm256_mask_insertf64x2(__m256d __W, __mmask8 __U, __m256d __A, __m128d __B) { - // CHECK-LABEL: @test_mm256_mask_insertf64x2 + // CHECK-LABEL: test_mm256_mask_insertf64x2 // CHECK: shufflevector <4 x double> %{{.*}}, <4 x double> %{{.*}}, <4 x i32> <i32 0, i32 1, i32 4, i32 5> // CHECK: select <4 x i1> %{{.*}}, <4 x double> %{{.*}}, <4 x double> %{{.*}} return _mm256_mask_insertf64x2(__W, __U, __A, __B, 1); } __m256d test_mm256_maskz_insertf64x2(__mmask8 __U, __m256d __A, __m128d __B) { - // CHECK-LABEL: @test_mm256_maskz_insertf64x2 + // CHECK-LABEL: test_mm256_maskz_insertf64x2 // CHECK: shufflevector <4 x double> %{{.*}}, <4 x double> %{{.*}}, <4 x i32> <i32 0, i32 1, i32 4, i32 5> // CHECK: select <4 x i1> %{{.*}}, <4 x double> %{{.*}}, <4 x double> %{{.*}} return _mm256_maskz_insertf64x2(__U, __A, __B, 1); } __m256i test_mm256_inserti64x2(__m256i __A, __m128i __B) { - // CHECK-LABEL: @test_mm256_inserti64x2 + // CHECK-LABEL: test_mm256_inserti64x2 // CHECK: shufflevector <4 x i64> %{{.*}}, <4 x i64> %{{.*}}, <4 x i32> <i32 0, i32 1, i32 4, i32 5> return _mm256_inserti64x2(__A, __B, 1); } __m256i test_mm256_mask_inserti64x2(__m256i __W, __mmask8 __U, __m256i __A, __m128i __B) { - // CHECK-LABEL: @test_mm256_mask_inserti64x2 + // CHECK-LABEL: test_mm256_mask_inserti64x2 // CHECK: shufflevector <4 x i64> %{{.*}}, <4 x i64> %{{.*}}, <4 x i32> <i32 0, i32 1, i32 4, i32 5> // CHECK: select <4 x i1> %{{.*}}, <4 x i64> %{{.*}}, <4 x i64> %{{.*}} return _mm256_mask_inserti64x2(__W, __U, __A, __B, 1); } __m256i test_mm256_maskz_inserti64x2(__mmask8 __U, __m256i __A, __m128i __B) { - // CHECK-LABEL: @test_mm256_maskz_inserti64x2 + // CHECK-LABEL: test_mm256_maskz_inserti64x2 // CHECK: shufflevector <4 x i64> %{{.*}}, <4 x i64> %{{.*}}, <4 x i32> <i32 0, i32 1, i32 4, i32 5> // CHECK: select <4 x i1> %{{.*}}, <4 x i64> %{{.*}}, <4 x i64> %{{.*}} return _mm256_maskz_inserti64x2(__U, __A, __B, 1); } __mmask8 test_mm_mask_fpclass_pd_mask(__mmask8 __U, __m128d __A) { - // CHECK-LABEL: @test_mm_mask_fpclass_pd_mask + // CHECK-LABEL: test_mm_mask_fpclass_pd_mask // CHECK: @llvm.x86.avx512.fpclass.pd.128 return _mm_mask_fpclass_pd_mask(__U, __A, 2); } __mmask8 test_mm_fpclass_pd_mask(__m128d __A) { - // CHECK-LABEL: @test_mm_fpclass_pd_mask + // CHECK-LABEL: test_mm_fpclass_pd_mask // CHECK: @llvm.x86.avx512.fpclass.pd.128 return _mm_fpclass_pd_mask(__A, 2); } __mmask8 test_mm256_mask_fpclass_pd_mask(__mmask8 __U, __m256d __A) { - // CHECK-LABEL: @test_mm256_mask_fpclass_pd_mask + // CHECK-LABEL: test_mm256_mask_fpclass_pd_mask // CHECK: @llvm.x86.avx512.fpclass.pd.256 return _mm256_mask_fpclass_pd_mask(__U, __A, 2); } __mmask8 test_mm256_fpclass_pd_mask(__m256d __A) { - // CHECK-LABEL: @test_mm256_fpclass_pd_mask + // CHECK-LABEL: test_mm256_fpclass_pd_mask // CHECK: @llvm.x86.avx512.fpclass.pd.256 return _mm256_fpclass_pd_mask(__A, 2); } __mmask8 test_mm_mask_fpclass_ps_mask(__mmask8 __U, __m128 __A) { - // CHECK-LABEL: @test_mm_mask_fpclass_ps_mask + // CHECK-LABEL: test_mm_mask_fpclass_ps_mask // CHECK: @llvm.x86.avx512.fpclass.ps.128 return _mm_mask_fpclass_ps_mask(__U, __A, 2); } __mmask8 test_mm_fpclass_ps_mask(__m128 __A) { - // CHECK-LABEL: @test_mm_fpclass_ps_mask + // CHECK-LABEL: test_mm_fpclass_ps_mask // CHECK: @llvm.x86.avx512.fpclass.ps.128 return _mm_fpclass_ps_mask(__A, 2); } __mmask8 test_mm256_mask_fpclass_ps_mask(__mmask8 __U, __m256 __A) { - // CHECK-LABEL: @test_mm256_mask_fpclass_ps_mask + // CHECK-LABEL: test_mm256_mask_fpclass_ps_mask // CHECK: @llvm.x86.avx512.fpclass.ps.256 return _mm256_mask_fpclass_ps_mask(__U, __A, 2); } __mmask8 test_mm256_fpclass_ps_mask(__m256 __A) { - // CHECK-LABEL: @test_mm256_fpclass_ps_mask + // CHECK-LABEL: test_mm256_fpclass_ps_mask // CHECK: @llvm.x86.avx512.fpclass.ps.256 return _mm256_fpclass_ps_mask(__A, 2); } diff --git a/clang/test/CodeGen/X86/avx512vlfp16-builtins.c b/clang/test/CodeGen/X86/avx512vlfp16-builtins.c index 3a212ed..828876e 100644 --- a/clang/test/CodeGen/X86/avx512vlfp16-builtins.c +++ b/clang/test/CodeGen/X86/avx512vlfp16-builtins.c @@ -1,21 +1,31 @@ -// RUN: %clang_cc1 -flax-vector-conversions=none -ffreestanding %s -triple=x86_64-unknown-unknown -target-feature +avx512vl -target-feature +avx512fp16 -emit-llvm -o - -Wall -Werror | FileCheck %s +// RUN: %clang_cc1 -x c -flax-vector-conversions=none -ffreestanding %s -triple=x86_64-unknown-unknown -target-feature +avx512vl -target-feature +avx512fp16 -emit-llvm -o - -Wall -Werror | FileCheck %s +// RUN: %clang_cc1 -x c -flax-vector-conversions=none -ffreestanding %s -triple=i386-unknown-unknown -target-feature +avx512vl -target-feature +avx512fp16 -emit-llvm -o - -Wall -Werror | FileCheck %s +// RUN: %clang_cc1 -x c++ -flax-vector-conversions=none -ffreestanding %s -triple=x86_64-unknown-unknown -target-feature +avx512vl -target-feature +avx512fp16 -emit-llvm -o - -Wall -Werror | FileCheck %s +// RUN: %clang_cc1 -x c++ -flax-vector-conversions=none -ffreestanding %s -triple=i386-unknown-unknown -target-feature +avx512vl -target-feature +avx512fp16 -emit-llvm -o - -Wall -Werror | FileCheck %s + +// RUN: %clang_cc1 -x c -flax-vector-conversions=none -ffreestanding %s -triple=x86_64-unknown-unknown -target-feature +avx512vl -target-feature +avx512fp16 -emit-llvm -o - -Wall -Werror -fexperimental-new-constant-interpreter | FileCheck %s +// RUN: %clang_cc1 -x c -flax-vector-conversions=none -ffreestanding %s -triple=i386-unknown-unknown -target-feature +avx512vl -target-feature +avx512fp16 -emit-llvm -o - -Wall -Werror -fexperimental-new-constant-interpreter | FileCheck %s +// RUN: %clang_cc1 -x c++ -flax-vector-conversions=none -ffreestanding %s -triple=x86_64-unknown-unknown -target-feature +avx512vl -target-feature +avx512fp16 -emit-llvm -o - -Wall -Werror -fexperimental-new-constant-interpreter | FileCheck %s +// RUN: %clang_cc1 -x c++ -flax-vector-conversions=none -ffreestanding %s -triple=i386-unknown-unknown -target-feature +avx512vl -target-feature +avx512fp16 -emit-llvm -o - -Wall -Werror -fexperimental-new-constant-interpreter | FileCheck %s + #include <immintrin.h> +#include "builtin_test_helpers.h" _Float16 test_mm_cvtsh_h(__m128h __A) { - // CHECK-LABEL: @test_mm_cvtsh_h + // CHECK-LABEL: test_mm_cvtsh_h // CHECK: extractelement <8 x half> %{{.*}}, i32 0 return _mm_cvtsh_h(__A); } _Float16 test_mm256_cvtsh_h(__m256h __A) { - // CHECK-LABEL: @test_mm256_cvtsh_h + // CHECK-LABEL: test_mm256_cvtsh_h // CHECK: extractelement <16 x half> %{{.*}}, i32 0 return _mm256_cvtsh_h(__A); } __m128h test_mm_set_sh(_Float16 __h) { - // CHECK-LABEL: @test_mm_set_sh + // CHECK-LABEL: test_mm_set_sh // CHECK: insertelement <8 x half> {{.*}}, i32 0 // CHECK: insertelement <8 x half> %{{.*}}, half 0xH0000, i32 1 // CHECK: insertelement <8 x half> %{{.*}}, half 0xH0000, i32 2 @@ -28,7 +38,7 @@ __m128h test_mm_set_sh(_Float16 __h) { } __m128h test_mm_set1_ph(_Float16 h) { - // CHECK-LABEL: @test_mm_set1_ph + // CHECK-LABEL: test_mm_set1_ph // CHECK: insertelement <8 x half> {{.*}}, i32 0 // CHECK: insertelement <8 x half> {{.*}}, i32 1 // CHECK: insertelement <8 x half> {{.*}}, i32 2 @@ -41,7 +51,7 @@ __m128h test_mm_set1_ph(_Float16 h) { } __m256h test_mm256_set1_ph(_Float16 h) { - // CHECK-LABEL: @test_mm256_set1_ph + // CHECK-LABEL: test_mm256_set1_ph // CHECK: insertelement <16 x half> {{.*}}, i32 0 // CHECK: insertelement <16 x half> {{.*}}, i32 1 // CHECK: insertelement <16 x half> {{.*}}, i32 2 @@ -62,7 +72,7 @@ __m256h test_mm256_set1_ph(_Float16 h) { } __m128h test_mm_set1_pch(_Float16 _Complex h) { - // CHECK-LABEL: @test_mm_set1_pch + // CHECK-LABEL: test_mm_set1_pch // CHECK: insertelement <4 x float> {{.*}}, i32 0 // CHECK: insertelement <4 x float> {{.*}}, i32 1 // CHECK: insertelement <4 x float> {{.*}}, i32 2 @@ -71,7 +81,7 @@ __m128h test_mm_set1_pch(_Float16 _Complex h) { } __m256h test_mm256_set1_pch(_Float16 _Complex h) { - // CHECK-LABEL: @test_mm256_set1_pch + // CHECK-LABEL: test_mm256_set1_pch // CHECK: insertelement <8 x float> {{.*}}, i32 0 // CHECK: insertelement <8 x float> {{.*}}, i32 1 // CHECK: insertelement <8 x float> {{.*}}, i32 2 @@ -85,7 +95,7 @@ __m256h test_mm256_set1_pch(_Float16 _Complex h) { __m128h test_mm_set_ph(_Float16 __h1, _Float16 __h2, _Float16 __h3, _Float16 __h4, _Float16 __h5, _Float16 __h6, _Float16 __h7, _Float16 __h8) { - // CHECK-LABEL: @test_mm_set_ph + // CHECK-LABEL: test_mm_set_ph // CHECK: insertelement <8 x half> {{.*}}, i32 0 // CHECK: insertelement <8 x half> {{.*}}, i32 1 // CHECK: insertelement <8 x half> {{.*}}, i32 2 @@ -101,7 +111,7 @@ __m256h test_mm256_set_ph(_Float16 __h1, _Float16 __h2, _Float16 __h3, _Float16 _Float16 __h5, _Float16 __h6, _Float16 __h7, _Float16 __h8, _Float16 __h9, _Float16 __h10, _Float16 __h11, _Float16 __h12, _Float16 __h13, _Float16 __h14, _Float16 __h15, _Float16 __h16) { - // CHECK-LABEL: @test_mm256_set_ph + // CHECK-LABEL: test_mm256_set_ph // CHECK: insertelement <16 x half> {{.*}}, i32 0 // CHECK: insertelement <16 x half> {{.*}}, i32 1 // CHECK: insertelement <16 x half> {{.*}}, i32 2 @@ -124,7 +134,7 @@ __m256h test_mm256_set_ph(_Float16 __h1, _Float16 __h2, _Float16 __h3, _Float16 __m128h test_mm_setr_ph(_Float16 __h1, _Float16 __h2, _Float16 __h3, _Float16 __h4, _Float16 __h5, _Float16 __h6, _Float16 __h7, _Float16 __h8) { - // CHECK-LABEL: @test_mm_setr_ph + // CHECK-LABEL: test_mm_setr_ph // CHECK: insertelement <8 x half> {{.*}}, i32 0 // CHECK: insertelement <8 x half> {{.*}}, i32 1 // CHECK: insertelement <8 x half> {{.*}}, i32 2 @@ -140,7 +150,7 @@ __m256h test_mm256_setr_ph(_Float16 __h1, _Float16 __h2, _Float16 __h3, _Float16 _Float16 __h5, _Float16 __h6, _Float16 __h7, _Float16 __h8, _Float16 __h9, _Float16 __h10, _Float16 __h11, _Float16 __h12, _Float16 __h13, _Float16 __h14, _Float16 __h15, _Float16 __h16) { - // CHECK-LABEL: @test_mm256_setr_ph + // CHECK-LABEL: test_mm256_setr_ph // CHECK: insertelement <16 x half> {{.*}}, i32 0 // CHECK: insertelement <16 x half> {{.*}}, i32 1 // CHECK: insertelement <16 x half> {{.*}}, i32 2 @@ -162,251 +172,253 @@ __m256h test_mm256_setr_ph(_Float16 __h1, _Float16 __h2, _Float16 __h3, _Float16 } __m256h test_mm256_add_ph(__m256h __A, __m256h __B) { - // CHECK-LABEL: @test_mm256_add_ph + // CHECK-LABEL: test_mm256_add_ph // CHECK: %{{.*}} = fadd <16 x half> %{{.*}}, %{{.*}} return _mm256_add_ph(__A, __B); } __m256h test_mm256_mask_add_ph(__m256h __W, __mmask32 __U, __m256h __A, __m256h __B) { - // CHECK-LABEL: @test_mm256_mask_add_ph + // CHECK-LABEL: test_mm256_mask_add_ph // CHECK: %{{.*}} = fadd <16 x half> %{{.*}}, %{{.*}} // CHECK: select <16 x i1> %{{.*}}, <16 x half> %{{.*}}, <16 x half> %{{.*}} return (__m256h)_mm256_mask_add_ph(__W, __U, __A, __B); } __m256h test_mm256_maskz_add_ph(__mmask32 __U, __m256h __A, __m256h __B) { - // CHECK-LABEL: @test_mm256_maskz_add_ph + // CHECK-LABEL: test_mm256_maskz_add_ph // CHECK: %{{.*}} = fadd <16 x half> %{{.*}}, %{{.*}} // CHECK: select <16 x i1> %{{.*}}, <16 x half> %{{.*}}, <16 x half> %{{.*}} return _mm256_maskz_add_ph(__U, __A, __B); } __m128h test_mm_add_ph(__m128h __A, __m128h __B) { - // CHECK-LABEL: @test_mm_add_ph + // CHECK-LABEL: test_mm_add_ph // CHECK: %{{.*}} = fadd <8 x half> %{{.*}}, %{{.*}} return _mm_add_ph(__A, __B); } __m128h test_mm_mask_add_ph(__m128h __W, __mmask32 __U, __m128h __A, __m128h __B) { - // CHECK-LABEL: @test_mm_mask_add_ph + // CHECK-LABEL: test_mm_mask_add_ph // CHECK: %{{.*}} = fadd <8 x half> %{{.*}}, %{{.*}} // CHECK: select <8 x i1> %{{.*}}, <8 x half> %{{.*}}, <8 x half> %{{.*}} return (__m128h)_mm_mask_add_ph(__W, __U, __A, __B); } __m128h test_mm_maskz_add_ph(__mmask32 __U, __m128h __A, __m128h __B) { - // CHECK-LABEL: @test_mm_maskz_add_ph + // CHECK-LABEL: test_mm_maskz_add_ph // CHECK: %{{.*}} = fadd <8 x half> %{{.*}}, %{{.*}} // CHECK: select <8 x i1> %{{.*}}, <8 x half> %{{.*}}, <8 x half> %{{.*}} return _mm_maskz_add_ph(__U, __A, __B); } __m256h test_mm256_sub_ph(__m256h __A, __m256h __B) { - // CHECK-LABEL: @test_mm256_sub_ph + // CHECK-LABEL: test_mm256_sub_ph // CHECK: %{{.*}} = fsub <16 x half> %{{.*}}, %{{.*}} return _mm256_sub_ph(__A, __B); } __m256h test_mm256_mask_sub_ph(__m256h __W, __mmask32 __U, __m256h __A, __m256h __B) { - // CHECK-LABEL: @test_mm256_mask_sub_ph + // CHECK-LABEL: test_mm256_mask_sub_ph // CHECK: %{{.*}} = fsub <16 x half> %{{.*}}, %{{.*}} // CHECK: select <16 x i1> %{{.*}}, <16 x half> %{{.*}}, <16 x half> %{{.*}} return (__m256h)_mm256_mask_sub_ph(__W, __U, __A, __B); } __m256h test_mm256_maskz_sub_ph(__mmask32 __U, __m256h __A, __m256h __B) { - // CHECK-LABEL: @test_mm256_maskz_sub_ph + // CHECK-LABEL: test_mm256_maskz_sub_ph // CHECK: %{{.*}} = fsub <16 x half> %{{.*}}, %{{.*}} // CHECK: select <16 x i1> %{{.*}}, <16 x half> %{{.*}}, <16 x half> %{{.*}} return _mm256_maskz_sub_ph(__U, __A, __B); } __m128h test_mm_sub_ph(__m128h __A, __m128h __B) { - // CHECK-LABEL: @test_mm_sub_ph + // CHECK-LABEL: test_mm_sub_ph // CHECK: %{{.*}} = fsub <8 x half> %{{.*}}, %{{.*}} return _mm_sub_ph(__A, __B); } __m128h test_mm_mask_sub_ph(__m128h __W, __mmask32 __U, __m128h __A, __m128h __B) { - // CHECK-LABEL: @test_mm_mask_sub_ph + // CHECK-LABEL: test_mm_mask_sub_ph // CHECK: %{{.*}} = fsub <8 x half> %{{.*}}, %{{.*}} // CHECK: select <8 x i1> %{{.*}}, <8 x half> %{{.*}}, <8 x half> %{{.*}} return (__m128h)_mm_mask_sub_ph(__W, __U, __A, __B); } __m128h test_mm_maskz_sub_ph(__mmask32 __U, __m128h __A, __m128h __B) { - // CHECK-LABEL: @test_mm_maskz_sub_ph + // CHECK-LABEL: test_mm_maskz_sub_ph // CHECK: %{{.*}} = fsub <8 x half> %{{.*}}, %{{.*}} // CHECK: select <8 x i1> %{{.*}}, <8 x half> %{{.*}}, <8 x half> %{{.*}} return _mm_maskz_sub_ph(__U, __A, __B); } __m256h test_mm256_mul_ph(__m256h __A, __m256h __B) { - // CHECK-LABEL: @test_mm256_mul_ph + // CHECK-LABEL: test_mm256_mul_ph // CHECK: %{{.*}} = fmul <16 x half> %{{.*}}, %{{.*}} return _mm256_mul_ph(__A, __B); } __m256h test_mm256_mask_mul_ph(__m256h __W, __mmask32 __U, __m256h __A, __m256h __B) { - // CHECK-LABEL: @test_mm256_mask_mul_ph + // CHECK-LABEL: test_mm256_mask_mul_ph // CHECK: %{{.*}} = fmul <16 x half> %{{.*}}, %{{.*}} // CHECK: select <16 x i1> %{{.*}}, <16 x half> %{{.*}}, <16 x half> %{{.*}} return (__m256h)_mm256_mask_mul_ph(__W, __U, __A, __B); } __m256h test_mm256_maskz_mul_ph(__mmask32 __U, __m256h __A, __m256h __B) { - // CHECK-LABEL: @test_mm256_maskz_mul_ph + // CHECK-LABEL: test_mm256_maskz_mul_ph // CHECK: %{{.*}} = fmul <16 x half> %{{.*}}, %{{.*}} // CHECK: select <16 x i1> %{{.*}}, <16 x half> %{{.*}}, <16 x half> %{{.*}} return _mm256_maskz_mul_ph(__U, __A, __B); } __m128h test_mm_mul_ph(__m128h __A, __m128h __B) { - // CHECK-LABEL: @test_mm_mul_ph + // CHECK-LABEL: test_mm_mul_ph // CHECK: %{{.*}} = fmul <8 x half> %{{.*}}, %{{.*}} return _mm_mul_ph(__A, __B); } __m128h test_mm_mask_mul_ph(__m128h __W, __mmask32 __U, __m128h __A, __m128h __B) { - // CHECK-LABEL: @test_mm_mask_mul_ph + // CHECK-LABEL: test_mm_mask_mul_ph // CHECK: %{{.*}} = fmul <8 x half> %{{.*}}, %{{.*}} // CHECK: select <8 x i1> %{{.*}}, <8 x half> %{{.*}}, <8 x half> %{{.*}} return (__m128h)_mm_mask_mul_ph(__W, __U, __A, __B); } __m128h test_mm_maskz_mul_ph(__mmask32 __U, __m128h __A, __m128h __B) { - // CHECK-LABEL: @test_mm_maskz_mul_ph + // CHECK-LABEL: test_mm_maskz_mul_ph // CHECK: %{{.*}} = fmul <8 x half> %{{.*}}, %{{.*}} // CHECK: select <8 x i1> %{{.*}}, <8 x half> %{{.*}}, <8 x half> %{{.*}} return _mm_maskz_mul_ph(__U, __A, __B); } __m256h test_mm256_div_ph(__m256h __A, __m256h __B) { - // CHECK-LABEL: @test_mm256_div_ph + // CHECK-LABEL: test_mm256_div_ph // CHECK: %{{.*}} = fdiv <16 x half> %{{.*}}, %{{.*}} return _mm256_div_ph(__A, __B); } __m256h test_mm256_mask_div_ph(__m256h __W, __mmask32 __U, __m256h __A, __m256h __B) { - // CHECK-LABEL: @test_mm256_mask_div_ph + // CHECK-LABEL: test_mm256_mask_div_ph // CHECK: %{{.*}} = fdiv <16 x half> %{{.*}}, %{{.*}} // CHECK: select <16 x i1> %{{.*}}, <16 x half> %{{.*}}, <16 x half> %{{.*}} return (__m256h)_mm256_mask_div_ph(__W, __U, __A, __B); } __m256h test_mm256_maskz_div_ph(__mmask32 __U, __m256h __A, __m256h __B) { - // CHECK-LABEL: @test_mm256_maskz_div_ph + // CHECK-LABEL: test_mm256_maskz_div_ph // CHECK: %{{.*}} = fdiv <16 x half> %{{.*}}, %{{.*}} // CHECK: select <16 x i1> %{{.*}}, <16 x half> %{{.*}}, <16 x half> %{{.*}} return _mm256_maskz_div_ph(__U, __A, __B); } __m128h test_mm_div_ph(__m128h __A, __m128h __B) { - // CHECK-LABEL: @test_mm_div_ph + // CHECK-LABEL: test_mm_div_ph // CHECK: %{{.*}} = fdiv <8 x half> %{{.*}}, %{{.*}} return _mm_div_ph(__A, __B); } __m128h test_mm_mask_div_ph(__m128h __W, __mmask32 __U, __m128h __A, __m128h __B) { - // CHECK-LABEL: @test_mm_mask_div_ph + // CHECK-LABEL: test_mm_mask_div_ph // CHECK: %{{.*}} = fdiv <8 x half> %{{.*}}, %{{.*}} // CHECK: select <8 x i1> %{{.*}}, <8 x half> %{{.*}}, <8 x half> %{{.*}} return (__m128h)_mm_mask_div_ph(__W, __U, __A, __B); } __m128h test_mm_maskz_div_ph(__mmask32 __U, __m128h __A, __m128h __B) { - // CHECK-LABEL: @test_mm_maskz_div_ph + // CHECK-LABEL: test_mm_maskz_div_ph // CHECK: %{{.*}} = fdiv <8 x half> %{{.*}}, %{{.*}} // CHECK: select <8 x i1> %{{.*}}, <8 x half> %{{.*}}, <8 x half> %{{.*}} return _mm_maskz_div_ph(__U, __A, __B); } __m256h test_mm256_min_ph(__m256h __A, __m256h __B) { - // CHECK-LABEL: @test_mm256_min_ph + // CHECK-LABEL: test_mm256_min_ph // CHECK: @llvm.x86.avx512fp16.min.ph.256 return _mm256_min_ph(__A, __B); } __m256h test_mm256_mask_min_ph(__m256h __W, __mmask32 __U, __m256h __A, __m256h __B) { - // CHECK-LABEL: @test_mm256_mask_min_ph + // CHECK-LABEL: test_mm256_mask_min_ph // CHECK: @llvm.x86.avx512fp16.min.ph.256 return (__m256h)_mm256_mask_min_ph(__W, __U, __A, __B); } __m256h test_mm256_maskz_min_ph(__mmask32 __U, __m256h __A, __m256h __B) { - // CHECK-LABEL: @test_mm256_maskz_min_ph + // CHECK-LABEL: test_mm256_maskz_min_ph // CHECK: @llvm.x86.avx512fp16.min.ph.256 return _mm256_maskz_min_ph(__U, __A, __B); } __m128h test_mm_min_ph(__m128h __A, __m128h __B) { - // CHECK-LABEL: @test_mm_min_ph + // CHECK-LABEL: test_mm_min_ph // CHECK: @llvm.x86.avx512fp16.min.ph.128 return _mm_min_ph(__A, __B); } __m128h test_mm_mask_min_ph(__m128h __W, __mmask32 __U, __m128h __A, __m128h __B) { - // CHECK-LABEL: @test_mm_mask_min_ph + // CHECK-LABEL: test_mm_mask_min_ph // CHECK: @llvm.x86.avx512fp16.min.ph.128 return (__m128h)_mm_mask_min_ph(__W, __U, __A, __B); } __m128h test_mm_maskz_min_ph(__mmask32 __U, __m128h __A, __m128h __B) { - // CHECK-LABEL: @test_mm_maskz_min_ph + // CHECK-LABEL: test_mm_maskz_min_ph // CHECK: @llvm.x86.avx512fp16.min.ph.128 return _mm_maskz_min_ph(__U, __A, __B); } __m256h test_mm256_max_ph(__m256h __A, __m256h __B) { - // CHECK-LABEL: @test_mm256_max_ph + // CHECK-LABEL: test_mm256_max_ph // CHECK: @llvm.x86.avx512fp16.max.ph.256 return _mm256_max_ph(__A, __B); } __m256h test_mm256_mask_max_ph(__m256h __W, __mmask32 __U, __m256h __A, __m256h __B) { - // CHECK-LABEL: @test_mm256_mask_max_ph + // CHECK-LABEL: test_mm256_mask_max_ph // CHECK: @llvm.x86.avx512fp16.max.ph.256 return (__m256h)_mm256_mask_max_ph(__W, __U, __A, __B); } __m256h test_mm256_maskz_max_ph(__mmask32 __U, __m256h __A, __m256h __B) { - // CHECK-LABEL: @test_mm256_maskz_max_ph + // CHECK-LABEL: test_mm256_maskz_max_ph // CHECK: @llvm.x86.avx512fp16.max.ph.256 return _mm256_maskz_max_ph(__U, __A, __B); } __m128h test_mm_max_ph(__m128h __A, __m128h __B) { - // CHECK-LABEL: @test_mm_max_ph + // CHECK-LABEL: test_mm_max_ph // CHECK: @llvm.x86.avx512fp16.max.ph.128 return _mm_max_ph(__A, __B); } __m128h test_mm_mask_max_ph(__m128h __W, __mmask32 __U, __m128h __A, __m128h __B) { - // CHECK-LABEL: @test_mm_mask_max_ph + // CHECK-LABEL: test_mm_mask_max_ph // CHECK: @llvm.x86.avx512fp16.max.ph.128 return (__m128h)_mm_mask_max_ph(__W, __U, __A, __B); } __m128h test_mm_maskz_max_ph(__mmask32 __U, __m128h __A, __m128h __B) { - // CHECK-LABEL: @test_mm_maskz_max_ph + // CHECK-LABEL: test_mm_maskz_max_ph // CHECK: @llvm.x86.avx512fp16.max.ph.128 return _mm_maskz_max_ph(__U, __A, __B); } __m128h test_mm_abs_ph(__m128h a) { - // CHECK-LABEL: @test_mm_abs_ph + // CHECK-LABEL: test_mm_abs_ph // CHECK: and <4 x i32> return _mm_abs_ph(a); } +TEST_CONSTEXPR(match_m128h(_mm_abs_ph((__m128h){-1.0, 2.0, -3.0, 4.0, -5.0, 6.0, -7.0, 8.0}), 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0)); __m256h test_mm256_abs_ph(__m256h a) { - // CHECK-LABEL: @test_mm256_abs_ph + // CHECK-LABEL: test_mm256_abs_ph // CHECK: and <8 x i32> return _mm256_abs_ph(a); } +TEST_CONSTEXPR(match_m256h(_mm256_abs_ph((__m256h){-1.0, 2.0, -3.0, 4.0, -5.0, 6.0, -7.0, 8.0, -9.0, 10.0, -11.0, 12.0, -13.0, 14.0, -15.0, 16.0}), 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0, 13.0, 14.0, 15.0, 16.0)); __m256h test_mm256_conj_pch(__m256h __A) { - // CHECK-LABEL: @test_mm256_conj_pch + // CHECK-LABEL: test_mm256_conj_pch // CHECK: %{{.*}} = bitcast <16 x half> %{{.*}} to <8 x float> // CHECK: %{{.*}} = bitcast <8 x float> %{{.*}} to <8 x i32> // CHECK: %{{.*}} = bitcast <8 x float> %{{.*}} to <8 x i32> @@ -417,7 +429,7 @@ __m256h test_mm256_conj_pch(__m256h __A) { } __m256h test_mm256_mask_conj_pch(__m256h __W, __mmask32 __U, __m256h __A) { - // CHECK-LABEL: @test_mm256_mask_conj_pch + // CHECK-LABEL: test_mm256_mask_conj_pch // CHECK: %{{.*}} = trunc i32 %{{.*}} to i8 // CHECK: %{{.*}} = bitcast <16 x half> %{{.*}} to <8 x float> // CHECK: %{{.*}} = bitcast <8 x float> %{{.*}} to <8 x i32> @@ -433,7 +445,7 @@ __m256h test_mm256_mask_conj_pch(__m256h __W, __mmask32 __U, __m256h __A) { } __m256h test_mm256_maskz_conj_pch(__mmask32 __U, __m256h __A) { - // CHECK-LABEL: @test_mm256_maskz_conj_pch + // CHECK-LABEL: test_mm256_maskz_conj_pch // CHECK: %{{.*}} = trunc i32 %{{.*}} to i8 // CHECK: %{{.*}} = bitcast <16 x half> %{{.*}} to <8 x float> // CHECK: %{{.*}} = bitcast <8 x float> %{{.*}} to <8 x i32> @@ -448,7 +460,7 @@ __m256h test_mm256_maskz_conj_pch(__mmask32 __U, __m256h __A) { } __m128h test_mm_conj_pch(__m128h __A) { - // CHECK-LABEL: @test_mm_conj_pch + // CHECK-LABEL: test_mm_conj_pch // CHECK: %{{.*}} = bitcast <8 x half> %{{.*}} to <4 x float> // CHECK: %{{.*}} = bitcast <4 x float> %{{.*}} to <4 x i32> // CHECK: %{{.*}} = bitcast <4 x float> %{{.*}} to <4 x i32> @@ -459,7 +471,7 @@ __m128h test_mm_conj_pch(__m128h __A) { } __m128h test_mm_mask_conj_pch(__m128h __W, __mmask32 __U, __m128h __A) { - // CHECK-LABEL: @test_mm_mask_conj_pch + // CHECK-LABEL: test_mm_mask_conj_pch // CHECK: %{{.*}} = trunc i32 %{{.*}} to i8 // CHECK: %{{.*}} = bitcast <8 x half> %{{.*}} to <4 x float> // CHECK: %{{.*}} = bitcast <4 x float> %{{.*}} to <4 x i32> @@ -476,7 +488,7 @@ __m128h test_mm_mask_conj_pch(__m128h __W, __mmask32 __U, __m128h __A) { } __m128h test_mm_maskz_conj_pch(__mmask32 __U, __m128h __A) { - // CHECK-LABEL: @test_mm_maskz_conj_pch + // CHECK-LABEL: test_mm_maskz_conj_pch // CHECK: %{{.*}} = trunc i32 %{{.*}} to i8 // CHECK: %{{.*}} = bitcast <8 x half> %{{.*}} to <4 x float> // CHECK: %{{.*}} = bitcast <4 x float> %{{.*}} to <4 x i32> @@ -492,7 +504,7 @@ __m128h test_mm_maskz_conj_pch(__mmask32 __U, __m128h __A) { } __mmask16 test_mm256_cmp_ph_mask_eq_oq(__m256h a, __m256h b) { - // CHECK-LABEL: @test_mm256_cmp_ph_mask_eq_oq + // CHECK-LABEL: test_mm256_cmp_ph_mask_eq_oq // CHECK: fcmp oeq <16 x half> %{{.*}}, %{{.*}} return _mm256_cmp_ph_mask(a, b, _CMP_EQ_OQ); } @@ -684,7 +696,7 @@ __mmask16 test_mm256_cmp_ph_mask_true_us(__m256h a, __m256h b) { } __mmask16 test_mm256_mask_cmp_ph_mask_eq_oq(__mmask16 m, __m256h a, __m256h b) { - // CHECK-LABEL: @test_mm256_mask_cmp_ph_mask_eq_oq + // CHECK-LABEL: test_mm256_mask_cmp_ph_mask_eq_oq // CHECK: [[CMP:%.*]] = fcmp oeq <16 x half> %{{.*}}, %{{.*}} // CHECK: and <16 x i1> [[CMP]], {{.*}} return _mm256_mask_cmp_ph_mask(m, a, b, _CMP_EQ_OQ); @@ -908,7 +920,7 @@ __mmask16 test_mm256_mask_cmp_ph_mask_true_us(__mmask16 m, __m256h a, __m256h b) } __mmask8 test_mm_cmp_ph_mask_eq_oq(__m128h a, __m128h b) { - // CHECK-LABEL: @test_mm_cmp_ph_mask_eq_oq + // CHECK-LABEL: test_mm_cmp_ph_mask_eq_oq // CHECK: fcmp oeq <8 x half> %{{.*}}, %{{.*}} return _mm_cmp_ph_mask(a, b, _CMP_EQ_OQ); } @@ -1100,7 +1112,7 @@ __mmask8 test_mm_cmp_ph_mask_true_us(__m128h a, __m128h b) { } __mmask8 test_mm_mask_cmp_ph_mask_eq_oq(__mmask8 m, __m128h a, __m128h b) { - // CHECK-LABEL: @test_mm_mask_cmp_ph_mask_eq_oq + // CHECK-LABEL: test_mm_mask_cmp_ph_mask_eq_oq // CHECK: [[CMP:%.*]] = fcmp oeq <8 x half> %{{.*}}, %{{.*}} // CHECK: and <8 x i1> [[CMP]], {{.*}} return _mm_mask_cmp_ph_mask(m, a, b, _CMP_EQ_OQ); @@ -1324,315 +1336,315 @@ __mmask8 test_mm_mask_cmp_ph_mask_true_us(__mmask8 m, __m128h a, __m128h b) { } __m256h test_mm256_rcp_ph(__m256h __A) { - // CHECK-LABEL: @test_mm256_rcp_ph + // CHECK-LABEL: test_mm256_rcp_ph // CHECK: @llvm.x86.avx512fp16.mask.rcp.ph.256 return _mm256_rcp_ph(__A); } __m256h test_mm256_mask_rcp_ph(__m256h __W, __mmask32 __U, __m256h __A) { - // CHECK-LABEL: @test_mm256_mask_rcp_ph + // CHECK-LABEL: test_mm256_mask_rcp_ph // CHECK: @llvm.x86.avx512fp16.mask.rcp.ph.256 return (__m256h)_mm256_mask_rcp_ph(__W, __U, __A); } __m256h test_mm256_maskz_rcp_ph(__mmask32 __U, __m256h __A) { - // CHECK-LABEL: @test_mm256_maskz_rcp_ph + // CHECK-LABEL: test_mm256_maskz_rcp_ph // CHECK: @llvm.x86.avx512fp16.mask.rcp.ph.256 return _mm256_maskz_rcp_ph(__U, __A); } __m128h test_mm_rcp_ph(__m128h __A) { - // CHECK-LABEL: @test_mm_rcp_ph + // CHECK-LABEL: test_mm_rcp_ph // CHECK: @llvm.x86.avx512fp16.mask.rcp.ph.128 return _mm_rcp_ph(__A); } __m128h test_mm_mask_rcp_ph(__m128h __W, __mmask32 __U, __m128h __A) { - // CHECK-LABEL: @test_mm_mask_rcp_ph + // CHECK-LABEL: test_mm_mask_rcp_ph // CHECK: @llvm.x86.avx512fp16.mask.rcp.ph.128 return (__m128h)_mm_mask_rcp_ph(__W, __U, __A); } __m128h test_mm_maskz_rcp_ph(__mmask32 __U, __m128h __A) { - // CHECK-LABEL: @test_mm_maskz_rcp_ph + // CHECK-LABEL: test_mm_maskz_rcp_ph // CHECK: @llvm.x86.avx512fp16.mask.rcp.ph.128 return _mm_maskz_rcp_ph(__U, __A); } __m256h test_mm256_rsqrt_ph(__m256h __A) { - // CHECK-LABEL: @test_mm256_rsqrt_ph + // CHECK-LABEL: test_mm256_rsqrt_ph // CHECK: @llvm.x86.avx512fp16.mask.rsqrt.ph.256 return _mm256_rsqrt_ph(__A); } __m256h test_mm256_mask_rsqrt_ph(__m256h __W, __mmask16 __U, __m256h __A) { - // CHECK-LABEL: @test_mm256_mask_rsqrt_ph + // CHECK-LABEL: test_mm256_mask_rsqrt_ph // CHECK: @llvm.x86.avx512fp16.mask.rsqrt.ph.256 return (__m256h)_mm256_mask_rsqrt_ph(__W, __U, __A); } __m256h test_mm256_maskz_rsqrt_ph(__mmask16 __U, __m256h __A) { - // CHECK-LABEL: @test_mm256_maskz_rsqrt_ph + // CHECK-LABEL: test_mm256_maskz_rsqrt_ph // CHECK: @llvm.x86.avx512fp16.mask.rsqrt.ph.256 return _mm256_maskz_rsqrt_ph(__U, __A); } __m128h test_mm_rsqrt_ph(__m128h __A) { - // CHECK-LABEL: @test_mm_rsqrt_ph + // CHECK-LABEL: test_mm_rsqrt_ph // CHECK: @llvm.x86.avx512fp16.mask.rsqrt.ph.128 return _mm_rsqrt_ph(__A); } __m128h test_mm_mask_rsqrt_ph(__m128h __W, __mmask32 __U, __m128h __A) { - // CHECK-LABEL: @test_mm_mask_rsqrt_ph + // CHECK-LABEL: test_mm_mask_rsqrt_ph // CHECK: @llvm.x86.avx512fp16.mask.rsqrt.ph.128 return (__m128h)_mm_mask_rsqrt_ph(__W, __U, __A); } __m128h test_mm_maskz_rsqrt_ph(__mmask32 __U, __m128h __A) { - // CHECK-LABEL: @test_mm_maskz_rsqrt_ph + // CHECK-LABEL: test_mm_maskz_rsqrt_ph // CHECK: @llvm.x86.avx512fp16.mask.rsqrt.ph.128 return _mm_maskz_rsqrt_ph(__U, __A); } __m128h test_mm_getmant_ph(__m128h __A) { - // CHECK-LABEL: @test_mm_getmant_ph + // CHECK-LABEL: test_mm_getmant_ph // CHECK: @llvm.x86.avx512fp16.mask.getmant.ph.128 return _mm_getmant_ph(__A, _MM_MANT_NORM_p5_2, _MM_MANT_SIGN_nan); } __m128h test_mm_mask_getmant_ph(__m128h __W, __mmask8 __U, __m128h __A) { - // CHECK-LABEL: @test_mm_mask_getmant_ph + // CHECK-LABEL: test_mm_mask_getmant_ph // CHECK: @llvm.x86.avx512fp16.mask.getmant.ph.128 return _mm_mask_getmant_ph(__W, __U, __A, _MM_MANT_NORM_p5_2, _MM_MANT_SIGN_nan); } __m128h test_mm_maskz_getmant_ph(__mmask8 __U, __m128h __A) { - // CHECK-LABEL: @test_mm_maskz_getmant_ph + // CHECK-LABEL: test_mm_maskz_getmant_ph // CHECK: @llvm.x86.avx512fp16.mask.getmant.ph.128 return _mm_maskz_getmant_ph(__U, __A, _MM_MANT_NORM_p5_2, _MM_MANT_SIGN_nan); } __m256h test_mm256_getmant_ph(__m256h __A) { - // CHECK-LABEL: @test_mm256_getmant_ph + // CHECK-LABEL: test_mm256_getmant_ph // CHECK: @llvm.x86.avx512fp16.mask.getmant.ph.256 return _mm256_getmant_ph(__A, _MM_MANT_NORM_p5_2, _MM_MANT_SIGN_nan); } __m256h test_mm256_mask_getmant_ph(__m256h __W, __mmask16 __U, __m256h __A) { - // CHECK-LABEL: @test_mm256_mask_getmant_ph + // CHECK-LABEL: test_mm256_mask_getmant_ph // CHECK: @llvm.x86.avx512fp16.mask.getmant.ph.256 return _mm256_mask_getmant_ph(__W, __U, __A, _MM_MANT_NORM_p5_2, _MM_MANT_SIGN_nan); } __m256h test_mm256_maskz_getmant_ph(__mmask16 __U, __m256h __A) { - // CHECK-LABEL: @test_mm256_maskz_getmant_ph + // CHECK-LABEL: test_mm256_maskz_getmant_ph // CHECK: @llvm.x86.avx512fp16.mask.getmant.ph.256 return _mm256_maskz_getmant_ph(__U, __A, _MM_MANT_NORM_p5_2, _MM_MANT_SIGN_nan); } __m128h test_mm_getexp_ph(__m128h __A) { - // CHECK-LABEL: @test_mm_getexp_ph + // CHECK-LABEL: test_mm_getexp_ph // CHECK: @llvm.x86.avx512fp16.mask.getexp.ph.128 return _mm_getexp_ph(__A); } __m128h test_mm_mask_getexp_ph(__m128h __W, __mmask8 __U, __m128h __A) { - // CHECK-LABEL: @test_mm_mask_getexp_ph + // CHECK-LABEL: test_mm_mask_getexp_ph // CHECK: @llvm.x86.avx512fp16.mask.getexp.ph.128 return _mm_mask_getexp_ph(__W, __U, __A); } __m128h test_mm_maskz_getexp_ph(__mmask8 __U, __m128h __A) { - // CHECK-LABEL: @test_mm_maskz_getexp_ph + // CHECK-LABEL: test_mm_maskz_getexp_ph // CHECK: @llvm.x86.avx512fp16.mask.getexp.ph.128 return _mm_maskz_getexp_ph(__U, __A); } __m256h test_mm256_getexp_ph(__m256h __A) { - // CHECK-LABEL: @test_mm256_getexp_ph + // CHECK-LABEL: test_mm256_getexp_ph // CHECK: @llvm.x86.avx512fp16.mask.getexp.ph.256 return _mm256_getexp_ph(__A); } __m256h test_mm256_mask_getexp_ph(__m256h __W, __mmask16 __U, __m256h __A) { - // CHECK-LABEL: @test_mm256_mask_getexp_ph + // CHECK-LABEL: test_mm256_mask_getexp_ph // CHECK: @llvm.x86.avx512fp16.mask.getexp.ph.256 return _mm256_mask_getexp_ph(__W, __U, __A); } __m256h test_mm256_maskz_getexp_ph(__mmask16 __U, __m256h __A) { - // CHECK-LABEL: @test_mm256_maskz_getexp_ph + // CHECK-LABEL: test_mm256_maskz_getexp_ph // CHECK: @llvm.x86.avx512fp16.mask.getexp.ph.256 return _mm256_maskz_getexp_ph(__U, __A); } __m128h test_mm_scalef_ph(__m128h __A, __m128h __B) { - // CHECK-LABEL: @test_mm_scalef_ph + // CHECK-LABEL: test_mm_scalef_ph // CHECK: @llvm.x86.avx512fp16.mask.scalef.ph.128 return _mm_scalef_ph(__A, __B); } __m128h test_mm_mask_scalef_ph(__m128h __W, __mmask8 __U, __m128h __A, __m128h __B) { - // CHECK-LABEL: @test_mm_mask_scalef_ph + // CHECK-LABEL: test_mm_mask_scalef_ph // CHECK: @llvm.x86.avx512fp16.mask.scalef.ph.128 return _mm_mask_scalef_ph(__W, __U, __A, __B); } __m128h test_mm_maskz_scalef_ph(__mmask8 __U, __m128h __A, __m128h __B) { - // CHECK-LABEL: @test_mm_maskz_scalef_ph + // CHECK-LABEL: test_mm_maskz_scalef_ph // CHECK: @llvm.x86.avx512fp16.mask.scalef.ph.128 return _mm_maskz_scalef_ph(__U, __A, __B); } __m256h test_mm256_scalef_ph(__m256h __A, __m256h __B) { - // CHECK-LABEL: @test_mm256_scalef_ph + // CHECK-LABEL: test_mm256_scalef_ph // CHECK: @llvm.x86.avx512fp16.mask.scalef.ph.256 return _mm256_scalef_ph(__A, __B); } __m256h test_mm256_mask_scalef_ph(__m256h __W, __mmask16 __U, __m256h __A, __m256h __B) { - // CHECK-LABEL: @test_mm256_mask_scalef_ph + // CHECK-LABEL: test_mm256_mask_scalef_ph // CHECK: @llvm.x86.avx512fp16.mask.scalef.ph.256 return _mm256_mask_scalef_ph(__W, __U, __A, __B); } __m256h test_mm256_maskz_scalef_ph(__mmask16 __U, __m256h __A, __m256h __B) { - // CHECK-LABEL: @test_mm256_maskz_scalef_ph + // CHECK-LABEL: test_mm256_maskz_scalef_ph // CHECK: @llvm.x86.avx512fp16.mask.scalef.ph.256 return _mm256_maskz_scalef_ph(__U, __A, __B); } __m128h test_mm_roundscale_ph(__m128h __A) { - // CHECK-LABEL: @test_mm_roundscale_ph + // CHECK-LABEL: test_mm_roundscale_ph // CHECK: @llvm.x86.avx512fp16.mask.rndscale.ph.128 return _mm_roundscale_ph(__A, 4); } __m128h test_mm_mask_roundscale_ph(__m128h __W, __mmask8 __U, __m128h __A) { - // CHECK-LABEL: @test_mm_mask_roundscale_ph + // CHECK-LABEL: test_mm_mask_roundscale_ph // CHECK: @llvm.x86.avx512fp16.mask.rndscale.ph.128 return _mm_mask_roundscale_ph(__W, __U, __A, 4); } __m128h test_mm_maskz_roundscale_ph(__mmask8 __U, __m128h __A) { - // CHECK-LABEL: @test_mm_maskz_roundscale_ph + // CHECK-LABEL: test_mm_maskz_roundscale_ph // CHECK: @llvm.x86.avx512fp16.mask.rndscale.ph.128 return _mm_maskz_roundscale_ph(__U, __A, 4); } __m256h test_mm256_roundscale_ph(__m256h __A) { - // CHECK-LABEL: @test_mm256_roundscale_ph + // CHECK-LABEL: test_mm256_roundscale_ph // CHECK: @llvm.x86.avx512fp16.mask.rndscale.ph.256 return _mm256_roundscale_ph(__A, 4); } __m256h test_mm256_mask_roundscale_ph(__m256h __W, __mmask16 __U, __m256h __A) { - // CHECK-LABEL: @test_mm256_mask_roundscale_ph + // CHECK-LABEL: test_mm256_mask_roundscale_ph // CHECK: @llvm.x86.avx512fp16.mask.rndscale.ph.256 return _mm256_mask_roundscale_ph(__W, __U, __A, 4); } __m256h test_mm256_maskz_roundscale_ph(__mmask16 __U, __m256h __A) { - // CHECK-LABEL: @test_mm256_maskz_roundscale_ph + // CHECK-LABEL: test_mm256_maskz_roundscale_ph // CHECK: @llvm.x86.avx512fp16.mask.rndscale.ph.256 return _mm256_maskz_roundscale_ph(__U, __A, 4); } __m128h test_mm_reduce_ph(__m128h __A) { - // CHECK-LABEL: @test_mm_reduce_ph + // CHECK-LABEL: test_mm_reduce_ph // CHECK: @llvm.x86.avx512fp16.mask.reduce.ph.128 return _mm_reduce_ph(__A, 4); } __m128h test_mm_mask_reduce_ph(__m128h __W, __mmask8 __U, __m128h __A) { - // CHECK-LABEL: @test_mm_mask_reduce_ph + // CHECK-LABEL: test_mm_mask_reduce_ph // CHECK: @llvm.x86.avx512fp16.mask.reduce.ph.128 return _mm_mask_reduce_ph(__W, __U, __A, 4); } __m128h test_mm_maskz_reduce_ph(__mmask8 __U, __m128h __A) { - // CHECK-LABEL: @test_mm_maskz_reduce_ph + // CHECK-LABEL: test_mm_maskz_reduce_ph // CHECK: @llvm.x86.avx512fp16.mask.reduce.ph.128 return _mm_maskz_reduce_ph(__U, __A, 4); } __m256h test_mm256_reduce_ph(__m256h __A) { - // CHECK-LABEL: @test_mm256_reduce_ph + // CHECK-LABEL: test_mm256_reduce_ph // CHECK: @llvm.x86.avx512fp16.mask.reduce.ph.256 return _mm256_reduce_ph(__A, 4); } __m256h test_mm256_mask_reduce_ph(__m256h __W, __mmask16 __U, __m256h __A) { - // CHECK-LABEL: @test_mm256_mask_reduce_ph + // CHECK-LABEL: test_mm256_mask_reduce_ph // CHECK: @llvm.x86.avx512fp16.mask.reduce.ph.256 return _mm256_mask_reduce_ph(__W, __U, __A, 4); } __m256h test_mm256_maskz_reduce_ph(__mmask16 __U, __m256h __A) { - // CHECK-LABEL: @test_mm256_maskz_reduce_ph + // CHECK-LABEL: test_mm256_maskz_reduce_ph // CHECK: @llvm.x86.avx512fp16.mask.reduce.ph.256 return _mm256_maskz_reduce_ph(__U, __A, 4); } __m128h test_mm_sqrt_ph(__m128h x) { // CHECK-LABEL: test_mm_sqrt_ph - // CHECK: call <8 x half> @llvm.sqrt.v8f16(<8 x half> {{.*}}) + // CHECK: @llvm.sqrt.v8f16(<8 x half> {{.*}}) return _mm_sqrt_ph(x); } __m256h test_mm256_sqrt_ph(__m256h A) { // CHECK-LABEL: test_mm256_sqrt_ph - // CHECK: call <16 x half> @llvm.sqrt.v16f16(<16 x half> %{{.*}}) + // CHECK: @llvm.sqrt.v16f16(<16 x half> %{{.*}}) return _mm256_sqrt_ph(A); } __m128h test_mm_mask_sqrt_ph(__m128h __W, __mmask8 __U, __m128h __A) { - // CHECK-LABEL: @test_mm_mask_sqrt_ph + // CHECK-LABEL: test_mm_mask_sqrt_ph // CHECK: @llvm.sqrt.v8f16 // CHECK: select <8 x i1> %{{.*}}, <8 x half> %{{.*}}, <8 x half> %{{.*}} return _mm_mask_sqrt_ph(__W, __U, __A); } __m128h test_mm_maskz_sqrt_ph(__mmask8 __U, __m128h __A) { - // CHECK-LABEL: @test_mm_maskz_sqrt_ph + // CHECK-LABEL: test_mm_maskz_sqrt_ph // CHECK: @llvm.sqrt.v8f16 // CHECK: select <8 x i1> %{{.*}}, <8 x half> %{{.*}}, <8 x half> %{{.*}} return _mm_maskz_sqrt_ph(__U, __A); } __m256h test_mm256_mask_sqrt_ph(__m256h __W, __mmask16 __U, __m256h __A) { - // CHECK-LABEL: @test_mm256_mask_sqrt_ph + // CHECK-LABEL: test_mm256_mask_sqrt_ph // CHECK: @llvm.sqrt.v16f16 // CHECK: select <16 x i1> %{{.*}}, <16 x half> %{{.*}}, <16 x half> %{{.*}} return _mm256_mask_sqrt_ph(__W, __U, __A); } __m256h test_mm256_maskz_sqrt_ph(__mmask16 __U, __m256h __A) { - // CHECK-LABEL: @test_mm256_maskz_sqrt_ph + // CHECK-LABEL: test_mm256_maskz_sqrt_ph // CHECK: @llvm.sqrt.v16f16 // CHECK: select <16 x i1> %{{.*}}, <16 x half> %{{.*}}, <16 x half> %{{.*}} return _mm256_maskz_sqrt_ph(__U, __A); } __mmask8 test_mm_mask_fpclass_ph_mask(__mmask8 __U, __m128h __A) { - // CHECK-LABEL: @test_mm_mask_fpclass_ph_mask + // CHECK-LABEL: test_mm_mask_fpclass_ph_mask // CHECK: @llvm.x86.avx512fp16.fpclass.ph.128 return _mm_mask_fpclass_ph_mask(__U, __A, 2); } __mmask8 test_mm_fpclass_ph_mask(__m128h __A) { - // CHECK-LABEL: @test_mm_fpclass_ph_mask + // CHECK-LABEL: test_mm_fpclass_ph_mask // CHECK: @llvm.x86.avx512fp16.fpclass.ph.128 return _mm_fpclass_ph_mask(__A, 2); } __mmask16 test_mm256_mask_fpclass_ph_mask(__mmask16 __U, __m256h __A) { - // CHECK-LABEL: @test_mm256_mask_fpclass_ph_mask + // CHECK-LABEL: test_mm256_mask_fpclass_ph_mask // CHECK: @llvm.x86.avx512fp16.fpclass.ph.256 return _mm256_mask_fpclass_ph_mask(__U, __A, 2); } __mmask16 test_mm256_fpclass_ph_mask(__m256h __A) { - // CHECK-LABEL: @test_mm256_fpclass_ph_mask + // CHECK-LABEL: test_mm256_fpclass_ph_mask // CHECK: @llvm.x86.avx512fp16.fpclass.ph.256 return _mm256_fpclass_ph_mask(__A, 2); } @@ -2430,420 +2442,420 @@ __m128h test_mm256_maskz_cvtxps_ph(__mmask8 A, __m256 B) { } __m128h test_mm_fmadd_ph(__m128h __A, __m128h __B, __m128h __C) { - // CHECK-LABEL: @test_mm_fmadd_ph - // CHECK: call <8 x half> @llvm.fma.v8f16(<8 x half> %{{.*}}, <8 x half> %{{.*}}, <8 x half> %{{.*}}) + // CHECK-LABEL: test_mm_fmadd_ph + // CHECK: @llvm.fma.v8f16(<8 x half> %{{.*}}, <8 x half> %{{.*}}, <8 x half> %{{.*}}) return _mm_fmadd_ph(__A, __B, __C); } __m128h test_mm_mask_fmadd_ph(__m128h __A, __mmask8 __U, __m128h __B, __m128h __C) { - // CHECK-LABEL: @test_mm_mask_fmadd_ph - // CHECK: call <8 x half> @llvm.fma.v8f16(<8 x half> %{{.*}}, <8 x half> %{{.*}}, <8 x half> %{{.*}}) + // CHECK-LABEL: test_mm_mask_fmadd_ph + // CHECK: @llvm.fma.v8f16(<8 x half> %{{.*}}, <8 x half> %{{.*}}, <8 x half> %{{.*}}) // CHECK: select <8 x i1> %{{.*}}, <8 x half> %{{.*}}, <8 x half> %{{.*}} return _mm_mask_fmadd_ph(__A, __U, __B, __C); } __m128h test_mm_fmsub_ph(__m128h __A, __m128h __B, __m128h __C) { - // CHECK-LABEL: @test_mm_fmsub_ph + // CHECK-LABEL: test_mm_fmsub_ph // CHECK: fneg - // CHECK: call <8 x half> @llvm.fma.v8f16(<8 x half> %{{.*}}, <8 x half> %{{.*}}, <8 x half> %{{.*}}) + // CHECK: @llvm.fma.v8f16(<8 x half> %{{.*}}, <8 x half> %{{.*}}, <8 x half> %{{.*}}) return _mm_fmsub_ph(__A, __B, __C); } __m128h test_mm_mask_fmsub_ph(__m128h __A, __mmask8 __U, __m128h __B, __m128h __C) { - // CHECK-LABEL: @test_mm_mask_fmsub_ph + // CHECK-LABEL: test_mm_mask_fmsub_ph // CHECK: fneg - // CHECK: call <8 x half> @llvm.fma.v8f16(<8 x half> %{{.*}}, <8 x half> %{{.*}}, <8 x half> %{{.*}}) + // CHECK: @llvm.fma.v8f16(<8 x half> %{{.*}}, <8 x half> %{{.*}}, <8 x half> %{{.*}}) // CHECK: select <8 x i1> %{{.*}}, <8 x half> %{{.*}}, <8 x half> %{{.*}} return _mm_mask_fmsub_ph(__A, __U, __B, __C); } __m128h test_mm_mask3_fmadd_ph(__m128h __A, __m128h __B, __m128h __C, __mmask8 __U) { - // CHECK-LABEL: @test_mm_mask3_fmadd_ph - // CHECK: call <8 x half> @llvm.fma.v8f16(<8 x half> %{{.*}}, <8 x half> %{{.*}}, <8 x half> %{{.*}}) + // CHECK-LABEL: test_mm_mask3_fmadd_ph + // CHECK: @llvm.fma.v8f16(<8 x half> %{{.*}}, <8 x half> %{{.*}}, <8 x half> %{{.*}}) // CHECK: select <8 x i1> %{{.*}}, <8 x half> %{{.*}}, <8 x half> %{{.*}} return _mm_mask3_fmadd_ph(__A, __B, __C, __U); } __m128h test_mm_mask3_fnmadd_ph(__m128h __A, __m128h __B, __m128h __C, __mmask8 __U) { - // CHECK-LABEL: @test_mm_mask3_fnmadd_ph + // CHECK-LABEL: test_mm_mask3_fnmadd_ph // CHECK: fneg - // CHECK: call <8 x half> @llvm.fma.v8f16(<8 x half> %{{.*}}, <8 x half> %{{.*}}, <8 x half> %{{.*}}) + // CHECK: @llvm.fma.v8f16(<8 x half> %{{.*}}, <8 x half> %{{.*}}, <8 x half> %{{.*}}) // CHECK: select <8 x i1> %{{.*}}, <8 x half> %{{.*}}, <8 x half> %{{.*}} return _mm_mask3_fnmadd_ph(__A, __B, __C, __U); } __m128h test_mm_maskz_fmadd_ph(__mmask8 __U, __m128h __A, __m128h __B, __m128h __C) { - // CHECK-LABEL: @test_mm_maskz_fmadd_ph - // CHECK: call <8 x half> @llvm.fma.v8f16(<8 x half> %{{.*}}, <8 x half> %{{.*}}, <8 x half> %{{.*}}) + // CHECK-LABEL: test_mm_maskz_fmadd_ph + // CHECK: @llvm.fma.v8f16(<8 x half> %{{.*}}, <8 x half> %{{.*}}, <8 x half> %{{.*}}) // CHECK: select <8 x i1> %{{.*}}, <8 x half> %{{.*}}, <8 x half> %{{.*}} return _mm_maskz_fmadd_ph(__U, __A, __B, __C); } __m128h test_mm_maskz_fmsub_ph(__mmask8 __U, __m128h __A, __m128h __B, __m128h __C) { - // CHECK-LABEL: @test_mm_maskz_fmsub_ph + // CHECK-LABEL: test_mm_maskz_fmsub_ph // CHECK: fneg - // CHECK: call <8 x half> @llvm.fma.v8f16(<8 x half> %{{.*}}, <8 x half> %{{.*}}, <8 x half> %{{.*}}) + // CHECK: @llvm.fma.v8f16(<8 x half> %{{.*}}, <8 x half> %{{.*}}, <8 x half> %{{.*}}) // CHECK: select <8 x i1> %{{.*}}, <8 x half> %{{.*}}, <8 x half> %{{.*}} return _mm_maskz_fmsub_ph(__U, __A, __B, __C); } __m128h test_mm_maskz_fnmadd_ph(__mmask8 __U, __m128h __A, __m128h __B, __m128h __C) { - // CHECK-LABEL: @test_mm_maskz_fnmadd_ph + // CHECK-LABEL: test_mm_maskz_fnmadd_ph // CHECK: fneg - // CHECK: call <8 x half> @llvm.fma.v8f16(<8 x half> %{{.*}}, <8 x half> %{{.*}}, <8 x half> %{{.*}}) + // CHECK: @llvm.fma.v8f16(<8 x half> %{{.*}}, <8 x half> %{{.*}}, <8 x half> %{{.*}}) // CHECK: select <8 x i1> %{{.*}}, <8 x half> %{{.*}}, <8 x half> %{{.*}} return _mm_maskz_fnmadd_ph(__U, __A, __B, __C); } __m128h test_mm_maskz_fnmsub_ph(__mmask8 __U, __m128h __A, __m128h __B, __m128h __C) { - // CHECK-LABEL: @test_mm_maskz_fnmsub_ph + // CHECK-LABEL: test_mm_maskz_fnmsub_ph // CHECK: fneg // CHECK: fneg - // CHECK: call <8 x half> @llvm.fma.v8f16(<8 x half> %{{.*}}, <8 x half> %{{.*}}, <8 x half> %{{.*}}) + // CHECK: @llvm.fma.v8f16(<8 x half> %{{.*}}, <8 x half> %{{.*}}, <8 x half> %{{.*}}) // CHECK: select <8 x i1> %{{.*}}, <8 x half> %{{.*}}, <8 x half> %{{.*}} return _mm_maskz_fnmsub_ph(__U, __A, __B, __C); } __m256h test_mm256_fmadd_ph(__m256h __A, __m256h __B, __m256h __C) { - // CHECK-LABEL: @test_mm256_fmadd_ph - // CHECK: call <16 x half> @llvm.fma.v16f16(<16 x half> %{{.*}}, <16 x half> %{{.*}}, <16 x half> %{{.*}}) + // CHECK-LABEL: test_mm256_fmadd_ph + // CHECK: @llvm.fma.v16f16(<16 x half> %{{.*}}, <16 x half> %{{.*}}, <16 x half> %{{.*}}) return _mm256_fmadd_ph(__A, __B, __C); } __m256h test_mm256_mask_fmadd_ph(__m256h __A, __mmask8 __U, __m256h __B, __m256h __C) { - // CHECK-LABEL: @test_mm256_mask_fmadd_ph - // CHECK: call <16 x half> @llvm.fma.v16f16(<16 x half> %{{.*}}, <16 x half> %{{.*}}, <16 x half> %{{.*}}) + // CHECK-LABEL: test_mm256_mask_fmadd_ph + // CHECK: @llvm.fma.v16f16(<16 x half> %{{.*}}, <16 x half> %{{.*}}, <16 x half> %{{.*}}) // CHECK: select <16 x i1> %{{.*}}, <16 x half> %{{.*}}, <16 x half> %{{.*}} return _mm256_mask_fmadd_ph(__A, __U, __B, __C); } __m256h test_mm256_fmsub_ph(__m256h __A, __m256h __B, __m256h __C) { - // CHECK-LABEL: @test_mm256_fmsub_ph + // CHECK-LABEL: test_mm256_fmsub_ph // CHECK: fneg - // CHECK: call <16 x half> @llvm.fma.v16f16(<16 x half> %{{.*}}, <16 x half> %{{.*}}, <16 x half> %{{.*}}) + // CHECK: @llvm.fma.v16f16(<16 x half> %{{.*}}, <16 x half> %{{.*}}, <16 x half> %{{.*}}) return _mm256_fmsub_ph(__A, __B, __C); } __m256h test_mm256_mask_fmsub_ph(__m256h __A, __mmask16 __U, __m256h __B, __m256h __C) { - // CHECK-LABEL: @test_mm256_mask_fmsub_ph + // CHECK-LABEL: test_mm256_mask_fmsub_ph // CHECK: fneg - // CHECK: call <16 x half> @llvm.fma.v16f16(<16 x half> %{{.*}}, <16 x half> %{{.*}}, <16 x half> %{{.*}}) + // CHECK: @llvm.fma.v16f16(<16 x half> %{{.*}}, <16 x half> %{{.*}}, <16 x half> %{{.*}}) // CHECK: select <16 x i1> %{{.*}}, <16 x half> %{{.*}}, <16 x half> %{{.*}} return _mm256_mask_fmsub_ph(__A, __U, __B, __C); } __m256h test_mm256_mask3_fmadd_ph(__m256h __A, __m256h __B, __m256h __C, __mmask16 __U) { - // CHECK-LABEL: @test_mm256_mask3_fmadd_ph - // CHECK: call <16 x half> @llvm.fma.v16f16(<16 x half> %{{.*}}, <16 x half> %{{.*}}, <16 x half> %{{.*}}) + // CHECK-LABEL: test_mm256_mask3_fmadd_ph + // CHECK: @llvm.fma.v16f16(<16 x half> %{{.*}}, <16 x half> %{{.*}}, <16 x half> %{{.*}}) // CHECK: select <16 x i1> %{{.*}}, <16 x half> %{{.*}}, <16 x half> %{{.*}} return _mm256_mask3_fmadd_ph(__A, __B, __C, __U); } __m256h test_mm256_mask3_fnmadd_ph(__m256h __A, __m256h __B, __m256h __C, __mmask16 __U) { - // CHECK-LABEL: @test_mm256_mask3_fnmadd_ph + // CHECK-LABEL: test_mm256_mask3_fnmadd_ph // CHECK: fneg - // CHECK: call <16 x half> @llvm.fma.v16f16(<16 x half> %{{.*}}, <16 x half> %{{.*}}, <16 x half> %{{.*}}) + // CHECK: @llvm.fma.v16f16(<16 x half> %{{.*}}, <16 x half> %{{.*}}, <16 x half> %{{.*}}) // CHECK: select <16 x i1> %{{.*}}, <16 x half> %{{.*}}, <16 x half> %{{.*}} return _mm256_mask3_fnmadd_ph(__A, __B, __C, __U); } __m256h test_mm256_maskz_fmadd_ph(__mmask16 __U, __m256h __A, __m256h __B, __m256h __C) { - // CHECK-LABEL: @test_mm256_maskz_fmadd_ph - // CHECK: call <16 x half> @llvm.fma.v16f16(<16 x half> %{{.*}}, <16 x half> %{{.*}}, <16 x half> %{{.*}}) + // CHECK-LABEL: test_mm256_maskz_fmadd_ph + // CHECK: @llvm.fma.v16f16(<16 x half> %{{.*}}, <16 x half> %{{.*}}, <16 x half> %{{.*}}) // CHECK: select <16 x i1> %{{.*}}, <16 x half> %{{.*}}, <16 x half> %{{.*}} return _mm256_maskz_fmadd_ph(__U, __A, __B, __C); } __m256h test_mm256_maskz_fmsub_ph(__mmask16 __U, __m256h __A, __m256h __B, __m256h __C) { - // CHECK-LABEL: @test_mm256_maskz_fmsub_ph + // CHECK-LABEL: test_mm256_maskz_fmsub_ph // CHECK: fneg - // CHECK: call <16 x half> @llvm.fma.v16f16(<16 x half> %{{.*}}, <16 x half> %{{.*}}, <16 x half> %{{.*}}) + // CHECK: @llvm.fma.v16f16(<16 x half> %{{.*}}, <16 x half> %{{.*}}, <16 x half> %{{.*}}) // CHECK: select <16 x i1> %{{.*}}, <16 x half> %{{.*}}, <16 x half> %{{.*}} return _mm256_maskz_fmsub_ph(__U, __A, __B, __C); } __m256h test_mm256_maskz_fnmadd_ph(__mmask16 __U, __m256h __A, __m256h __B, __m256h __C) { - // CHECK-LABEL: @test_mm256_maskz_fnmadd_ph + // CHECK-LABEL: test_mm256_maskz_fnmadd_ph // CHECK: fneg - // CHECK: call <16 x half> @llvm.fma.v16f16(<16 x half> %{{.*}}, <16 x half> %{{.*}}, <16 x half> %{{.*}}) + // CHECK: @llvm.fma.v16f16(<16 x half> %{{.*}}, <16 x half> %{{.*}}, <16 x half> %{{.*}}) // CHECK: select <16 x i1> %{{.*}}, <16 x half> %{{.*}}, <16 x half> %{{.*}} return _mm256_maskz_fnmadd_ph(__U, __A, __B, __C); } __m256h test_mm256_maskz_fnmsub_ph(__mmask16 __U, __m256h __A, __m256h __B, __m256h __C) { - // CHECK-LABEL: @test_mm256_maskz_fnmsub_ph + // CHECK-LABEL: test_mm256_maskz_fnmsub_ph // CHECK: fneg // CHECK: fneg - // CHECK: call <16 x half> @llvm.fma.v16f16(<16 x half> %{{.*}}, <16 x half> %{{.*}}, <16 x half> %{{.*}}) + // CHECK: @llvm.fma.v16f16(<16 x half> %{{.*}}, <16 x half> %{{.*}}, <16 x half> %{{.*}}) // CHECK: select <16 x i1> %{{.*}}, <16 x half> %{{.*}}, <16 x half> %{{.*}} return _mm256_maskz_fnmsub_ph(__U, __A, __B, __C); } __m128h test_mm_fmaddsub_ph(__m128h __A, __m128h __B, __m128h __C) { - // CHECK-LABEL: @test_mm_fmaddsub_ph + // CHECK-LABEL: test_mm_fmaddsub_ph // CHECK-NOT: fneg - // CHECK: call <8 x half> @llvm.x86.avx512fp16.vfmaddsub.ph.128(<8 x half> %{{.*}}, <8 x half> %{{.*}}, <8 x half> %{{.*}}) + // CHECK: @llvm.x86.avx512fp16.vfmaddsub.ph.128(<8 x half> %{{.*}}, <8 x half> %{{.*}}, <8 x half> %{{.*}}) return _mm_fmaddsub_ph(__A, __B, __C); } __m128h test_mm_mask_fmaddsub_ph(__m128h __A, __mmask8 __U, __m128h __B, __m128h __C) { - // CHECK-LABEL: @test_mm_mask_fmaddsub_ph + // CHECK-LABEL: test_mm_mask_fmaddsub_ph // CHECK-NOT: fneg - // CHECK: call <8 x half> @llvm.x86.avx512fp16.vfmaddsub.ph.128(<8 x half> %{{.*}}, <8 x half> %{{.*}}, <8 x half> %{{.*}}) + // CHECK: @llvm.x86.avx512fp16.vfmaddsub.ph.128(<8 x half> %{{.*}}, <8 x half> %{{.*}}, <8 x half> %{{.*}}) // CHECK: select <8 x i1> %{{.*}}, <8 x half> %{{.*}}, <8 x half> %{{.*}} return _mm_mask_fmaddsub_ph(__A, __U, __B, __C); } __m128h test_mm_fmsubadd_ph(__m128h __A, __m128h __B, __m128h __C) { - // CHECK-LABEL: @test_mm_fmsubadd_ph + // CHECK-LABEL: test_mm_fmsubadd_ph // CHECK: [[NEG:%.+]] = fneg - // CHECK: call <8 x half> @llvm.x86.avx512fp16.vfmaddsub.ph.128(<8 x half> %{{.*}}, <8 x half> %{{.*}}, <8 x half> [[NEG]]) + // CHECK: @llvm.x86.avx512fp16.vfmaddsub.ph.128(<8 x half> %{{.*}}, <8 x half> %{{.*}}, <8 x half> [[NEG]]) return _mm_fmsubadd_ph(__A, __B, __C); } __m128h test_mm_mask_fmsubadd_ph(__m128h __A, __mmask8 __U, __m128h __B, __m128h __C) { - // CHECK-LABEL: @test_mm_mask_fmsubadd_ph + // CHECK-LABEL: test_mm_mask_fmsubadd_ph // CHECK: [[NEG:%.+]] = fneg - // CHECK: call <8 x half> @llvm.x86.avx512fp16.vfmaddsub.ph.128(<8 x half> %{{.*}}, <8 x half> %{{.*}}, <8 x half> [[NEG]]) + // CHECK: @llvm.x86.avx512fp16.vfmaddsub.ph.128(<8 x half> %{{.*}}, <8 x half> %{{.*}}, <8 x half> [[NEG]]) // CHECK: select <8 x i1> %{{.*}}, <8 x half> %{{.*}}, <8 x half> %{{.*}} return _mm_mask_fmsubadd_ph(__A, __U, __B, __C); } __m128h test_mm_mask3_fmaddsub_ph(__m128h __A, __m128h __B, __m128h __C, __mmask8 __U) { - // CHECK-LABEL: @test_mm_mask3_fmaddsub_ph + // CHECK-LABEL: test_mm_mask3_fmaddsub_ph // CHECK-NOT: fneg - // CHECK: call <8 x half> @llvm.x86.avx512fp16.vfmaddsub.ph.128(<8 x half> %{{.*}}, <8 x half> %{{.*}}, <8 x half> %{{.*}}) + // CHECK: @llvm.x86.avx512fp16.vfmaddsub.ph.128(<8 x half> %{{.*}}, <8 x half> %{{.*}}, <8 x half> %{{.*}}) // CHECK: select <8 x i1> %{{.*}}, <8 x half> %{{.*}}, <8 x half> %{{.*}} return _mm_mask3_fmaddsub_ph(__A, __B, __C, __U); } __m128h test_mm_maskz_fmaddsub_ph(__mmask8 __U, __m128h __A, __m128h __B, __m128h __C) { - // CHECK-LABEL: @test_mm_maskz_fmaddsub_ph + // CHECK-LABEL: test_mm_maskz_fmaddsub_ph // CHECK-NOT: fneg - // CHECK: call <8 x half> @llvm.x86.avx512fp16.vfmaddsub.ph.128(<8 x half> %{{.*}}, <8 x half> %{{.*}}, <8 x half> %{{.*}}) + // CHECK: @llvm.x86.avx512fp16.vfmaddsub.ph.128(<8 x half> %{{.*}}, <8 x half> %{{.*}}, <8 x half> %{{.*}}) // CHECK: select <8 x i1> %{{.*}}, <8 x half> %{{.*}}, <8 x half> %{{.*}} return _mm_maskz_fmaddsub_ph(__U, __A, __B, __C); } __m128h test_mm_maskz_fmsubadd_ph(__mmask8 __U, __m128h __A, __m128h __B, __m128h __C) { - // CHECK-LABEL: @test_mm_maskz_fmsubadd_ph + // CHECK-LABEL: test_mm_maskz_fmsubadd_ph // CHECK: [[NEG:%.+]] = fneg - // CHECK: call <8 x half> @llvm.x86.avx512fp16.vfmaddsub.ph.128(<8 x half> %{{.*}}, <8 x half> %{{.*}}, <8 x half> [[NEG]]) + // CHECK: @llvm.x86.avx512fp16.vfmaddsub.ph.128(<8 x half> %{{.*}}, <8 x half> %{{.*}}, <8 x half> [[NEG]]) // CHECK: select <8 x i1> %{{.*}}, <8 x half> %{{.*}}, <8 x half> %{{.*}} return _mm_maskz_fmsubadd_ph(__U, __A, __B, __C); } __m256h test_mm256_fmaddsub_ph(__m256h __A, __m256h __B, __m256h __C) { - // CHECK-LABEL: @test_mm256_fmaddsub_ph + // CHECK-LABEL: test_mm256_fmaddsub_ph // CHECK-NOT: fneg - // CHECK: call <16 x half> @llvm.x86.avx512fp16.vfmaddsub.ph.256(<16 x half> %{{.*}}, <16 x half> %{{.*}}, <16 x half> %{{.*}}) + // CHECK: @llvm.x86.avx512fp16.vfmaddsub.ph.256(<16 x half> %{{.*}}, <16 x half> %{{.*}}, <16 x half> %{{.*}}) return _mm256_fmaddsub_ph(__A, __B, __C); } __m256h test_mm256_mask_fmaddsub_ph(__m256h __A, __mmask16 __U, __m256h __B, __m256h __C) { - // CHECK-LABEL: @test_mm256_mask_fmaddsub_ph + // CHECK-LABEL: test_mm256_mask_fmaddsub_ph // CHECK-NOT: fneg - // CHECK: call <16 x half> @llvm.x86.avx512fp16.vfmaddsub.ph.256(<16 x half> %{{.*}}, <16 x half> %{{.*}}, <16 x half> %{{.*}}) + // CHECK: @llvm.x86.avx512fp16.vfmaddsub.ph.256(<16 x half> %{{.*}}, <16 x half> %{{.*}}, <16 x half> %{{.*}}) // CHECK: select <16 x i1> %{{.*}}, <16 x half> %{{.*}}, <16 x half> %{{.*}} return _mm256_mask_fmaddsub_ph(__A, __U, __B, __C); } __m256h test_mm256_fmsubadd_ph(__m256h __A, __m256h __B, __m256h __C) { - // CHECK-LABEL: @test_mm256_fmsubadd_ph + // CHECK-LABEL: test_mm256_fmsubadd_ph // CHECK: [[NEG:%.+]] = fneg - // CHECK: call <16 x half> @llvm.x86.avx512fp16.vfmaddsub.ph.256(<16 x half> %{{.*}}, <16 x half> %{{.*}}, <16 x half> [[NEG]]) + // CHECK: @llvm.x86.avx512fp16.vfmaddsub.ph.256(<16 x half> %{{.*}}, <16 x half> %{{.*}}, <16 x half> [[NEG]]) return _mm256_fmsubadd_ph(__A, __B, __C); } __m256h test_mm256_mask_fmsubadd_ph(__m256h __A, __mmask16 __U, __m256h __B, __m256h __C) { - // CHECK-LABEL: @test_mm256_mask_fmsubadd_ph + // CHECK-LABEL: test_mm256_mask_fmsubadd_ph // CHECK: [[NEG:%.+]] = fneg - // CHECK: call <16 x half> @llvm.x86.avx512fp16.vfmaddsub.ph.256(<16 x half> %{{.*}}, <16 x half> %{{.*}}, <16 x half> [[NEG]]) + // CHECK: @llvm.x86.avx512fp16.vfmaddsub.ph.256(<16 x half> %{{.*}}, <16 x half> %{{.*}}, <16 x half> [[NEG]]) // CHECK: select <16 x i1> %{{.*}}, <16 x half> %{{.*}}, <16 x half> %{{.*}} return _mm256_mask_fmsubadd_ph(__A, __U, __B, __C); } __m256h test_mm256_mask3_fmaddsub_ph(__m256h __A, __m256h __B, __m256h __C, __mmask16 __U) { - // CHECK-LABEL: @test_mm256_mask3_fmaddsub_ph + // CHECK-LABEL: test_mm256_mask3_fmaddsub_ph // CHECK-NOT: fneg - // CHECK: call <16 x half> @llvm.x86.avx512fp16.vfmaddsub.ph.256(<16 x half> %{{.*}}, <16 x half> %{{.*}}, <16 x half> %{{.*}}) + // CHECK: @llvm.x86.avx512fp16.vfmaddsub.ph.256(<16 x half> %{{.*}}, <16 x half> %{{.*}}, <16 x half> %{{.*}}) // CHECK: select <16 x i1> %{{.*}}, <16 x half> %{{.*}}, <16 x half> %{{.*}} return _mm256_mask3_fmaddsub_ph(__A, __B, __C, __U); } __m256h test_mm256_maskz_fmaddsub_ph(__mmask16 __U, __m256h __A, __m256h __B, __m256h __C) { - // CHECK-LABEL: @test_mm256_maskz_fmaddsub_ph + // CHECK-LABEL: test_mm256_maskz_fmaddsub_ph // CHECK-NOT: fneg - // CHECK: call <16 x half> @llvm.x86.avx512fp16.vfmaddsub.ph.256(<16 x half> %{{.*}}, <16 x half> %{{.*}}, <16 x half> %{{.*}}) + // CHECK: @llvm.x86.avx512fp16.vfmaddsub.ph.256(<16 x half> %{{.*}}, <16 x half> %{{.*}}, <16 x half> %{{.*}}) // CHECK: select <16 x i1> %{{.*}}, <16 x half> %{{.*}}, <16 x half> %{{.*}} return _mm256_maskz_fmaddsub_ph(__U, __A, __B, __C); } __m256h test_mm256_maskz_fmsubadd_ph(__mmask16 __U, __m256h __A, __m256h __B, __m256h __C) { - // CHECK-LABEL: @test_mm256_maskz_fmsubadd_ph + // CHECK-LABEL: test_mm256_maskz_fmsubadd_ph // CHECK: [[NEG:%.+]] = fneg - // CHECK: call <16 x half> @llvm.x86.avx512fp16.vfmaddsub.ph.256(<16 x half> %{{.*}}, <16 x half> %{{.*}}, <16 x half> [[NEG]]) + // CHECK: @llvm.x86.avx512fp16.vfmaddsub.ph.256(<16 x half> %{{.*}}, <16 x half> %{{.*}}, <16 x half> [[NEG]]) // CHECK: select <16 x i1> %{{.*}}, <16 x half> %{{.*}}, <16 x half> %{{.*}} return _mm256_maskz_fmsubadd_ph(__U, __A, __B, __C); } __m128h test_mm_mask3_fmsub_ph(__m128h __A, __m128h __B, __m128h __C, __mmask8 __U) { - // CHECK-LABEL: @test_mm_mask3_fmsub_ph + // CHECK-LABEL: test_mm_mask3_fmsub_ph // CHECK: fneg - // CHECK: call <8 x half> @llvm.fma.v8f16(<8 x half> %{{.*}}, <8 x half> %{{.*}}, <8 x half> %{{.*}}) + // CHECK: @llvm.fma.v8f16(<8 x half> %{{.*}}, <8 x half> %{{.*}}, <8 x half> %{{.*}}) // CHECK: select <8 x i1> %{{.*}}, <8 x half> %{{.*}}, <8 x half> %{{.*}} return _mm_mask3_fmsub_ph(__A, __B, __C, __U); } __m256h test_mm256_mask3_fmsub_ph(__m256h __A, __m256h __B, __m256h __C, __mmask16 __U) { - // CHECK-LABEL: @test_mm256_mask3_fmsub_ph + // CHECK-LABEL: test_mm256_mask3_fmsub_ph // CHECK: fneg - // CHECK: call <16 x half> @llvm.fma.v16f16(<16 x half> %{{.*}}, <16 x half> %{{.*}}, <16 x half> %{{.*}}) + // CHECK: @llvm.fma.v16f16(<16 x half> %{{.*}}, <16 x half> %{{.*}}, <16 x half> %{{.*}}) // CHECK: select <16 x i1> %{{.*}}, <16 x half> %{{.*}}, <16 x half> %{{.*}} return _mm256_mask3_fmsub_ph(__A, __B, __C, __U); } __m128h test_mm_mask3_fmsubadd_ph(__m128h __A, __m128h __B, __m128h __C, __mmask8 __U) { - // CHECK-LABEL: @test_mm_mask3_fmsubadd_ph + // CHECK-LABEL: test_mm_mask3_fmsubadd_ph // CHECK: [[NEG:%.+]] = fneg - // CHECK: call <8 x half> @llvm.x86.avx512fp16.vfmaddsub.ph.128(<8 x half> %{{.*}}, <8 x half> %{{.*}}, <8 x half> [[NEG]]) + // CHECK: @llvm.x86.avx512fp16.vfmaddsub.ph.128(<8 x half> %{{.*}}, <8 x half> %{{.*}}, <8 x half> [[NEG]]) // CHECK: select <8 x i1> %{{.*}}, <8 x half> %{{.*}}, <8 x half> %{{.*}} return _mm_mask3_fmsubadd_ph(__A, __B, __C, __U); } __m256h test_mm256_mask3_fmsubadd_ph(__m256h __A, __m256h __B, __m256h __C, __mmask16 __U) { - // CHECK-LABEL: @test_mm256_mask3_fmsubadd_ph + // CHECK-LABEL: test_mm256_mask3_fmsubadd_ph // CHECK: [[NEG:%.+]] = fneg - // CHECK: call <16 x half> @llvm.x86.avx512fp16.vfmaddsub.ph.256(<16 x half> %{{.*}}, <16 x half> %{{.*}}, <16 x half> [[NEG]]) + // CHECK: @llvm.x86.avx512fp16.vfmaddsub.ph.256(<16 x half> %{{.*}}, <16 x half> %{{.*}}, <16 x half> [[NEG]]) // CHECK: select <16 x i1> %{{.*}}, <16 x half> %{{.*}}, <16 x half> %{{.*}} return _mm256_mask3_fmsubadd_ph(__A, __B, __C, __U); } __m128h test_mm_fnmadd_ph(__m128h __A, __m128h __B, __m128h __C) { - // CHECK-LABEL: @test_mm_fnmadd_ph + // CHECK-LABEL: test_mm_fnmadd_ph // CHECK: fneg - // CHECK: call <8 x half> @llvm.fma.v8f16(<8 x half> %{{.*}}, <8 x half> %{{.*}}, <8 x half> %{{.*}}) + // CHECK: @llvm.fma.v8f16(<8 x half> %{{.*}}, <8 x half> %{{.*}}, <8 x half> %{{.*}}) return _mm_fnmadd_ph(__A, __B, __C); } __m128h test_mm_mask_fnmadd_ph(__m128h __A, __mmask8 __U, __m128h __B, __m128h __C) { - // CHECK-LABEL: @test_mm_mask_fnmadd_ph + // CHECK-LABEL: test_mm_mask_fnmadd_ph // CHECK: fneg - // CHECK: call <8 x half> @llvm.fma.v8f16(<8 x half> %{{.*}}, <8 x half> %{{.*}}, <8 x half> %{{.*}}) + // CHECK: @llvm.fma.v8f16(<8 x half> %{{.*}}, <8 x half> %{{.*}}, <8 x half> %{{.*}}) // CHECK: select <8 x i1> %{{.*}}, <8 x half> %{{.*}}, <8 x half> %{{.*}} return _mm_mask_fnmadd_ph(__A, __U, __B, __C); } __m256h test_mm256_fnmadd_ph(__m256h __A, __m256h __B, __m256h __C) { - // CHECK-LABEL: @test_mm256_fnmadd_ph + // CHECK-LABEL: test_mm256_fnmadd_ph // CHECK: fneg - // CHECK: call <16 x half> @llvm.fma.v16f16(<16 x half> %{{.*}}, <16 x half> %{{.*}}, <16 x half> %{{.*}}) + // CHECK: @llvm.fma.v16f16(<16 x half> %{{.*}}, <16 x half> %{{.*}}, <16 x half> %{{.*}}) return _mm256_fnmadd_ph(__A, __B, __C); } __m256h test_mm256_mask_fnmadd_ph(__m256h __A, __mmask16 __U, __m256h __B, __m256h __C) { - // CHECK-LABEL: @test_mm256_mask_fnmadd_ph + // CHECK-LABEL: test_mm256_mask_fnmadd_ph // CHECK: fneg - // CHECK: call <16 x half> @llvm.fma.v16f16(<16 x half> %{{.*}}, <16 x half> %{{.*}}, <16 x half> %{{.*}}) + // CHECK: @llvm.fma.v16f16(<16 x half> %{{.*}}, <16 x half> %{{.*}}, <16 x half> %{{.*}}) // CHECK: select <16 x i1> %{{.*}}, <16 x half> %{{.*}}, <16 x half> %{{.*}} return _mm256_mask_fnmadd_ph(__A, __U, __B, __C); } __m128h test_mm_fnmsub_ph(__m128h __A, __m128h __B, __m128h __C) { - // CHECK-LABEL: @test_mm_fnmsub_ph + // CHECK-LABEL: test_mm_fnmsub_ph // CHECK: fneg // CHECK: fneg - // CHECK: call <8 x half> @llvm.fma.v8f16(<8 x half> %{{.*}}, <8 x half> %{{.*}}, <8 x half> %{{.*}}) + // CHECK: @llvm.fma.v8f16(<8 x half> %{{.*}}, <8 x half> %{{.*}}, <8 x half> %{{.*}}) return _mm_fnmsub_ph(__A, __B, __C); } __m128h test_mm_mask_fnmsub_ph(__m128h __A, __mmask8 __U, __m128h __B, __m128h __C) { - // CHECK-LABEL: @test_mm_mask_fnmsub_ph + // CHECK-LABEL: test_mm_mask_fnmsub_ph // CHECK: fneg // CHECK: fneg - // CHECK: call <8 x half> @llvm.fma.v8f16(<8 x half> %{{.*}}, <8 x half> %{{.*}}, <8 x half> %{{.*}}) + // CHECK: @llvm.fma.v8f16(<8 x half> %{{.*}}, <8 x half> %{{.*}}, <8 x half> %{{.*}}) // CHECK: select <8 x i1> %{{.*}}, <8 x half> %{{.*}}, <8 x half> %{{.*}} return _mm_mask_fnmsub_ph(__A, __U, __B, __C); } __m128h test_mm_mask3_fnmsub_ph(__m128h __A, __m128h __B, __m128h __C, __mmask8 __U) { - // CHECK-LABEL: @test_mm_mask3_fnmsub_ph + // CHECK-LABEL: test_mm_mask3_fnmsub_ph // CHECK: fneg // CHECK: fneg - // CHECK: call <8 x half> @llvm.fma.v8f16(<8 x half> %{{.*}}, <8 x half> %{{.*}}, <8 x half> %{{.*}}) + // CHECK: @llvm.fma.v8f16(<8 x half> %{{.*}}, <8 x half> %{{.*}}, <8 x half> %{{.*}}) // CHECK: select <8 x i1> %{{.*}}, <8 x half> %{{.*}}, <8 x half> %{{.*}} return _mm_mask3_fnmsub_ph(__A, __B, __C, __U); } __m256h test_mm256_fnmsub_ph(__m256h __A, __m256h __B, __m256h __C) { - // CHECK-LABEL: @test_mm256_fnmsub_ph + // CHECK-LABEL: test_mm256_fnmsub_ph // CHECK: fneg // CHECK: fneg - // CHECK: call <16 x half> @llvm.fma.v16f16(<16 x half> %{{.*}}, <16 x half> %{{.*}}, <16 x half> %{{.*}}) + // CHECK: @llvm.fma.v16f16(<16 x half> %{{.*}}, <16 x half> %{{.*}}, <16 x half> %{{.*}}) return _mm256_fnmsub_ph(__A, __B, __C); } __m256h test_mm256_mask_fnmsub_ph(__m256h __A, __mmask16 __U, __m256h __B, __m256h __C) { - // CHECK-LABEL: @test_mm256_mask_fnmsub_ph + // CHECK-LABEL: test_mm256_mask_fnmsub_ph // CHECK: fneg // CHECK: fneg - // CHECK: call <16 x half> @llvm.fma.v16f16(<16 x half> %{{.*}}, <16 x half> %{{.*}}, <16 x half> %{{.*}}) + // CHECK: @llvm.fma.v16f16(<16 x half> %{{.*}}, <16 x half> %{{.*}}, <16 x half> %{{.*}}) // CHECK: select <16 x i1> %{{.*}}, <16 x half> %{{.*}}, <16 x half> %{{.*}} return _mm256_mask_fnmsub_ph(__A, __U, __B, __C); } __m256h test_mm256_mask3_fnmsub_ph(__m256h __A, __m256h __B, __m256h __C, __mmask16 __U) { - // CHECK-LABEL: @test_mm256_mask3_fnmsub_ph + // CHECK-LABEL: test_mm256_mask3_fnmsub_ph // CHECK: fneg // CHECK: fneg - // CHECK: call <16 x half> @llvm.fma.v16f16(<16 x half> %{{.*}}, <16 x half> %{{.*}}, <16 x half> %{{.*}}) + // CHECK: @llvm.fma.v16f16(<16 x half> %{{.*}}, <16 x half> %{{.*}}, <16 x half> %{{.*}}) return _mm256_mask3_fnmsub_ph(__A, __B, __C, __U); } __m128h test_mm_fcmul_pch(__m128h __A, __m128h __B) { - // CHECK-LABEL: @test_mm_fcmul_pch + // CHECK-LABEL: test_mm_fcmul_pch // CHECK: @llvm.x86.avx512fp16.mask.vfcmul.cph.128 return _mm_fcmul_pch(__A, __B); } __m128h test_mm_mask_fcmul_pch(__m128h __W, __mmask8 __U, __m128h __A, __m128h __B) { - // CHECK-LABEL: @test_mm_mask_fcmul_pch + // CHECK-LABEL: test_mm_mask_fcmul_pch // CHECK: @llvm.x86.avx512fp16.mask.vfcmul.cph.128 return _mm_mask_fcmul_pch(__W, __U, __A, __B); } __m128h test_mm_maskz_fcmul_pch(__mmask8 __U, __m128h __A, __m128h __B) { - // CHECK-LABEL: @test_mm_maskz_fcmul_pch + // CHECK-LABEL: test_mm_maskz_fcmul_pch // CHECK: @llvm.x86.avx512fp16.mask.vfcmul.cph.128 return _mm_maskz_fcmul_pch(__U, __A, __B); } __m256h test_mm256_fcmul_pch(__m256h __A, __m256h __B) { - // CHECK-LABEL: @test_mm256_fcmul_pch + // CHECK-LABEL: test_mm256_fcmul_pch // CHECK: @llvm.x86.avx512fp16.mask.vfcmul.cph.256 return _mm256_fcmul_pch(__A, __B); } __m256h test_mm256_mask_fcmul_pch(__m256h __W, __mmask8 __U, __m256h __A, __m256h __B) { - // CHECK-LABEL: @test_mm256_mask_fcmul_pch + // CHECK-LABEL: test_mm256_mask_fcmul_pch // CHECK: @llvm.x86.avx512fp16.mask.vfcmul.cph.256 return _mm256_mask_fcmul_pch(__W, __U, __A, __B); } __m256h test_mm256_maskz_fcmul_pch(__mmask8 __U, __m256h __A, __m256h __B) { - // CHECK-LABEL: @test_mm256_maskz_fcmul_pch + // CHECK-LABEL: test_mm256_maskz_fcmul_pch // CHECK: @llvm.x86.avx512fp16.mask.vfcmul.cph.256 return _mm256_maskz_fcmul_pch(__U, __A, __B); } __m128h test_mm_fcmadd_pch(__m128h __A, __m128h __B, __m128h __C) { - // CHECK-LABEL: @test_mm_fcmadd_pch + // CHECK-LABEL: test_mm_fcmadd_pch // CHECK: @llvm.x86.avx512fp16.mask.vfcmadd.cph.128 return _mm_fcmadd_pch(__A, __B, __C); } __m128h test_mm_mask_fcmadd_pch(__m128h __A, __mmask8 __U, __m128h __B, __m128h __C) { - // CHECK-LABEL: @test_mm_mask_fcmadd_pch + // CHECK-LABEL: test_mm_mask_fcmadd_pch // CHECK: @llvm.x86.avx512fp16.mask.vfcmadd.cph.128 // CHECK: %{{.*}} = shufflevector <8 x i1> %{{.*}}, <8 x i1> %{{.*}}, <4 x i32> <i32 0, i32 1, i32 2, i32 3> // CHECK: %{{.*}} = select <4 x i1> %{{.*}}, <4 x float> %{{.*}}, <4 x float> %{{.*}} @@ -2851,88 +2863,88 @@ __m128h test_mm_mask_fcmadd_pch(__m128h __A, __mmask8 __U, __m128h __B, __m128h } __m128h test_mm_mask3_fcmadd_pch(__m128h __A, __m128h __B, __m128h __C, __mmask8 __U) { - // CHECK-LABEL: @test_mm_mask3_fcmadd_pch + // CHECK-LABEL: test_mm_mask3_fcmadd_pch // CHECK: @llvm.x86.avx512fp16.mask.vfcmadd.cph.128 // CHECK-NOT: %{{.*}} = select <4 x i1> %{{.*}}, <4 x float> %{{.*}}, <4 x float> %{{.*}} return _mm_mask3_fcmadd_pch(__A, __B, __C, __U); } __m128h test_mm_maskz_fcmadd_pch(__mmask8 __U, __m128h __A, __m128h __B, __m128h __C) { - // CHECK-LABEL: @test_mm_maskz_fcmadd_pch + // CHECK-LABEL: test_mm_maskz_fcmadd_pch // CHECK: @llvm.x86.avx512fp16.maskz.vfcmadd.cph.128 return _mm_maskz_fcmadd_pch(__U, __A, __B, __C); } __m256h test_mm256_fcmadd_pch(__m256h __A, __m256h __B, __m256h __C) { - // CHECK-LABEL: @test_mm256_fcmadd_pch + // CHECK-LABEL: test_mm256_fcmadd_pch // CHECK: @llvm.x86.avx512fp16.mask.vfcmadd.cph.256 return _mm256_fcmadd_pch(__A, __B, __C); } __m256h test_mm256_mask_fcmadd_pch(__m256h __A, __mmask8 __U, __m256h __B, __m256h __C) { - // CHECK-LABEL: @test_mm256_mask_fcmadd_pch + // CHECK-LABEL: test_mm256_mask_fcmadd_pch // CHECK: @llvm.x86.avx512fp16.mask.vfcmadd.cph.256 // CHECK: %{{.*}} = select <8 x i1> %{{.*}}, <8 x float> %{{.*}}, <8 x float> %{{.*}} return _mm256_mask_fcmadd_pch(__A, __U, __B, __C); } __m256h test_mm256_mask3_fcmadd_pch(__m256h __A, __m256h __B, __m256h __C, __mmask8 __U) { - // CHECK-LABEL: @test_mm256_mask3_fcmadd_pch + // CHECK-LABEL: test_mm256_mask3_fcmadd_pch // CHECK: @llvm.x86.avx512fp16.mask.vfcmadd.cph.256 // CHECK-NOT: %{{.*}} = select <8 x i1> %{{.*}}, <8 x float> %{{.*}}, <8 x float> %{{.*}} return _mm256_mask3_fcmadd_pch(__A, __B, __C, __U); } __m256h test_mm256_maskz_fcmadd_pch(__mmask8 __U, __m256h __A, __m256h __B, __m256h __C) { - // CHECK-LABEL: @test_mm256_maskz_fcmadd_pch + // CHECK-LABEL: test_mm256_maskz_fcmadd_pch // CHECK: @llvm.x86.avx512fp16.maskz.vfcmadd.cph.256 return _mm256_maskz_fcmadd_pch(__U, __A, __B, __C); } __m128h test_mm_fmul_pch(__m128h __A, __m128h __B) { - // CHECK-LABEL: @test_mm_fmul_pch + // CHECK-LABEL: test_mm_fmul_pch // CHECK: @llvm.x86.avx512fp16.mask.vfmul.cph.128 return _mm_fmul_pch(__A, __B); } __m128h test_mm_mask_fmul_pch(__m128h __W, __mmask8 __U, __m128h __A, __m128h __B) { - // CHECK-LABEL: @test_mm_mask_fmul_pch + // CHECK-LABEL: test_mm_mask_fmul_pch // CHECK: @llvm.x86.avx512fp16.mask.vfmul.cph.128 return _mm_mask_fmul_pch(__W, __U, __A, __B); } __m128h test_mm_maskz_fmul_pch(__mmask8 __U, __m128h __A, __m128h __B) { - // CHECK-LABEL: @test_mm_maskz_fmul_pch + // CHECK-LABEL: test_mm_maskz_fmul_pch // CHECK: @llvm.x86.avx512fp16.mask.vfmul.cph.128 return _mm_maskz_fmul_pch(__U, __A, __B); } __m256h test_mm256_fmul_pch(__m256h __A, __m256h __B) { - // CHECK-LABEL: @test_mm256_fmul_pch + // CHECK-LABEL: test_mm256_fmul_pch // CHECK: @llvm.x86.avx512fp16.mask.vfmul.cph.256 return _mm256_fmul_pch(__A, __B); } __m256h test_mm256_mask_fmul_pch(__m256h __W, __mmask8 __U, __m256h __A, __m256h __B) { - // CHECK-LABEL: @test_mm256_mask_fmul_pch + // CHECK-LABEL: test_mm256_mask_fmul_pch // CHECK: @llvm.x86.avx512fp16.mask.vfmul.cph.256 return _mm256_mask_fmul_pch(__W, __U, __A, __B); } __m256h test_mm256_maskz_fmul_pch(__mmask8 __U, __m256h __A, __m256h __B) { - // CHECK-LABEL: @test_mm256_maskz_fmul_pch + // CHECK-LABEL: test_mm256_maskz_fmul_pch // CHECK: @llvm.x86.avx512fp16.mask.vfmul.cph.256 return _mm256_maskz_fmul_pch(__U, __A, __B); } __m128h test_mm_fmadd_pch(__m128h __A, __m128h __B, __m128h __C) { - // CHECK-LABEL: @test_mm_fmadd_pch + // CHECK-LABEL: test_mm_fmadd_pch // CHECK: @llvm.x86.avx512fp16.mask.vfmadd.cph.128 return _mm_fmadd_pch(__A, __B, __C); } __m128h test_mm_mask_fmadd_pch(__m128h __A, __mmask8 __U, __m128h __B, __m128h __C) { - // CHECK-LABEL: @test_mm_mask_fmadd_pch + // CHECK-LABEL: test_mm_mask_fmadd_pch // CHECK: @llvm.x86.avx512fp16.mask.vfmadd.cph.128 // CHECK: %{{.*}} = shufflevector <8 x i1> %{{.*}}, <8 x i1> %{{.*}}, <4 x i32> <i32 0, i32 1, i32 2, i32 3> // CHECK: %{{.*}} = select <4 x i1> %{{.*}}, <4 x float> %{{.*}}, <4 x float> %{{.*}} @@ -2940,58 +2952,58 @@ __m128h test_mm_mask_fmadd_pch(__m128h __A, __mmask8 __U, __m128h __B, __m128h _ } __m128h test_mm_mask3_fmadd_pch(__m128h __A, __m128h __B, __m128h __C, __mmask8 __U) { - // CHECK-LABEL: @test_mm_mask3_fmadd_pch + // CHECK-LABEL: test_mm_mask3_fmadd_pch // CHECK: @llvm.x86.avx512fp16.mask.vfmadd.cph.128 return _mm_mask3_fmadd_pch(__A, __B, __C, __U); } __m128h test_mm_maskz_fmadd_pch(__mmask8 __U, __m128h __A, __m128h __B, __m128h __C) { - // CHECK-LABEL: @test_mm_maskz_fmadd_pch + // CHECK-LABEL: test_mm_maskz_fmadd_pch // CHECK: @llvm.x86.avx512fp16.maskz.vfmadd.cph.128 return _mm_maskz_fmadd_pch(__U, __A, __B, __C); } __m256h test_mm256_fmadd_pch(__m256h __A, __m256h __B, __m256h __C) { - // CHECK-LABEL: @test_mm256_fmadd_pch + // CHECK-LABEL: test_mm256_fmadd_pch // CHECK: @llvm.x86.avx512fp16.mask.vfmadd.cph.256 return _mm256_fmadd_pch(__A, __B, __C); } __m256h test_mm256_mask_fmadd_pch(__m256h __A, __mmask8 __U, __m256h __B, __m256h __C) { - // CHECK-LABEL: @test_mm256_mask_fmadd_pch + // CHECK-LABEL: test_mm256_mask_fmadd_pch // CHECK: @llvm.x86.avx512fp16.mask.vfmadd.cph.256 // CHECK: %{{.*}} = select <8 x i1> %{{.*}}, <8 x float> %{{.*}}, <8 x float> %{{.*}} return _mm256_mask_fmadd_pch(__A, __U, __B, __C); } __m256h test_mm256_mask3_fmadd_pch(__m256h __A, __m256h __B, __m256h __C, __mmask8 __U) { - // CHECK-LABEL: @test_mm256_mask3_fmadd_pch + // CHECK-LABEL: test_mm256_mask3_fmadd_pch // CHECK: @llvm.x86.avx512fp16.mask.vfmadd.cph.256 return _mm256_mask3_fmadd_pch(__A, __B, __C, __U); } __m256h test_mm256_maskz_fmadd_pch(__mmask8 __U, __m256h __A, __m256h __B, __m256h __C) { - // CHECK-LABEL: @test_mm256_maskz_fmadd_pch + // CHECK-LABEL: test_mm256_maskz_fmadd_pch // CHECK: @llvm.x86.avx512fp16.maskz.vfmadd.cph.256 return _mm256_maskz_fmadd_pch(__U, __A, __B, __C); } __m128h test_mm_mask_blend_ph(__mmask8 __U, __m128h __A, __m128h __W) { - // CHECK-LABEL: @test_mm_mask_blend_ph + // CHECK-LABEL: test_mm_mask_blend_ph // CHECK: %{{.*}} = bitcast i8 %{{.*}} to <8 x i1> // CHECK: %{{.*}} = select <8 x i1> %{{.*}}, <8 x half> %{{.*}}, <8 x half> %{{.*}} return _mm_mask_blend_ph(__U, __A, __W); } __m256h test_mm256_mask_blend_ph(__mmask16 __U, __m256h __A, __m256h __W) { - // CHECK-LABEL: @test_mm256_mask_blend_ph + // CHECK-LABEL: test_mm256_mask_blend_ph // CHECK: %{{.*}} = bitcast i16 %{{.*}} to <16 x i1> // CHECK: %{{.*}} = select <16 x i1> %{{.*}}, <16 x half> %{{.*}}, <16 x half> %{{.*}} return _mm256_mask_blend_ph(__U, __A, __W); } __m128h test_mm_permutex2var_ph(__m128h __A, __m128i __I, __m128h __B) { - // CHECK-LABEL: @test_mm_permutex2var_ph + // CHECK-LABEL: test_mm_permutex2var_ph // CHECK: %{{.*}} = bitcast <8 x half> %{{.*}} to <8 x i16> // CHECK: %{{.*}} = bitcast <2 x i64> %{{.*}} to <8 x i16> // CHECK: %{{.*}} = bitcast <8 x half> %{{.*}} to <8 x i16> @@ -3001,7 +3013,7 @@ __m128h test_mm_permutex2var_ph(__m128h __A, __m128i __I, __m128h __B) { } __m256h test_mm256_permutex2var_ph(__m256h __A, __m256i __I, __m256h __B) { - // CHECK-LABEL: @test_mm256_permutex2var_ph + // CHECK-LABEL: test_mm256_permutex2var_ph // CHECK: %{{.*}} = bitcast <16 x half> %{{.*}} to <16 x i16> // CHECK: %{{.*}} = bitcast <4 x i64> %{{.*}} to <16 x i16> // CHECK: %{{.*}} = bitcast <16 x half> %{{.*}} to <16 x i16> @@ -3011,7 +3023,7 @@ __m256h test_mm256_permutex2var_ph(__m256h __A, __m256i __I, __m256h __B) { } __m128h test_mm_permutexvar_ph(__m128i __A, __m128h __B) { - // CHECK-LABEL: @test_mm_permutexvar_ph + // CHECK-LABEL: test_mm_permutexvar_ph // CHECK: %{{.*}} = bitcast <8 x half> %{{.*}} to <8 x i16> // CHECK: %{{.*}} = bitcast <2 x i64> %{{.*}} to <8 x i16> // CHECK: %{{.*}} = call <8 x i16> @llvm.x86.avx512.permvar.hi.128(<8 x i16> %{{.*}}, <8 x i16> %{{.*}}) @@ -3020,7 +3032,7 @@ __m128h test_mm_permutexvar_ph(__m128i __A, __m128h __B) { } __m256h test_mm256_permutexvar_ph(__m256i __A, __m256h __B) { - // CHECK-LABEL: @test_mm256_permutexvar_ph + // CHECK-LABEL: test_mm256_permutexvar_ph // CHECK: %{{.*}} = bitcast <16 x half> %{{.*}} to <16 x i16> // CHECK: %{{.*}} = bitcast <4 x i64> %{{.*}} to <16 x i16> // CHECK: %{{.*}} = call <16 x i16> @llvm.x86.avx512.permvar.hi.256(<16 x i16> %{{.*}}, <16 x i16> %{{.*}}) @@ -3029,122 +3041,122 @@ __m256h test_mm256_permutexvar_ph(__m256i __A, __m256h __B) { } _Float16 test_mm256_reduce_add_ph(__m256h __W) { - // CHECK-LABEL: @test_mm256_reduce_add_ph - // CHECK: call reassoc half @llvm.vector.reduce.fadd.v16f16(half 0xH8000, <16 x half> %{{.*}}) + // CHECK-LABEL: test_mm256_reduce_add_ph + // CHECK: @llvm.vector.reduce.fadd.v16f16(half 0xH8000, <16 x half> %{{.*}}) return _mm256_reduce_add_ph(__W); } _Float16 test_mm256_reduce_mul_ph(__m256h __W) { - // CHECK-LABEL: @test_mm256_reduce_mul_ph - // CHECK: call reassoc half @llvm.vector.reduce.fmul.v16f16(half 0xH3C00, <16 x half> %{{.*}}) + // CHECK-LABEL: test_mm256_reduce_mul_ph + // CHECK: @llvm.vector.reduce.fmul.v16f16(half 0xH3C00, <16 x half> %{{.*}}) return _mm256_reduce_mul_ph(__W); } _Float16 test_mm256_reduce_max_ph(__m256h __W) { - // CHECK-LABEL: @test_mm256_reduce_max_ph - // CHECK: call nnan half @llvm.vector.reduce.fmax.v16f16(<16 x half> %{{.*}}) + // CHECK-LABEL: test_mm256_reduce_max_ph + // CHECK: @llvm.vector.reduce.fmax.v16f16(<16 x half> %{{.*}}) return _mm256_reduce_max_ph(__W); } _Float16 test_mm256_reduce_min_ph(__m256h __W) { - // CHECK-LABEL: @test_mm256_reduce_min_ph - // CHECK: call nnan half @llvm.vector.reduce.fmin.v16f16(<16 x half> %{{.*}}) + // CHECK-LABEL: test_mm256_reduce_min_ph + // CHECK: @llvm.vector.reduce.fmin.v16f16(<16 x half> %{{.*}}) return _mm256_reduce_min_ph(__W); } _Float16 test_mm_reduce_add_ph(__m128h __W) { - // CHECK-LABEL: @test_mm_reduce_add_ph - // CHECK: call reassoc half @llvm.vector.reduce.fadd.v8f16(half 0xH8000, <8 x half> %{{.*}}) + // CHECK-LABEL: test_mm_reduce_add_ph + // CHECK: @llvm.vector.reduce.fadd.v8f16(half 0xH8000, <8 x half> %{{.*}}) return _mm_reduce_add_ph(__W); } _Float16 test_mm_reduce_mul_ph(__m128h __W) { - // CHECK-LABEL: @test_mm_reduce_mul_ph - // CHECK: call reassoc half @llvm.vector.reduce.fmul.v8f16(half 0xH3C00, <8 x half> %{{.*}}) + // CHECK-LABEL: test_mm_reduce_mul_ph + // CHECK: @llvm.vector.reduce.fmul.v8f16(half 0xH3C00, <8 x half> %{{.*}}) return _mm_reduce_mul_ph(__W); } _Float16 test_mm_reduce_min_ph(__m128h __W) { - // CHECK-LABEL: @test_mm_reduce_min_ph - // CHECK: call nnan half @llvm.vector.reduce.fmin.v8f16(<8 x half> %{{.*}}) + // CHECK-LABEL: test_mm_reduce_min_ph + // CHECK: @llvm.vector.reduce.fmin.v8f16(<8 x half> %{{.*}}) return _mm_reduce_min_ph(__W); } _Float16 test_mm_reduce_max_ph(__m128h __W) { - // CHECK-LABEL: @test_mm_reduce_max_ph - // CHECK: call nnan half @llvm.vector.reduce.fmax.v8f16(<8 x half> %{{.*}}) + // CHECK-LABEL: test_mm_reduce_max_ph + // CHECK: @llvm.vector.reduce.fmax.v8f16(<8 x half> %{{.*}}) return _mm_reduce_max_ph(__W); } // tests below are for alias intrinsics. __m128h test_mm_mul_pch(__m128h __A, __m128h __B) { - // CHECK-LABEL: @test_mm_mul_pch + // CHECK-LABEL: test_mm_mul_pch // CHECK: @llvm.x86.avx512fp16.mask.vfmul.cph.128 return _mm_mul_pch(__A, __B); } __m128h test_mm_mask_mul_pch(__m128h __W, __mmask8 __U, __m128h __A, __m128h __B) { - // CHECK-LABEL: @test_mm_mask_mul_pch + // CHECK-LABEL: test_mm_mask_mul_pch // CHECK: @llvm.x86.avx512fp16.mask.vfmul.cph.128 return _mm_mask_mul_pch(__W, __U, __A, __B); } __m128h test_mm_maskz_mul_pch(__mmask8 __U, __m128h __A, __m128h __B) { - // CHECK-LABEL: @test_mm_maskz_mul_pch + // CHECK-LABEL: test_mm_maskz_mul_pch // CHECK: @llvm.x86.avx512fp16.mask.vfmul.cph.128 return _mm_maskz_mul_pch(__U, __A, __B); } __m256h test_mm256_mul_pch(__m256h __A, __m256h __B) { - // CHECK-LABEL: @test_mm256_mul_pch + // CHECK-LABEL: test_mm256_mul_pch // CHECK: @llvm.x86.avx512fp16.mask.vfmul.cph.256 return _mm256_mul_pch(__A, __B); } __m256h test_mm256_mask_mul_pch(__m256h __W, __mmask8 __U, __m256h __A, __m256h __B) { - // CHECK-LABEL: @test_mm256_mask_mul_pch + // CHECK-LABEL: test_mm256_mask_mul_pch // CHECK: @llvm.x86.avx512fp16.mask.vfmul.cph.256 return _mm256_mask_mul_pch(__W, __U, __A, __B); } __m256h test_mm256_maskz_mul_pch(__mmask8 __U, __m256h __A, __m256h __B) { - // CHECK-LABEL: @test_mm256_maskz_mul_pch + // CHECK-LABEL: test_mm256_maskz_mul_pch // CHECK: @llvm.x86.avx512fp16.mask.vfmul.cph.256 return _mm256_maskz_mul_pch(__U, __A, __B); } __m128h test_mm_cmul_pch(__m128h __A, __m128h __B) { - // CHECK-LABEL: @test_mm_cmul_pch + // CHECK-LABEL: test_mm_cmul_pch // CHECK: @llvm.x86.avx512fp16.mask.vfcmul.cph.128 return _mm_cmul_pch(__A, __B); } __m128h test_mm_mask_cmul_pch(__m128h __W, __mmask8 __U, __m128h __A, __m128h __B) { - // CHECK-LABEL: @test_mm_mask_cmul_pch + // CHECK-LABEL: test_mm_mask_cmul_pch // CHECK: @llvm.x86.avx512fp16.mask.vfcmul.cph.128 return _mm_mask_fcmul_pch(__W, __U, __A, __B); } __m128h test_mm_maskz_cmul_pch(__mmask8 __U, __m128h __A, __m128h __B) { - // CHECK-LABEL: @test_mm_maskz_cmul_pch + // CHECK-LABEL: test_mm_maskz_cmul_pch // CHECK: @llvm.x86.avx512fp16.mask.vfcmul.cph.128 return _mm_maskz_cmul_pch(__U, __A, __B); } __m256h test_mm256_cmul_pch(__m256h __A, __m256h __B) { - // CHECK-LABEL: @test_mm256_cmul_pch + // CHECK-LABEL: test_mm256_cmul_pch // CHECK: @llvm.x86.avx512fp16.mask.vfcmul.cph.256 return _mm256_cmul_pch(__A, __B); } __m256h test_mm256_mask_cmul_pch(__m256h __W, __mmask8 __U, __m256h __A, __m256h __B) { - // CHECK-LABEL: @test_mm256_mask_cmul_pch + // CHECK-LABEL: test_mm256_mask_cmul_pch // CHECK: @llvm.x86.avx512fp16.mask.vfcmul.cph.256 return _mm256_mask_cmul_pch(__W, __U, __A, __B); } __m256h test_mm256_maskz_cmul_pch(__mmask8 __U, __m256h __A, __m256h __B) { - // CHECK-LABEL: @test_mm256_maskz_cmul_pch + // CHECK-LABEL: test_mm256_maskz_cmul_pch // CHECK: @llvm.x86.avx512fp16.mask.vfcmul.cph.256 return _mm256_maskz_cmul_pch(__U, __A, __B); } diff --git a/clang/test/CodeGen/X86/avx512vlvbmi2-builtins.c b/clang/test/CodeGen/X86/avx512vlvbmi2-builtins.c index 5760c71..7259325 100644 --- a/clang/test/CodeGen/X86/avx512vlvbmi2-builtins.c +++ b/clang/test/CodeGen/X86/avx512vlvbmi2-builtins.c @@ -1,652 +1,655 @@ -// RUN: %clang_cc1 -flax-vector-conversions=none -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +avx512vl -target-feature +avx512vbmi2 -emit-llvm -o - -Wall -Werror | FileCheck %s +// RUN: %clang_cc1 -x c -flax-vector-conversions=none -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +avx512vl -target-feature +avx512vbmi2 -emit-llvm -o - -Wall -Werror | FileCheck %s +// RUN: %clang_cc1 -x c -flax-vector-conversions=none -ffreestanding %s -triple=i386-apple-darwin -target-feature +avx512vl -target-feature +avx512vbmi2 -emit-llvm -o - -Wall -Werror | FileCheck %s +// RUN: %clang_cc1 -x c++ -flax-vector-conversions=none -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +avx512vl -target-feature +avx512vbmi2 -emit-llvm -o - -Wall -Werror | FileCheck %s +// RUN: %clang_cc1 -x c++ -flax-vector-conversions=none -ffreestanding %s -triple=i386-apple-darwin -target-feature +avx512vl -target-feature +avx512vbmi2 -emit-llvm -o - -Wall -Werror | FileCheck %s #include <immintrin.h> __m128i test_mm_mask_compress_epi16(__m128i __S, __mmask8 __U, __m128i __D) { - // CHECK-LABEL: @test_mm_mask_compress_epi16 - // CHECK: @llvm.x86.avx512.mask.compress + // CHECK-LABEL: test_mm_mask_compress_epi16 + // CHECK: call <8 x i16> @llvm.x86.avx512.mask.compress.v8i16(<8 x i16> %{{.*}}, <8 x i16> %{{.*}}, <8 x i1> %{{.*}}) return _mm_mask_compress_epi16(__S, __U, __D); } __m128i test_mm_maskz_compress_epi16(__mmask8 __U, __m128i __D) { - // CHECK-LABEL: @test_mm_maskz_compress_epi16 - // CHECK: @llvm.x86.avx512.mask.compress + // CHECK-LABEL: test_mm_maskz_compress_epi16 + // CHECK: call <8 x i16> @llvm.x86.avx512.mask.compress.v8i16(<8 x i16> %{{.*}}, <8 x i16> %{{.*}}, <8 x i1> %{{.*}}) return _mm_maskz_compress_epi16(__U, __D); } __m128i test_mm_mask_compress_epi8(__m128i __S, __mmask16 __U, __m128i __D) { - // CHECK-LABEL: @test_mm_mask_compress_epi8 - // CHECK: @llvm.x86.avx512.mask.compress + // CHECK-LABEL: test_mm_mask_compress_epi8 + // CHECK: call <16 x i8> @llvm.x86.avx512.mask.compress.v16i8(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, <16 x i1> %{{.*}}) return _mm_mask_compress_epi8(__S, __U, __D); } __m128i test_mm_maskz_compress_epi8(__mmask16 __U, __m128i __D) { - // CHECK-LABEL: @test_mm_maskz_compress_epi8 - // CHECK: @llvm.x86.avx512.mask.compress + // CHECK-LABEL: test_mm_maskz_compress_epi8 + // CHECK: call <16 x i8> @llvm.x86.avx512.mask.compress.v16i8(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, <16 x i1> %{{.*}}) return _mm_maskz_compress_epi8(__U, __D); } void test_mm_mask_compressstoreu_epi16(void *__P, __mmask8 __U, __m128i __D) { - // CHECK-LABEL: @test_mm_mask_compressstoreu_epi16 - // CHECK: @llvm.masked.compressstore.v8i16(<8 x i16> %{{.*}}, ptr %{{.*}}, <8 x i1> %{{.*}}) + // CHECK-LABEL: test_mm_mask_compressstoreu_epi16 + // CHECK: call void @llvm.masked.compressstore.v8i16(<8 x i16> %{{.*}}, ptr %{{.*}}, <8 x i1> %{{.*}}) _mm_mask_compressstoreu_epi16(__P, __U, __D); } void test_mm_mask_compressstoreu_epi8(void *__P, __mmask16 __U, __m128i __D) { - // CHECK-LABEL: @test_mm_mask_compressstoreu_epi8 - // CHECK: @llvm.masked.compressstore.v16i8(<16 x i8> %{{.*}}, ptr %{{.*}}, <16 x i1> %{{.*}}) + // CHECK-LABEL: test_mm_mask_compressstoreu_epi8 + // CHECK: call void @llvm.masked.compressstore.v16i8(<16 x i8> %{{.*}}, ptr %{{.*}}, <16 x i1> %{{.*}}) _mm_mask_compressstoreu_epi8(__P, __U, __D); } __m128i test_mm_mask_expand_epi16(__m128i __S, __mmask8 __U, __m128i __D) { - // CHECK-LABEL: @test_mm_mask_expand_epi16 - // CHECK: @llvm.x86.avx512.mask.expand + // CHECK-LABEL: test_mm_mask_expand_epi16 + // CHECK: call <8 x i16> @llvm.x86.avx512.mask.expand.v8i16(<8 x i16> %{{.*}}, <8 x i16> %{{.*}}, <8 x i1> %{{.*}}) return _mm_mask_expand_epi16(__S, __U, __D); } __m128i test_mm_maskz_expand_epi16(__mmask8 __U, __m128i __D) { - // CHECK-LABEL: @test_mm_maskz_expand_epi16 - // CHECK: @llvm.x86.avx512.mask.expand + // CHECK-LABEL: test_mm_maskz_expand_epi16 + // CHECK: call <8 x i16> @llvm.x86.avx512.mask.expand.v8i16(<8 x i16> %{{.*}}, <8 x i16> %{{.*}}, <8 x i1> %{{.*}}) return _mm_maskz_expand_epi16(__U, __D); } __m128i test_mm_mask_expand_epi8(__m128i __S, __mmask16 __U, __m128i __D) { - // CHECK-LABEL: @test_mm_mask_expand_epi8 - // CHECK: @llvm.x86.avx512.mask.expand + // CHECK-LABEL: test_mm_mask_expand_epi8 + // CHECK: call <16 x i8> @llvm.x86.avx512.mask.expand.v16i8(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, <16 x i1> %{{.*}}) return _mm_mask_expand_epi8(__S, __U, __D); } __m128i test_mm_maskz_expand_epi8(__mmask16 __U, __m128i __D) { - // CHECK-LABEL: @test_mm_maskz_expand_epi8 - // CHECK: @llvm.x86.avx512.mask.expand + // CHECK-LABEL: test_mm_maskz_expand_epi8 + // CHECK: call <16 x i8> @llvm.x86.avx512.mask.expand.v16i8(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, <16 x i1> %{{.*}}) return _mm_maskz_expand_epi8(__U, __D); } __m128i test_mm_mask_expandloadu_epi16(__m128i __S, __mmask8 __U, void const* __P) { - // CHECK-LABEL: @test_mm_mask_expandloadu_epi16 - // CHECK: @llvm.masked.expandload.v8i16(ptr %{{.*}}, <8 x i1> %{{.*}}, <8 x i16> %{{.*}}) + // CHECK-LABEL: test_mm_mask_expandloadu_epi16 + // CHECK: call <8 x i16> @llvm.masked.expandload.v8i16(ptr %{{.*}}, <8 x i1> %{{.*}}, <8 x i16> %{{.*}}) return _mm_mask_expandloadu_epi16(__S, __U, __P); } __m128i test_mm_maskz_expandloadu_epi16(__mmask8 __U, void const* __P) { - // CHECK-LABEL: @test_mm_maskz_expandloadu_epi16 - // CHECK: @llvm.masked.expandload.v8i16(ptr %{{.*}}, <8 x i1> %{{.*}}, <8 x i16> %{{.*}}) + // CHECK-LABEL: test_mm_maskz_expandloadu_epi16 + // CHECK: call <8 x i16> @llvm.masked.expandload.v8i16(ptr %{{.*}}, <8 x i1> %{{.*}}, <8 x i16> %{{.*}}) return _mm_maskz_expandloadu_epi16(__U, __P); } __m128i test_mm_mask_expandloadu_epi8(__m128i __S, __mmask16 __U, void const* __P) { - // CHECK-LABEL: @test_mm_mask_expandloadu_epi8 - // CHECK: @llvm.masked.expandload.v16i8(ptr %{{.*}}, <16 x i1> %{{.*}}, <16 x i8> %{{.*}}) + // CHECK-LABEL: test_mm_mask_expandloadu_epi8 + // CHECK: call <16 x i8> @llvm.masked.expandload.v16i8(ptr %{{.*}}, <16 x i1> %{{.*}}, <16 x i8> %{{.*}}) return _mm_mask_expandloadu_epi8(__S, __U, __P); } __m128i test_mm_maskz_expandloadu_epi8(__mmask16 __U, void const* __P) { - // CHECK-LABEL: @test_mm_maskz_expandloadu_epi8 - // CHECK: @llvm.masked.expandload.v16i8(ptr %{{.*}}, <16 x i1> %{{.*}}, <16 x i8> %{{.*}}) + // CHECK-LABEL: test_mm_maskz_expandloadu_epi8 + // CHECK: call <16 x i8> @llvm.masked.expandload.v16i8(ptr %{{.*}}, <16 x i1> %{{.*}}, <16 x i8> %{{.*}}) return _mm_maskz_expandloadu_epi8(__U, __P); } __m256i test_mm256_mask_compress_epi16(__m256i __S, __mmask16 __U, __m256i __D) { - // CHECK-LABEL: @test_mm256_mask_compress_epi16 - // CHECK: @llvm.x86.avx512.mask.compress + // CHECK-LABEL: test_mm256_mask_compress_epi16 + // CHECK: call <16 x i16> @llvm.x86.avx512.mask.compress.v16i16(<16 x i16> %{{.*}}, <16 x i16> %{{.*}}, <16 x i1> %{{.*}}) return _mm256_mask_compress_epi16(__S, __U, __D); } __m256i test_mm256_maskz_compress_epi16(__mmask16 __U, __m256i __D) { - // CHECK-LABEL: @test_mm256_maskz_compress_epi16 - // CHECK: @llvm.x86.avx512.mask.compress + // CHECK-LABEL: test_mm256_maskz_compress_epi16 + // CHECK: call <16 x i16> @llvm.x86.avx512.mask.compress.v16i16(<16 x i16> %{{.*}}, <16 x i16> %{{.*}}, <16 x i1> %{{.*}}) return _mm256_maskz_compress_epi16(__U, __D); } __m256i test_mm256_mask_compress_epi8(__m256i __S, __mmask32 __U, __m256i __D) { - // CHECK-LABEL: @test_mm256_mask_compress_epi8 - // CHECK: @llvm.x86.avx512.mask.compress + // CHECK-LABEL: test_mm256_mask_compress_epi8 + // CHECK: call <32 x i8> @llvm.x86.avx512.mask.compress.v32i8(<32 x i8> %{{.*}}, <32 x i8> %{{.*}}, <32 x i1> %{{.*}}) return _mm256_mask_compress_epi8(__S, __U, __D); } __m256i test_mm256_maskz_compress_epi8(__mmask32 __U, __m256i __D) { - // CHECK-LABEL: @test_mm256_maskz_compress_epi8 - // CHECK: @llvm.x86.avx512.mask.compress + // CHECK-LABEL: test_mm256_maskz_compress_epi8 + // CHECK: call <32 x i8> @llvm.x86.avx512.mask.compress.v32i8(<32 x i8> %{{.*}}, <32 x i8> %{{.*}}, <32 x i1> %{{.*}}) return _mm256_maskz_compress_epi8(__U, __D); } void test_mm256_mask_compressstoreu_epi16(void *__P, __mmask16 __U, __m256i __D) { - // CHECK-LABEL: @test_mm256_mask_compressstoreu_epi16 - // CHECK: @llvm.masked.compressstore.v16i16(<16 x i16> %{{.*}}, ptr %{{.*}}, <16 x i1> %{{.*}}) + // CHECK-LABEL: test_mm256_mask_compressstoreu_epi16 + // CHECK: call void @llvm.masked.compressstore.v16i16(<16 x i16> %{{.*}}, ptr %{{.*}}, <16 x i1> %{{.*}}) _mm256_mask_compressstoreu_epi16(__P, __U, __D); } void test_mm256_mask_compressstoreu_epi8(void *__P, __mmask32 __U, __m256i __D) { - // CHECK-LABEL: @test_mm256_mask_compressstoreu_epi8 - // CHECK: @llvm.masked.compressstore.v32i8(<32 x i8> %{{.*}}, ptr %{{.*}}, <32 x i1> %{{.*}}) + // CHECK-LABEL: test_mm256_mask_compressstoreu_epi8 + // CHECK: call void @llvm.masked.compressstore.v32i8(<32 x i8> %{{.*}}, ptr %{{.*}}, <32 x i1> %{{.*}}) _mm256_mask_compressstoreu_epi8(__P, __U, __D); } __m256i test_mm256_mask_expand_epi16(__m256i __S, __mmask16 __U, __m256i __D) { - // CHECK-LABEL: @test_mm256_mask_expand_epi16 - // CHECK: @llvm.x86.avx512.mask.expand + // CHECK-LABEL: test_mm256_mask_expand_epi16 + // CHECK: call <16 x i16> @llvm.x86.avx512.mask.expand.v16i16(<16 x i16> %{{.*}}, <16 x i16> %{{.*}}, <16 x i1> %{{.*}}) return _mm256_mask_expand_epi16(__S, __U, __D); } __m256i test_mm256_maskz_expand_epi16(__mmask16 __U, __m256i __D) { - // CHECK-LABEL: @test_mm256_maskz_expand_epi16 - // CHECK: @llvm.x86.avx512.mask.expand + // CHECK-LABEL: test_mm256_maskz_expand_epi16 + // CHECK: call <16 x i16> @llvm.x86.avx512.mask.expand.v16i16(<16 x i16> %{{.*}}, <16 x i16> %{{.*}}, <16 x i1> %{{.*}}) return _mm256_maskz_expand_epi16(__U, __D); } __m256i test_mm256_mask_expand_epi8(__m256i __S, __mmask32 __U, __m256i __D) { - // CHECK-LABEL: @test_mm256_mask_expand_epi8 - // CHECK: @llvm.x86.avx512.mask.expand + // CHECK-LABEL: test_mm256_mask_expand_epi8 + // CHECK: call <32 x i8> @llvm.x86.avx512.mask.expand.v32i8(<32 x i8> %{{.*}}, <32 x i8> %{{.*}}, <32 x i1> %{{.*}}) return _mm256_mask_expand_epi8(__S, __U, __D); } __m256i test_mm256_maskz_expand_epi8(__mmask32 __U, __m256i __D) { - // CHECK-LABEL: @test_mm256_maskz_expand_epi8 - // CHECK: @llvm.x86.avx512.mask.expand + // CHECK-LABEL: test_mm256_maskz_expand_epi8 + // CHECK: call <32 x i8> @llvm.x86.avx512.mask.expand.v32i8(<32 x i8> %{{.*}}, <32 x i8> %{{.*}}, <32 x i1> %{{.*}}) return _mm256_maskz_expand_epi8(__U, __D); } __m256i test_mm256_mask_expandloadu_epi16(__m256i __S, __mmask16 __U, void const* __P) { - // CHECK-LABEL: @test_mm256_mask_expandloadu_epi16 - // CHECK: @llvm.masked.expandload.v16i16(ptr %{{.*}}, <16 x i1> %{{.*}}, <16 x i16> %{{.*}}) + // CHECK-LABEL: test_mm256_mask_expandloadu_epi16 + // CHECK: call <16 x i16> @llvm.masked.expandload.v16i16(ptr %{{.*}}, <16 x i1> %{{.*}}, <16 x i16> %{{.*}}) return _mm256_mask_expandloadu_epi16(__S, __U, __P); } __m256i test_mm256_maskz_expandloadu_epi16(__mmask16 __U, void const* __P) { - // CHECK-LABEL: @test_mm256_maskz_expandloadu_epi16 - // CHECK: @llvm.masked.expandload.v16i16(ptr %{{.*}}, <16 x i1> %{{.*}}, <16 x i16> %{{.*}}) + // CHECK-LABEL: test_mm256_maskz_expandloadu_epi16 + // CHECK: call <16 x i16> @llvm.masked.expandload.v16i16(ptr %{{.*}}, <16 x i1> %{{.*}}, <16 x i16> %{{.*}}) return _mm256_maskz_expandloadu_epi16(__U, __P); } __m256i test_mm256_mask_expandloadu_epi8(__m256i __S, __mmask32 __U, void const* __P) { - // CHECK-LABEL: @test_mm256_mask_expandloadu_epi8 - // CHECK: @llvm.masked.expandload.v32i8(ptr %{{.*}}, <32 x i1> %{{.*}}, <32 x i8> %{{.*}}) + // CHECK-LABEL: test_mm256_mask_expandloadu_epi8 + // CHECK: call <32 x i8> @llvm.masked.expandload.v32i8(ptr %{{.*}}, <32 x i1> %{{.*}}, <32 x i8> %{{.*}}) return _mm256_mask_expandloadu_epi8(__S, __U, __P); } __m256i test_mm256_maskz_expandloadu_epi8(__mmask32 __U, void const* __P) { - // CHECK-LABEL: @test_mm256_maskz_expandloadu_epi8 - // CHECK: @llvm.masked.expandload.v32i8(ptr %{{.*}}, <32 x i1> %{{.*}}, <32 x i8> %{{.*}}) + // CHECK-LABEL: test_mm256_maskz_expandloadu_epi8 + // CHECK: call <32 x i8> @llvm.masked.expandload.v32i8(ptr %{{.*}}, <32 x i1> %{{.*}}, <32 x i8> %{{.*}}) return _mm256_maskz_expandloadu_epi8(__U, __P); } __m256i test_mm256_mask_shldi_epi64(__m256i __S, __mmask8 __U, __m256i __A, __m256i __B) { - // CHECK-LABEL: @test_mm256_mask_shldi_epi64 - // CHECK: @llvm.fshl.v4i64(<4 x i64> %{{.*}}, <4 x i64> %{{.*}}, <4 x i64> splat (i64 47)) + // CHECK-LABEL: test_mm256_mask_shldi_epi64 + // CHECK: call <4 x i64> @llvm.fshl.v4i64(<4 x i64> %{{.*}}, <4 x i64> %{{.*}}, <4 x i64> splat (i64 47)) // CHECK: select <4 x i1> %{{.*}}, <4 x i64> %{{.*}}, <4 x i64> %{{.*}} return _mm256_mask_shldi_epi64(__S, __U, __A, __B, 47); } __m256i test_mm256_maskz_shldi_epi64(__mmask8 __U, __m256i __A, __m256i __B) { - // CHECK-LABEL: @test_mm256_maskz_shldi_epi64 - // CHECK: @llvm.fshl.v4i64(<4 x i64> %{{.*}}, <4 x i64> %{{.*}}, <4 x i64> splat (i64 63)) + // CHECK-LABEL: test_mm256_maskz_shldi_epi64 + // CHECK: call <4 x i64> @llvm.fshl.v4i64(<4 x i64> %{{.*}}, <4 x i64> %{{.*}}, <4 x i64> splat (i64 63)) // CHECK: select <4 x i1> %{{.*}}, <4 x i64> %{{.*}}, <4 x i64> %{{.*}} return _mm256_maskz_shldi_epi64(__U, __A, __B, 63); } __m256i test_mm256_shldi_epi64(__m256i __A, __m256i __B) { - // CHECK-LABEL: @test_mm256_shldi_epi64 - // CHECK: @llvm.fshl.v4i64(<4 x i64> %{{.*}}, <4 x i64> %{{.*}}, <4 x i64> splat (i64 31)) + // CHECK-LABEL: test_mm256_shldi_epi64 + // CHECK: call <4 x i64> @llvm.fshl.v4i64(<4 x i64> %{{.*}}, <4 x i64> %{{.*}}, <4 x i64> splat (i64 31)) return _mm256_shldi_epi64(__A, __B, 31); } __m128i test_mm_mask_shldi_epi64(__m128i __S, __mmask8 __U, __m128i __A, __m128i __B) { - // CHECK-LABEL: @test_mm_mask_shldi_epi64 - // CHECK: @llvm.fshl.v2i64(<2 x i64> %{{.*}}, <2 x i64> %{{.*}}, <2 x i64> splat (i64 47)) + // CHECK-LABEL: test_mm_mask_shldi_epi64 + // CHECK: call <2 x i64> @llvm.fshl.v2i64(<2 x i64> %{{.*}}, <2 x i64> %{{.*}}, <2 x i64> splat (i64 47)) // CHECK: select <2 x i1> %{{.*}}, <2 x i64> %{{.*}}, <2 x i64> %{{.*}} return _mm_mask_shldi_epi64(__S, __U, __A, __B, 47); } __m128i test_mm_maskz_shldi_epi64(__mmask8 __U, __m128i __A, __m128i __B) { - // CHECK-LABEL: @test_mm_maskz_shldi_epi64 - // CHECK: @llvm.fshl.v2i64(<2 x i64> %{{.*}}, <2 x i64> %{{.*}}, <2 x i64> splat (i64 63)) + // CHECK-LABEL: test_mm_maskz_shldi_epi64 + // CHECK: call <2 x i64> @llvm.fshl.v2i64(<2 x i64> %{{.*}}, <2 x i64> %{{.*}}, <2 x i64> splat (i64 63)) // CHECK: select <2 x i1> %{{.*}}, <2 x i64> %{{.*}}, <2 x i64> %{{.*}} return _mm_maskz_shldi_epi64(__U, __A, __B, 63); } __m128i test_mm_shldi_epi64(__m128i __A, __m128i __B) { - // CHECK-LABEL: @test_mm_shldi_epi64 - // CHECK: @llvm.fshl.v2i64(<2 x i64> %{{.*}}, <2 x i64> %{{.*}}, <2 x i64> splat (i64 31)) + // CHECK-LABEL: test_mm_shldi_epi64 + // CHECK: call <2 x i64> @llvm.fshl.v2i64(<2 x i64> %{{.*}}, <2 x i64> %{{.*}}, <2 x i64> splat (i64 31)) return _mm_shldi_epi64(__A, __B, 31); } __m256i test_mm256_mask_shldi_epi32(__m256i __S, __mmask8 __U, __m256i __A, __m256i __B) { - // CHECK-LABEL: @test_mm256_mask_shldi_epi32 - // CHECK: @llvm.fshl.v8i32(<8 x i32> %{{.*}}, <8 x i32> %{{.*}}, <8 x i32> splat (i32 7)) + // CHECK-LABEL: test_mm256_mask_shldi_epi32 + // CHECK: call <8 x i32> @llvm.fshl.v8i32(<8 x i32> %{{.*}}, <8 x i32> %{{.*}}, <8 x i32> splat (i32 7)) // CHECK: select <8 x i1> %{{.*}}, <8 x i32> %{{.*}}, <8 x i32> %{{.*}} return _mm256_mask_shldi_epi32(__S, __U, __A, __B, 7); } __m256i test_mm256_maskz_shldi_epi32(__mmask8 __U, __m256i __A, __m256i __B) { - // CHECK-LABEL: @test_mm256_maskz_shldi_epi32 - // CHECK: @llvm.fshl.v8i32(<8 x i32> %{{.*}}, <8 x i32> %{{.*}}, <8 x i32> splat (i32 15)) + // CHECK-LABEL: test_mm256_maskz_shldi_epi32 + // CHECK: call <8 x i32> @llvm.fshl.v8i32(<8 x i32> %{{.*}}, <8 x i32> %{{.*}}, <8 x i32> splat (i32 15)) // CHECK: select <8 x i1> %{{.*}}, <8 x i32> %{{.*}}, <8 x i32> %{{.*}} return _mm256_maskz_shldi_epi32(__U, __A, __B, 15); } __m256i test_mm256_shldi_epi32(__m256i __A, __m256i __B) { - // CHECK-LABEL: @test_mm256_shldi_epi32 - // CHECK: @llvm.fshl.v8i32(<8 x i32> %{{.*}}, <8 x i32> %{{.*}}, <8 x i32> splat (i32 31)) + // CHECK-LABEL: test_mm256_shldi_epi32 + // CHECK: call <8 x i32> @llvm.fshl.v8i32(<8 x i32> %{{.*}}, <8 x i32> %{{.*}}, <8 x i32> splat (i32 31)) return _mm256_shldi_epi32(__A, __B, 31); } __m128i test_mm_mask_shldi_epi32(__m128i __S, __mmask8 __U, __m128i __A, __m128i __B) { - // CHECK-LABEL: @test_mm_mask_shldi_epi32 - // CHECK: @llvm.fshl.v4i32(<4 x i32> %{{.*}}, <4 x i32> %{{.*}}, <4 x i32> splat (i32 7)) + // CHECK-LABEL: test_mm_mask_shldi_epi32 + // CHECK: call <4 x i32> @llvm.fshl.v4i32(<4 x i32> %{{.*}}, <4 x i32> %{{.*}}, <4 x i32> splat (i32 7)) // CHECK: select <4 x i1> %{{.*}}, <4 x i32> %{{.*}}, <4 x i32> %{{.*}} return _mm_mask_shldi_epi32(__S, __U, __A, __B, 7); } __m128i test_mm_maskz_shldi_epi32(__mmask8 __U, __m128i __A, __m128i __B) { - // CHECK-LABEL: @test_mm_maskz_shldi_epi32 - // CHECK: @llvm.fshl.v4i32(<4 x i32> %{{.*}}, <4 x i32> %{{.*}}, <4 x i32> splat (i32 15)) + // CHECK-LABEL: test_mm_maskz_shldi_epi32 + // CHECK: call <4 x i32> @llvm.fshl.v4i32(<4 x i32> %{{.*}}, <4 x i32> %{{.*}}, <4 x i32> splat (i32 15)) // CHECK: select <4 x i1> %{{.*}}, <4 x i32> %{{.*}}, <4 x i32> %{{.*}} return _mm_maskz_shldi_epi32(__U, __A, __B, 15); } __m128i test_mm_shldi_epi32(__m128i __A, __m128i __B) { - // CHECK-LABEL: @test_mm_shldi_epi32 - // CHECK: @llvm.fshl.v4i32(<4 x i32> %{{.*}}, <4 x i32> %{{.*}}, <4 x i32> splat (i32 31)) + // CHECK-LABEL: test_mm_shldi_epi32 + // CHECK: call <4 x i32> @llvm.fshl.v4i32(<4 x i32> %{{.*}}, <4 x i32> %{{.*}}, <4 x i32> splat (i32 31)) return _mm_shldi_epi32(__A, __B, 31); } __m256i test_mm256_mask_shldi_epi16(__m256i __S, __mmask16 __U, __m256i __A, __m256i __B) { - // CHECK-LABEL: @test_mm256_mask_shldi_epi16 - // CHECK: @llvm.fshl.v16i16(<16 x i16> %{{.*}}, <16 x i16> %{{.*}}, <16 x i16> splat (i16 3)) + // CHECK-LABEL: test_mm256_mask_shldi_epi16 + // CHECK: call <16 x i16> @llvm.fshl.v16i16(<16 x i16> %{{.*}}, <16 x i16> %{{.*}}, <16 x i16> splat (i16 3)) // CHECK: select <16 x i1> %{{.*}}, <16 x i16> %{{.*}}, <16 x i16> %{{.*}} return _mm256_mask_shldi_epi16(__S, __U, __A, __B, 3); } __m256i test_mm256_maskz_shldi_epi16(__mmask16 __U, __m256i __A, __m256i __B) { - // CHECK-LABEL: @test_mm256_maskz_shldi_epi16 - // CHECK: @llvm.fshl.v16i16(<16 x i16> %{{.*}}, <16 x i16> %{{.*}}, <16 x i16> splat (i16 7)) + // CHECK-LABEL: test_mm256_maskz_shldi_epi16 + // CHECK: call <16 x i16> @llvm.fshl.v16i16(<16 x i16> %{{.*}}, <16 x i16> %{{.*}}, <16 x i16> splat (i16 7)) // CHECK: select <16 x i1> %{{.*}}, <16 x i16> %{{.*}}, <16 x i16> %{{.*}} return _mm256_maskz_shldi_epi16(__U, __A, __B, 7); } __m256i test_mm256_shldi_epi16(__m256i __A, __m256i __B) { - // CHECK-LABEL: @test_mm256_shldi_epi16 - // CHECK: @llvm.fshl.v16i16(<16 x i16> %{{.*}}, <16 x i16> %{{.*}}, <16 x i16> splat (i16 31)) + // CHECK-LABEL: test_mm256_shldi_epi16 + // CHECK: call <16 x i16> @llvm.fshl.v16i16(<16 x i16> %{{.*}}, <16 x i16> %{{.*}}, <16 x i16> splat (i16 31)) return _mm256_shldi_epi16(__A, __B, 31); } __m128i test_mm_mask_shldi_epi16(__m128i __S, __mmask8 __U, __m128i __A, __m128i __B) { - // CHECK-LABEL: @test_mm_mask_shldi_epi16 - // CHECK: @llvm.fshl.v8i16(<8 x i16> %{{.*}}, <8 x i16> %{{.*}}, <8 x i16> splat (i16 3)) + // CHECK-LABEL: test_mm_mask_shldi_epi16 + // CHECK: call <8 x i16> @llvm.fshl.v8i16(<8 x i16> %{{.*}}, <8 x i16> %{{.*}}, <8 x i16> splat (i16 3)) // CHECK: select <8 x i1> %{{.*}}, <8 x i16> %{{.*}}, <8 x i16> %{{.*}} return _mm_mask_shldi_epi16(__S, __U, __A, __B, 3); } __m128i test_mm_maskz_shldi_epi16(__mmask8 __U, __m128i __A, __m128i __B) { - // CHECK-LABEL: @test_mm_maskz_shldi_epi16 - // CHECK: @llvm.fshl.v8i16(<8 x i16> %{{.*}}, <8 x i16> %{{.*}}, <8 x i16> splat (i16 7)) + // CHECK-LABEL: test_mm_maskz_shldi_epi16 + // CHECK: call <8 x i16> @llvm.fshl.v8i16(<8 x i16> %{{.*}}, <8 x i16> %{{.*}}, <8 x i16> splat (i16 7)) // CHECK: select <8 x i1> %{{.*}}, <8 x i16> %{{.*}}, <8 x i16> %{{.*}} return _mm_maskz_shldi_epi16(__U, __A, __B, 7); } __m128i test_mm_shldi_epi16(__m128i __A, __m128i __B) { - // CHECK-LABEL: @test_mm_shldi_epi16 - // CHECK: @llvm.fshl.v8i16(<8 x i16> %{{.*}}, <8 x i16> %{{.*}}, <8 x i16> splat (i16 31)) + // CHECK-LABEL: test_mm_shldi_epi16 + // CHECK: call <8 x i16> @llvm.fshl.v8i16(<8 x i16> %{{.*}}, <8 x i16> %{{.*}}, <8 x i16> splat (i16 31)) return _mm_shldi_epi16(__A, __B, 31); } __m256i test_mm256_mask_shrdi_epi64(__m256i __S, __mmask8 __U, __m256i __A, __m256i __B) { - // CHECK-LABEL: @test_mm256_mask_shrdi_epi64 - // CHECK: @llvm.fshr.v4i64(<4 x i64> %{{.*}}, <4 x i64> %{{.*}}, <4 x i64> splat (i64 47)) + // CHECK-LABEL: test_mm256_mask_shrdi_epi64 + // CHECK: call <4 x i64> @llvm.fshr.v4i64(<4 x i64> %{{.*}}, <4 x i64> %{{.*}}, <4 x i64> splat (i64 47)) // CHECK: select <4 x i1> %{{.*}}, <4 x i64> %{{.*}}, <4 x i64> %{{.*}} return _mm256_mask_shrdi_epi64(__S, __U, __A, __B, 47); } __m256i test_mm256_maskz_shrdi_epi64(__mmask8 __U, __m256i __A, __m256i __B) { - // CHECK-LABEL: @test_mm256_maskz_shrdi_epi64 - // CHECK: @llvm.fshr.v4i64(<4 x i64> %{{.*}}, <4 x i64> %{{.*}}, <4 x i64> splat (i64 63)) + // CHECK-LABEL: test_mm256_maskz_shrdi_epi64 + // CHECK: call <4 x i64> @llvm.fshr.v4i64(<4 x i64> %{{.*}}, <4 x i64> %{{.*}}, <4 x i64> splat (i64 63)) // CHECK: select <4 x i1> %{{.*}}, <4 x i64> %{{.*}}, <4 x i64> %{{.*}} return _mm256_maskz_shrdi_epi64(__U, __A, __B, 63); } __m256i test_mm256_shrdi_epi64(__m256i __A, __m256i __B) { - // CHECK-LABEL: @test_mm256_shrdi_epi64 - // CHECK: @llvm.fshr.v4i64(<4 x i64> %{{.*}}, <4 x i64> %{{.*}}, <4 x i64> splat (i64 31) + // CHECK-LABEL: test_mm256_shrdi_epi64 + // CHECK: call <4 x i64> @llvm.fshr.v4i64(<4 x i64> %{{.*}}, <4 x i64> %{{.*}}, <4 x i64> splat (i64 31) return _mm256_shrdi_epi64(__A, __B, 31); } __m128i test_mm_mask_shrdi_epi64(__m128i __S, __mmask8 __U, __m128i __A, __m128i __B) { - // CHECK-LABEL: @test_mm_mask_shrdi_epi64 - // CHECK: @llvm.fshr.v2i64(<2 x i64> %{{.*}}, <2 x i64> %{{.*}}, <2 x i64> splat (i64 47)) + // CHECK-LABEL: test_mm_mask_shrdi_epi64 + // CHECK: call <2 x i64> @llvm.fshr.v2i64(<2 x i64> %{{.*}}, <2 x i64> %{{.*}}, <2 x i64> splat (i64 47)) // CHECK: select <2 x i1> %{{.*}}, <2 x i64> %{{.*}}, <2 x i64> %{{.*}} return _mm_mask_shrdi_epi64(__S, __U, __A, __B, 47); } __m128i test_mm_maskz_shrdi_epi64(__mmask8 __U, __m128i __A, __m128i __B) { - // CHECK-LABEL: @test_mm_maskz_shrdi_epi64 - // CHECK: @llvm.fshr.v2i64(<2 x i64> %{{.*}}, <2 x i64> %{{.*}}, <2 x i64> splat (i64 63)) + // CHECK-LABEL: test_mm_maskz_shrdi_epi64 + // CHECK: call <2 x i64> @llvm.fshr.v2i64(<2 x i64> %{{.*}}, <2 x i64> %{{.*}}, <2 x i64> splat (i64 63)) // CHECK: select <2 x i1> %{{.*}}, <2 x i64> %{{.*}}, <2 x i64> %{{.*}} return _mm_maskz_shrdi_epi64(__U, __A, __B, 63); } __m128i test_mm_shrdi_epi64(__m128i __A, __m128i __B) { - // CHECK-LABEL: @test_mm_shrdi_epi64 - // CHECK: @llvm.fshr.v2i64(<2 x i64> %{{.*}}, <2 x i64> %{{.*}}, <2 x i64> splat (i64 31)) + // CHECK-LABEL: test_mm_shrdi_epi64 + // CHECK: call <2 x i64> @llvm.fshr.v2i64(<2 x i64> %{{.*}}, <2 x i64> %{{.*}}, <2 x i64> splat (i64 31)) return _mm_shrdi_epi64(__A, __B, 31); } __m256i test_mm256_mask_shrdi_epi32(__m256i __S, __mmask8 __U, __m256i __A, __m256i __B) { - // CHECK-LABEL: @test_mm256_mask_shrdi_epi32 - // CHECK: @llvm.fshr.v8i32(<8 x i32> %{{.*}}, <8 x i32> %{{.*}}, <8 x i32> splat (i32 7)) + // CHECK-LABEL: test_mm256_mask_shrdi_epi32 + // CHECK: call <8 x i32> @llvm.fshr.v8i32(<8 x i32> %{{.*}}, <8 x i32> %{{.*}}, <8 x i32> splat (i32 7)) // CHECK: select <8 x i1> %{{.*}}, <8 x i32> %{{.*}}, <8 x i32> %{{.*}} return _mm256_mask_shrdi_epi32(__S, __U, __A, __B, 7); } __m256i test_mm256_maskz_shrdi_epi32(__mmask8 __U, __m256i __A, __m256i __B) { - // CHECK-LABEL: @test_mm256_maskz_shrdi_epi32 - // CHECK: @llvm.fshr.v8i32(<8 x i32> %{{.*}}, <8 x i32> %{{.*}}, <8 x i32> splat (i32 15)) + // CHECK-LABEL: test_mm256_maskz_shrdi_epi32 + // CHECK: call <8 x i32> @llvm.fshr.v8i32(<8 x i32> %{{.*}}, <8 x i32> %{{.*}}, <8 x i32> splat (i32 15)) // CHECK: select <8 x i1> %{{.*}}, <8 x i32> %{{.*}}, <8 x i32> %{{.*}} return _mm256_maskz_shrdi_epi32(__U, __A, __B, 15); } __m256i test_mm256_shrdi_epi32(__m256i __A, __m256i __B) { - // CHECK-LABEL: @test_mm256_shrdi_epi32 - // CHECK: @llvm.fshr.v8i32(<8 x i32> %{{.*}}, <8 x i32> %{{.*}}, <8 x i32> splat (i32 31) + // CHECK-LABEL: test_mm256_shrdi_epi32 + // CHECK: call <8 x i32> @llvm.fshr.v8i32(<8 x i32> %{{.*}}, <8 x i32> %{{.*}}, <8 x i32> splat (i32 31) return _mm256_shrdi_epi32(__A, __B, 31); } __m128i test_mm_mask_shrdi_epi32(__m128i __S, __mmask8 __U, __m128i __A, __m128i __B) { - // CHECK-LABEL: @test_mm_mask_shrdi_epi32 - // CHECK: @llvm.fshr.v4i32(<4 x i32> %{{.*}}, <4 x i32> %{{.*}}, <4 x i32> splat (i32 7)) + // CHECK-LABEL: test_mm_mask_shrdi_epi32 + // CHECK: call <4 x i32> @llvm.fshr.v4i32(<4 x i32> %{{.*}}, <4 x i32> %{{.*}}, <4 x i32> splat (i32 7)) // CHECK: select <4 x i1> %{{.*}}, <4 x i32> %{{.*}}, <4 x i32> %{{.*}} return _mm_mask_shrdi_epi32(__S, __U, __A, __B, 7); } __m128i test_mm_maskz_shrdi_epi32(__mmask8 __U, __m128i __A, __m128i __B) { - // CHECK-LABEL: @test_mm_maskz_shrdi_epi32 - // CHECK: @llvm.fshr.v4i32(<4 x i32> %{{.*}}, <4 x i32> %{{.*}}, <4 x i32> splat (i32 15)) + // CHECK-LABEL: test_mm_maskz_shrdi_epi32 + // CHECK: call <4 x i32> @llvm.fshr.v4i32(<4 x i32> %{{.*}}, <4 x i32> %{{.*}}, <4 x i32> splat (i32 15)) // CHECK: select <4 x i1> %{{.*}}, <4 x i32> %{{.*}}, <4 x i32> %{{.*}} return _mm_maskz_shrdi_epi32(__U, __A, __B, 15); } __m128i test_mm_shrdi_epi32(__m128i __A, __m128i __B) { - // CHECK-LABEL: @test_mm_shrdi_epi32 - // CHECK: @llvm.fshr.v4i32(<4 x i32> %{{.*}}, <4 x i32> %{{.*}}, <4 x i32> splat (i32 31)) + // CHECK-LABEL: test_mm_shrdi_epi32 + // CHECK: call <4 x i32> @llvm.fshr.v4i32(<4 x i32> %{{.*}}, <4 x i32> %{{.*}}, <4 x i32> splat (i32 31)) return _mm_shrdi_epi32(__A, __B, 31); } __m256i test_mm256_mask_shrdi_epi16(__m256i __S, __mmask16 __U, __m256i __A, __m256i __B) { - // CHECK-LABEL: @test_mm256_mask_shrdi_epi16 - // CHECK: @llvm.fshr.v16i16(<16 x i16> %{{.*}}, <16 x i16> %{{.*}}, <16 x i16> splat (i16 3)) + // CHECK-LABEL: test_mm256_mask_shrdi_epi16 + // CHECK: call <16 x i16> @llvm.fshr.v16i16(<16 x i16> %{{.*}}, <16 x i16> %{{.*}}, <16 x i16> splat (i16 3)) // CHECK: select <16 x i1> %{{.*}}, <16 x i16> %{{.*}}, <16 x i16> %{{.*}} return _mm256_mask_shrdi_epi16(__S, __U, __A, __B, 3); } __m256i test_mm256_maskz_shrdi_epi16(__mmask16 __U, __m256i __A, __m256i __B) { - // CHECK-LABEL: @test_mm256_maskz_shrdi_epi16 - // CHECK: @llvm.fshr.v16i16(<16 x i16> %{{.*}}, <16 x i16> %{{.*}}, <16 x i16> splat (i16 7)) + // CHECK-LABEL: test_mm256_maskz_shrdi_epi16 + // CHECK: call <16 x i16> @llvm.fshr.v16i16(<16 x i16> %{{.*}}, <16 x i16> %{{.*}}, <16 x i16> splat (i16 7)) // CHECK: select <16 x i1> %{{.*}}, <16 x i16> %{{.*}}, <16 x i16> %{{.*}} return _mm256_maskz_shrdi_epi16(__U, __A, __B, 7); } __m256i test_mm256_shrdi_epi16(__m256i __A, __m256i __B) { - // CHECK-LABEL: @test_mm256_shrdi_epi16 - // CHECK: @llvm.fshr.v16i16(<16 x i16> %{{.*}}, <16 x i16> %{{.*}}, <16 x i16> splat (i16 31)) + // CHECK-LABEL: test_mm256_shrdi_epi16 + // CHECK: call <16 x i16> @llvm.fshr.v16i16(<16 x i16> %{{.*}}, <16 x i16> %{{.*}}, <16 x i16> splat (i16 31)) return _mm256_shrdi_epi16(__A, __B, 31); } __m128i test_mm_mask_shrdi_epi16(__m128i __S, __mmask8 __U, __m128i __A, __m128i __B) { - // CHECK-LABEL: @test_mm_mask_shrdi_epi16 - // CHECK: @llvm.fshr.v8i16(<8 x i16> %{{.*}}, <8 x i16> %{{.*}}, <8 x i16> splat (i16 3)) + // CHECK-LABEL: test_mm_mask_shrdi_epi16 + // CHECK: call <8 x i16> @llvm.fshr.v8i16(<8 x i16> %{{.*}}, <8 x i16> %{{.*}}, <8 x i16> splat (i16 3)) // CHECK: select <8 x i1> %{{.*}}, <8 x i16> %{{.*}}, <8 x i16> %{{.*}} return _mm_mask_shrdi_epi16(__S, __U, __A, __B, 3); } __m128i test_mm_maskz_shrdi_epi16(__mmask8 __U, __m128i __A, __m128i __B) { - // CHECK-LABEL: @test_mm_maskz_shrdi_epi16 - // CHECK: @llvm.fshr.v8i16(<8 x i16> %{{.*}}, <8 x i16> %{{.*}}, <8 x i16> splat (i16 7)) + // CHECK-LABEL: test_mm_maskz_shrdi_epi16 + // CHECK: call <8 x i16> @llvm.fshr.v8i16(<8 x i16> %{{.*}}, <8 x i16> %{{.*}}, <8 x i16> splat (i16 7)) // CHECK: select <8 x i1> %{{.*}}, <8 x i16> %{{.*}}, <8 x i16> %{{.*}} return _mm_maskz_shrdi_epi16(__U, __A, __B, 7); } __m128i test_mm_shrdi_epi16(__m128i __A, __m128i __B) { - // CHECK-LABEL: @test_mm_shrdi_epi16 - // CHECK: @llvm.fshr.v8i16(<8 x i16> %{{.*}}, <8 x i16> %{{.*}}, <8 x i16> splat (i16 31)) + // CHECK-LABEL: test_mm_shrdi_epi16 + // CHECK: call <8 x i16> @llvm.fshr.v8i16(<8 x i16> %{{.*}}, <8 x i16> %{{.*}}, <8 x i16> splat (i16 31)) return _mm_shrdi_epi16(__A, __B, 31); } __m256i test_mm256_mask_shldv_epi64(__m256i __S, __mmask8 __U, __m256i __A, __m256i __B) { - // CHECK-LABEL: @test_mm256_mask_shldv_epi64 - // CHECK: @llvm.fshl.v4i64(<4 x i64> %{{.*}}, <4 x i64> %{{.*}}, <4 x i64> %{{.*}}) + // CHECK-LABEL: test_mm256_mask_shldv_epi64 + // CHECK: call {{.*}}<4 x i64> @llvm.fshl.v4i64(<4 x i64> %{{.*}}, <4 x i64> %{{.*}}, <4 x i64> %{{.*}}) // CHECK: select <4 x i1> %{{.*}}, <4 x i64> %{{.*}}, <4 x i64> %{{.*}} return _mm256_mask_shldv_epi64(__S, __U, __A, __B); } __m256i test_mm256_maskz_shldv_epi64(__mmask8 __U, __m256i __S, __m256i __A, __m256i __B) { - // CHECK-LABEL: @test_mm256_maskz_shldv_epi64 - // CHECK: @llvm.fshl.v4i64(<4 x i64> %{{.*}}, <4 x i64> %{{.*}}, <4 x i64> %{{.*}}) + // CHECK-LABEL: test_mm256_maskz_shldv_epi64 + // CHECK: call {{.*}}<4 x i64> @llvm.fshl.v4i64(<4 x i64> %{{.*}}, <4 x i64> %{{.*}}, <4 x i64> %{{.*}}) // CHECK: select <4 x i1> %{{.*}}, <4 x i64> %{{.*}}, <4 x i64> %{{.*}} return _mm256_maskz_shldv_epi64(__U, __S, __A, __B); } __m256i test_mm256_shldv_epi64(__m256i __S, __m256i __A, __m256i __B) { - // CHECK-LABEL: @test_mm256_shldv_epi64 - // CHECK: @llvm.fshl.v4i64(<4 x i64> %{{.*}}, <4 x i64> %{{.*}}, <4 x i64> %{{.*}}) + // CHECK-LABEL: test_mm256_shldv_epi64 + // CHECK: call {{.*}}<4 x i64> @llvm.fshl.v4i64(<4 x i64> %{{.*}}, <4 x i64> %{{.*}}, <4 x i64> %{{.*}}) return _mm256_shldv_epi64(__S, __A, __B); } __m128i test_mm_mask_shldv_epi64(__m128i __S, __mmask8 __U, __m128i __A, __m128i __B) { - // CHECK-LABEL: @test_mm_mask_shldv_epi64 - // CHECK: @llvm.fshl.v2i64(<2 x i64> %{{.*}}, <2 x i64> %{{.*}}, <2 x i64> %{{.*}}) + // CHECK-LABEL: test_mm_mask_shldv_epi64 + // CHECK: call {{.*}}<2 x i64> @llvm.fshl.v2i64(<2 x i64> %{{.*}}, <2 x i64> %{{.*}}, <2 x i64> %{{.*}}) // CHECK: select <2 x i1> %{{.*}}, <2 x i64> %{{.*}}, <2 x i64> %{{.*}} return _mm_mask_shldv_epi64(__S, __U, __A, __B); } __m128i test_mm_maskz_shldv_epi64(__mmask8 __U, __m128i __S, __m128i __A, __m128i __B) { - // CHECK-LABEL: @test_mm_maskz_shldv_epi64 - // CHECK: @llvm.fshl.v2i64(<2 x i64> %{{.*}}, <2 x i64> %{{.*}}, <2 x i64> %{{.*}}) + // CHECK-LABEL: test_mm_maskz_shldv_epi64 + // CHECK: call {{.*}}<2 x i64> @llvm.fshl.v2i64(<2 x i64> %{{.*}}, <2 x i64> %{{.*}}, <2 x i64> %{{.*}}) // CHECK: select <2 x i1> %{{.*}}, <2 x i64> %{{.*}}, <2 x i64> %{{.*}} return _mm_maskz_shldv_epi64(__U, __S, __A, __B); } __m128i test_mm_shldv_epi64(__m128i __S, __m128i __A, __m128i __B) { - // CHECK-LABEL: @test_mm_shldv_epi64 - // CHECK: @llvm.fshl.v2i64(<2 x i64> %{{.*}}, <2 x i64> %{{.*}}, <2 x i64> %{{.*}}) + // CHECK-LABEL: test_mm_shldv_epi64 + // CHECK: call {{.*}}<2 x i64> @llvm.fshl.v2i64(<2 x i64> %{{.*}}, <2 x i64> %{{.*}}, <2 x i64> %{{.*}}) return _mm_shldv_epi64(__S, __A, __B); } __m256i test_mm256_mask_shldv_epi32(__m256i __S, __mmask8 __U, __m256i __A, __m256i __B) { - // CHECK-LABEL: @test_mm256_mask_shldv_epi32 - // CHECK: @llvm.fshl.v8i32(<8 x i32> %{{.*}}, <8 x i32> %{{.*}}, <8 x i32> %{{.*}}) + // CHECK-LABEL: test_mm256_mask_shldv_epi32 + // CHECK: call <8 x i32> @llvm.fshl.v8i32(<8 x i32> %{{.*}}, <8 x i32> %{{.*}}, <8 x i32> %{{.*}}) // CHECK: select <8 x i1> %{{.*}}, <8 x i32> %{{.*}}, <8 x i32> %{{.*}} return _mm256_mask_shldv_epi32(__S, __U, __A, __B); } __m256i test_mm256_maskz_shldv_epi32(__mmask8 __U, __m256i __S, __m256i __A, __m256i __B) { - // CHECK-LABEL: @test_mm256_maskz_shldv_epi32 - // CHECK: @llvm.fshl.v8i32(<8 x i32> %{{.*}}, <8 x i32> %{{.*}}, <8 x i32> %{{.*}}) + // CHECK-LABEL: test_mm256_maskz_shldv_epi32 + // CHECK: call <8 x i32> @llvm.fshl.v8i32(<8 x i32> %{{.*}}, <8 x i32> %{{.*}}, <8 x i32> %{{.*}}) // CHECK: select <8 x i1> %{{.*}}, <8 x i32> %{{.*}}, <8 x i32> %{{.*}} return _mm256_maskz_shldv_epi32(__U, __S, __A, __B); } __m256i test_mm256_shldv_epi32(__m256i __S, __m256i __A, __m256i __B) { - // CHECK-LABEL: @test_mm256_shldv_epi32 - // CHECK: @llvm.fshl.v8i32(<8 x i32> %{{.*}}, <8 x i32> %{{.*}}, <8 x i32> %{{.*}}) + // CHECK-LABEL: test_mm256_shldv_epi32 + // CHECK: call <8 x i32> @llvm.fshl.v8i32(<8 x i32> %{{.*}}, <8 x i32> %{{.*}}, <8 x i32> %{{.*}}) return _mm256_shldv_epi32(__S, __A, __B); } __m128i test_mm_mask_shldv_epi32(__m128i __S, __mmask8 __U, __m128i __A, __m128i __B) { - // CHECK-LABEL: @test_mm_mask_shldv_epi32 - // CHECK: @llvm.fshl.v4i32(<4 x i32> %{{.*}}, <4 x i32> %{{.*}}, <4 x i32> %{{.*}}) + // CHECK-LABEL: test_mm_mask_shldv_epi32 + // CHECK: call <4 x i32> @llvm.fshl.v4i32(<4 x i32> %{{.*}}, <4 x i32> %{{.*}}, <4 x i32> %{{.*}}) // CHECK: select <4 x i1> %{{.*}}, <4 x i32> %{{.*}}, <4 x i32> %{{.*}} return _mm_mask_shldv_epi32(__S, __U, __A, __B); } __m128i test_mm_maskz_shldv_epi32(__mmask8 __U, __m128i __S, __m128i __A, __m128i __B) { - // CHECK-LABEL: @test_mm_maskz_shldv_epi32 - // CHECK: @llvm.fshl.v4i32(<4 x i32> %{{.*}}, <4 x i32> %{{.*}}, <4 x i32> %{{.*}}) + // CHECK-LABEL: test_mm_maskz_shldv_epi32 + // CHECK: call <4 x i32> @llvm.fshl.v4i32(<4 x i32> %{{.*}}, <4 x i32> %{{.*}}, <4 x i32> %{{.*}}) // CHECK: select <4 x i1> %{{.*}}, <4 x i32> %{{.*}}, <4 x i32> %{{.*}} return _mm_maskz_shldv_epi32(__U, __S, __A, __B); } __m128i test_mm_shldv_epi32(__m128i __S, __m128i __A, __m128i __B) { - // CHECK-LABEL: @test_mm_shldv_epi32 - // CHECK: @llvm.fshl.v4i32(<4 x i32> %{{.*}}, <4 x i32> %{{.*}}, <4 x i32> %{{.*}}) + // CHECK-LABEL: test_mm_shldv_epi32 + // CHECK: call <4 x i32> @llvm.fshl.v4i32(<4 x i32> %{{.*}}, <4 x i32> %{{.*}}, <4 x i32> %{{.*}}) return _mm_shldv_epi32(__S, __A, __B); } __m256i test_mm256_mask_shldv_epi16(__m256i __S, __mmask16 __U, __m256i __A, __m256i __B) { - // CHECK-LABEL: @test_mm256_mask_shldv_epi16 - // CHECK: @llvm.fshl.v16i16(<16 x i16> %{{.*}}, <16 x i16> %{{.*}}, <16 x i16> %{{.*}}) + // CHECK-LABEL: test_mm256_mask_shldv_epi16 + // CHECK: call <16 x i16> @llvm.fshl.v16i16(<16 x i16> %{{.*}}, <16 x i16> %{{.*}}, <16 x i16> %{{.*}}) // CHECK: select <16 x i1> %{{.*}}, <16 x i16> %{{.*}}, <16 x i16> %{{.*}} return _mm256_mask_shldv_epi16(__S, __U, __A, __B); } __m256i test_mm256_maskz_shldv_epi16(__mmask16 __U, __m256i __S, __m256i __A, __m256i __B) { - // CHECK-LABEL: @test_mm256_maskz_shldv_epi16 - // CHECK: @llvm.fshl.v16i16(<16 x i16> %{{.*}}, <16 x i16> %{{.*}}, <16 x i16> %{{.*}}) + // CHECK-LABEL: test_mm256_maskz_shldv_epi16 + // CHECK: call <16 x i16> @llvm.fshl.v16i16(<16 x i16> %{{.*}}, <16 x i16> %{{.*}}, <16 x i16> %{{.*}}) // CHECK: select <16 x i1> %{{.*}}, <16 x i16> %{{.*}}, <16 x i16> %{{.*}} return _mm256_maskz_shldv_epi16(__U, __S, __A, __B); } __m256i test_mm256_shldv_epi16(__m256i __S, __m256i __A, __m256i __B) { - // CHECK-LABEL: @test_mm256_shldv_epi16 - // CHECK: @llvm.fshl.v16i16(<16 x i16> %{{.*}}, <16 x i16> %{{.*}}, <16 x i16> %{{.*}}) + // CHECK-LABEL: test_mm256_shldv_epi16 + // CHECK: call <16 x i16> @llvm.fshl.v16i16(<16 x i16> %{{.*}}, <16 x i16> %{{.*}}, <16 x i16> %{{.*}}) return _mm256_shldv_epi16(__S, __A, __B); } __m128i test_mm_mask_shldv_epi16(__m128i __S, __mmask8 __U, __m128i __A, __m128i __B) { - // CHECK-LABEL: @test_mm_mask_shldv_epi16 - // CHECK: @llvm.fshl.v8i16(<8 x i16> %{{.*}}, <8 x i16> %{{.*}}, <8 x i16> %{{.*}}) + // CHECK-LABEL: test_mm_mask_shldv_epi16 + // CHECK: call <8 x i16> @llvm.fshl.v8i16(<8 x i16> %{{.*}}, <8 x i16> %{{.*}}, <8 x i16> %{{.*}}) // CHECK: select <8 x i1> %{{.*}}, <8 x i16> %{{.*}}, <8 x i16> %{{.*}} return _mm_mask_shldv_epi16(__S, __U, __A, __B); } __m128i test_mm_maskz_shldv_epi16(__mmask8 __U, __m128i __S, __m128i __A, __m128i __B) { - // CHECK-LABEL: @test_mm_maskz_shldv_epi16 - // CHECK: @llvm.fshl.v8i16(<8 x i16> %{{.*}}, <8 x i16> %{{.*}}, <8 x i16> %{{.*}}) + // CHECK-LABEL: test_mm_maskz_shldv_epi16 + // CHECK: call <8 x i16> @llvm.fshl.v8i16(<8 x i16> %{{.*}}, <8 x i16> %{{.*}}, <8 x i16> %{{.*}}) // CHECK: select <8 x i1> %{{.*}}, <8 x i16> %{{.*}}, <8 x i16> %{{.*}} return _mm_maskz_shldv_epi16(__U, __S, __A, __B); } __m128i test_mm_shldv_epi16(__m128i __S, __m128i __A, __m128i __B) { - // CHECK-LABEL: @test_mm_shldv_epi16 - // CHECK: @llvm.fshl.v8i16(<8 x i16> %{{.*}}, <8 x i16> %{{.*}}, <8 x i16> %{{.*}}) + // CHECK-LABEL: test_mm_shldv_epi16 + // CHECK: call <8 x i16> @llvm.fshl.v8i16(<8 x i16> %{{.*}}, <8 x i16> %{{.*}}, <8 x i16> %{{.*}}) return _mm_shldv_epi16(__S, __A, __B); } __m256i test_mm256_mask_shrdv_epi64(__m256i __S, __mmask8 __U, __m256i __A, __m256i __B) { - // CHECK-LABEL: @test_mm256_mask_shrdv_epi64 - // CHECK: @llvm.fshr.v4i64(<4 x i64> %{{.*}}, <4 x i64> %{{.*}}, <4 x i64> %{{.*}}) + // CHECK-LABEL: test_mm256_mask_shrdv_epi64 + // CHECK: call {{.*}}<4 x i64> @llvm.fshr.v4i64(<4 x i64> %{{.*}}, <4 x i64> %{{.*}}, <4 x i64> %{{.*}}) // CHECK: select <4 x i1> %{{.*}}, <4 x i64> %{{.*}}, <4 x i64> %{{.*}} return _mm256_mask_shrdv_epi64(__S, __U, __A, __B); } __m256i test_mm256_maskz_shrdv_epi64(__mmask8 __U, __m256i __S, __m256i __A, __m256i __B) { - // CHECK-LABEL: @test_mm256_maskz_shrdv_epi64 - // CHECK: @llvm.fshr.v4i64(<4 x i64> %{{.*}}, <4 x i64> %{{.*}}, <4 x i64> %{{.*}}) + // CHECK-LABEL: test_mm256_maskz_shrdv_epi64 + // CHECK: call {{.*}}<4 x i64> @llvm.fshr.v4i64(<4 x i64> %{{.*}}, <4 x i64> %{{.*}}, <4 x i64> %{{.*}}) // CHECK: select <4 x i1> %{{.*}}, <4 x i64> %{{.*}}, <4 x i64> %{{.*}} return _mm256_maskz_shrdv_epi64(__U, __S, __A, __B); } __m256i test_mm256_shrdv_epi64(__m256i __S, __m256i __A, __m256i __B) { - // CHECK-LABEL: @test_mm256_shrdv_epi64 - // CHECK: @llvm.fshr.v4i64(<4 x i64> %{{.*}}, <4 x i64> %{{.*}}, <4 x i64> %{{.*}}) + // CHECK-LABEL: test_mm256_shrdv_epi64 + // CHECK: call {{.*}}<4 x i64> @llvm.fshr.v4i64(<4 x i64> %{{.*}}, <4 x i64> %{{.*}}, <4 x i64> %{{.*}}) return _mm256_shrdv_epi64(__S, __A, __B); } __m128i test_mm_mask_shrdv_epi64(__m128i __S, __mmask8 __U, __m128i __A, __m128i __B) { - // CHECK-LABEL: @test_mm_mask_shrdv_epi64 - // CHECK: @llvm.fshr.v2i64(<2 x i64> %{{.*}}, <2 x i64> %{{.*}}, <2 x i64> %{{.*}}) + // CHECK-LABEL: test_mm_mask_shrdv_epi64 + // CHECK: call {{.*}}<2 x i64> @llvm.fshr.v2i64(<2 x i64> %{{.*}}, <2 x i64> %{{.*}}, <2 x i64> %{{.*}}) // CHECK: select <2 x i1> %{{.*}}, <2 x i64> %{{.*}}, <2 x i64> %{{.*}} return _mm_mask_shrdv_epi64(__S, __U, __A, __B); } __m128i test_mm_maskz_shrdv_epi64(__mmask8 __U, __m128i __S, __m128i __A, __m128i __B) { - // CHECK-LABEL: @test_mm_maskz_shrdv_epi64 - // CHECK: @llvm.fshr.v2i64(<2 x i64> %{{.*}}, <2 x i64> %{{.*}}, <2 x i64> %{{.*}}) + // CHECK-LABEL: test_mm_maskz_shrdv_epi64 + // CHECK: call {{.*}}<2 x i64> @llvm.fshr.v2i64(<2 x i64> %{{.*}}, <2 x i64> %{{.*}}, <2 x i64> %{{.*}}) // CHECK: select <2 x i1> %{{.*}}, <2 x i64> %{{.*}}, <2 x i64> %{{.*}} return _mm_maskz_shrdv_epi64(__U, __S, __A, __B); } __m128i test_mm_shrdv_epi64(__m128i __S, __m128i __A, __m128i __B) { - // CHECK-LABEL: @test_mm_shrdv_epi64 - // CHECK: @llvm.fshr.v2i64(<2 x i64> %{{.*}}, <2 x i64> %{{.*}}, <2 x i64> %{{.*}}) + // CHECK-LABEL: test_mm_shrdv_epi64 + // CHECK: call {{.*}}<2 x i64> @llvm.fshr.v2i64(<2 x i64> %{{.*}}, <2 x i64> %{{.*}}, <2 x i64> %{{.*}}) return _mm_shrdv_epi64(__S, __A, __B); } __m256i test_mm256_mask_shrdv_epi32(__m256i __S, __mmask8 __U, __m256i __A, __m256i __B) { - // CHECK-LABEL: @test_mm256_mask_shrdv_epi32 - // CHECK: @llvm.fshr.v8i32(<8 x i32> %{{.*}}, <8 x i32> %{{.*}}, <8 x i32> %{{.*}}) + // CHECK-LABEL: test_mm256_mask_shrdv_epi32 + // CHECK: call <8 x i32> @llvm.fshr.v8i32(<8 x i32> %{{.*}}, <8 x i32> %{{.*}}, <8 x i32> %{{.*}}) // CHECK: select <8 x i1> %{{.*}}, <8 x i32> %{{.*}}, <8 x i32> %{{.*}} return _mm256_mask_shrdv_epi32(__S, __U, __A, __B); } __m256i test_mm256_maskz_shrdv_epi32(__mmask8 __U, __m256i __S, __m256i __A, __m256i __B) { - // CHECK-LABEL: @test_mm256_maskz_shrdv_epi32 - // CHECK: @llvm.fshr.v8i32(<8 x i32> %{{.*}}, <8 x i32> %{{.*}}, <8 x i32> %{{.*}}) + // CHECK-LABEL: test_mm256_maskz_shrdv_epi32 + // CHECK: call <8 x i32> @llvm.fshr.v8i32(<8 x i32> %{{.*}}, <8 x i32> %{{.*}}, <8 x i32> %{{.*}}) // CHECK: select <8 x i1> %{{.*}}, <8 x i32> %{{.*}}, <8 x i32> %{{.*}} return _mm256_maskz_shrdv_epi32(__U, __S, __A, __B); } __m256i test_mm256_shrdv_epi32(__m256i __S, __m256i __A, __m256i __B) { - // CHECK-LABEL: @test_mm256_shrdv_epi32 - // CHECK: @llvm.fshr.v8i32(<8 x i32> %{{.*}}, <8 x i32> %{{.*}}, <8 x i32> %{{.*}}) + // CHECK-LABEL: test_mm256_shrdv_epi32 + // CHECK: call <8 x i32> @llvm.fshr.v8i32(<8 x i32> %{{.*}}, <8 x i32> %{{.*}}, <8 x i32> %{{.*}}) return _mm256_shrdv_epi32(__S, __A, __B); } __m128i test_mm_mask_shrdv_epi32(__m128i __S, __mmask8 __U, __m128i __A, __m128i __B) { - // CHECK-LABEL: @test_mm_mask_shrdv_epi32 - // CHECK: @llvm.fshr.v4i32(<4 x i32> %{{.*}}, <4 x i32> %{{.*}}, <4 x i32> %{{.*}}) + // CHECK-LABEL: test_mm_mask_shrdv_epi32 + // CHECK: call <4 x i32> @llvm.fshr.v4i32(<4 x i32> %{{.*}}, <4 x i32> %{{.*}}, <4 x i32> %{{.*}}) // CHECK: select <4 x i1> %{{.*}}, <4 x i32> %{{.*}}, <4 x i32> %{{.*}} return _mm_mask_shrdv_epi32(__S, __U, __A, __B); } __m128i test_mm_maskz_shrdv_epi32(__mmask8 __U, __m128i __S, __m128i __A, __m128i __B) { - // CHECK-LABEL: @test_mm_maskz_shrdv_epi32 - // CHECK: @llvm.fshr.v4i32(<4 x i32> %{{.*}}, <4 x i32> %{{.*}}, <4 x i32> %{{.*}}) + // CHECK-LABEL: test_mm_maskz_shrdv_epi32 + // CHECK: call <4 x i32> @llvm.fshr.v4i32(<4 x i32> %{{.*}}, <4 x i32> %{{.*}}, <4 x i32> %{{.*}}) // CHECK: select <4 x i1> %{{.*}}, <4 x i32> %{{.*}}, <4 x i32> %{{.*}} return _mm_maskz_shrdv_epi32(__U, __S, __A, __B); } __m128i test_mm_shrdv_epi32(__m128i __S, __m128i __A, __m128i __B) { - // CHECK-LABEL: @test_mm_shrdv_epi32 - // CHECK: @llvm.fshr.v4i32(<4 x i32> %{{.*}}, <4 x i32> %{{.*}}, <4 x i32> %{{.*}}) + // CHECK-LABEL: test_mm_shrdv_epi32 + // CHECK: call <4 x i32> @llvm.fshr.v4i32(<4 x i32> %{{.*}}, <4 x i32> %{{.*}}, <4 x i32> %{{.*}}) return _mm_shrdv_epi32(__S, __A, __B); } __m256i test_mm256_mask_shrdv_epi16(__m256i __S, __mmask16 __U, __m256i __A, __m256i __B) { - // CHECK-LABEL: @test_mm256_mask_shrdv_epi16 - // CHECK: @llvm.fshr.v16i16(<16 x i16> %{{.*}}, <16 x i16> %{{.*}}, <16 x i16> %{{.*}}) + // CHECK-LABEL: test_mm256_mask_shrdv_epi16 + // CHECK: call <16 x i16> @llvm.fshr.v16i16(<16 x i16> %{{.*}}, <16 x i16> %{{.*}}, <16 x i16> %{{.*}}) // CHECK: select <16 x i1> %{{.*}}, <16 x i16> %{{.*}}, <16 x i16> %{{.*}} return _mm256_mask_shrdv_epi16(__S, __U, __A, __B); } __m256i test_mm256_maskz_shrdv_epi16(__mmask16 __U, __m256i __S, __m256i __A, __m256i __B) { - // CHECK-LABEL: @test_mm256_maskz_shrdv_epi16 - // CHECK: @llvm.fshr.v16i16(<16 x i16> %{{.*}}, <16 x i16> %{{.*}}, <16 x i16> %{{.*}}) + // CHECK-LABEL: test_mm256_maskz_shrdv_epi16 + // CHECK: call <16 x i16> @llvm.fshr.v16i16(<16 x i16> %{{.*}}, <16 x i16> %{{.*}}, <16 x i16> %{{.*}}) // CHECK: select <16 x i1> %{{.*}}, <16 x i16> %{{.*}}, <16 x i16> %{{.*}} return _mm256_maskz_shrdv_epi16(__U, __S, __A, __B); } __m256i test_mm256_shrdv_epi16(__m256i __S, __m256i __A, __m256i __B) { - // CHECK-LABEL: @test_mm256_shrdv_epi16 - // CHECK: @llvm.fshr.v16i16(<16 x i16> %{{.*}}, <16 x i16> %{{.*}}, <16 x i16> %{{.*}}) + // CHECK-LABEL: test_mm256_shrdv_epi16 + // CHECK: call <16 x i16> @llvm.fshr.v16i16(<16 x i16> %{{.*}}, <16 x i16> %{{.*}}, <16 x i16> %{{.*}}) return _mm256_shrdv_epi16(__S, __A, __B); } __m128i test_mm_mask_shrdv_epi16(__m128i __S, __mmask8 __U, __m128i __A, __m128i __B) { - // CHECK-LABEL: @test_mm_mask_shrdv_epi16 - // CHECK: @llvm.fshr.v8i16(<8 x i16> %{{.*}}, <8 x i16> %{{.*}}, <8 x i16> %{{.*}}) + // CHECK-LABEL: test_mm_mask_shrdv_epi16 + // CHECK: call <8 x i16> @llvm.fshr.v8i16(<8 x i16> %{{.*}}, <8 x i16> %{{.*}}, <8 x i16> %{{.*}}) // CHECK: select <8 x i1> %{{.*}}, <8 x i16> %{{.*}}, <8 x i16> %{{.*}} return _mm_mask_shrdv_epi16(__S, __U, __A, __B); } __m128i test_mm_maskz_shrdv_epi16(__mmask8 __U, __m128i __S, __m128i __A, __m128i __B) { - // CHECK-LABEL: @test_mm_maskz_shrdv_epi16 - // CHECK: @llvm.fshr.v8i16(<8 x i16> %{{.*}}, <8 x i16> %{{.*}}, <8 x i16> %{{.*}}) + // CHECK-LABEL: test_mm_maskz_shrdv_epi16 + // CHECK: call <8 x i16> @llvm.fshr.v8i16(<8 x i16> %{{.*}}, <8 x i16> %{{.*}}, <8 x i16> %{{.*}}) // CHECK: select <8 x i1> %{{.*}}, <8 x i16> %{{.*}}, <8 x i16> %{{.*}} return _mm_maskz_shrdv_epi16(__U, __S, __A, __B); } __m128i test_mm_shrdv_epi16(__m128i __S, __m128i __A, __m128i __B) { - // CHECK-LABEL: @test_mm_shrdv_epi16 - // CHECK: @llvm.fshr.v8i16(<8 x i16> %{{.*}}, <8 x i16> %{{.*}}, <8 x i16> %{{.*}}) + // CHECK-LABEL: test_mm_shrdv_epi16 + // CHECK: call <8 x i16> @llvm.fshr.v8i16(<8 x i16> %{{.*}}, <8 x i16> %{{.*}}, <8 x i16> %{{.*}}) return _mm_shrdv_epi16(__S, __A, __B); } diff --git a/clang/test/CodeGen/X86/avx512vlvnni-builtins.c b/clang/test/CodeGen/X86/avx512vlvnni-builtins.c index a69412d..3de4cca 100644 --- a/clang/test/CodeGen/X86/avx512vlvnni-builtins.c +++ b/clang/test/CodeGen/X86/avx512vlvnni-builtins.c @@ -1,164 +1,167 @@ -// RUN: %clang_cc1 -flax-vector-conversions=none -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +avx512vnni -target-feature +avx512vl -emit-llvm -o - -Wall -Werror | FileCheck %s +// RUN: %clang_cc1 -x c -flax-vector-conversions=none -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +avx512vnni -target-feature +avx512vl -emit-llvm -o - -Wall -Werror | FileCheck %s +// RUN: %clang_cc1 -x c -flax-vector-conversions=none -ffreestanding %s -triple=i386-apple-darwin -target-feature +avx512vnni -target-feature +avx512vl -emit-llvm -o - -Wall -Werror | FileCheck %s +// RUN: %clang_cc1 -x c++ -flax-vector-conversions=none -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +avx512vnni -target-feature +avx512vl -emit-llvm -o - -Wall -Werror | FileCheck %s +// RUN: %clang_cc1 -x c++ -flax-vector-conversions=none -ffreestanding %s -triple=i386-apple-darwin -target-feature +avx512vnni -target-feature +avx512vl -emit-llvm -o - -Wall -Werror | FileCheck %s #include <immintrin.h> __m256i test_mm256_mask_dpbusd_epi32(__m256i __S, __mmask8 __U, __m256i __A, __m256i __B) { - // CHECK-LABEL: @test_mm256_mask_dpbusd_epi32 - // CHECK: @llvm.x86.avx512.vpdpbusd.256 + // CHECK-LABEL: test_mm256_mask_dpbusd_epi32 + // CHECK: call <8 x i32> @llvm.x86.avx512.vpdpbusd.256(<8 x i32> %{{.*}}, <8 x i32> %{{.*}}, <8 x i32> %{{.*}}) // CHECK: select <8 x i1> %{{.*}}, <8 x i32> %{{.*}}, <8 x i32> %{{.*}} return _mm256_mask_dpbusd_epi32(__S, __U, __A, __B); } __m256i test_mm256_maskz_dpbusd_epi32(__mmask8 __U, __m256i __S, __m256i __A, __m256i __B) { - // CHECK-LABEL: @test_mm256_maskz_dpbusd_epi32 - // CHECK: @llvm.x86.avx512.vpdpbusd.256 + // CHECK-LABEL: test_mm256_maskz_dpbusd_epi32 + // CHECK: call <8 x i32> @llvm.x86.avx512.vpdpbusd.256(<8 x i32> %{{.*}}, <8 x i32> %{{.*}}, <8 x i32> %{{.*}}) // CHECK: select <8 x i1> %{{.*}}, <8 x i32> %{{.*}}, <8 x i32> %{{.*}} return _mm256_maskz_dpbusd_epi32(__U, __S, __A, __B); } __m256i test_mm256_dpbusd_epi32(__m256i __S, __m256i __A, __m256i __B) { - // CHECK-LABEL: @test_mm256_dpbusd_epi32 - // CHECK: @llvm.x86.avx512.vpdpbusd.256 + // CHECK-LABEL: test_mm256_dpbusd_epi32 + // CHECK: call <8 x i32> @llvm.x86.avx512.vpdpbusd.256(<8 x i32> %{{.*}}, <8 x i32> %{{.*}}, <8 x i32> %{{.*}}) return _mm256_dpbusd_epi32(__S, __A, __B); } __m256i test_mm256_mask_dpbusds_epi32(__m256i __S, __mmask8 __U, __m256i __A, __m256i __B) { - // CHECK-LABEL: @test_mm256_mask_dpbusds_epi32 - // CHECK: @llvm.x86.avx512.vpdpbusds.256 + // CHECK-LABEL: test_mm256_mask_dpbusds_epi32 + // CHECK: call <8 x i32> @llvm.x86.avx512.vpdpbusds.256(<8 x i32> %{{.*}}, <8 x i32> %{{.*}}, <8 x i32> %{{.*}}) // CHECK: select <8 x i1> %{{.*}}, <8 x i32> %{{.*}}, <8 x i32> %{{.*}} return _mm256_mask_dpbusds_epi32(__S, __U, __A, __B); } __m256i test_mm256_maskz_dpbusds_epi32(__mmask8 __U, __m256i __S, __m256i __A, __m256i __B) { - // CHECK-LABEL: @test_mm256_maskz_dpbusds_epi32 - // CHECK: @llvm.x86.avx512.vpdpbusds.256 + // CHECK-LABEL: test_mm256_maskz_dpbusds_epi32 + // CHECK: call <8 x i32> @llvm.x86.avx512.vpdpbusds.256(<8 x i32> %{{.*}}, <8 x i32> %{{.*}}, <8 x i32> %{{.*}}) // CHECK: select <8 x i1> %{{.*}}, <8 x i32> %{{.*}}, <8 x i32> %{{.*}} return _mm256_maskz_dpbusds_epi32(__U, __S, __A, __B); } __m256i test_mm256_dpbusds_epi32(__m256i __S, __m256i __A, __m256i __B) { - // CHECK-LABEL: @test_mm256_dpbusds_epi32 - // CHECK: @llvm.x86.avx512.vpdpbusds.256 + // CHECK-LABEL: test_mm256_dpbusds_epi32 + // CHECK: call <8 x i32> @llvm.x86.avx512.vpdpbusds.256(<8 x i32> %{{.*}}, <8 x i32> %{{.*}}, <8 x i32> %{{.*}}) return _mm256_dpbusds_epi32(__S, __A, __B); } __m256i test_mm256_mask_dpwssd_epi32(__m256i __S, __mmask8 __U, __m256i __A, __m256i __B) { - // CHECK-LABEL: @test_mm256_mask_dpwssd_epi32 - // CHECK: @llvm.x86.avx512.vpdpwssd.256 + // CHECK-LABEL: test_mm256_mask_dpwssd_epi32 + // CHECK: call <8 x i32> @llvm.x86.avx512.vpdpwssd.256(<8 x i32> %{{.*}}, <8 x i32> %{{.*}}, <8 x i32> %{{.*}}) // CHECK: select <8 x i1> %{{.*}}, <8 x i32> %{{.*}}, <8 x i32> %{{.*}} return _mm256_mask_dpwssd_epi32(__S, __U, __A, __B); } __m256i test_mm256_maskz_dpwssd_epi32(__mmask8 __U, __m256i __S, __m256i __A, __m256i __B) { - // CHECK-LABEL: @test_mm256_maskz_dpwssd_epi32 - // CHECK: @llvm.x86.avx512.vpdpwssd.256 + // CHECK-LABEL: test_mm256_maskz_dpwssd_epi32 + // CHECK: call <8 x i32> @llvm.x86.avx512.vpdpwssd.256(<8 x i32> %{{.*}}, <8 x i32> %{{.*}}, <8 x i32> %{{.*}}) // CHECK: select <8 x i1> %{{.*}}, <8 x i32> %{{.*}}, <8 x i32> %{{.*}} return _mm256_maskz_dpwssd_epi32(__U, __S, __A, __B); } __m256i test_mm256_dpwssd_epi32(__m256i __S, __m256i __A, __m256i __B) { - // CHECK-LABEL: @test_mm256_dpwssd_epi32 - // CHECK: @llvm.x86.avx512.vpdpwssd.256 + // CHECK-LABEL: test_mm256_dpwssd_epi32 + // CHECK: call <8 x i32> @llvm.x86.avx512.vpdpwssd.256(<8 x i32> %{{.*}}, <8 x i32> %{{.*}}, <8 x i32> %{{.*}}) return _mm256_dpwssd_epi32(__S, __A, __B); } __m256i test_mm256_mask_dpwssds_epi32(__m256i __S, __mmask8 __U, __m256i __A, __m256i __B) { - // CHECK-LABEL: @test_mm256_mask_dpwssds_epi32 - // CHECK: @llvm.x86.avx512.vpdpwssds.256 + // CHECK-LABEL: test_mm256_mask_dpwssds_epi32 + // CHECK: call <8 x i32> @llvm.x86.avx512.vpdpwssds.256(<8 x i32> %{{.*}}, <8 x i32> %{{.*}}, <8 x i32> %{{.*}}) // CHECK: select <8 x i1> %{{.*}}, <8 x i32> %{{.*}}, <8 x i32> %{{.*}} return _mm256_mask_dpwssds_epi32(__S, __U, __A, __B); } __m256i test_mm256_maskz_dpwssds_epi32(__mmask8 __U, __m256i __S, __m256i __A, __m256i __B) { - // CHECK-LABEL: @test_mm256_maskz_dpwssds_epi32 - // CHECK: @llvm.x86.avx512.vpdpwssds.256 + // CHECK-LABEL: test_mm256_maskz_dpwssds_epi32 + // CHECK: call <8 x i32> @llvm.x86.avx512.vpdpwssds.256(<8 x i32> %{{.*}}, <8 x i32> %{{.*}}, <8 x i32> %{{.*}}) // CHECK: select <8 x i1> %{{.*}}, <8 x i32> %{{.*}}, <8 x i32> %{{.*}} return _mm256_maskz_dpwssds_epi32(__U, __S, __A, __B); } __m256i test_mm256_dpwssds_epi32(__m256i __S, __m256i __A, __m256i __B) { - // CHECK-LABEL: @test_mm256_dpwssds_epi32 - // CHECK: @llvm.x86.avx512.vpdpwssds.256 + // CHECK-LABEL: test_mm256_dpwssds_epi32 + // CHECK: call <8 x i32> @llvm.x86.avx512.vpdpwssds.256(<8 x i32> %{{.*}}, <8 x i32> %{{.*}}, <8 x i32> %{{.*}}) return _mm256_dpwssds_epi32(__S, __A, __B); } __m128i test_mm_mask_dpbusd_epi32(__m128i __S, __mmask8 __U, __m128i __A, __m128i __B) { - // CHECK-LABEL: @test_mm_mask_dpbusd_epi32 - // CHECK: @llvm.x86.avx512.vpdpbusd.128 + // CHECK-LABEL: test_mm_mask_dpbusd_epi32 + // CHECK: call <4 x i32> @llvm.x86.avx512.vpdpbusd.128(<4 x i32> %{{.*}}, <4 x i32> %{{.*}}, <4 x i32> %{{.*}}) // CHECK: select <4 x i1> %{{.*}}, <4 x i32> %{{.*}}, <4 x i32> %{{.*}} return _mm_mask_dpbusd_epi32(__S, __U, __A, __B); } __m128i test_mm_maskz_dpbusd_epi32(__mmask8 __U, __m128i __S, __m128i __A, __m128i __B) { - // CHECK-LABEL: @test_mm_maskz_dpbusd_epi32 - // CHECK: @llvm.x86.avx512.vpdpbusd.128 + // CHECK-LABEL: test_mm_maskz_dpbusd_epi32 + // CHECK: call <4 x i32> @llvm.x86.avx512.vpdpbusd.128(<4 x i32> %{{.*}}, <4 x i32> %{{.*}}, <4 x i32> %{{.*}}) // CHECK: select <4 x i1> %{{.*}}, <4 x i32> %{{.*}}, <4 x i32> %{{.*}} return _mm_maskz_dpbusd_epi32(__U, __S, __A, __B); } __m128i test_mm_dpbusd_epi32(__m128i __S, __m128i __A, __m128i __B) { - // CHECK-LABEL: @test_mm_dpbusd_epi32 - // CHECK: @llvm.x86.avx512.vpdpbusd.128 + // CHECK-LABEL: test_mm_dpbusd_epi32 + // CHECK: call <4 x i32> @llvm.x86.avx512.vpdpbusd.128(<4 x i32> %{{.*}}, <4 x i32> %{{.*}}, <4 x i32> %{{.*}}) return _mm_dpbusd_epi32(__S, __A, __B); } __m128i test_mm_mask_dpbusds_epi32(__m128i __S, __mmask8 __U, __m128i __A, __m128i __B) { - // CHECK-LABEL: @test_mm_mask_dpbusds_epi32 - // CHECK: @llvm.x86.avx512.vpdpbusds.128 + // CHECK-LABEL: test_mm_mask_dpbusds_epi32 + // CHECK: call <4 x i32> @llvm.x86.avx512.vpdpbusds.128(<4 x i32> %{{.*}}, <4 x i32> %{{.*}}, <4 x i32> %{{.*}}) // CHECK: select <4 x i1> %{{.*}}, <4 x i32> %{{.*}}, <4 x i32> %{{.*}} return _mm_mask_dpbusds_epi32(__S, __U, __A, __B); } __m128i test_mm_maskz_dpbusds_epi32(__mmask8 __U, __m128i __S, __m128i __A, __m128i __B) { - // CHECK-LABEL: @test_mm_maskz_dpbusds_epi32 - // CHECK: @llvm.x86.avx512.vpdpbusds.128 + // CHECK-LABEL: test_mm_maskz_dpbusds_epi32 + // CHECK: call <4 x i32> @llvm.x86.avx512.vpdpbusds.128(<4 x i32> %{{.*}}, <4 x i32> %{{.*}}, <4 x i32> %{{.*}}) // CHECK: select <4 x i1> %{{.*}}, <4 x i32> %{{.*}}, <4 x i32> %{{.*}} return _mm_maskz_dpbusds_epi32(__U, __S, __A, __B); } __m128i test_mm_dpbusds_epi32(__m128i __S, __m128i __A, __m128i __B) { - // CHECK-LABEL: @test_mm_dpbusds_epi32 - // CHECK: @llvm.x86.avx512.vpdpbusds.128 + // CHECK-LABEL: test_mm_dpbusds_epi32 + // CHECK: call <4 x i32> @llvm.x86.avx512.vpdpbusds.128(<4 x i32> %{{.*}}, <4 x i32> %{{.*}}, <4 x i32> %{{.*}}) return _mm_dpbusds_epi32(__S, __A, __B); } __m128i test_mm_mask_dpwssd_epi32(__m128i __S, __mmask8 __U, __m128i __A, __m128i __B) { - // CHECK-LABEL: @test_mm_mask_dpwssd_epi32 - // CHECK: @llvm.x86.avx512.vpdpwssd.128 + // CHECK-LABEL: test_mm_mask_dpwssd_epi32 + // CHECK: call <4 x i32> @llvm.x86.avx512.vpdpwssd.128(<4 x i32> %{{.*}}, <4 x i32> %{{.*}}, <4 x i32> %{{.*}}) // CHECK: select <4 x i1> %{{.*}}, <4 x i32> %{{.*}}, <4 x i32> %{{.*}} return _mm_mask_dpwssd_epi32(__S, __U, __A, __B); } __m128i test_mm_maskz_dpwssd_epi32(__mmask8 __U, __m128i __S, __m128i __A, __m128i __B) { - // CHECK-LABEL: @test_mm_maskz_dpwssd_epi32 - // CHECK: @llvm.x86.avx512.vpdpwssd.128 + // CHECK-LABEL: test_mm_maskz_dpwssd_epi32 + // CHECK: call <4 x i32> @llvm.x86.avx512.vpdpwssd.128(<4 x i32> %{{.*}}, <4 x i32> %{{.*}}, <4 x i32> %{{.*}}) // CHECK: select <4 x i1> %{{.*}}, <4 x i32> %{{.*}}, <4 x i32> %{{.*}} return _mm_maskz_dpwssd_epi32(__U, __S, __A, __B); } __m128i test_mm_dpwssd_epi32(__m128i __S, __m128i __A, __m128i __B) { - // CHECK-LABEL: @test_mm_dpwssd_epi32 - // CHECK: @llvm.x86.avx512.vpdpwssd.128 + // CHECK-LABEL: test_mm_dpwssd_epi32 + // CHECK: call <4 x i32> @llvm.x86.avx512.vpdpwssd.128(<4 x i32> %{{.*}}, <4 x i32> %{{.*}}, <4 x i32> %{{.*}}) return _mm_dpwssd_epi32(__S, __A, __B); } __m128i test_mm_mask_dpwssds_epi32(__m128i __S, __mmask8 __U, __m128i __A, __m128i __B) { - // CHECK-LABEL: @test_mm_mask_dpwssds_epi32 - // CHECK: @llvm.x86.avx512.vpdpwssds.128 + // CHECK-LABEL: test_mm_mask_dpwssds_epi32 + // CHECK: call <4 x i32> @llvm.x86.avx512.vpdpwssds.128(<4 x i32> %{{.*}}, <4 x i32> %{{.*}}, <4 x i32> %{{.*}}) // CHECK: select <4 x i1> %{{.*}}, <4 x i32> %{{.*}}, <4 x i32> %{{.*}} return _mm_mask_dpwssds_epi32(__S, __U, __A, __B); } __m128i test_mm_maskz_dpwssds_epi32(__mmask8 __U, __m128i __S, __m128i __A, __m128i __B) { - // CHECK-LABEL: @test_mm_maskz_dpwssds_epi32 - // CHECK: @llvm.x86.avx512.vpdpwssds.128 + // CHECK-LABEL: test_mm_maskz_dpwssds_epi32 + // CHECK: call <4 x i32> @llvm.x86.avx512.vpdpwssds.128(<4 x i32> %{{.*}}, <4 x i32> %{{.*}}, <4 x i32> %{{.*}}) // CHECK: select <4 x i1> %{{.*}}, <4 x i32> %{{.*}}, <4 x i32> %{{.*}} return _mm_maskz_dpwssds_epi32(__U, __S, __A, __B); } __m128i test_mm_dpwssds_epi32(__m128i __S, __m128i __A, __m128i __B) { - // CHECK-LABEL: @test_mm_dpwssds_epi32 - // CHECK: @llvm.x86.avx512.vpdpwssds.128 + // CHECK-LABEL: test_mm_dpwssds_epi32 + // CHECK: call <4 x i32> @llvm.x86.avx512.vpdpwssds.128(<4 x i32> %{{.*}}, <4 x i32> %{{.*}}, <4 x i32> %{{.*}}) return _mm_dpwssds_epi32(__S, __A, __B); } diff --git a/clang/test/CodeGen/X86/avx512vlvp2intersect-builtins.c b/clang/test/CodeGen/X86/avx512vlvp2intersect-builtins.c index 1b360d1..37ce638 100644 --- a/clang/test/CodeGen/X86/avx512vlvp2intersect-builtins.c +++ b/clang/test/CodeGen/X86/avx512vlvp2intersect-builtins.c @@ -1,5 +1,7 @@ -// RUN: %clang_cc1 %s -flax-vector-conversions=none -ffreestanding -triple=x86_64-unknown-unknown -target-feature +avx512vp2intersect -target-feature +avx512vl -emit-llvm -o - -Wall -Werror | FileCheck %s -// RUN: %clang_cc1 %s -flax-vector-conversions=none -ffreestanding -triple=i386-unknown-unknown -target-feature +avx512vp2intersect -target-feature +avx512vl -emit-llvm -o - -Wall -Werror | FileCheck %s +// RUN: %clang_cc1 -x c %s -flax-vector-conversions=none -ffreestanding -triple=x86_64-unknown-unknown -target-feature +avx512vp2intersect -target-feature +avx512vl -emit-llvm -o - -Wall -Werror | FileCheck %s +// RUN: %clang_cc1 -x c %s -flax-vector-conversions=none -ffreestanding -triple=i386-unknown-unknown -target-feature +avx512vp2intersect -target-feature +avx512vl -emit-llvm -o - -Wall -Werror | FileCheck %s +// RUN: %clang_cc1 -x c++ %s -flax-vector-conversions=none -ffreestanding -triple=x86_64-unknown-unknown -target-feature +avx512vp2intersect -target-feature +avx512vl -emit-llvm -o - -Wall -Werror | FileCheck %s +// RUN: %clang_cc1 -x c++ %s -flax-vector-conversions=none -ffreestanding -triple=i386-unknown-unknown -target-feature +avx512vp2intersect -target-feature +avx512vl -emit-llvm -o - -Wall -Werror | FileCheck %s #include <immintrin.h> diff --git a/clang/test/CodeGen/X86/avx512vnni-builtins.c b/clang/test/CodeGen/X86/avx512vnni-builtins.c index db39fb0..a0177b3 100644 --- a/clang/test/CodeGen/X86/avx512vnni-builtins.c +++ b/clang/test/CodeGen/X86/avx512vnni-builtins.c @@ -1,84 +1,87 @@ -// RUN: %clang_cc1 -flax-vector-conversions=none -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +avx512vnni -emit-llvm -o - -Wall -Werror | FileCheck %s +// RUN: %clang_cc1 -x c -flax-vector-conversions=none -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +avx512vnni -emit-llvm -o - -Wall -Werror | FileCheck %s +// RUN: %clang_cc1 -x c -flax-vector-conversions=none -ffreestanding %s -triple=i386-apple-darwin -target-feature +avx512vnni -emit-llvm -o - -Wall -Werror | FileCheck %s +// RUN: %clang_cc1 -x c++ -flax-vector-conversions=none -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +avx512vnni -emit-llvm -o - -Wall -Werror | FileCheck %s +// RUN: %clang_cc1 -x c++ -flax-vector-conversions=none -ffreestanding %s -triple=i386-apple-darwin -target-feature +avx512vnni -emit-llvm -o - -Wall -Werror | FileCheck %s #include <immintrin.h> __m512i test_mm512_mask_dpbusd_epi32(__m512i __S, __mmask16 __U, __m512i __A, __m512i __B) { - // CHECK-LABEL: @test_mm512_mask_dpbusd_epi32 - // CHECK: @llvm.x86.avx512.vpdpbusd.512 + // CHECK-LABEL: test_mm512_mask_dpbusd_epi32 + // CHECK: call <16 x i32> @llvm.x86.avx512.vpdpbusd.512(<16 x i32> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}}) // CHECK: select <16 x i1> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}} return _mm512_mask_dpbusd_epi32(__S, __U, __A, __B); } __m512i test_mm512_maskz_dpbusd_epi32(__mmask16 __U, __m512i __S, __m512i __A, __m512i __B) { - // CHECK-LABEL: @test_mm512_maskz_dpbusd_epi32 - // CHECK: @llvm.x86.avx512.vpdpbusd.512 + // CHECK-LABEL: test_mm512_maskz_dpbusd_epi32 + // CHECK: call <16 x i32> @llvm.x86.avx512.vpdpbusd.512(<16 x i32> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}}) // CHECK: select <16 x i1> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}} return _mm512_maskz_dpbusd_epi32(__U, __S, __A, __B); } __m512i test_mm512_dpbusd_epi32(__m512i __S, __m512i __A, __m512i __B) { - // CHECK-LABEL: @test_mm512_dpbusd_epi32 - // CHECK: @llvm.x86.avx512.vpdpbusd.512 + // CHECK-LABEL: test_mm512_dpbusd_epi32 + // CHECK: call <16 x i32> @llvm.x86.avx512.vpdpbusd.512(<16 x i32> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}}) return _mm512_dpbusd_epi32(__S, __A, __B); } __m512i test_mm512_mask_dpbusds_epi32(__m512i __S, __mmask16 __U, __m512i __A, __m512i __B) { - // CHECK-LABEL: @test_mm512_mask_dpbusds_epi32 - // CHECK: @llvm.x86.avx512.vpdpbusds.51 + // CHECK-LABEL: test_mm512_mask_dpbusds_epi32 + // CHECK: call <16 x i32> @llvm.x86.avx512.vpdpbusds.512(<16 x i32> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}}) // CHECK: select <16 x i1> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}} return _mm512_mask_dpbusds_epi32(__S, __U, __A, __B); } __m512i test_mm512_maskz_dpbusds_epi32(__mmask16 __U, __m512i __S, __m512i __A, __m512i __B) { - // CHECK-LABEL: @test_mm512_maskz_dpbusds_epi32 - // CHECK: @llvm.x86.avx512.vpdpbusds.512 + // CHECK-LABEL: test_mm512_maskz_dpbusds_epi32 + // CHECK: call <16 x i32> @llvm.x86.avx512.vpdpbusds.512(<16 x i32> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}}) // CHECK: select <16 x i1> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}} return _mm512_maskz_dpbusds_epi32(__U, __S, __A, __B); } __m512i test_mm512_dpbusds_epi32(__m512i __S, __m512i __A, __m512i __B) { - // CHECK-LABEL: @test_mm512_dpbusds_epi32 - // CHECK: @llvm.x86.avx512.vpdpbusds.512 + // CHECK-LABEL: test_mm512_dpbusds_epi32 + // CHECK: call <16 x i32> @llvm.x86.avx512.vpdpbusds.512(<16 x i32> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}}) return _mm512_dpbusds_epi32(__S, __A, __B); } __m512i test_mm512_mask_dpwssd_epi32(__m512i __S, __mmask16 __U, __m512i __A, __m512i __B) { - // CHECK-LABEL: @test_mm512_mask_dpwssd_epi32 - // CHECK: @llvm.x86.avx512.vpdpwssd.512 + // CHECK-LABEL: test_mm512_mask_dpwssd_epi32 + // CHECK: call <16 x i32> @llvm.x86.avx512.vpdpwssd.512(<16 x i32> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}}) // CHECK: select <16 x i1> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}} return _mm512_mask_dpwssd_epi32(__S, __U, __A, __B); } __m512i test_mm512_maskz_dpwssd_epi32(__mmask16 __U, __m512i __S, __m512i __A, __m512i __B) { - // CHECK-LABEL: @test_mm512_maskz_dpwssd_epi32 - // CHECK: @llvm.x86.avx512.vpdpwssd.512 + // CHECK-LABEL: test_mm512_maskz_dpwssd_epi32 + // CHECK: call <16 x i32> @llvm.x86.avx512.vpdpwssd.512(<16 x i32> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}}) // CHECK: select <16 x i1> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}} return _mm512_maskz_dpwssd_epi32(__U, __S, __A, __B); } __m512i test_mm512_dpwssd_epi32(__m512i __S, __m512i __A, __m512i __B) { - // CHECK-LABEL: @test_mm512_dpwssd_epi32 - // CHECK: @llvm.x86.avx512.vpdpwssd.512 + // CHECK-LABEL: test_mm512_dpwssd_epi32 + // CHECK: call <16 x i32> @llvm.x86.avx512.vpdpwssd.512(<16 x i32> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}}) return _mm512_dpwssd_epi32(__S, __A, __B); } __m512i test_mm512_mask_dpwssds_epi32(__m512i __S, __mmask16 __U, __m512i __A, __m512i __B) { - // CHECK-LABEL: @test_mm512_mask_dpwssds_epi32 - // CHECK: @llvm.x86.avx512.vpdpwssds.512 + // CHECK-LABEL: test_mm512_mask_dpwssds_epi32 + // CHECK: call <16 x i32> @llvm.x86.avx512.vpdpwssds.512(<16 x i32> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}}) // CHECK: select <16 x i1> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}} return _mm512_mask_dpwssds_epi32(__S, __U, __A, __B); } __m512i test_mm512_maskz_dpwssds_epi32(__mmask16 __U, __m512i __S, __m512i __A, __m512i __B) { - // CHECK-LABEL: @test_mm512_maskz_dpwssds_epi32 - // CHECK: @llvm.x86.avx512.vpdpwssds.512 + // CHECK-LABEL: test_mm512_maskz_dpwssds_epi32 + // CHECK: call <16 x i32> @llvm.x86.avx512.vpdpwssds.512(<16 x i32> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}}) // CHECK: select <16 x i1> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}} return _mm512_maskz_dpwssds_epi32(__U, __S, __A, __B); } __m512i test_mm512_dpwssds_epi32(__m512i __S, __m512i __A, __m512i __B) { - // CHECK-LABEL: @test_mm512_dpwssds_epi32 - // CHECK: @llvm.x86.avx512.vpdpwssds.512 + // CHECK-LABEL: test_mm512_dpwssds_epi32 + // CHECK: call <16 x i32> @llvm.x86.avx512.vpdpwssds.512(<16 x i32> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}}) return _mm512_dpwssds_epi32(__S, __A, __B); } diff --git a/clang/test/CodeGen/X86/avx512vp2intersect-builtins.c b/clang/test/CodeGen/X86/avx512vp2intersect-builtins.c index 2a3d38a..16704e8 100644 --- a/clang/test/CodeGen/X86/avx512vp2intersect-builtins.c +++ b/clang/test/CodeGen/X86/avx512vp2intersect-builtins.c @@ -1,5 +1,7 @@ -// RUN: %clang_cc1 %s -flax-vector-conversions=none -ffreestanding -triple=x86_64-unknown-unknown -target-feature +avx512vp2intersect -emit-llvm -o - -Wall -Werror | FileCheck %s -// RUN: %clang_cc1 %s -flax-vector-conversions=none -ffreestanding -triple=i386-unknown-unknown -target-feature +avx512vp2intersect -emit-llvm -o - -Wall -Werror | FileCheck %s +// RUN: %clang_cc1 -x c %s -flax-vector-conversions=none -ffreestanding -triple=x86_64-unknown-unknown -target-feature +avx512vp2intersect -emit-llvm -o - -Wall -Werror | FileCheck %s +// RUN: %clang_cc1 -x c %s -flax-vector-conversions=none -ffreestanding -triple=i386-unknown-unknown -target-feature +avx512vp2intersect -emit-llvm -o - -Wall -Werror | FileCheck %s +// RUN: %clang_cc1 -x c++ %s -flax-vector-conversions=none -ffreestanding -triple=x86_64-unknown-unknown -target-feature +avx512vp2intersect -emit-llvm -o - -Wall -Werror | FileCheck %s +// RUN: %clang_cc1 -x c++ %s -flax-vector-conversions=none -ffreestanding -triple=i386-unknown-unknown -target-feature +avx512vp2intersect -emit-llvm -o - -Wall -Werror | FileCheck %s #include <immintrin.h> diff --git a/clang/test/CodeGen/X86/avx512vpopcntdq-builtins.c b/clang/test/CodeGen/X86/avx512vpopcntdq-builtins.c index ca8f5e4..4fcc34e 100644 --- a/clang/test/CodeGen/X86/avx512vpopcntdq-builtins.c +++ b/clang/test/CodeGen/X86/avx512vpopcntdq-builtins.c @@ -1,46 +1,59 @@ -// RUN: %clang_cc1 -flax-vector-conversions=none -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +avx512vpopcntdq -emit-llvm -o - -Wall -Werror | FileCheck %s +// RUN: %clang_cc1 -x c -flax-vector-conversions=none -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +avx512vpopcntdq -emit-llvm -o - -Wall -Werror | FileCheck %s +// RUN: %clang_cc1 -x c -flax-vector-conversions=none -ffreestanding %s -triple=i386-apple-darwin -target-feature +avx512vpopcntdq -emit-llvm -o - -Wall -Werror | FileCheck %s +// RUN: %clang_cc1 -x c++ -flax-vector-conversions=none -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +avx512vpopcntdq -emit-llvm -o - -Wall -Werror | FileCheck %s +// RUN: %clang_cc1 -x c++ -flax-vector-conversions=none -ffreestanding %s -triple=i386-apple-darwin -target-feature +avx512vpopcntdq -emit-llvm -o - -Wall -Werror | FileCheck %s + +// RUN: %clang_cc1 -x c -flax-vector-conversions=none -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +avx512vpopcntdq -emit-llvm -o - -Wall -Werror -fexperimental-new-constant-interpreter | FileCheck %s +// RUN: %clang_cc1 -x c -flax-vector-conversions=none -ffreestanding %s -triple=i386-apple-darwin -target-feature +avx512vpopcntdq -emit-llvm -o - -Wall -Werror -fexperimental-new-constant-interpreter | FileCheck %s +// RUN: %clang_cc1 -x c++ -flax-vector-conversions=none -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +avx512vpopcntdq -emit-llvm -o - -Wall -Werror -fexperimental-new-constant-interpreter | FileCheck %s +// RUN: %clang_cc1 -x c++ -flax-vector-conversions=none -ffreestanding %s -triple=i386-apple-darwin -target-feature +avx512vpopcntdq -emit-llvm -o - -Wall -Werror -fexperimental-new-constant-interpreter | FileCheck %s + #include <immintrin.h> #include "builtin_test_helpers.h" __m512i test_mm512_popcnt_epi64(__m512i __A) { - // CHECK-LABEL: @test_mm512_popcnt_epi64 + // CHECK-LABEL: test_mm512_popcnt_epi64 // CHECK: @llvm.ctpop.v8i64 return _mm512_popcnt_epi64(__A); } -TEST_CONSTEXPR(match_v8di(_mm512_popcnt_epi64((__m512i)(__v8di){+5, -3, -10, +8, 0, -256, +256, -128}), 2, 31, 30, 1, 0, 24, 1, 25)); +TEST_CONSTEXPR(match_v8di(_mm512_popcnt_epi64((__m512i)(__v8di){+5, -3, -10, +8, 0, -256, +256, -128}), 2, 63, 62, 1, 0, 56, 1, 57)); __m512i test_mm512_mask_popcnt_epi64(__m512i __W, __mmask8 __U, __m512i __A) { - // CHECK-LABEL: @test_mm512_mask_popcnt_epi64 + // CHECK-LABEL: test_mm512_mask_popcnt_epi64 // CHECK: @llvm.ctpop.v8i64 // CHECK: select <8 x i1> %{{[0-9]+}}, <8 x i64> %{{.*}}, <8 x i64> %{{.*}} return _mm512_mask_popcnt_epi64(__W, __U, __A); } +TEST_CONSTEXPR(match_v8di(_mm512_mask_popcnt_epi64(_mm512_set1_epi64(-1), 0x81, (__m512i)(__v8di){+5, -3, -10, +8, 0, -256, +256, -128}), 2, -1, -1, -1, -1, -1, -1, 57)); __m512i test_mm512_maskz_popcnt_epi64(__mmask8 __U, __m512i __A) { - // CHECK-LABEL: @test_mm512_maskz_popcnt_epi64 + // CHECK-LABEL: test_mm512_maskz_popcnt_epi64 // CHECK: @llvm.ctpop.v8i64 // CHECK: select <8 x i1> %{{[0-9]+}}, <8 x i64> %{{.*}}, <8 x i64> %{{.*}} return _mm512_maskz_popcnt_epi64(__U, __A); } +TEST_CONSTEXPR(match_v8di(_mm512_maskz_popcnt_epi64(0x42, (__m512i)(__v8di){+5, -3, -10, +8, 0, -256, +256, -128}), 0, 63, 0, 0, 0, 0, 1, 0)); __m512i test_mm512_popcnt_epi32(__m512i __A) { - // CHECK-LABEL: @test_mm512_popcnt_epi32 + // CHECK-LABEL: test_mm512_popcnt_epi32 // CHECK: @llvm.ctpop.v16i32 return _mm512_popcnt_epi32(__A); } TEST_CONSTEXPR(match_v16si(_mm512_popcnt_epi32((__m512i)(__v16si){+5, -3, -10, +8, 0, -256, +256, -128, +3, +9, +15, +33, +63, +129, +511, +1025}), 2, 31, 30, 1, 0, 24, 1, 25, 2, 2, 4, 2, 6, 2, 9, 2)); __m512i test_mm512_mask_popcnt_epi32(__m512i __W, __mmask16 __U, __m512i __A) { - // CHECK-LABEL: @test_mm512_mask_popcnt_epi32 + // CHECK-LABEL: test_mm512_mask_popcnt_epi32 // CHECK: @llvm.ctpop.v16i32 // CHECK: select <16 x i1> %{{[0-9]+}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}} return _mm512_mask_popcnt_epi32(__W, __U, __A); } +TEST_CONSTEXPR(match_v16si(_mm512_mask_popcnt_epi32(_mm512_set1_epi32(-1), 0x0F81, (__m512i)(__v16si){+5, -3, -10, +8, 0, -256, +256, -128, +3, +9, +15, +33, +63, +129, +511, +1025}), 2, -1, -1, -1, -1, -1, -1, 25, 2, 2, 4, 2, -1, -1, -1, -1)); __m512i test_mm512_maskz_popcnt_epi32(__mmask16 __U, __m512i __A) { - // CHECK-LABEL: @test_mm512_maskz_popcnt_epi32 + // CHECK-LABEL: test_mm512_maskz_popcnt_epi32 // CHECK: @llvm.ctpop.v16i32 // CHECK: select <16 x i1> %{{[0-9]+}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}} return _mm512_maskz_popcnt_epi32(__U, __A); } +TEST_CONSTEXPR(match_v16si(_mm512_maskz_popcnt_epi32(0xF042, (__m512i)(__v16si){+5, -3, -10, +8, 0, -256, +256, -128, +3, +9, +15, +33, +63, +129, +511, +1025}), 0, 31, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 6, 2, 9, 2)); diff --git a/clang/test/CodeGen/X86/avx512vpopcntdqvl-builtins.c b/clang/test/CodeGen/X86/avx512vpopcntdqvl-builtins.c index 5d18b68..8e36b35 100644 --- a/clang/test/CodeGen/X86/avx512vpopcntdqvl-builtins.c +++ b/clang/test/CodeGen/X86/avx512vpopcntdqvl-builtins.c @@ -1,88 +1,105 @@ -// RUN: %clang_cc1 -flax-vector-conversions=none -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +avx512vpopcntdq -target-feature +avx512vl -emit-llvm -o - -Wall -Werror | FileCheck %s +// RUN: %clang_cc1 -x c -flax-vector-conversions=none -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +avx512vpopcntdq -target-feature +avx512vl -emit-llvm -o - -Wall -Werror | FileCheck %s +// RUN: %clang_cc1 -x c -flax-vector-conversions=none -ffreestanding %s -triple=i386-apple-darwin -target-feature +avx512vpopcntdq -target-feature +avx512vl -emit-llvm -o - -Wall -Werror | FileCheck %s +// RUN: %clang_cc1 -x c++ -flax-vector-conversions=none -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +avx512vpopcntdq -target-feature +avx512vl -emit-llvm -o - -Wall -Werror | FileCheck %s +// RUN: %clang_cc1 -x c++ -flax-vector-conversions=none -ffreestanding %s -triple=i386-apple-darwin -target-feature +avx512vpopcntdq -target-feature +avx512vl -emit-llvm -o - -Wall -Werror | FileCheck %s + +// RUN: %clang_cc1 -x c -flax-vector-conversions=none -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +avx512vpopcntdq -target-feature +avx512vl -emit-llvm -o - -Wall -Werror -fexperimental-new-constant-interpreter | FileCheck %s +// RUN: %clang_cc1 -x c -flax-vector-conversions=none -ffreestanding %s -triple=i386-apple-darwin -target-feature +avx512vpopcntdq -target-feature +avx512vl -emit-llvm -o - -Wall -Werror -fexperimental-new-constant-interpreter | FileCheck %s +// RUN: %clang_cc1 -x c++ -flax-vector-conversions=none -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +avx512vpopcntdq -target-feature +avx512vl -emit-llvm -o - -Wall -Werror -fexperimental-new-constant-interpreter | FileCheck %s +// RUN: %clang_cc1 -x c++ -flax-vector-conversions=none -ffreestanding %s -triple=i386-apple-darwin -target-feature +avx512vpopcntdq -target-feature +avx512vl -emit-llvm -o - -Wall -Werror -fexperimental-new-constant-interpreter | FileCheck %s + #include <immintrin.h> #include "builtin_test_helpers.h" __m128i test_mm_popcnt_epi64(__m128i __A) { - // CHECK-LABEL: @test_mm_popcnt_epi64 + // CHECK-LABEL: test_mm_popcnt_epi64 // CHECK: @llvm.ctpop.v2i64 return _mm_popcnt_epi64(__A); } TEST_CONSTEXPR(match_v2di(_mm_popcnt_epi64((__m128i)(__v2di){+5, -3}), 2, 63)); __m128i test_mm_mask_popcnt_epi64(__m128i __W, __mmask8 __U, __m128i __A) { - // CHECK-LABEL: @test_mm_mask_popcnt_epi64 + // CHECK-LABEL: test_mm_mask_popcnt_epi64 // CHECK: @llvm.ctpop.v2i64 // CHECK: select <2 x i1> %{{.+}}, <2 x i64> %{{.*}}, <2 x i64> %{{.*}} return _mm_mask_popcnt_epi64(__W, __U, __A); } +TEST_CONSTEXPR(match_v2di(_mm_mask_popcnt_epi64(_mm_set1_epi64x(-1), 0x2, (__m128i)(__v2di){+5, -3}), -1, 63)); __m128i test_mm_maskz_popcnt_epi64(__mmask8 __U, __m128i __A) { - // CHECK-LABEL: @test_mm_maskz_popcnt_epi64 + // CHECK-LABEL: test_mm_maskz_popcnt_epi64 // CHECK: @llvm.ctpop.v2i64 // CHECK: select <2 x i1> %{{.+}}, <2 x i64> %{{.*}}, <2 x i64> %{{.*}} return _mm_maskz_popcnt_epi64(__U, __A); } +TEST_CONSTEXPR(match_v2di(_mm_maskz_popcnt_epi64(0x1, (__m128i)(__v2di){+5, -3}), 2, 0)); __m128i test_mm_popcnt_epi32(__m128i __A) { - // CHECK-LABEL: @test_mm_popcnt_epi32 + // CHECK-LABEL: test_mm_popcnt_epi32 // CHECK: @llvm.ctpop.v4i32 return _mm_popcnt_epi32(__A); } TEST_CONSTEXPR(match_v4si(_mm_popcnt_epi32((__m128i)(__v4si){+5, -3, -10, +8}), 2, 31, 30, 1)); __m128i test_mm_mask_popcnt_epi32(__m128i __W, __mmask8 __U, __m128i __A) { - // CHECK-LABEL: @test_mm_mask_popcnt_epi32 + // CHECK-LABEL: test_mm_mask_popcnt_epi32 // CHECK: @llvm.ctpop.v4i32 // CHECK: select <4 x i1> %{{.+}}, <4 x i32> %{{.*}}, <4 x i32> %{{.*}} return _mm_mask_popcnt_epi32(__W, __U, __A); } +TEST_CONSTEXPR(match_v4si(_mm_mask_popcnt_epi32(_mm_set1_epi32(-1), 0x3, (__m128i)(__v4si){+5, -3, -10, +8}), 2, 31, -1, -1)); __m128i test_mm_maskz_popcnt_epi32(__mmask8 __U, __m128i __A) { - // CHECK-LABEL: @test_mm_maskz_popcnt_epi32 + // CHECK-LABEL: test_mm_maskz_popcnt_epi32 // CHECK: @llvm.ctpop.v4i32 // CHECK: select <4 x i1> %{{.+}}, <4 x i32> %{{.*}}, <4 x i32> %{{.*}} return _mm_maskz_popcnt_epi32(__U, __A); } +TEST_CONSTEXPR(match_v4si(_mm_maskz_popcnt_epi32(0x5, (__m128i)(__v4si){+5, -3, -10, +8}), 2, 0, 30, 0)); __m256i test_mm256_popcnt_epi64(__m256i __A) { - // CHECK-LABEL: @test_mm256_popcnt_epi64 + // CHECK-LABEL: test_mm256_popcnt_epi64 // CHECK: @llvm.ctpop.v4i64 return _mm256_popcnt_epi64(__A); } TEST_CONSTEXPR(match_v4di(_mm256_popcnt_epi64((__m256i)(__v4di){+5, -3, -10, +8}), 2, 63, 62, 1)); __m256i test_mm256_mask_popcnt_epi64(__m256i __W, __mmask8 __U, __m256i __A) { - // CHECK-LABEL: @test_mm256_mask_popcnt_epi64 + // CHECK-LABEL: test_mm256_mask_popcnt_epi64 // CHECK: @llvm.ctpop.v4i64 // CHECK: select <4 x i1> %{{.+}}, <4 x i64> %{{.*}}, <4 x i64> %{{.*}} return _mm256_mask_popcnt_epi64(__W, __U, __A); } +TEST_CONSTEXPR(match_v4di(_mm256_mask_popcnt_epi64(_mm256_set1_epi64x(-1), 0x3, (__m256i)(__v4di){+5, -3, -10, +8}), 2, 63, -1, -1)); __m256i test_mm256_maskz_popcnt_epi64(__mmask8 __U, __m256i __A) { - // CHECK-LABEL: @test_mm256_maskz_popcnt_epi64 + // CHECK-LABEL: test_mm256_maskz_popcnt_epi64 // CHECK: @llvm.ctpop.v4i64 // CHECK: select <4 x i1> %{{.+}}, <4 x i64> %{{.*}}, <4 x i64> %{{.*}} return _mm256_maskz_popcnt_epi64(__U, __A); } +TEST_CONSTEXPR(match_v4di(_mm256_maskz_popcnt_epi64(0x5, (__m256i)(__v4di){+5, -3, -10, +8}), 2, 0, 62, 0)); __m256i test_mm256_popcnt_epi32(__m256i __A) { - // CHECK-LABEL: @test_mm256_popcnt_epi32 + // CHECK-LABEL: test_mm256_popcnt_epi32 // CHECK: @llvm.ctpop.v8i32 return _mm256_popcnt_epi32(__A); } TEST_CONSTEXPR(match_v8si(_mm256_popcnt_epi32((__m256i)(__v8si){+5, -3, -10, +8, 0, -256, +256, -128}), 2, 31, 30, 1, 0, 24, 1, 25)); __m256i test_mm256_mask_popcnt_epi32(__m256i __W, __mmask8 __U, __m256i __A) { - // CHECK-LABEL: @test_mm256_mask_popcnt_epi32 + // CHECK-LABEL: test_mm256_mask_popcnt_epi32 // CHECK: @llvm.ctpop.v8i32 // CHECK: select <8 x i1> %{{.+}}, <8 x i32> %{{.*}}, <8 x i32> %{{.*}} return _mm256_mask_popcnt_epi32(__W, __U, __A); } +TEST_CONSTEXPR(match_v8si(_mm256_mask_popcnt_epi32(_mm256_set1_epi32(-1), 0x37, (__m256i)(__v8si){+5, -3, -10, +8, 0, -256, +256, -128}), 2, 31, 30, -1, 0, 24, -1, -1)); __m256i test_mm256_maskz_popcnt_epi32(__mmask8 __U, __m256i __A) { - // CHECK-LABEL: @test_mm256_maskz_popcnt_epi32 + // CHECK-LABEL: test_mm256_maskz_popcnt_epi32 // CHECK: @llvm.ctpop.v8i32 // CHECK: select <8 x i1> %{{.+}}, <8 x i32> %{{.*}}, <8 x i32> %{{.*}} return _mm256_maskz_popcnt_epi32(__U, __A); } +TEST_CONSTEXPR(match_v8si(_mm256_maskz_popcnt_epi32(0x8C, (__m256i)(__v8si){+5, -3, -10, +8, 0, -256, +256, -128}), 0, 0, 30, 1, 0, 0, 0, 25)); diff --git a/clang/test/CodeGen/X86/avxifma-builtins.c b/clang/test/CodeGen/X86/avxifma-builtins.c index 56e434c..dd0f220 100644 --- a/clang/test/CodeGen/X86/avxifma-builtins.c +++ b/clang/test/CodeGen/X86/avxifma-builtins.c @@ -1,52 +1,54 @@ -// RUN: %clang_cc1 -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +avxifma -emit-llvm -o - -Wall -Werror | FileCheck %s -// RUN: %clang_cc1 -ffreestanding %s -triple=i386-apple-darwin -target-feature +avxifma -emit-llvm -o - -Wall -Werror | FileCheck %s +// RUN: %clang_cc1 -x c -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +avxifma -emit-llvm -o - -Wall -Werror | FileCheck %s +// RUN: %clang_cc1 -x c -ffreestanding %s -triple=i386-apple-darwin -target-feature +avxifma -emit-llvm -o - -Wall -Werror | FileCheck %s +// RUN: %clang_cc1 -x c++ -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +avxifma -emit-llvm -o - -Wall -Werror | FileCheck %s +// RUN: %clang_cc1 -x c++ -ffreestanding %s -triple=i386-apple-darwin -target-feature +avxifma -emit-llvm -o - -Wall -Werror | FileCheck %s #include <immintrin.h> __m128i test_mm_madd52hi_epu64(__m128i __X, __m128i __Y, __m128i __Z) { -// CHECK-LABEL: @test_mm_madd52hi_epu64 -// CHECK: call <2 x i64> @llvm.x86.avx512.vpmadd52h.uq.128 +// CHECK-LABEL: test_mm_madd52hi_epu64 +// CHECK: call {{.*}}<2 x i64> @llvm.x86.avx512.vpmadd52h.uq.128(<2 x i64> %{{.*}}, <2 x i64> %{{.*}}, <2 x i64> %{{.*}}) return _mm_madd52hi_epu64(__X, __Y, __Z); } __m256i test_mm256_madd52hi_epu64(__m256i __X, __m256i __Y, __m256i __Z) { -// CHECK-LABEL: @test_mm256_madd52hi_epu64 -// CHECK: call <4 x i64> @llvm.x86.avx512.vpmadd52h.uq.256 +// CHECK-LABEL: test_mm256_madd52hi_epu64 +// CHECK: call {{.*}}<4 x i64> @llvm.x86.avx512.vpmadd52h.uq.256(<4 x i64> %{{.*}}, <4 x i64> %{{.*}}, <4 x i64> %{{.*}}) return _mm256_madd52hi_epu64(__X, __Y, __Z); } __m128i test_mm_madd52lo_epu64(__m128i __X, __m128i __Y, __m128i __Z) { -// CHECK-LABEL: @test_mm_madd52lo_epu64 -// CHECK: call <2 x i64> @llvm.x86.avx512.vpmadd52l.uq.128 +// CHECK-LABEL: test_mm_madd52lo_epu64 +// CHECK: call {{.*}}<2 x i64> @llvm.x86.avx512.vpmadd52l.uq.128(<2 x i64> %{{.*}}, <2 x i64> %{{.*}}, <2 x i64> %{{.*}}) return _mm_madd52lo_epu64(__X, __Y, __Z); } __m256i test_mm256_madd52lo_epu64(__m256i __X, __m256i __Y, __m256i __Z) { -// CHECK-LABEL: @test_mm256_madd52lo_epu64 -// CHECK: call <4 x i64> @llvm.x86.avx512.vpmadd52l.uq.256 +// CHECK-LABEL: test_mm256_madd52lo_epu64 +// CHECK: call {{.*}}<4 x i64> @llvm.x86.avx512.vpmadd52l.uq.256(<4 x i64> %{{.*}}, <4 x i64> %{{.*}}, <4 x i64> %{{.*}}) return _mm256_madd52lo_epu64(__X, __Y, __Z); } __m128i test_mm_madd52hi_avx_epu64(__m128i __X, __m128i __Y, __m128i __Z) { -// CHECK-LABEL: @test_mm_madd52hi_avx_epu64 -// CHECK: call <2 x i64> @llvm.x86.avx512.vpmadd52h.uq.128 +// CHECK-LABEL: test_mm_madd52hi_avx_epu64 +// CHECK: call {{.*}}<2 x i64> @llvm.x86.avx512.vpmadd52h.uq.128(<2 x i64> %{{.*}}, <2 x i64> %{{.*}}, <2 x i64> %{{.*}}) return _mm_madd52hi_avx_epu64(__X, __Y, __Z); } __m256i test_mm256_madd52hi_avx_epu64(__m256i __X, __m256i __Y, __m256i __Z) { -// CHECK-LABEL: @test_mm256_madd52hi_avx_epu64 -// CHECK: call <4 x i64> @llvm.x86.avx512.vpmadd52h.uq.256 +// CHECK-LABEL: test_mm256_madd52hi_avx_epu64 +// CHECK: call {{.*}}<4 x i64> @llvm.x86.avx512.vpmadd52h.uq.256(<4 x i64> %{{.*}}, <4 x i64> %{{.*}}, <4 x i64> %{{.*}}) return _mm256_madd52hi_avx_epu64(__X, __Y, __Z); } __m128i test_mm_madd52lo_avx_epu64(__m128i __X, __m128i __Y, __m128i __Z) { -// CHECK-LABEL: @test_mm_madd52lo_avx_epu64 -// CHECK: call <2 x i64> @llvm.x86.avx512.vpmadd52l.uq.128 +// CHECK-LABEL: test_mm_madd52lo_avx_epu64 +// CHECK: call {{.*}}<2 x i64> @llvm.x86.avx512.vpmadd52l.uq.128(<2 x i64> %{{.*}}, <2 x i64> %{{.*}}, <2 x i64> %{{.*}}) return _mm_madd52lo_avx_epu64(__X, __Y, __Z); } __m256i test_mm256_madd52lo_avx_epu64(__m256i __X, __m256i __Y, __m256i __Z) { -// CHECK-LABEL: @test_mm256_madd52lo_avx_epu64 -// CHECK: call <4 x i64> @llvm.x86.avx512.vpmadd52l.uq.256 +// CHECK-LABEL: test_mm256_madd52lo_avx_epu64 +// CHECK: call {{.*}}<4 x i64> @llvm.x86.avx512.vpmadd52l.uq.256(<4 x i64> %{{.*}}, <4 x i64> %{{.*}}, <4 x i64> %{{.*}}) return _mm256_madd52lo_avx_epu64(__X, __Y, __Z); } diff --git a/clang/test/CodeGen/X86/avxvnni-builtins.c b/clang/test/CodeGen/X86/avxvnni-builtins.c index 089578d..bb28a35 100644 --- a/clang/test/CodeGen/X86/avxvnni-builtins.c +++ b/clang/test/CodeGen/X86/avxvnni-builtins.c @@ -1,100 +1,102 @@ -// RUN: %clang_cc1 -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +avxvnni -emit-llvm -o - -Wall -Werror | FileCheck %s -// RUN: %clang_cc1 -ffreestanding %s -triple=i386-apple-darwin -target-feature +avxvnni -emit-llvm -o - -Wall -Werror | FileCheck %s +// RUN: %clang_cc1 -x c -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +avxvnni -emit-llvm -o - -Wall -Werror | FileCheck %s +// RUN: %clang_cc1 -x c -ffreestanding %s -triple=i386-apple-darwin -target-feature +avxvnni -emit-llvm -o - -Wall -Werror | FileCheck %s +// RUN: %clang_cc1 -x c++ -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +avxvnni -emit-llvm -o - -Wall -Werror | FileCheck %s +// RUN: %clang_cc1 -x c++ -ffreestanding %s -triple=i386-apple-darwin -target-feature +avxvnni -emit-llvm -o - -Wall -Werror | FileCheck %s #include <immintrin.h> __m256i test_mm256_dpbusd_epi32(__m256i __S, __m256i __A, __m256i __B) { - // CHECK-LABEL: @test_mm256_dpbusd_epi32 - // CHECK: @llvm.x86.avx512.vpdpbusd.256 + // CHECK-LABEL: test_mm256_dpbusd_epi32 + // CHECK: call <8 x i32> @llvm.x86.avx512.vpdpbusd.256(<8 x i32> %{{.*}}, <8 x i32> %{{.*}}, <8 x i32> %{{.*}}) return _mm256_dpbusd_epi32(__S, __A, __B); } __m256i test_mm256_dpbusds_epi32(__m256i __S, __m256i __A, __m256i __B) { - // CHECK-LABEL: @test_mm256_dpbusds_epi32 - // CHECK: @llvm.x86.avx512.vpdpbusds.256 + // CHECK-LABEL: test_mm256_dpbusds_epi32 + // CHECK: call <8 x i32> @llvm.x86.avx512.vpdpbusds.256(<8 x i32> %{{.*}}, <8 x i32> %{{.*}}, <8 x i32> %{{.*}}) return _mm256_dpbusds_epi32(__S, __A, __B); } __m256i test_mm256_dpwssd_epi32(__m256i __S, __m256i __A, __m256i __B) { - // CHECK-LABEL: @test_mm256_dpwssd_epi32 - // CHECK: @llvm.x86.avx512.vpdpwssd.256 + // CHECK-LABEL: test_mm256_dpwssd_epi32 + // CHECK: call <8 x i32> @llvm.x86.avx512.vpdpwssd.256(<8 x i32> %{{.*}}, <8 x i32> %{{.*}}, <8 x i32> %{{.*}}) return _mm256_dpwssd_epi32(__S, __A, __B); } __m256i test_mm256_dpwssds_epi32(__m256i __S, __m256i __A, __m256i __B) { - // CHECK-LABEL: @test_mm256_dpwssds_epi32 - // CHECK: @llvm.x86.avx512.vpdpwssds.256 + // CHECK-LABEL: test_mm256_dpwssds_epi32 + // CHECK: call <8 x i32> @llvm.x86.avx512.vpdpwssds.256(<8 x i32> %{{.*}}, <8 x i32> %{{.*}}, <8 x i32> %{{.*}}) return _mm256_dpwssds_epi32(__S, __A, __B); } __m128i test_mm_dpbusd_epi32(__m128i __S, __m128i __A, __m128i __B) { - // CHECK-LABEL: @test_mm_dpbusd_epi32 - // CHECK: @llvm.x86.avx512.vpdpbusd.128 + // CHECK-LABEL: test_mm_dpbusd_epi32 + // CHECK: call <4 x i32> @llvm.x86.avx512.vpdpbusd.128(<4 x i32> %{{.*}}, <4 x i32> %{{.*}}, <4 x i32> %{{.*}}) return _mm_dpbusd_epi32(__S, __A, __B); } __m128i test_mm_dpbusds_epi32(__m128i __S, __m128i __A, __m128i __B) { - // CHECK-LABEL: @test_mm_dpbusds_epi32 - // CHECK: @llvm.x86.avx512.vpdpbusds.128 + // CHECK-LABEL: test_mm_dpbusds_epi32 + // CHECK: call <4 x i32> @llvm.x86.avx512.vpdpbusds.128(<4 x i32> %{{.*}}, <4 x i32> %{{.*}}, <4 x i32> %{{.*}}) return _mm_dpbusds_epi32(__S, __A, __B); } __m128i test_mm_dpwssd_epi32(__m128i __S, __m128i __A, __m128i __B) { - // CHECK-LABEL: @test_mm_dpwssd_epi32 - // CHECK: @llvm.x86.avx512.vpdpwssd.128 + // CHECK-LABEL: test_mm_dpwssd_epi32 + // CHECK: call <4 x i32> @llvm.x86.avx512.vpdpwssd.128(<4 x i32> %{{.*}}, <4 x i32> %{{.*}}, <4 x i32> %{{.*}}) return _mm_dpwssd_epi32(__S, __A, __B); } __m128i test_mm_dpwssds_epi32(__m128i __S, __m128i __A, __m128i __B) { - // CHECK-LABEL: @test_mm_dpwssds_epi32 - // CHECK: @llvm.x86.avx512.vpdpwssds.128 + // CHECK-LABEL: test_mm_dpwssds_epi32 + // CHECK: call <4 x i32> @llvm.x86.avx512.vpdpwssds.128(<4 x i32> %{{.*}}, <4 x i32> %{{.*}}, <4 x i32> %{{.*}}) return _mm_dpwssds_epi32(__S, __A, __B); } __m256i test_mm256_dpbusd_avx_epi32(__m256i __S, __m256i __A, __m256i __B) { - // CHECK-LABEL: @test_mm256_dpbusd_avx_epi32 - // CHECK: @llvm.x86.avx512.vpdpbusd.256 + // CHECK-LABEL: test_mm256_dpbusd_avx_epi32 + // CHECK: call <8 x i32> @llvm.x86.avx512.vpdpbusd.256(<8 x i32> %{{.*}}, <8 x i32> %{{.*}}, <8 x i32> %{{.*}}) return _mm256_dpbusd_avx_epi32(__S, __A, __B); } __m256i test_mm256_dpbusds_avx_epi32(__m256i __S, __m256i __A, __m256i __B) { - // CHECK-LABEL: @test_mm256_dpbusds_avx_epi32 - // CHECK: @llvm.x86.avx512.vpdpbusds.256 + // CHECK-LABEL: test_mm256_dpbusds_avx_epi32 + // CHECK: call <8 x i32> @llvm.x86.avx512.vpdpbusds.256(<8 x i32> %{{.*}}, <8 x i32> %{{.*}}, <8 x i32> %{{.*}}) return _mm256_dpbusds_avx_epi32(__S, __A, __B); } __m256i test_mm256_dpwssd_avx_epi32(__m256i __S, __m256i __A, __m256i __B) { - // CHECK-LABEL: @test_mm256_dpwssd_avx_epi32 - // CHECK: @llvm.x86.avx512.vpdpwssd.256 + // CHECK-LABEL: test_mm256_dpwssd_avx_epi32 + // CHECK: call <8 x i32> @llvm.x86.avx512.vpdpwssd.256(<8 x i32> %{{.*}}, <8 x i32> %{{.*}}, <8 x i32> %{{.*}}) return _mm256_dpwssd_avx_epi32(__S, __A, __B); } __m256i test_mm256_dpwssds_avx_epi32(__m256i __S, __m256i __A, __m256i __B) { - // CHECK-LABEL: @test_mm256_dpwssds_avx_epi32 - // CHECK: @llvm.x86.avx512.vpdpwssds.256 + // CHECK-LABEL: test_mm256_dpwssds_avx_epi32 + // CHECK: call <8 x i32> @llvm.x86.avx512.vpdpwssds.256(<8 x i32> %{{.*}}, <8 x i32> %{{.*}}, <8 x i32> %{{.*}}) return _mm256_dpwssds_avx_epi32(__S, __A, __B); } __m128i test_mm_dpbusd_avx_epi32(__m128i __S, __m128i __A, __m128i __B) { - // CHECK-LABEL: @test_mm_dpbusd_avx_epi32 - // CHECK: @llvm.x86.avx512.vpdpbusd.128 + // CHECK-LABEL: test_mm_dpbusd_avx_epi32 + // CHECK: call <4 x i32> @llvm.x86.avx512.vpdpbusd.128(<4 x i32> %{{.*}}, <4 x i32> %{{.*}}, <4 x i32> %{{.*}}) return _mm_dpbusd_avx_epi32(__S, __A, __B); } __m128i test_mm_dpbusds_avx_epi32(__m128i __S, __m128i __A, __m128i __B) { - // CHECK-LABEL: @test_mm_dpbusds_avx_epi32 - // CHECK: @llvm.x86.avx512.vpdpbusds.128 + // CHECK-LABEL: test_mm_dpbusds_avx_epi32 + // CHECK: call <4 x i32> @llvm.x86.avx512.vpdpbusds.128(<4 x i32> %{{.*}}, <4 x i32> %{{.*}}, <4 x i32> %{{.*}}) return _mm_dpbusds_avx_epi32(__S, __A, __B); } __m128i test_mm_dpwssd_avx_epi32(__m128i __S, __m128i __A, __m128i __B) { - // CHECK-LABEL: @test_mm_dpwssd_avx_epi32 - // CHECK: @llvm.x86.avx512.vpdpwssd.128 + // CHECK-LABEL: test_mm_dpwssd_avx_epi32 + // CHECK: call <4 x i32> @llvm.x86.avx512.vpdpwssd.128(<4 x i32> %{{.*}}, <4 x i32> %{{.*}}, <4 x i32> %{{.*}}) return _mm_dpwssd_avx_epi32(__S, __A, __B); } __m128i test_mm_dpwssds_avx_epi32(__m128i __S, __m128i __A, __m128i __B) { - // CHECK-LABEL: @test_mm_dpwssds_avx_epi32 - // CHECK: @llvm.x86.avx512.vpdpwssds.128 + // CHECK-LABEL: test_mm_dpwssds_avx_epi32 + // CHECK: call <4 x i32> @llvm.x86.avx512.vpdpwssds.128(<4 x i32> %{{.*}}, <4 x i32> %{{.*}}, <4 x i32> %{{.*}}) return _mm_dpwssds_avx_epi32(__S, __A, __B); } diff --git a/clang/test/CodeGen/X86/avxvnniint16-builtins.c b/clang/test/CodeGen/X86/avxvnniint16-builtins.c index f9feaea..c25367b 100644 --- a/clang/test/CodeGen/X86/avxvnniint16-builtins.c +++ b/clang/test/CodeGen/X86/avxvnniint16-builtins.c @@ -1,78 +1,82 @@ -// RUN: %clang_cc1 %s -ffreestanding -triple=x86_64-unknown-unknown -target-feature +avxvnniint16 -emit-llvm -o - -Wall -Werror | FileCheck %s -// RUN: %clang_cc1 %s -ffreestanding -triple=i386-unknown-unknown -target-feature +avxvnniint16 -emit-llvm -o - -Wall -Werror | FileCheck %s -// RUN: %clang_cc1 %s -ffreestanding -triple=x86_64-unknown-unknown -target-feature +avx10.2-256 -emit-llvm -o - -Wall -Werror | FileCheck %s -// RUN: %clang_cc1 %s -ffreestanding -triple=i386-unknown-unknown -target-feature +avx10.2-256 -emit-llvm -o - -Wall -Werror | FileCheck %s +// RUN: %clang_cc1 -x c %s -ffreestanding -triple=x86_64-unknown-unknown -target-feature +avxvnniint16 -emit-llvm -o - -Wall -Werror | FileCheck %s +// RUN: %clang_cc1 -x c %s -ffreestanding -triple=i386-unknown-unknown -target-feature +avxvnniint16 -emit-llvm -o - -Wall -Werror | FileCheck %s +// RUN: %clang_cc1 -x c %s -ffreestanding -triple=x86_64-unknown-unknown -target-feature +avx10.2-256 -emit-llvm -o - -Wall -Werror | FileCheck %s +// RUN: %clang_cc1 -x c %s -ffreestanding -triple=i386-unknown-unknown -target-feature +avx10.2-256 -emit-llvm -o - -Wall -Werror | FileCheck %s +// RUN: %clang_cc1 -x c++ %s -ffreestanding -triple=x86_64-unknown-unknown -target-feature +avxvnniint16 -emit-llvm -o - -Wall -Werror | FileCheck %s +// RUN: %clang_cc1 -x c++ %s -ffreestanding -triple=i386-unknown-unknown -target-feature +avxvnniint16 -emit-llvm -o - -Wall -Werror | FileCheck %s +// RUN: %clang_cc1 -x c++ %s -ffreestanding -triple=x86_64-unknown-unknown -target-feature +avx10.2-256 -emit-llvm -o - -Wall -Werror | FileCheck %s +// RUN: %clang_cc1 -x c++ %s -ffreestanding -triple=i386-unknown-unknown -target-feature +avx10.2-256 -emit-llvm -o - -Wall -Werror | FileCheck %s #include <immintrin.h> __m128i test_mm_dpwsud_epi32(__m128i __A, __m128i __B, __m128i __C) { - // CHECK-LABEL: @test_mm_dpwsud_epi32( + // CHECK-LABEL: test_mm_dpwsud_epi32 // CHECK: call <4 x i32> @llvm.x86.avx2.vpdpwsud.128(<4 x i32> %{{.*}}, <4 x i32> %{{.*}}, <4 x i32> %{{.*}}) return _mm_dpwsud_epi32(__A, __B, __C); } __m256i test_mm256_dpwsud_epi32(__m256i __A, __m256i __B, __m256i __C) { - // CHECK-LABEL: @test_mm256_dpwsud_epi32( + // CHECK-LABEL: test_mm256_dpwsud_epi32 // CHECK: call <8 x i32> @llvm.x86.avx2.vpdpwsud.256(<8 x i32> %{{.*}}, <8 x i32> %{{.*}}, <8 x i32> %{{.*}}) return _mm256_dpwsud_epi32(__A, __B, __C); } __m128i test_mm_dpwsuds_epi32(__m128i __A, __m128i __B, __m128i __C) { - // CHECK-LABEL: @test_mm_dpwsuds_epi32( + // CHECK-LABEL: test_mm_dpwsuds_epi32 // CHECK: call <4 x i32> @llvm.x86.avx2.vpdpwsuds.128(<4 x i32> %{{.*}}, <4 x i32> %{{.*}}, <4 x i32> %{{.*}}) return _mm_dpwsuds_epi32(__A, __B, __C); } __m256i test_mm256_dpwsuds_epi32(__m256i __A, __m256i __B, __m256i __C) { - // CHECK-LABEL: @test_mm256_dpwsuds_epi32( + // CHECK-LABEL: test_mm256_dpwsuds_epi32 // CHECK: call <8 x i32> @llvm.x86.avx2.vpdpwsuds.256(<8 x i32> %{{.*}}, <8 x i32> %{{.*}}, <8 x i32> %{{.*}}) return _mm256_dpwsuds_epi32(__A, __B, __C); } __m128i test_mm_dpwusd_epi32(__m128i __A, __m128i __B, __m128i __C) { - // CHECK-LABEL: @test_mm_dpwusd_epi32( + // CHECK-LABEL: test_mm_dpwusd_epi32 // CHECK: call <4 x i32> @llvm.x86.avx2.vpdpwusd.128(<4 x i32> %{{.*}}, <4 x i32> %{{.*}}, <4 x i32> %{{.*}}) return _mm_dpwusd_epi32(__A, __B, __C); } __m256i test_mm256_dpwusd_epi32(__m256i __A, __m256i __B, __m256i __C) { - // CHECK-LABEL: @test_mm256_dpwusd_epi32( + // CHECK-LABEL: test_mm256_dpwusd_epi32 // CHECK: call <8 x i32> @llvm.x86.avx2.vpdpwusd.256(<8 x i32> %{{.*}}, <8 x i32> %{{.*}}, <8 x i32> %{{.*}}) return _mm256_dpwusd_epi32(__A, __B, __C); } __m128i test_mm_dpwusds_epi32(__m128i __A, __m128i __B, __m128i __C) { - // CHECK-LABEL: @test_mm_dpwusds_epi32( + // CHECK-LABEL: test_mm_dpwusds_epi32 // CHECK: call <4 x i32> @llvm.x86.avx2.vpdpwusds.128(<4 x i32> %{{.*}}, <4 x i32> %{{.*}}, <4 x i32> %{{.*}}) return _mm_dpwusds_epi32(__A, __B, __C); } __m256i test_mm256_dpwusds_epi32(__m256i __A, __m256i __B, __m256i __C) { - // CHECK-LABEL: @test_mm256_dpwusds_epi32( + // CHECK-LABEL: test_mm256_dpwusds_epi32 // CHECK: call <8 x i32> @llvm.x86.avx2.vpdpwusds.256(<8 x i32> %{{.*}}, <8 x i32> %{{.*}}, <8 x i32> %{{.*}}) return _mm256_dpwusds_epi32(__A, __B, __C); } __m128i test_mm_dpwuud_epi32(__m128i __A, __m128i __B, __m128i __C) { - // CHECK-LABEL: @test_mm_dpwuud_epi32( + // CHECK-LABEL: test_mm_dpwuud_epi32 // CHECK: call <4 x i32> @llvm.x86.avx2.vpdpwuud.128(<4 x i32> %{{.*}}, <4 x i32> %{{.*}}, <4 x i32> %{{.*}}) return _mm_dpwuud_epi32(__A, __B, __C); } __m256i test_mm256_dpwuud_epi32(__m256i __A, __m256i __B, __m256i __C) { - // CHECK-LABEL: @test_mm256_dpwuud_epi32( + // CHECK-LABEL: test_mm256_dpwuud_epi32 // CHECK: call <8 x i32> @llvm.x86.avx2.vpdpwuud.256(<8 x i32> %{{.*}}, <8 x i32> %{{.*}}, <8 x i32> %{{.*}}) return _mm256_dpwuud_epi32(__A, __B, __C); } __m128i test_mm_dpwuuds_epi32(__m128i __A, __m128i __B, __m128i __C) { - // CHECK-LABEL: @test_mm_dpwuuds_epi32( + // CHECK-LABEL: test_mm_dpwuuds_epi32 // CHECK: call <4 x i32> @llvm.x86.avx2.vpdpwuuds.128(<4 x i32> %{{.*}}, <4 x i32> %{{.*}}, <4 x i32> %{{.*}}) return _mm_dpwuuds_epi32(__A, __B, __C); } __m256i test_mm256_dpwuuds_epi32(__m256i __A, __m256i __B, __m256i __C) { - // CHECK-LABEL: @test_mm256_dpwuuds_epi32( + // CHECK-LABEL: test_mm256_dpwuuds_epi32 // CHECK: call <8 x i32> @llvm.x86.avx2.vpdpwuuds.256(<8 x i32> %{{.*}}, <8 x i32> %{{.*}}, <8 x i32> %{{.*}}) return _mm256_dpwuuds_epi32(__A, __B, __C); } diff --git a/clang/test/CodeGen/X86/avxvnniint8-builtins.c b/clang/test/CodeGen/X86/avxvnniint8-builtins.c index 80d005c..f808dee 100644 --- a/clang/test/CodeGen/X86/avxvnniint8-builtins.c +++ b/clang/test/CodeGen/X86/avxvnniint8-builtins.c @@ -1,78 +1,82 @@ -// RUN: %clang_cc1 -ffreestanding %s -triple=x86_64- -target-feature +avxvnniint8 -emit-llvm -o - -Wall -Werror | FileCheck %s -// RUN: %clang_cc1 -ffreestanding %s -triple=i386- -target-feature +avxvnniint8 -emit-llvm -o - -Wall -Werror | FileCheck %s -// RUN: %clang_cc1 -ffreestanding %s -triple=x86_64- -target-feature +avx10.2-256 -emit-llvm -o - -Wall -Werror | FileCheck %s -// RUN: %clang_cc1 -ffreestanding %s -triple=i386- -target-feature +avx10.2-256 -emit-llvm -o - -Wall -Werror | FileCheck %s +// RUN: %clang_cc1 -x c -ffreestanding %s -triple=x86_64- -target-feature +avxvnniint8 -emit-llvm -o - -Wall -Werror | FileCheck %s +// RUN: %clang_cc1 -x c -ffreestanding %s -triple=i386- -target-feature +avxvnniint8 -emit-llvm -o - -Wall -Werror | FileCheck %s +// RUN: %clang_cc1 -x c -ffreestanding %s -triple=x86_64- -target-feature +avx10.2-256 -emit-llvm -o - -Wall -Werror | FileCheck %s +// RUN: %clang_cc1 -x c -ffreestanding %s -triple=i386- -target-feature +avx10.2-256 -emit-llvm -o - -Wall -Werror | FileCheck %s +// RUN: %clang_cc1 -x c++ -ffreestanding %s -triple=x86_64- -target-feature +avxvnniint8 -emit-llvm -o - -Wall -Werror | FileCheck %s +// RUN: %clang_cc1 -x c++ -ffreestanding %s -triple=i386- -target-feature +avxvnniint8 -emit-llvm -o - -Wall -Werror | FileCheck %s +// RUN: %clang_cc1 -x c++ -ffreestanding %s -triple=x86_64- -target-feature +avx10.2-256 -emit-llvm -o - -Wall -Werror | FileCheck %s +// RUN: %clang_cc1 -x c++ -ffreestanding %s -triple=i386- -target-feature +avx10.2-256 -emit-llvm -o - -Wall -Werror | FileCheck %s #include <immintrin.h> -// CHECK-LABEL: @test_mm_dpbssd_epi32( -// CHECK: call <4 x i32> @llvm.x86.avx2.vpdpbssd.128 +// CHECK-LABEL: test_mm_dpbssd_epi32 +// CHECK: call <4 x i32> @llvm.x86.avx2.vpdpbssd.128(<4 x i32> %{{.*}}, <4 x i32> %{{.*}}, <4 x i32> %{{.*}}) __m128i test_mm_dpbssd_epi32(__m128i __W, __m128i __A, __m128i __B) { return _mm_dpbssd_epi32(__W, __A, __B); } -// CHECK-LABEL: @test_mm_dpbssds_epi32( -// CHECK: call <4 x i32> @llvm.x86.avx2.vpdpbssds.128 +// CHECK-LABEL: test_mm_dpbssds_epi32 +// CHECK: call <4 x i32> @llvm.x86.avx2.vpdpbssds.128(<4 x i32> %{{.*}}, <4 x i32> %{{.*}}, <4 x i32> %{{.*}}) __m128i test_mm_dpbssds_epi32(__m128i __W, __m128i __A, __m128i __B) { return _mm_dpbssds_epi32(__W, __A, __B); } -// CHECK-LABEL: @test_mm_dpbsud_epi32( -// CHECK: call <4 x i32> @llvm.x86.avx2.vpdpbsud.128 +// CHECK-LABEL: test_mm_dpbsud_epi32 +// CHECK: call <4 x i32> @llvm.x86.avx2.vpdpbsud.128(<4 x i32> %{{.*}}, <4 x i32> %{{.*}}, <4 x i32> %{{.*}}) __m128i test_mm_dpbsud_epi32(__m128i __W, __m128i __A, __m128i __B) { return _mm_dpbsud_epi32(__W, __A, __B); } -// CHECK-LABEL: @test_mm_dpbsuds_epi32( -// CHECK: call <4 x i32> @llvm.x86.avx2.vpdpbsuds.128 +// CHECK-LABEL: test_mm_dpbsuds_epi32 +// CHECK: call <4 x i32> @llvm.x86.avx2.vpdpbsuds.128(<4 x i32> %{{.*}}, <4 x i32> %{{.*}}, <4 x i32> %{{.*}}) __m128i test_mm_dpbsuds_epi32(__m128i __W, __m128i __A, __m128i __B) { return _mm_dpbsuds_epi32(__W, __A, __B); } -// CHECK-LABEL: @test_mm_dpbuud_epi32( -// CHECK: call <4 x i32> @llvm.x86.avx2.vpdpbuud.128 +// CHECK-LABEL: test_mm_dpbuud_epi32 +// CHECK: call <4 x i32> @llvm.x86.avx2.vpdpbuud.128(<4 x i32> %{{.*}}, <4 x i32> %{{.*}}, <4 x i32> %{{.*}}) __m128i test_mm_dpbuud_epi32(__m128i __W, __m128i __A, __m128i __B) { return _mm_dpbuud_epi32(__W, __A, __B); } -// CHECK-LABEL: @test_mm_dpbuuds_epi32( -// CHECK: call <4 x i32> @llvm.x86.avx2.vpdpbuuds.128 +// CHECK-LABEL: test_mm_dpbuuds_epi32 +// CHECK: call <4 x i32> @llvm.x86.avx2.vpdpbuuds.128(<4 x i32> %{{.*}}, <4 x i32> %{{.*}}, <4 x i32> %{{.*}}) __m128i test_mm_dpbuuds_epi32(__m128i __W, __m128i __A, __m128i __B) { return _mm_dpbuuds_epi32(__W, __A, __B); } -// CHECK-LABEL: @test_mm256_dpbssd_epi32( -// CHECK: call <8 x i32> @llvm.x86.avx2.vpdpbssd.256 +// CHECK-LABEL: test_mm256_dpbssd_epi32 +// CHECK: call <8 x i32> @llvm.x86.avx2.vpdpbssd.256(<8 x i32> %{{.*}}, <8 x i32> %{{.*}}, <8 x i32> %{{.*}}) __m256i test_mm256_dpbssd_epi32(__m256i __W, __m256i __A, __m256i __B) { return _mm256_dpbssd_epi32(__W, __A, __B); } -// CHECK-LABEL: @test_mm256_dpbssds_epi32( -// CHECK: call <8 x i32> @llvm.x86.avx2.vpdpbssds.256 +// CHECK-LABEL: test_mm256_dpbssds_epi32 +// CHECK: call <8 x i32> @llvm.x86.avx2.vpdpbssds.256(<8 x i32> %{{.*}}, <8 x i32> %{{.*}}, <8 x i32> %{{.*}}) __m256i test_mm256_dpbssds_epi32(__m256i __W, __m256i __A, __m256i __B) { return _mm256_dpbssds_epi32(__W, __A, __B); } -// CHECK-LABEL: @test_mm256_dpbsud_epi32( -// CHECK: call <8 x i32> @llvm.x86.avx2.vpdpbsud.256 +// CHECK-LABEL: test_mm256_dpbsud_epi32 +// CHECK: call <8 x i32> @llvm.x86.avx2.vpdpbsud.256(<8 x i32> %{{.*}}, <8 x i32> %{{.*}}, <8 x i32> %{{.*}}) __m256i test_mm256_dpbsud_epi32(__m256i __W, __m256i __A, __m256i __B) { return _mm256_dpbsud_epi32(__W, __A, __B); } -// CHECK-LABEL: @test_mm256_dpbsuds_epi32( -// CHECK: call <8 x i32> @llvm.x86.avx2.vpdpbsuds.256 +// CHECK-LABEL: test_mm256_dpbsuds_epi32 +// CHECK: call <8 x i32> @llvm.x86.avx2.vpdpbsuds.256(<8 x i32> %{{.*}}, <8 x i32> %{{.*}}, <8 x i32> %{{.*}}) __m256i test_mm256_dpbsuds_epi32(__m256i __W, __m256i __A, __m256i __B) { return _mm256_dpbsuds_epi32(__W, __A, __B); } -// CHECK-LABEL: @test_mm256_dpbuud_epi32( -// CHECK: call <8 x i32> @llvm.x86.avx2.vpdpbuud.256 +// CHECK-LABEL: test_mm256_dpbuud_epi32 +// CHECK: call <8 x i32> @llvm.x86.avx2.vpdpbuud.256(<8 x i32> %{{.*}}, <8 x i32> %{{.*}}, <8 x i32> %{{.*}}) __m256i test_mm256_dpbuud_epi32(__m256i __W, __m256i __A, __m256i __B) { return _mm256_dpbuud_epi32(__W, __A, __B); } -// CHECK-LABEL: @test_mm256_dpbuuds_epi32( -// CHECK: call <8 x i32> @llvm.x86.avx2.vpdpbuuds.256 +// CHECK-LABEL: test_mm256_dpbuuds_epi32 +// CHECK: call <8 x i32> @llvm.x86.avx2.vpdpbuuds.256(<8 x i32> %{{.*}}, <8 x i32> %{{.*}}, <8 x i32> %{{.*}}) __m256i test_mm256_dpbuuds_epi32(__m256i __W, __m256i __A, __m256i __B) { return _mm256_dpbuuds_epi32(__W, __A, __B); } diff --git a/clang/test/CodeGen/X86/bitscan-builtins.c b/clang/test/CodeGen/X86/bitscan-builtins.c index 9fd4666..06c6994 100644 --- a/clang/test/CodeGen/X86/bitscan-builtins.c +++ b/clang/test/CodeGen/X86/bitscan-builtins.c @@ -1,11 +1,16 @@ // RUN: %clang_cc1 -x c -ffreestanding %s -triple=x86_64-unknown-unknown -no-enable-noundef-analysis -emit-llvm -o - | FileCheck %s // RUN: %clang_cc1 -x c++ -std=c++11 -ffreestanding %s -triple=x86_64-unknown-unknown -no-enable-noundef-analysis -emit-llvm -o - | FileCheck %s +// RUN: %clang_cc1 -x c -ffreestanding %s -triple=x86_64-unknown-unknown -no-enable-noundef-analysis -emit-llvm -o - -fexperimental-new-constant-interpreter | FileCheck %s +// RUN: %clang_cc1 -x c++ -std=c++11 -ffreestanding %s -triple=x86_64-unknown-unknown -no-enable-noundef-analysis -emit-llvm -o - -fexperimental-new-constant-interpreter | FileCheck %s + // PR33722 // RUN: %clang_cc1 -x c -ffreestanding %s -triple x86_64-unknown-unknown -fms-extensions -fms-compatibility-version=19.00 -no-enable-noundef-analysis -emit-llvm -o - | FileCheck %s // RUN: %clang_cc1 -x c++ -ffreestanding %s -triple x86_64-unknown-unknown -fms-extensions -fms-compatibility-version=19.00 -no-enable-noundef-analysis -emit-llvm -o - | FileCheck %s + #include <x86intrin.h> +#include "builtin_test_helpers.h" int test_bit_scan_forward(int a) { // CHECK-LABEL: test_bit_scan_forward @@ -13,6 +18,8 @@ int test_bit_scan_forward(int a) { // CHECK: ret i32 %[[call]] return _bit_scan_forward(a); } +TEST_CONSTEXPR(_bit_scan_forward(0x00000001) == 0); +TEST_CONSTEXPR(_bit_scan_forward(0x10000000) == 28); int test_bit_scan_reverse(int a) { // CHECK-LABEL: test_bit_scan_reverse @@ -21,18 +28,24 @@ int test_bit_scan_reverse(int a) { // CHECK: ret i32 %[[sub]] return _bit_scan_reverse(a); } +TEST_CONSTEXPR(_bit_scan_reverse(0x00000001) == 0); +TEST_CONSTEXPR(_bit_scan_reverse(0x01000000) == 24); int test__bsfd(int X) { // CHECK-LABEL: test__bsfd // CHECK: %[[call:.*]] = call i32 @llvm.cttz.i32(i32 %{{.*}}, i1 true) return __bsfd(X); } +TEST_CONSTEXPR(__bsfd(0x00000008) == 3); +TEST_CONSTEXPR(__bsfd(0x00010008) == 3); int test__bsfq(long long X) { // CHECK-LABEL: test__bsfq // CHECK: %[[call:.*]] = call i64 @llvm.cttz.i64(i64 %{{.*}}, i1 true) return __bsfq(X); } +TEST_CONSTEXPR(__bsfq(0x0000000800000000ULL) == 35); +TEST_CONSTEXPR(__bsfq(0x0004000000000000ULL) == 50); int test__bsrd(int X) { // CHECK-LABEL: test__bsrd @@ -40,6 +53,8 @@ int test__bsrd(int X) { // CHECK: %[[sub:.*]] = sub nsw i32 31, %[[call]] return __bsrd(X); } +TEST_CONSTEXPR(__bsrd(0x00000010) == 4); +TEST_CONSTEXPR(__bsrd(0x00100100) == 20); int test__bsrq(long long X) { // CHECK-LABEL: test__bsrq @@ -48,26 +63,5 @@ int test__bsrq(long long X) { // CHECK: %[[sub:.*]] = sub nsw i32 63, %[[cast]] return __bsrq(X); } - -// Test constexpr handling. -#if defined(__cplusplus) && (__cplusplus >= 201103L) - -char bsf_0[_bit_scan_forward(0x00000001) == 0 ? 1 : -1]; -char bsf_1[_bit_scan_forward(0x10000000) == 28 ? 1 : -1]; - -char bsr_0[_bit_scan_reverse(0x00000001) == 0 ? 1 : -1]; -char bsr_1[_bit_scan_reverse(0x01000000) == 24 ? 1 : -1]; - -char bsfd_0[__bsfd(0x00000008) == 3 ? 1 : -1]; -char bsfd_1[__bsfd(0x00010008) == 3 ? 1 : -1]; - -char bsrd_0[__bsrd(0x00000010) == 4 ? 1 : -1]; -char bsrd_1[__bsrd(0x00100100) == 20 ? 1 : -1]; - -char bsfq_0[__bsfq(0x0000000800000000ULL) == 35 ? 1 : -1]; -char bsfq_1[__bsfq(0x0004000000000000ULL) == 50 ? 1 : -1]; - -char bsrq_0[__bsrq(0x0000100800000000ULL) == 44 ? 1 : -1]; -char bsrq_1[__bsrq(0x0004000100000000ULL) == 50 ? 1 : -1]; - -#endif +TEST_CONSTEXPR(__bsrq(0x0000100800000000ULL) == 44); +TEST_CONSTEXPR(__bsrq(0x0004000100000000ULL) == 50); diff --git a/clang/test/CodeGen/X86/builtin_test_helpers.h b/clang/test/CodeGen/X86/builtin_test_helpers.h index 22a87ce..2476a2b 100644 --- a/clang/test/CodeGen/X86/builtin_test_helpers.h +++ b/clang/test/CodeGen/X86/builtin_test_helpers.h @@ -13,29 +13,59 @@ constexpr bool match_v1di(__m64 v, long long a) { return v[0] == a;
}
+constexpr bool match_v1du(__m64 _v, unsigned long long a) {
+ __v1du v = (__v1du)_v;
+ return v[0] == a;
+}
+
constexpr bool match_v2si(__m64 _v, int a, int b) {
__v2si v = (__v2si)_v;
return v[0] == a && v[1] == b;
}
+constexpr bool match_v2su(__m64 _v, unsigned a, unsigned b) {
+ __v2su v = (__v2su)_v;
+ return v[0] == a && v[1] == b;
+}
+
constexpr bool match_v4hi(__m64 _v, short a, short b, short c, short d) {
__v4hi v = (__v4hi)_v;
return v[0] == a && v[1] == b && v[2] == c && v[3] == d;
}
-constexpr bool match_v8qi(__m64 _v, char a, char b, char c, char d, char e, char f, char g, char h) {
- __v8qi v = (__v8qi)_v;
+constexpr bool match_v4hu(__m64 _v, unsigned short a, unsigned short b, unsigned short c, unsigned short d) {
+ __v4hu v = (__v4hu)_v;
+ return v[0] == a && v[1] == b && v[2] == c && v[3] == d;
+}
+
+constexpr bool match_v8qi(__m64 _v, signed char a, signed char b, signed char c, signed char d, signed char e, signed char f, signed char g, signed char h) {
+ __v8qs v = (__v8qs)_v;
return v[0] == a && v[1] == b && v[2] == c && v[3] == d && v[4] == e && v[5] == f && v[6] == g && v[7] == h;
}
-constexpr bool match_m128(__m128 v, float a, float b, float c, float d) {
- return v[0] == a && v[1] == b && v[2] == c && v[3] == d;
+constexpr bool match_v8qu(__m64 _v, unsigned char a, unsigned char b, unsigned char c, unsigned char d, unsigned char e, unsigned char f, unsigned char g, unsigned char h) {
+ __v8qu v = (__v8qu)_v;
+ return v[0] == a && v[1] == b && v[2] == c && v[3] == d && v[4] == e && v[5] == f && v[6] == g && v[7] == h;
}
-constexpr bool match_m128d(__m128d v, double a, double b) {
- return v[0] == a && v[1] == b;
+constexpr bool match_m128(__m128 _v, float a, float b, float c, float d) {
+ __v4su v = (__v4su)_v;
+ return v[0] == __builtin_bit_cast(unsigned, a) && v[1] == __builtin_bit_cast(unsigned, b) && v[2] == __builtin_bit_cast(unsigned, c) && v[3] == __builtin_bit_cast(unsigned, d);
+}
+
+constexpr bool match_m128d(__m128d _v, double a, double b) {
+ __v2du v = (__v2du)_v;
+ return v[0] == __builtin_bit_cast(unsigned long long, a) && v[1] == __builtin_bit_cast(unsigned long long, b);
}
+#ifdef __SSE2__
+constexpr bool match_m128h(__m128h _v, _Float16 __e00, _Float16 __e01, _Float16 __e02, _Float16 __e03, _Float16 __e04, _Float16 __e05, _Float16 __e06, _Float16 __e07) {
+ __v8hu v = (__v8hu)_v;
+ return v[ 0] == __builtin_bit_cast(unsigned short, __e00) && v[ 1] == __builtin_bit_cast(unsigned short, __e01) && v[ 2] == __builtin_bit_cast(unsigned short, __e02) && v[ 3] == __builtin_bit_cast(unsigned short, __e03) &&
+ v[ 4] == __builtin_bit_cast(unsigned short, __e04) && v[ 5] == __builtin_bit_cast(unsigned short, __e05) && v[ 6] == __builtin_bit_cast(unsigned short, __e06) && v[ 7] == __builtin_bit_cast(unsigned short, __e07);
+}
+#endif
+
constexpr bool match_m128i(__m128i _v, unsigned long long a, unsigned long long b) {
__v2du v = (__v2du)_v;
return v[0] == a && v[1] == b;
@@ -45,29 +75,63 @@ constexpr bool match_v2di(__m128i v, long long a, long long b) { return v[0] == a && v[1] == b;
}
+constexpr bool match_v2du(__m128i _v, unsigned long long a, unsigned long long b) {
+ __v2du v = (__v2du)_v;
+ return v[0] == a && v[1] == b;
+}
+
constexpr bool match_v4si(__m128i _v, int a, int b, int c, int d) {
__v4si v = (__v4si)_v;
return v[0] == a && v[1] == b && v[2] == c && v[3] == d;
}
+constexpr bool match_v4su(__m128i _v, unsigned a, unsigned b, unsigned c, unsigned d) {
+ __v4su v = (__v4su)_v;
+ return v[0] == a && v[1] == b && v[2] == c && v[3] == d;
+}
+
constexpr bool match_v8hi(__m128i _v, short a, short b, short c, short d, short e, short f, short g, short h) {
__v8hi v = (__v8hi)_v;
return v[0] == a && v[1] == b && v[2] == c && v[3] == d && v[4] == e && v[5] == f && v[6] == g && v[7] == h;
}
-constexpr bool match_v16qi(__m128i _v, char a, char b, char c, char d, char e, char f, char g, char h, char i, char j, char k, char l, char m, char n, char o, char p) {
- __v16qi v = (__v16qi)_v;
+constexpr bool match_v8hu(__m128i _v, unsigned short a, unsigned short b, unsigned short c, unsigned short d, unsigned short e, unsigned short f, unsigned short g, unsigned short h) {
+ __v8hu v = (__v8hu)_v;
+ return v[0] == a && v[1] == b && v[2] == c && v[3] == d && v[4] == e && v[5] == f && v[6] == g && v[7] == h;
+}
+
+constexpr bool match_v16qi(__m128i _v, signed char a, signed char b, signed char c, signed char d, signed char e, signed char f, signed char g, signed char h, signed char i, signed char j, signed char k, signed char l, signed char m, signed char n, signed char o, signed char p) {
+ __v16qs v = (__v16qs)_v;
return v[0] == a && v[1] == b && v[2] == c && v[3] == d && v[4] == e && v[5] == f && v[6] == g && v[7] == h && v[8] == i && v[9] == j && v[10] == k && v[11] == l && v[12] == m && v[13] == n && v[14] == o && v[15] == p;
}
-constexpr bool match_m256(__m256 v, float a, float b, float c, float d, float e, float f, float g, float h) {
- return v[0] == a && v[1] == b && v[2] == c && v[3] == d && v[4] == e && v[5] == f && v[6] == g && v[7] == h;
+constexpr bool match_v16qu(__m128i _v, unsigned char a, unsigned char b, unsigned char c, unsigned char d, unsigned char e, unsigned char f, unsigned char g, unsigned char h, unsigned char i, unsigned char j, unsigned char k, unsigned char l, unsigned char m, unsigned char n, unsigned char o, unsigned char p) {
+ __v16qu v = (__v16qu)_v;
+ return v[0] == a && v[1] == b && v[2] == c && v[3] == d && v[4] == e && v[5] == f && v[6] == g && v[7] == h && v[8] == i && v[9] == j && v[10] == k && v[11] == l && v[12] == m && v[13] == n && v[14] == o && v[15] == p;
}
-constexpr bool match_m256d(__m256d v, double a, double b, double c, double d) {
- return v[0] == a && v[1] == b && v[2] == c && v[3] == d;
+constexpr bool match_m256(__m256 _v, float __e00, float __e01, float __e02, float __e03, float __e04, float __e05, float __e06, float __e07) {
+ __v8su v = (__v8su)_v;
+ return v[ 0] == __builtin_bit_cast(unsigned, __e00) && v[ 1] == __builtin_bit_cast(unsigned, __e01) && v[ 2] == __builtin_bit_cast(unsigned, __e02) && v[ 3] == __builtin_bit_cast(unsigned, __e03) &&
+ v[ 4] == __builtin_bit_cast(unsigned, __e04) && v[ 5] == __builtin_bit_cast(unsigned, __e05) && v[ 6] == __builtin_bit_cast(unsigned, __e06) && v[ 7] == __builtin_bit_cast(unsigned, __e07);
}
+constexpr bool match_m256d(__m256d _v, double a, double b, double c, double d) {
+ __v4du v = (__v4du)_v;
+ return v[0] == __builtin_bit_cast(unsigned long long, a) && v[1] == __builtin_bit_cast(unsigned long long, b) && v[2] == __builtin_bit_cast(unsigned long long, c) && v[3] == __builtin_bit_cast(unsigned long long, d);
+}
+
+#ifdef __SSE2__
+constexpr bool match_m256h(__m256h _v, _Float16 __e00, _Float16 __e01, _Float16 __e02, _Float16 __e03, _Float16 __e04, _Float16 __e05, _Float16 __e06, _Float16 __e07,
+ _Float16 __e08, _Float16 __e09, _Float16 __e10, _Float16 __e11, _Float16 __e12, _Float16 __e13, _Float16 __e14, _Float16 __e15) {
+ __v16hu v = (__v16hu)_v;
+ return v[ 0] == __builtin_bit_cast(unsigned short, __e00) && v[ 1] == __builtin_bit_cast(unsigned short, __e01) && v[ 2] == __builtin_bit_cast(unsigned short, __e02) && v[ 3] == __builtin_bit_cast(unsigned short, __e03) &&
+ v[ 4] == __builtin_bit_cast(unsigned short, __e04) && v[ 5] == __builtin_bit_cast(unsigned short, __e05) && v[ 6] == __builtin_bit_cast(unsigned short, __e06) && v[ 7] == __builtin_bit_cast(unsigned short, __e07) &&
+ v[ 8] == __builtin_bit_cast(unsigned short, __e08) && v[ 9] == __builtin_bit_cast(unsigned short, __e09) && v[10] == __builtin_bit_cast(unsigned short, __e10) && v[11] == __builtin_bit_cast(unsigned short, __e11) &&
+ v[12] == __builtin_bit_cast(unsigned short, __e12) && v[13] == __builtin_bit_cast(unsigned short, __e13) && v[14] == __builtin_bit_cast(unsigned short, __e14) && v[15] == __builtin_bit_cast(unsigned short, __e15);
+}
+#endif
+
constexpr bool match_m256i(__m256i _v, unsigned long long a, unsigned long long b, unsigned long long c, unsigned long long d) {
__v4du v = (__v4du)_v;
return v[0] == a && v[1] == b && v[2] == c && v[3] == d;
@@ -83,14 +147,74 @@ constexpr bool match_v8si(__m256i _v, int a, int b, int c, int d, int e, int f, return v[0] == a && v[1] == b && v[2] == c && v[3] == d && v[4] == e && v[5] == f && v[6] == g && v[7] == h;
}
-constexpr bool match_m512(__m512 v, float a, float b, float c, float d, float e, float f, float g, float h, float i, float j, float k, float l, float m, float n, float o, float p) {
+constexpr bool match_v8su(__m256i _v, unsigned a, unsigned b, unsigned c, unsigned d, unsigned e, unsigned f, unsigned g, unsigned h) {
+ __v8su v = (__v8su)_v;
+ return v[0] == a && v[1] == b && v[2] == c && v[3] == d && v[4] == e && v[5] == f && v[6] == g && v[7] == h;
+}
+
+constexpr bool match_v16hi(__m256i _v, short a, short b, short c, short d, short e, short f, short g, short h, short i, short j, short k, short l, short m, short n, short o, short p) {
+ __v16hi v = (__v16hi)_v;
return v[0] == a && v[1] == b && v[2] == c && v[3] == d && v[4] == e && v[5] == f && v[6] == g && v[7] == h && v[8] == i && v[9] == j && v[10] == k && v[11] == l && v[12] == m && v[13] == n && v[14] == o && v[15] == p;
}
-constexpr bool match_m512d(__m512d v, double a, double b, double c, double d, double e, double f, double g, double h) {
- return v[0] == a && v[1] == b && v[2] == c && v[3] == d && v[4] == e && v[5] == f && v[6] == g && v[7] == h;
+constexpr bool match_v16hu(__m256i _v, unsigned short a, unsigned short b, unsigned short c, unsigned short d, unsigned short e, unsigned short f, unsigned short g, unsigned short h, unsigned short i, unsigned short j, unsigned short k, unsigned short l, unsigned short m, unsigned short n, unsigned short o, unsigned short p) {
+ __v16hu v = (__v16hu)_v;
+ return v[0] == a && v[1] == b && v[2] == c && v[3] == d && v[4] == e && v[5] == f && v[6] == g && v[7] == h && v[8] == i && v[9] == j && v[10] == k && v[11] == l && v[12] == m && v[13] == n && v[14] == o && v[15] == p;
+}
+
+constexpr bool match_v32qi(__m256i _v, signed char __b00, signed char __b01, signed char __b02, signed char __b03, signed char __b04, signed char __b05, signed char __b06, signed char __b07,
+ signed char __b08, signed char __b09, signed char __b10, signed char __b11, signed char __b12, signed char __b13, signed char __b14, signed char __b15,
+ signed char __b16, signed char __b17, signed char __b18, signed char __b19, signed char __b20, signed char __b21, signed char __b22, signed char __b23,
+ signed char __b24, signed char __b25, signed char __b26, signed char __b27, signed char __b28, signed char __b29, signed char __b30, signed char __b31) {
+ __v32qs v = (__v32qs)_v;
+ return v[ 0] == __b00 && v[ 1] == __b01 && v[ 2] == __b02 && v[ 3] == __b03 && v[ 4] == __b04 && v[ 5] == __b05 && v[ 6] == __b06 && v[ 7] == __b07 &&
+ v[ 8] == __b08 && v[ 9] == __b09 && v[10] == __b10 && v[11] == __b11 && v[12] == __b12 && v[13] == __b13 && v[14] == __b14 && v[15] == __b15 &&
+ v[16] == __b16 && v[17] == __b17 && v[18] == __b18 && v[19] == __b19 && v[20] == __b20 && v[21] == __b21 && v[22] == __b22 && v[23] == __b23 &&
+ v[24] == __b24 && v[25] == __b25 && v[26] == __b26 && v[27] == __b27 && v[28] == __b28 && v[29] == __b29 && v[30] == __b30 && v[31] == __b31;
+}
+
+constexpr bool match_v32qu(__m256i _v, unsigned char __b00, unsigned char __b01, unsigned char __b02, unsigned char __b03, unsigned char __b04, unsigned char __b05, unsigned char __b06, unsigned char __b07,
+ unsigned char __b08, unsigned char __b09, unsigned char __b10, unsigned char __b11, unsigned char __b12, unsigned char __b13, unsigned char __b14, unsigned char __b15,
+ unsigned char __b16, unsigned char __b17, unsigned char __b18, unsigned char __b19, unsigned char __b20, unsigned char __b21, unsigned char __b22, unsigned char __b23,
+ unsigned char __b24, unsigned char __b25, unsigned char __b26, unsigned char __b27, unsigned char __b28, unsigned char __b29, unsigned char __b30, unsigned char __b31) {
+ __v32qu v = (__v32qu)_v;
+ return v[ 0] == __b00 && v[ 1] == __b01 && v[ 2] == __b02 && v[ 3] == __b03 && v[ 4] == __b04 && v[ 5] == __b05 && v[ 6] == __b06 && v[ 7] == __b07 &&
+ v[ 8] == __b08 && v[ 9] == __b09 && v[10] == __b10 && v[11] == __b11 && v[12] == __b12 && v[13] == __b13 && v[14] == __b14 && v[15] == __b15 &&
+ v[16] == __b16 && v[17] == __b17 && v[18] == __b18 && v[19] == __b19 && v[20] == __b20 && v[21] == __b21 && v[22] == __b22 && v[23] == __b23 &&
+ v[24] == __b24 && v[25] == __b25 && v[26] == __b26 && v[27] == __b27 && v[28] == __b28 && v[29] == __b29 && v[30] == __b30 && v[31] == __b31;
}
+constexpr bool match_m512(__m512 _v, float __e00, float __e01, float __e02, float __e03, float __e04, float __e05, float __e06, float __e07, float __e08, float __e09, float __e10, float __e11, float __e12, float __e13, float __e14, float __e15) {
+ __v16su v = (__v16su)_v;
+ return v[ 0] == __builtin_bit_cast(unsigned, __e00) && v[ 1] == __builtin_bit_cast(unsigned, __e01) && v[ 2] == __builtin_bit_cast(unsigned, __e02) && v[ 3] == __builtin_bit_cast(unsigned, __e03) &&
+ v[ 4] == __builtin_bit_cast(unsigned, __e04) && v[ 5] == __builtin_bit_cast(unsigned, __e05) && v[ 6] == __builtin_bit_cast(unsigned, __e06) && v[ 7] == __builtin_bit_cast(unsigned, __e07) &&
+ v[ 8] == __builtin_bit_cast(unsigned, __e08) && v[ 9] == __builtin_bit_cast(unsigned, __e09) && v[10] == __builtin_bit_cast(unsigned, __e10) && v[11] == __builtin_bit_cast(unsigned, __e11) &&
+ v[12] == __builtin_bit_cast(unsigned, __e12) && v[13] == __builtin_bit_cast(unsigned, __e13) && v[14] == __builtin_bit_cast(unsigned, __e14) && v[15] == __builtin_bit_cast(unsigned, __e15);
+}
+
+constexpr bool match_m512d(__m512d _v, double __e00, double __e01, double __e02, double __e03, double __e04, double __e05, double __e06, double __e07) {
+ __v8du v = (__v8du)_v;
+ return v[ 0] == __builtin_bit_cast(unsigned long long, __e00) && v[ 1] == __builtin_bit_cast(unsigned long long, __e01) && v[ 2] == __builtin_bit_cast(unsigned long long, __e02) && v[ 3] == __builtin_bit_cast(unsigned long long, __e03) &&
+ v[ 4] == __builtin_bit_cast(unsigned long long, __e04) && v[ 5] == __builtin_bit_cast(unsigned long long, __e05) && v[ 6] == __builtin_bit_cast(unsigned long long, __e06) && v[ 7] == __builtin_bit_cast(unsigned long long, __e07);
+}
+
+#ifdef __SSE2__
+constexpr bool match_m512h(__m512h _v, _Float16 __e00, _Float16 __e01, _Float16 __e02, _Float16 __e03, _Float16 __e04, _Float16 __e05, _Float16 __e06, _Float16 __e07,
+ _Float16 __e08, _Float16 __e09, _Float16 __e10, _Float16 __e11, _Float16 __e12, _Float16 __e13, _Float16 __e14, _Float16 __e15,
+ _Float16 __e16, _Float16 __e17, _Float16 __e18, _Float16 __e19, _Float16 __e20, _Float16 __e21, _Float16 __e22, _Float16 __e23,
+ _Float16 __e24, _Float16 __e25, _Float16 __e26, _Float16 __e27, _Float16 __e28, _Float16 __e29, _Float16 __e30, _Float16 __e31) {
+ __v32hu v = (__v32hu)_v;
+ return v[ 0] == __builtin_bit_cast(unsigned short, __e00) && v[ 1] == __builtin_bit_cast(unsigned short, __e01) && v[ 2] == __builtin_bit_cast(unsigned short, __e02) && v[ 3] == __builtin_bit_cast(unsigned short, __e03) &&
+ v[ 4] == __builtin_bit_cast(unsigned short, __e04) && v[ 5] == __builtin_bit_cast(unsigned short, __e05) && v[ 6] == __builtin_bit_cast(unsigned short, __e06) && v[ 7] == __builtin_bit_cast(unsigned short, __e07) &&
+ v[ 8] == __builtin_bit_cast(unsigned short, __e08) && v[ 9] == __builtin_bit_cast(unsigned short, __e09) && v[10] == __builtin_bit_cast(unsigned short, __e10) && v[11] == __builtin_bit_cast(unsigned short, __e11) &&
+ v[12] == __builtin_bit_cast(unsigned short, __e12) && v[13] == __builtin_bit_cast(unsigned short, __e13) && v[14] == __builtin_bit_cast(unsigned short, __e14) && v[15] == __builtin_bit_cast(unsigned short, __e15) &&
+ v[16] == __builtin_bit_cast(unsigned short, __e16) && v[17] == __builtin_bit_cast(unsigned short, __e17) && v[18] == __builtin_bit_cast(unsigned short, __e18) && v[19] == __builtin_bit_cast(unsigned short, __e19) &&
+ v[20] == __builtin_bit_cast(unsigned short, __e20) && v[21] == __builtin_bit_cast(unsigned short, __e21) && v[22] == __builtin_bit_cast(unsigned short, __e22) && v[23] == __builtin_bit_cast(unsigned short, __e23) &&
+ v[24] == __builtin_bit_cast(unsigned short, __e24) && v[25] == __builtin_bit_cast(unsigned short, __e25) && v[26] == __builtin_bit_cast(unsigned short, __e26) && v[27] == __builtin_bit_cast(unsigned short, __e27) &&
+ v[28] == __builtin_bit_cast(unsigned short, __e28) && v[29] == __builtin_bit_cast(unsigned short, __e29) && v[30] == __builtin_bit_cast(unsigned short, __e30) && v[31] == __builtin_bit_cast(unsigned short, __e31);
+}
+#endif
+
constexpr bool match_m512i(__m512i _v, unsigned long long a, unsigned long long b, unsigned long long c, unsigned long long d, unsigned long long e, unsigned long long f, unsigned long long g, unsigned long long h) {
__v8du v = (__v8du)_v;
return v[0] == a && v[1] == b && v[2] == c && v[3] == d && v[4] == e && v[5] == f && v[6] == g && v[7] == h;
@@ -106,6 +230,66 @@ constexpr bool match_v16si(__m512i _v, int a, int b, int c, int d, int e, int f, return v[0] == a && v[1] == b && v[2] == c && v[3] == d && v[4] == e && v[5] == f && v[6] == g && v[7] == h && v[8] == i && v[9] == j && v[10] == k && v[11] == l && v[12] == m && v[13] == n && v[14] == o && v[15] == p;
}
+constexpr bool match_v32hi(__m512i _v, short __e00, short __e01, short __e02, short __e03, short __e04, short __e05, short __e06, short __e07,
+ short __e08, short __e09, short __e10, short __e11, short __e12, short __e13, short __e14, short __e15,
+ short __e16, short __e17, short __e18, short __e19, short __e20, short __e21, short __e22, short __e23,
+ short __e24, short __e25, short __e26, short __e27, short __e28, short __e29, short __e30, short __e31) {
+ __v32hi v = (__v32hi)_v;
+ return v[ 0] == __e00 && v[ 1] == __e01 && v[ 2] == __e02 && v[ 3] == __e03 && v[ 4] == __e04 && v[ 5] == __e05 && v[ 6] == __e06 && v[ 7] == __e07 &&
+ v[ 8] == __e08 && v[ 9] == __e09 && v[10] == __e10 && v[11] == __e11 && v[12] == __e12 && v[13] == __e13 && v[14] == __e14 && v[15] == __e15 &&
+ v[16] == __e16 && v[17] == __e17 && v[18] == __e18 && v[19] == __e19 && v[20] == __e20 && v[21] == __e21 && v[22] == __e22 && v[23] == __e23 &&
+ v[24] == __e24 && v[25] == __e25 && v[26] == __e26 && v[27] == __e27 && v[28] == __e28 && v[29] == __e29 && v[30] == __e30 && v[31] == __e31;
+}
+
+constexpr bool match_v32hu(__m512i _v, unsigned short __e00, unsigned short __e01, unsigned short __e02, unsigned short __e03, unsigned short __e04, unsigned short __e05, unsigned short __e06, unsigned short __e07,
+ unsigned short __e08, unsigned short __e09, unsigned short __e10, unsigned short __e11, unsigned short __e12, unsigned short __e13, unsigned short __e14, unsigned short __e15,
+ unsigned short __e16, unsigned short __e17, unsigned short __e18, unsigned short __e19, unsigned short __e20, unsigned short __e21, unsigned short __e22, unsigned short __e23,
+ unsigned short __e24, unsigned short __e25, unsigned short __e26, unsigned short __e27, unsigned short __e28, unsigned short __e29, unsigned short __e30, unsigned short __e31) {
+ __v32hu v = (__v32hu)_v;
+ return v[ 0] == __e00 && v[ 1] == __e01 && v[ 2] == __e02 && v[ 3] == __e03 && v[ 4] == __e04 && v[ 5] == __e05 && v[ 6] == __e06 && v[ 7] == __e07 &&
+ v[ 8] == __e08 && v[ 9] == __e09 && v[10] == __e10 && v[11] == __e11 && v[12] == __e12 && v[13] == __e13 && v[14] == __e14 && v[15] == __e15 &&
+ v[16] == __e16 && v[17] == __e17 && v[18] == __e18 && v[19] == __e19 && v[20] == __e20 && v[21] == __e21 && v[22] == __e22 && v[23] == __e23 &&
+ v[24] == __e24 && v[25] == __e25 && v[26] == __e26 && v[27] == __e27 && v[28] == __e28 && v[29] == __e29 && v[30] == __e30 && v[31] == __e31;
+}
+
+constexpr bool match_v64qi(__m512i _v, signed char __e00, signed char __e01, signed char __e02, signed char __e03, signed char __e04, signed char __e05, signed char __e06, signed char __e07,
+ signed char __e08, signed char __e09, signed char __e10, signed char __e11, signed char __e12, signed char __e13, signed char __e14, signed char __e15,
+ signed char __e16, signed char __e17, signed char __e18, signed char __e19, signed char __e20, signed char __e21, signed char __e22, signed char __e23,
+ signed char __e24, signed char __e25, signed char __e26, signed char __e27, signed char __e28, signed char __e29, signed char __e30, signed char __e31,
+ signed char __e32, signed char __e33, signed char __e34, signed char __e35, signed char __e36, signed char __e37, signed char __e38, signed char __e39,
+ signed char __e40, signed char __e41, signed char __e42, signed char __e43, signed char __e44, signed char __e45, signed char __e46, signed char __e47,
+ signed char __e48, signed char __e49, signed char __e50, signed char __e51, signed char __e52, signed char __e53, signed char __e54, signed char __e55,
+ signed char __e56, signed char __e57, signed char __e58, signed char __e59, signed char __e60, signed char __e61, signed char __e62, signed char __e63) {
+ __v64qs v = (__v64qs)_v;
+ return v[ 0] == __e00 && v[ 1] == __e01 && v[ 2] == __e02 && v[ 3] == __e03 && v[ 4] == __e04 && v[ 5] == __e05 && v[ 6] == __e06 && v[ 7] == __e07 &&
+ v[ 8] == __e08 && v[ 9] == __e09 && v[10] == __e10 && v[11] == __e11 && v[12] == __e12 && v[13] == __e13 && v[14] == __e14 && v[15] == __e15 &&
+ v[16] == __e16 && v[17] == __e17 && v[18] == __e18 && v[19] == __e19 && v[20] == __e20 && v[21] == __e21 && v[22] == __e22 && v[23] == __e23 &&
+ v[24] == __e24 && v[25] == __e25 && v[26] == __e26 && v[27] == __e27 && v[28] == __e28 && v[29] == __e29 && v[30] == __e30 && v[31] == __e31 &&
+ v[32] == __e32 && v[33] == __e33 && v[34] == __e34 && v[35] == __e35 && v[36] == __e36 && v[37] == __e37 && v[38] == __e38 && v[39] == __e39 &&
+ v[40] == __e40 && v[41] == __e41 && v[42] == __e42 && v[43] == __e43 && v[44] == __e44 && v[45] == __e45 && v[46] == __e46 && v[47] == __e47 &&
+ v[48] == __e48 && v[49] == __e49 && v[50] == __e50 && v[51] == __e51 && v[52] == __e52 && v[53] == __e53 && v[54] == __e54 && v[55] == __e55 &&
+ v[56] == __e56 && v[57] == __e57 && v[58] == __e58 && v[59] == __e59 && v[60] == __e60 && v[61] == __e61 && v[62] == __e62 && v[63] == __e63;
+}
+
+constexpr bool match_v64qu(__m512i _v, unsigned char __e00, unsigned char __e01, unsigned char __e02, unsigned char __e03, unsigned char __e04, unsigned char __e05, unsigned char __e06, unsigned char __e07,
+ unsigned char __e08, unsigned char __e09, unsigned char __e10, unsigned char __e11, unsigned char __e12, unsigned char __e13, unsigned char __e14, unsigned char __e15,
+ unsigned char __e16, unsigned char __e17, unsigned char __e18, unsigned char __e19, unsigned char __e20, unsigned char __e21, unsigned char __e22, unsigned char __e23,
+ unsigned char __e24, unsigned char __e25, unsigned char __e26, unsigned char __e27, unsigned char __e28, unsigned char __e29, unsigned char __e30, unsigned char __e31,
+ unsigned char __e32, unsigned char __e33, unsigned char __e34, unsigned char __e35, unsigned char __e36, unsigned char __e37, unsigned char __e38, unsigned char __e39,
+ unsigned char __e40, unsigned char __e41, unsigned char __e42, unsigned char __e43, unsigned char __e44, unsigned char __e45, unsigned char __e46, unsigned char __e47,
+ unsigned char __e48, unsigned char __e49, unsigned char __e50, unsigned char __e51, unsigned char __e52, unsigned char __e53, unsigned char __e54, unsigned char __e55,
+ unsigned char __e56, unsigned char __e57, unsigned char __e58, unsigned char __e59, unsigned char __e60, unsigned char __e61, unsigned char __e62, unsigned char __e63) {
+ __v64qu v = (__v64qu)_v;
+ return v[ 0] == __e00 && v[ 1] == __e01 && v[ 2] == __e02 && v[ 3] == __e03 && v[ 4] == __e04 && v[ 5] == __e05 && v[ 6] == __e06 && v[ 7] == __e07 &&
+ v[ 8] == __e08 && v[ 9] == __e09 && v[10] == __e10 && v[11] == __e11 && v[12] == __e12 && v[13] == __e13 && v[14] == __e14 && v[15] == __e15 &&
+ v[16] == __e16 && v[17] == __e17 && v[18] == __e18 && v[19] == __e19 && v[20] == __e20 && v[21] == __e21 && v[22] == __e22 && v[23] == __e23 &&
+ v[24] == __e24 && v[25] == __e25 && v[26] == __e26 && v[27] == __e27 && v[28] == __e28 && v[29] == __e29 && v[30] == __e30 && v[31] == __e31 &&
+ v[32] == __e32 && v[33] == __e33 && v[34] == __e34 && v[35] == __e35 && v[36] == __e36 && v[37] == __e37 && v[38] == __e38 && v[39] == __e39 &&
+ v[40] == __e40 && v[41] == __e41 && v[42] == __e42 && v[43] == __e43 && v[44] == __e44 && v[45] == __e45 && v[46] == __e46 && v[47] == __e47 &&
+ v[48] == __e48 && v[49] == __e49 && v[50] == __e50 && v[51] == __e51 && v[52] == __e52 && v[53] == __e53 && v[54] == __e54 && v[55] == __e55 &&
+ v[56] == __e56 && v[57] == __e57 && v[58] == __e58 && v[59] == __e59 && v[60] == __e60 && v[61] == __e61 && v[62] == __e62 && v[63] == __e63;
+}
+
#define TEST_CONSTEXPR(...) static_assert(__VA_ARGS__)
#else
diff --git a/clang/test/CodeGen/X86/f16c-builtins-constrained.c b/clang/test/CodeGen/X86/f16c-builtins-constrained.c index bbd4d8f..50afea8 100644 --- a/clang/test/CodeGen/X86/f16c-builtins-constrained.c +++ b/clang/test/CodeGen/X86/f16c-builtins-constrained.c @@ -8,17 +8,8 @@ float test_cvtsh_ss(unsigned short a) { // CHECK-LABEL: test_cvtsh_ss - // CHECK: insertelement <8 x i16> poison, i16 %{{.*}}, i32 0 - // CHECK: insertelement <8 x i16> %{{.*}}, i16 0, i32 1 - // CHECK: insertelement <8 x i16> %{{.*}}, i16 0, i32 2 - // CHECK: insertelement <8 x i16> %{{.*}}, i16 0, i32 3 - // CHECK: insertelement <8 x i16> %{{.*}}, i16 0, i32 4 - // CHECK: insertelement <8 x i16> %{{.*}}, i16 0, i32 5 - // CHECK: insertelement <8 x i16> %{{.*}}, i16 0, i32 6 - // CHECK: insertelement <8 x i16> %{{.*}}, i16 0, i32 7 - // CHECK: shufflevector <8 x i16> %{{.*}}, <8 x i16> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 3> - // CHECK: call <4 x float> @llvm.experimental.constrained.fpext.v4f32.v4f16(<4 x half> %{{.*}}, metadata !"fpexcept.strict") - // CHECK: extractelement <4 x float> %{{.*}}, i32 0 + // CHECK: [[CONV:%.*]] = call {{.*}}float @llvm.experimental.constrained.fpext.f32.f16(half %{{.*}}, metadata !"fpexcept.strict") + // CHECK: ret float [[CONV]] return _cvtsh_ss(a); } @@ -38,7 +29,7 @@ unsigned short test_cvtss_sh(float a) { __m128 test_mm_cvtph_ps(__m128i a) { // CHECK-LABEL: test_mm_cvtph_ps - // CHECK: shufflevector <8 x i16> %{{.*}}, <8 x i16> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 3> + // CHECK: shufflevector <8 x i16> %{{.*}}, <8 x i16> %{{.*}}, <4 x i32> <i32 0, i32 1, i32 2, i32 3> // CHECK: call {{.*}}<4 x float> @llvm.experimental.constrained.fpext.v4f32.v4f16(<4 x half> %{{.*}}, metadata !"fpexcept.strict") return _mm_cvtph_ps(a); } diff --git a/clang/test/CodeGen/X86/f16c-builtins.c b/clang/test/CodeGen/X86/f16c-builtins.c index 3c6d64c..6a69627 100644 --- a/clang/test/CodeGen/X86/f16c-builtins.c +++ b/clang/test/CodeGen/X86/f16c-builtins.c @@ -3,22 +3,18 @@ // RUN: %clang_cc1 -x c++ -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +f16c -emit-llvm -o - -Wall -Werror | FileCheck %s // RUN: %clang_cc1 -x c++ -ffreestanding %s -triple=i386-apple-darwin -target-feature +f16c -emit-llvm -o - -Wall -Werror | FileCheck %s +// RUN: %clang_cc1 -x c -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +f16c -emit-llvm -o - -Wall -Werror -fexperimental-new-constant-interpreter | FileCheck %s +// RUN: %clang_cc1 -x c -ffreestanding %s -triple=i386-apple-darwin -target-feature +f16c -emit-llvm -o - -Wall -Werror -fexperimental-new-constant-interpreter | FileCheck %s +// RUN: %clang_cc1 -x c++ -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +f16c -emit-llvm -o - -Wall -Werror -fexperimental-new-constant-interpreter | FileCheck %s +// RUN: %clang_cc1 -x c++ -ffreestanding %s -triple=i386-apple-darwin -target-feature +f16c -emit-llvm -o - -Wall -Werror -fexperimental-new-constant-interpreter | FileCheck %s + #include <immintrin.h> float test_cvtsh_ss(unsigned short a) { // CHECK-LABEL: test_cvtsh_ss - // CHECK: insertelement <8 x i16> poison, i16 %{{.*}}, i32 0 - // CHECK: insertelement <8 x i16> %{{.*}}, i16 0, i32 1 - // CHECK: insertelement <8 x i16> %{{.*}}, i16 0, i32 2 - // CHECK: insertelement <8 x i16> %{{.*}}, i16 0, i32 3 - // CHECK: insertelement <8 x i16> %{{.*}}, i16 0, i32 4 - // CHECK: insertelement <8 x i16> %{{.*}}, i16 0, i32 5 - // CHECK: insertelement <8 x i16> %{{.*}}, i16 0, i32 6 - // CHECK: insertelement <8 x i16> %{{.*}}, i16 0, i32 7 - // CHECK: shufflevector <8 x i16> %{{.*}}, <8 x i16> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 3> - // CHECK: fpext <4 x half> %{{.*}} to <4 x float> - // CHECK: extractelement <4 x float> %{{.*}}, i32 0 + // CHECK: [[CONV:%.*]] = fpext half %{{.*}} to float + // CHECK: ret float [[CONV]] return _cvtsh_ss(a); } @@ -35,7 +31,7 @@ unsigned short test_cvtss_sh(float a) { __m128 test_mm_cvtph_ps(__m128i a) { // CHECK-LABEL: test_mm_cvtph_ps - // CHECK: shufflevector <8 x i16> %{{.*}}, <8 x i16> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 3> + // CHECK: shufflevector <8 x i16> %{{.*}}, <8 x i16> %{{.*}}, <4 x i32> <i32 0, i32 1, i32 2, i32 3> // CHECK: fpext <4 x half> %{{.*}} to <4 x float> return _mm_cvtph_ps(a); } diff --git a/clang/test/CodeGen/X86/fma-builtins.c b/clang/test/CodeGen/X86/fma-builtins.c index aa17dcc..5445e50 100644 --- a/clang/test/CodeGen/X86/fma-builtins.c +++ b/clang/test/CodeGen/X86/fma-builtins.c @@ -1,22 +1,30 @@ -// RUN: %clang_cc1 -x c -flax-vector-conversions=none -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +fma -emit-llvm -o - | FileCheck %s -// RUN: %clang_cc1 -x c -flax-vector-conversions=none -ffreestanding %s -triple=i386-apple-darwin -target-feature +fma -emit-llvm -o - | FileCheck %s -// RUN: %clang_cc1 -x c++ -flax-vector-conversions=none -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +fma -emit-llvm -o - | FileCheck %s -// RUN: %clang_cc1 -x c++ -flax-vector-conversions=none -ffreestanding %s -triple=i386-apple-darwin -target-feature +fma -emit-llvm -o - | FileCheck %s +// RUN: %clang_cc1 -x c -flax-vector-conversions=none -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +fma -emit-llvm -o - -Wall -Werror | FileCheck %s +// RUN: %clang_cc1 -x c -flax-vector-conversions=none -ffreestanding %s -triple=i386-apple-darwin -target-feature +fma -emit-llvm -o - -Wall -Werror | FileCheck %s +// RUN: %clang_cc1 -x c++ -flax-vector-conversions=none -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +fma -emit-llvm -o - -Wall -Werror | FileCheck %s +// RUN: %clang_cc1 -x c++ -flax-vector-conversions=none -ffreestanding %s -triple=i386-apple-darwin -target-feature +fma -emit-llvm -o - -Wall -Werror | FileCheck %s + +// RUN: %clang_cc1 -x c -flax-vector-conversions=none -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +fma -emit-llvm -o - -Wall -Werror -fexperimental-new-constant-interpreter | FileCheck %s +// RUN: %clang_cc1 -x c -flax-vector-conversions=none -ffreestanding %s -triple=i386-apple-darwin -target-feature +fma -emit-llvm -o - -Wall -Werror -fexperimental-new-constant-interpreter | FileCheck %s +// RUN: %clang_cc1 -x c++ -flax-vector-conversions=none -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +fma -emit-llvm -o - -Wall -Werror -fexperimental-new-constant-interpreter | FileCheck %s +// RUN: %clang_cc1 -x c++ -flax-vector-conversions=none -ffreestanding %s -triple=i386-apple-darwin -target-feature +fma -emit-llvm -o - -Wall -Werror -fexperimental-new-constant-interpreter | FileCheck %s #include <immintrin.h> +#include "builtin_test_helpers.h" __m128 test_mm_fmadd_ps(__m128 a, __m128 b, __m128 c) { // CHECK-LABEL: test_mm_fmadd_ps // CHECK: call {{.*}}<4 x float> @llvm.fma.v4f32(<4 x float> %{{.*}}, <4 x float> %{{.*}}, <4 x float> %{{.*}}) return _mm_fmadd_ps(a, b, c); } +TEST_CONSTEXPR(match_m128(_mm_fmadd_ps((__m128){ 0.0f, 1.0f, -2.0f, -4.0f }, (__m128){ -0.0f, 4.0f, 2.0f, 1.0f }, (__m128){ -0.0f, -4.0f, 2.0f, 1.0f }), -0.0f, 0.0f, -2.0f, -3.0f)); __m128d test_mm_fmadd_pd(__m128d a, __m128d b, __m128d c) { // CHECK-LABEL: test_mm_fmadd_pd // CHECK: call {{.*}}<2 x double> @llvm.fma.v2f64(<2 x double> %{{.*}}, <2 x double> %{{.*}}, <2 x double> %{{.*}}) return _mm_fmadd_pd(a, b, c); } +TEST_CONSTEXPR(match_m128d(_mm_fmadd_pd((__m128d){ 0.0, -4.0 }, (__m128d){ -0.0, 1.0 }, (__m128d){ -0.0, 1.0 }), -0.0, -3.0)); __m128 test_mm_fmadd_ss(__m128 a, __m128 b, __m128 c) { // CHECK-LABEL: test_mm_fmadd_ss @@ -44,6 +52,7 @@ __m128 test_mm_fmsub_ps(__m128 a, __m128 b, __m128 c) { // CHECK: call {{.*}}<4 x float> @llvm.fma.v4f32(<4 x float> %{{.*}}, <4 x float> %{{.*}}, <4 x float> %{{.*}}) return _mm_fmsub_ps(a, b, c); } +TEST_CONSTEXPR(match_m128(_mm_fmsub_ps((__m128){ 0.0f, 1.0f, -2.0f, -4.0f }, (__m128){ -0.0f, 4.0f, 2.0f, 1.0f }, (__m128){ -0.0f, -4.0f, 2.0f, 1.0f }), 0.0f, 8.0f, -6.0f, -5.0f)); __m128d test_mm_fmsub_pd(__m128d a, __m128d b, __m128d c) { // CHECK-LABEL: test_mm_fmsub_pd @@ -51,6 +60,7 @@ __m128d test_mm_fmsub_pd(__m128d a, __m128d b, __m128d c) { // CHECK: call {{.*}}<2 x double> @llvm.fma.v2f64(<2 x double> %{{.*}}, <2 x double> %{{.*}}, <2 x double> %{{.*}}) return _mm_fmsub_pd(a, b, c); } +TEST_CONSTEXPR(match_m128d(_mm_fmsub_pd((__m128d){ 0.0, -4.0 }, (__m128d){ -0.0, 1.0 }, (__m128d){ -0.0, 1.0 }), 0.0, -5.0)); __m128 test_mm_fmsub_ss(__m128 a, __m128 b, __m128 c) { // CHECK-LABEL: test_mm_fmsub_ss @@ -80,6 +90,7 @@ __m128 test_mm_fnmadd_ps(__m128 a, __m128 b, __m128 c) { // CHECK: call {{.*}}<4 x float> @llvm.fma.v4f32(<4 x float> %{{.*}}, <4 x float> %{{.*}}, <4 x float> %{{.*}}) return _mm_fnmadd_ps(a, b, c); } +TEST_CONSTEXPR(match_m128(_mm_fnmadd_ps((__m128){ 0.0f, 1.0f, -2.0f, -4.0f }, (__m128){ -0.0f, 4.0f, 2.0f, 1.0f }, (__m128){ -0.0f, -4.0f, 2.0f, 1.0f }), 0.0f, -8.0f, 6.0f, 5.0f)); __m128d test_mm_fnmadd_pd(__m128d a, __m128d b, __m128d c) { // CHECK-LABEL: test_mm_fnmadd_pd @@ -87,6 +98,7 @@ __m128d test_mm_fnmadd_pd(__m128d a, __m128d b, __m128d c) { // CHECK: call {{.*}}<2 x double> @llvm.fma.v2f64(<2 x double> %{{.*}}, <2 x double> %{{.*}}, <2 x double> %{{.*}}) return _mm_fnmadd_pd(a, b, c); } +TEST_CONSTEXPR(match_m128d(_mm_fnmadd_pd((__m128d){ 0.0, -4.0 }, (__m128d){ -0.0, 1.0 }, (__m128d){ -0.0, 1.0 }), 0.0, 5.0)); __m128 test_mm_fnmadd_ss(__m128 a, __m128 b, __m128 c) { // CHECK-LABEL: test_mm_fnmadd_ss @@ -117,6 +129,7 @@ __m128 test_mm_fnmsub_ps(__m128 a, __m128 b, __m128 c) { // CHECK: call {{.*}}<4 x float> @llvm.fma.v4f32(<4 x float> %{{.*}}, <4 x float> %{{.*}}, <4 x float> %{{.*}}) return _mm_fnmsub_ps(a, b, c); } +TEST_CONSTEXPR(match_m128(_mm_fnmsub_ps((__m128){ 0.0f, 1.0f, -2.0f, -4.0f }, (__m128){ -0.0f, 4.0f, 2.0f, 1.0f }, (__m128){ -0.0f, -4.0f, 2.0f, 1.0f }), 0.0f, 0.0f, 2.0f, 3.0f)); __m128d test_mm_fnmsub_pd(__m128d a, __m128d b, __m128d c) { // CHECK-LABEL: test_mm_fnmsub_pd @@ -125,6 +138,7 @@ __m128d test_mm_fnmsub_pd(__m128d a, __m128d b, __m128d c) { // CHECK: call {{.*}}<2 x double> @llvm.fma.v2f64(<2 x double> %{{.*}}, <2 x double> %{{.*}}, <2 x double> %{{.*}}) return _mm_fnmsub_pd(a, b, c); } +TEST_CONSTEXPR(match_m128d(_mm_fnmsub_pd((__m128d){ 0.0, -4.0 }, (__m128d){ -0.0, 1.0 }, (__m128d){ -0.0, 1.0 }), 0.0, 3.0)); __m128 test_mm_fnmsub_ss(__m128 a, __m128 b, __m128 c) { // CHECK-LABEL: test_mm_fnmsub_ss @@ -183,12 +197,14 @@ __m256 test_mm256_fmadd_ps(__m256 a, __m256 b, __m256 c) { // CHECK: call {{.*}}<8 x float> @llvm.fma.v8f32(<8 x float> %{{.*}}, <8 x float> %{{.*}}, <8 x float> %{{.*}}) return _mm256_fmadd_ps(a, b, c); } +TEST_CONSTEXPR(match_m256(_mm256_fmadd_ps((__m256){ 0.0f, 1.0f, -2.0f, -4.0f, -8.0f, -16.0f, 32.0f, 64.0f }, (__m256){ -0.0f, 64.0f, 32.0f, 16.0f, -8.0f, -4.0f, -2.0f, -1.0f }, (__m256){ -0.0f, -4.0f, 2.0f, 1.0f, -8.0f, -16.0f, 32.0f, 64.0f }), -0.0f, 60.0f, -62.0f, -63.0f, +56.0f, +48.0f, -32.0f, 0.0f)); __m256d test_mm256_fmadd_pd(__m256d a, __m256d b, __m256d c) { // CHECK-LABEL: test_mm256_fmadd_pd // CHECK: call {{.*}}<4 x double> @llvm.fma.v4f64(<4 x double> %{{.*}}, <4 x double> %{{.*}}, <4 x double> %{{.*}}) return _mm256_fmadd_pd(a, b, c); } +TEST_CONSTEXPR(match_m256d(_mm256_fmadd_pd((__m256d){ 0.0, 1.0, -2.0, -4.0 }, (__m256d){ -0.0, 4.0, 2.0, 1.0 }, (__m256d){ -0.0, -4.0, 2.0, 1.0 }), -0.0, 0.0, -2.0, -3.0)); __m256 test_mm256_fmsub_ps(__m256 a, __m256 b, __m256 c) { // CHECK-LABEL: test_mm256_fmsub_ps @@ -196,6 +212,7 @@ __m256 test_mm256_fmsub_ps(__m256 a, __m256 b, __m256 c) { // CHECK: call {{.*}}<8 x float> @llvm.fma.v8f32(<8 x float> %{{.*}}, <8 x float> %{{.*}}, <8 x float> %{{.*}}) return _mm256_fmsub_ps(a, b, c); } +TEST_CONSTEXPR(match_m256(_mm256_fmsub_ps((__m256){ 0.0f, 1.0f, -2.0f, -4.0f, -8.0f, -16.0f, 32.0f, 64.0f }, (__m256){ -0.0f, 64.0f, 32.0f, 16.0f, -8.0f, -4.0f, -2.0f, -1.0f }, (__m256){ -0.0f, -4.0f, 2.0f, 1.0f, -8.0f, -16.0f, 32.0f, 64.0f }), 0.0f, 68.0f, -66.0f, -65.0f, 72.0f, 80.0f, -96.0f, -128.0f)); __m256d test_mm256_fmsub_pd(__m256d a, __m256d b, __m256d c) { // CHECK-LABEL: test_mm256_fmsub_pd @@ -203,6 +220,7 @@ __m256d test_mm256_fmsub_pd(__m256d a, __m256d b, __m256d c) { // CHECK: call {{.*}}<4 x double> @llvm.fma.v4f64(<4 x double> %{{.*}}, <4 x double> %{{.*}}, <4 x double> %{{.*}}) return _mm256_fmsub_pd(a, b, c); } +TEST_CONSTEXPR(match_m256d(_mm256_fmsub_pd((__m256d){ 0.0, 1.0, -2.0, -4.0 }, (__m256d){ -0.0, 4.0, 2.0, 1.0 }, (__m256d){ -0.0, -4.0, 2.0, 1.0 }), 0.0, 8.0, -6.0, -5.0)); __m256 test_mm256_fnmadd_ps(__m256 a, __m256 b, __m256 c) { // CHECK-LABEL: test_mm256_fnmadd_ps @@ -210,6 +228,7 @@ __m256 test_mm256_fnmadd_ps(__m256 a, __m256 b, __m256 c) { // CHECK: call {{.*}}<8 x float> @llvm.fma.v8f32(<8 x float> %{{.*}}, <8 x float> %{{.*}}, <8 x float> %{{.*}}) return _mm256_fnmadd_ps(a, b, c); } +TEST_CONSTEXPR(match_m256(_mm256_fnmadd_ps((__m256){ 0.0f, 1.0f, -2.0f, -4.0f, -8.0f, -16.0f, 32.0f, 64.0f }, (__m256){ -0.0f, 64.0f, 32.0f, 16.0f, -8.0f, -4.0f, -2.0f, -1.0f }, (__m256){ -0.0f, -4.0f, 2.0f, 1.0f, -8.0f, -16.0f, 32.0f, 64.0f }), 0.0f, -68.0f, 66.0f, 65.0f, -72.0f, -80.0f, 96.0f, 128.0f)); __m256d test_mm256_fnmadd_pd(__m256d a, __m256d b, __m256d c) { // CHECK-LABEL: test_mm256_fnmadd_pd @@ -217,6 +236,7 @@ __m256d test_mm256_fnmadd_pd(__m256d a, __m256d b, __m256d c) { // CHECK: call {{.*}}<4 x double> @llvm.fma.v4f64(<4 x double> %{{.*}}, <4 x double> %{{.*}}, <4 x double> %{{.*}}) return _mm256_fnmadd_pd(a, b, c); } +TEST_CONSTEXPR(match_m256d(_mm256_fnmadd_pd((__m256d){ 0.0, 1.0, -2.0, -4.0 }, (__m256d){ -0.0, 4.0, 2.0, 1.0 }, (__m256d){ -0.0, -4.0, 2.0, 1.0 }), 0.0, -8.0, 6.0, 5.0)); __m256 test_mm256_fnmsub_ps(__m256 a, __m256 b, __m256 c) { // CHECK-LABEL: test_mm256_fnmsub_ps @@ -225,6 +245,7 @@ __m256 test_mm256_fnmsub_ps(__m256 a, __m256 b, __m256 c) { // CHECK: call {{.*}}<8 x float> @llvm.fma.v8f32(<8 x float> %{{.*}}, <8 x float> %{{.*}}, <8 x float> %{{.*}}) return _mm256_fnmsub_ps(a, b, c); } +TEST_CONSTEXPR(match_m256(_mm256_fnmsub_ps((__m256){ 0.0f, 1.0f, -2.0f, -4.0f, -8.0f, -16.0f, 32.0f, 64.0f }, (__m256){ -0.0f, 64.0f, 32.0f, 16.0f, -8.0f, -4.0f, -2.0f, -1.0f }, (__m256){ -0.0f, -4.0f, 2.0f, 1.0f, -8.0f, -16.0f, 32.0f, 64.0f }), 0.0f, -60.0f, 62.0f, 63.0f, -56.0f, -48.0f, 32.0f, 0.0f)); __m256d test_mm256_fnmsub_pd(__m256d a, __m256d b, __m256d c) { // CHECK-LABEL: test_mm256_fnmsub_pd @@ -233,6 +254,7 @@ __m256d test_mm256_fnmsub_pd(__m256d a, __m256d b, __m256d c) { // CHECK: call {{.*}}<4 x double> @llvm.fma.v4f64(<4 x double> %{{.*}}, <4 x double> %{{.*}}, <4 x double> %{{.*}}) return _mm256_fnmsub_pd(a, b, c); } +TEST_CONSTEXPR(match_m256d(_mm256_fnmsub_pd((__m256d){ 0.0, 1.0, -2.0, -4.0 }, (__m256d){ -0.0, 4.0, 2.0, 1.0 }, (__m256d){ -0.0, -4.0, 2.0, 1.0 }), 0.0, 0.0, 2.0, 3.0)); __m256 test_mm256_fmaddsub_ps(__m256 a, __m256 b, __m256 c) { // CHECK-LABEL: test_mm256_fmaddsub_ps diff --git a/clang/test/CodeGen/X86/fma4-builtins.c b/clang/test/CodeGen/X86/fma4-builtins.c index ccdba8f..fb449d5 100644 --- a/clang/test/CodeGen/X86/fma4-builtins.c +++ b/clang/test/CodeGen/X86/fma4-builtins.c @@ -3,20 +3,28 @@ // RUN: %clang_cc1 -x c++ -flax-vector-conversions=none -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +fma4 -emit-llvm -o - -Wall -Werror | FileCheck %s // RUN: %clang_cc1 -x c++ -flax-vector-conversions=none -ffreestanding %s -triple=i386-apple-darwin -target-feature +fma4 -emit-llvm -o - -Wall -Werror | FileCheck %s +// RUN: %clang_cc1 -x c -flax-vector-conversions=none -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +fma4 -emit-llvm -o - -Wall -Werror -fexperimental-new-constant-interpreter | FileCheck %s +// RUN: %clang_cc1 -x c -flax-vector-conversions=none -ffreestanding %s -triple=i386-apple-darwin -target-feature +fma4 -emit-llvm -o - -Wall -Werror -fexperimental-new-constant-interpreter | FileCheck %s +// RUN: %clang_cc1 -x c++ -flax-vector-conversions=none -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +fma4 -emit-llvm -o - -Wall -Werror -fexperimental-new-constant-interpreter | FileCheck %s +// RUN: %clang_cc1 -x c++ -flax-vector-conversions=none -ffreestanding %s -triple=i386-apple-darwin -target-feature +fma4 -emit-llvm -o - -Wall -Werror -fexperimental-new-constant-interpreter | FileCheck %s + #include <x86intrin.h> +#include "builtin_test_helpers.h" __m128 test_mm_macc_ps(__m128 a, __m128 b, __m128 c) { // CHECK-LABEL: test_mm_macc_ps // CHECK: call {{.*}}<4 x float> @llvm.fma.v4f32(<4 x float> %{{.*}}, <4 x float> %{{.*}}, <4 x float> %{{.*}}) return _mm_macc_ps(a, b, c); } +TEST_CONSTEXPR(match_m128(_mm_macc_ps((__m128){ 0.0f, 1.0f, -2.0f, -4.0f }, (__m128){ -0.0f, 4.0f, 2.0f, 1.0f }, (__m128){ -0.0f, -4.0f, 2.0f, 1.0f }), -0.0f, 0.0f, -2.0f, -3.0f)); __m128d test_mm_macc_pd(__m128d a, __m128d b, __m128d c) { // CHECK-LABEL: test_mm_macc_pd // CHECK: call {{.*}}<2 x double> @llvm.fma.v2f64(<2 x double> %{{.*}}, <2 x double> %{{.*}}, <2 x double> %{{.*}}) return _mm_macc_pd(a, b, c); } +TEST_CONSTEXPR(match_m128d(_mm_macc_pd((__m128d){ 0.0, -4.0 }, (__m128d){ -0.0, 1.0 }, (__m128d){ -0.0, 1.0 }), -0.0, -3.0)); __m128 test_mm_macc_ss(__m128 a, __m128 b, __m128 c) { // CHECK-LABEL: test_mm_macc_ss @@ -44,6 +52,7 @@ __m128 test_mm_msub_ps(__m128 a, __m128 b, __m128 c) { // CHECK: call {{.*}}<4 x float> @llvm.fma.v4f32(<4 x float> %{{.*}}, <4 x float> %{{.*}}, <4 x float> %{{.*}}) return _mm_msub_ps(a, b, c); } +TEST_CONSTEXPR(match_m128(_mm_msub_ps((__m128){ 0.0f, 1.0f, -2.0f, -4.0f }, (__m128){ -0.0f, 4.0f, 2.0f, 1.0f }, (__m128){ -0.0f, -4.0f, 2.0f, 1.0f }), 0.0f, 8.0f, -6.0f, -5.0f)); __m128d test_mm_msub_pd(__m128d a, __m128d b, __m128d c) { // CHECK-LABEL: test_mm_msub_pd @@ -51,6 +60,7 @@ __m128d test_mm_msub_pd(__m128d a, __m128d b, __m128d c) { // CHECK: call {{.*}}<2 x double> @llvm.fma.v2f64(<2 x double> %{{.*}}, <2 x double> %{{.*}}, <2 x double> %{{.*}}) return _mm_msub_pd(a, b, c); } +TEST_CONSTEXPR(match_m128d(_mm_msub_pd((__m128d){ 0.0, -4.0 }, (__m128d){ -0.0, 1.0 }, (__m128d){ -0.0, 1.0 }), 0.0, -5.0)); __m128 test_mm_msub_ss(__m128 a, __m128 b, __m128 c) { // CHECK-LABEL: test_mm_msub_ss @@ -80,6 +90,7 @@ __m128 test_mm_nmacc_ps(__m128 a, __m128 b, __m128 c) { // CHECK: call {{.*}}<4 x float> @llvm.fma.v4f32(<4 x float> %{{.*}}, <4 x float> %{{.*}}, <4 x float> %{{.*}}) return _mm_nmacc_ps(a, b, c); } +TEST_CONSTEXPR(match_m128(_mm_nmacc_ps((__m128){ 0.0f, 1.0f, -2.0f, -4.0f }, (__m128){ -0.0f, 4.0f, 2.0f, 1.0f }, (__m128){ -0.0f, -4.0f, 2.0f, 1.0f }), 0.0f, -8.0f, 6.0f, 5.0f)); __m128d test_mm_nmacc_pd(__m128d a, __m128d b, __m128d c) { // CHECK-LABEL: test_mm_nmacc_pd @@ -87,6 +98,7 @@ __m128d test_mm_nmacc_pd(__m128d a, __m128d b, __m128d c) { // CHECK: call {{.*}}<2 x double> @llvm.fma.v2f64(<2 x double> %{{.*}}, <2 x double> %{{.*}}, <2 x double> %{{.*}}) return _mm_nmacc_pd(a, b, c); } +TEST_CONSTEXPR(match_m128d(_mm_nmacc_pd((__m128d){ 0.0, -4.0 }, (__m128d){ -0.0, 1.0 }, (__m128d){ -0.0, 1.0 }), 0.0, 5.0)); __m128 test_mm_nmacc_ss(__m128 a, __m128 b, __m128 c) { // CHECK-LABEL: test_mm_nmacc_ss @@ -117,6 +129,7 @@ __m128 test_mm_nmsub_ps(__m128 a, __m128 b, __m128 c) { // CHECK: call {{.*}}<4 x float> @llvm.fma.v4f32(<4 x float> %{{.*}}, <4 x float> %{{.*}}, <4 x float> %{{.*}}) return _mm_nmsub_ps(a, b, c); } +TEST_CONSTEXPR(match_m128(_mm_nmsub_ps((__m128){ 0.0f, 1.0f, -2.0f, -4.0f }, (__m128){ -0.0f, 4.0f, 2.0f, 1.0f }, (__m128){ -0.0f, -4.0f, 2.0f, 1.0f }), 0.0f, 0.0f, 2.0f, 3.0f)); __m128d test_mm_nmsub_pd(__m128d a, __m128d b, __m128d c) { // CHECK-LABEL: test_mm_nmsub_pd @@ -125,6 +138,7 @@ __m128d test_mm_nmsub_pd(__m128d a, __m128d b, __m128d c) { // CHECK: call {{.*}}<2 x double> @llvm.fma.v2f64(<2 x double> %{{.*}}, <2 x double> %{{.*}}, <2 x double> %{{.*}}) return _mm_nmsub_pd(a, b, c); } +TEST_CONSTEXPR(match_m128d(_mm_nmsub_pd((__m128d){ 0.0, -4.0 }, (__m128d){ -0.0, 1.0 }, (__m128d){ -0.0, 1.0 }), 0.0, 3.0)); __m128 test_mm_nmsub_ss(__m128 a, __m128 b, __m128 c) { // CHECK-LABEL: test_mm_nmsub_ss @@ -183,12 +197,14 @@ __m256 test_mm256_macc_ps(__m256 a, __m256 b, __m256 c) { // CHECK: call {{.*}}<8 x float> @llvm.fma.v8f32(<8 x float> %{{.*}}, <8 x float> %{{.*}}, <8 x float> %{{.*}}) return _mm256_macc_ps(a, b, c); } +TEST_CONSTEXPR(match_m256(_mm256_macc_ps((__m256){ 0.0f, 1.0f, -2.0f, -4.0f, -8.0f, -16.0f, 32.0f, 64.0f }, (__m256){ -0.0f, 64.0f, 32.0f, 16.0f, -8.0f, -4.0f, -2.0f, -1.0f }, (__m256){ -0.0f, -4.0f, 2.0f, 1.0f, -8.0f, -16.0f, 32.0f, 64.0f }), -0.0f, 60.0f, -62.0f, -63.0f, +56.0f, +48.0f, -32.0f, 0.0f)); __m256d test_mm256_macc_pd(__m256d a, __m256d b, __m256d c) { // CHECK-LABEL: test_mm256_macc_pd // CHECK: call {{.*}}<4 x double> @llvm.fma.v4f64(<4 x double> %{{.*}}, <4 x double> %{{.*}}, <4 x double> %{{.*}}) return _mm256_macc_pd(a, b, c); } +TEST_CONSTEXPR(match_m256d(_mm256_macc_pd((__m256d){ 0.0, 1.0, -2.0, -4.0 }, (__m256d){ -0.0, 4.0, 2.0, 1.0 }, (__m256d){ -0.0, -4.0, 2.0, 1.0 }), -0.0, 0.0, -2.0, -3.0)); __m256 test_mm256_msub_ps(__m256 a, __m256 b, __m256 c) { // CHECK-LABEL: test_mm256_msub_ps @@ -196,6 +212,7 @@ __m256 test_mm256_msub_ps(__m256 a, __m256 b, __m256 c) { // CHECK: call {{.*}}<8 x float> @llvm.fma.v8f32(<8 x float> %{{.*}}, <8 x float> %{{.*}}, <8 x float> %{{.*}}) return _mm256_msub_ps(a, b, c); } +TEST_CONSTEXPR(match_m256(_mm256_msub_ps((__m256){ 0.0f, 1.0f, -2.0f, -4.0f, -8.0f, -16.0f, 32.0f, 64.0f }, (__m256){ -0.0f, 64.0f, 32.0f, 16.0f, -8.0f, -4.0f, -2.0f, -1.0f }, (__m256){ -0.0f, -4.0f, 2.0f, 1.0f, -8.0f, -16.0f, 32.0f, 64.0f }), 0.0f, 68.0f, -66.0f, -65.0f, 72.0f, 80.0f, -96.0f, -128.0f)); __m256d test_mm256_msub_pd(__m256d a, __m256d b, __m256d c) { // CHECK-LABEL: test_mm256_msub_pd @@ -203,6 +220,7 @@ __m256d test_mm256_msub_pd(__m256d a, __m256d b, __m256d c) { // CHECK: call {{.*}}<4 x double> @llvm.fma.v4f64(<4 x double> %{{.*}}, <4 x double> %{{.*}}, <4 x double> %{{.*}}) return _mm256_msub_pd(a, b, c); } +TEST_CONSTEXPR(match_m256d(_mm256_msub_pd((__m256d){ 0.0, 1.0, -2.0, -4.0 }, (__m256d){ -0.0, 4.0, 2.0, 1.0 }, (__m256d){ -0.0, -4.0, 2.0, 1.0 }), 0.0, 8.0, -6.0, -5.0)); __m256 test_mm256_nmacc_ps(__m256 a, __m256 b, __m256 c) { // CHECK-LABEL: test_mm256_nmacc_ps @@ -210,6 +228,7 @@ __m256 test_mm256_nmacc_ps(__m256 a, __m256 b, __m256 c) { // CHECK: call {{.*}}<8 x float> @llvm.fma.v8f32(<8 x float> %{{.*}}, <8 x float> %{{.*}}, <8 x float> %{{.*}}) return _mm256_nmacc_ps(a, b, c); } +TEST_CONSTEXPR(match_m256(_mm256_nmacc_ps((__m256){ 0.0f, 1.0f, -2.0f, -4.0f, -8.0f, -16.0f, 32.0f, 64.0f }, (__m256){ -0.0f, 64.0f, 32.0f, 16.0f, -8.0f, -4.0f, -2.0f, -1.0f }, (__m256){ -0.0f, -4.0f, 2.0f, 1.0f, -8.0f, -16.0f, 32.0f, 64.0f }), 0.0f, -68.0f, 66.0f, 65.0f, -72.0f, -80.0f, 96.0f, 128.0f)); __m256d test_mm256_nmacc_pd(__m256d a, __m256d b, __m256d c) { // CHECK-LABEL: test_mm256_nmacc_pd @@ -217,6 +236,7 @@ __m256d test_mm256_nmacc_pd(__m256d a, __m256d b, __m256d c) { // CHECK: call {{.*}}<4 x double> @llvm.fma.v4f64(<4 x double> %{{.*}}, <4 x double> %{{.*}}, <4 x double> %{{.*}}) return _mm256_nmacc_pd(a, b, c); } +TEST_CONSTEXPR(match_m256d(_mm256_nmacc_pd((__m256d){ 0.0, 1.0, -2.0, -4.0 }, (__m256d){ -0.0, 4.0, 2.0, 1.0 }, (__m256d){ -0.0, -4.0, 2.0, 1.0 }), 0.0, -8.0, 6.0, 5.0)); __m256 test_mm256_nmsub_ps(__m256 a, __m256 b, __m256 c) { // CHECK-LABEL: test_mm256_nmsub_ps @@ -225,6 +245,7 @@ __m256 test_mm256_nmsub_ps(__m256 a, __m256 b, __m256 c) { // CHECK: call {{.*}}<8 x float> @llvm.fma.v8f32(<8 x float> %{{.*}}, <8 x float> %{{.*}}, <8 x float> %{{.*}}) return _mm256_nmsub_ps(a, b, c); } +TEST_CONSTEXPR(match_m256(_mm256_nmsub_ps((__m256){ 0.0f, 1.0f, -2.0f, -4.0f, -8.0f, -16.0f, 32.0f, 64.0f }, (__m256){ -0.0f, 64.0f, 32.0f, 16.0f, -8.0f, -4.0f, -2.0f, -1.0f }, (__m256){ -0.0f, -4.0f, 2.0f, 1.0f, -8.0f, -16.0f, 32.0f, 64.0f }), 0.0f, -60.0f, 62.0f, 63.0f, -56.0f, -48.0f, 32.0f, 0.0f)); __m256d test_mm256_nmsub_pd(__m256d a, __m256d b, __m256d c) { // CHECK-LABEL: test_mm256_nmsub_pd @@ -233,6 +254,7 @@ __m256d test_mm256_nmsub_pd(__m256d a, __m256d b, __m256d c) { // CHECK: call {{.*}}<4 x double> @llvm.fma.v4f64(<4 x double> %{{.*}}, <4 x double> %{{.*}}, <4 x double> %{{.*}}) return _mm256_nmsub_pd(a, b, c); } +TEST_CONSTEXPR(match_m256d(_mm256_nmsub_pd((__m256d){ 0.0, 1.0, -2.0, -4.0 }, (__m256d){ -0.0, 4.0, 2.0, 1.0 }, (__m256d){ -0.0, -4.0, 2.0, 1.0 }), 0.0, 0.0, 2.0, 3.0)); __m256 test_mm256_maddsub_ps(__m256 a, __m256 b, __m256 c) { // CHECK-LABEL: test_mm256_maddsub_ps diff --git a/clang/test/CodeGen/X86/i128-debuginfo.c b/clang/test/CodeGen/X86/i128-debuginfo.c deleted file mode 100644 index 4b865c1..0000000 --- a/clang/test/CodeGen/X86/i128-debuginfo.c +++ /dev/null @@ -1,10 +0,0 @@ -// no autogeneration since update_cc_test_checks does not support -g -// RUN: %clang_cc1 -triple x86_64-pc-linux -O1 -debug-info-kind=limited -emit-llvm -o - %s | FileCheck %s - -// CHECK-LABEL: define{{.*}} i128 @add(i128 noundef %a) -// CHECK: #dbg_value(i128 %a, ![[DI:.*]], !DIExpression() -__int128_t add(__int128_t a) { - return a + a; -} - -// CHECK: ![[DI]] = !DILocalVariable(name: "a", arg: 1 diff --git a/clang/test/CodeGen/X86/lzcnt-builtins.c b/clang/test/CodeGen/X86/lzcnt-builtins.c index 212155f..eb02c11 100644 --- a/clang/test/CodeGen/X86/lzcnt-builtins.c +++ b/clang/test/CodeGen/X86/lzcnt-builtins.c @@ -1,59 +1,54 @@ // RUN: %clang_cc1 -x c -ffreestanding %s -triple=x86_64-apple-darwin -emit-llvm -o - | FileCheck %s // RUN: %clang_cc1 -x c++ -std=c++11 -ffreestanding %s -triple=x86_64-apple-darwin -emit-llvm -o - | FileCheck %s +// RUN: %clang_cc1 -x c -ffreestanding %s -triple=x86_64-apple-darwin -emit-llvm -o - -fexperimental-new-constant-interpreter | FileCheck %s +// RUN: %clang_cc1 -x c++ -std=c++11 -ffreestanding %s -triple=x86_64-apple-darwin -emit-llvm -o - -fexperimental-new-constant-interpreter | FileCheck %s + #include <immintrin.h> +#include "builtin_test_helpers.h" unsigned short test__lzcnt16(unsigned short __X) { // CHECK: @llvm.ctlz.i16(i16 %{{.*}}, i1 false) return __lzcnt16(__X); } +TEST_CONSTEXPR(__lzcnt16(0x0000) == 16); +TEST_CONSTEXPR(__lzcnt16(0x8000) == 0); +TEST_CONSTEXPR(__lzcnt16(0x0010) == 11); unsigned int test_lzcnt32(unsigned int __X) { // CHECK: @llvm.ctlz.i32(i32 %{{.*}}, i1 false) return __lzcnt32(__X); } +TEST_CONSTEXPR(__lzcnt32(0x00000000) == 32); +TEST_CONSTEXPR(__lzcnt32(0x80000000) == 0); +TEST_CONSTEXPR(__lzcnt32(0x00000010) == 27); unsigned long long test__lzcnt64(unsigned long long __X) { // CHECK: @llvm.ctlz.i64(i64 %{{.*}}, i1 false) return __lzcnt64(__X); } +TEST_CONSTEXPR(__lzcnt64(0x0000000000000000ULL) == 64); +TEST_CONSTEXPR(__lzcnt64(0x8000000000000000ULL) == 0); +TEST_CONSTEXPR(__lzcnt64(0x0000000100000000ULL) == 31); unsigned int test_lzcnt_u32(unsigned int __X) { // CHECK: @llvm.ctlz.i32(i32 %{{.*}}, i1 false) return _lzcnt_u32(__X); } +TEST_CONSTEXPR(_lzcnt_u32(0x00000000) == 32); +TEST_CONSTEXPR(_lzcnt_u32(0x80000000) == 0); +TEST_CONSTEXPR(_lzcnt_u32(0x00000010) == 27); unsigned long long test__lzcnt_u64(unsigned long long __X) { // CHECK: @llvm.ctlz.i64(i64 %{{.*}}, i1 false) return _lzcnt_u64(__X); } - - -// Test constexpr handling. -#if defined(__cplusplus) && (__cplusplus >= 201103L) -char lzcnt16_0[__lzcnt16(0x0000) == 16 ? 1 : -1]; -char lzcnt16_1[__lzcnt16(0x8000) == 0 ? 1 : -1]; -char lzcnt16_2[__lzcnt16(0x0010) == 11 ? 1 : -1]; - -char lzcnt32_0[__lzcnt32(0x00000000) == 32 ? 1 : -1]; -char lzcnt32_1[__lzcnt32(0x80000000) == 0 ? 1 : -1]; -char lzcnt32_2[__lzcnt32(0x00000010) == 27 ? 1 : -1]; - -char lzcnt64_0[__lzcnt64(0x0000000000000000ULL) == 64 ? 1 : -1]; -char lzcnt64_1[__lzcnt64(0x8000000000000000ULL) == 0 ? 1 : -1]; -char lzcnt64_2[__lzcnt64(0x0000000100000000ULL) == 31 ? 1 : -1]; - -char lzcntu32_0[_lzcnt_u32(0x00000000) == 32 ? 1 : -1]; -char lzcntu32_1[_lzcnt_u32(0x80000000) == 0 ? 1 : -1]; -char lzcntu32_2[_lzcnt_u32(0x00000010) == 27 ? 1 : -1]; - -char lzcntu64_0[_lzcnt_u64(0x0000000000000000ULL) == 64 ? 1 : -1]; -char lzcntu64_1[_lzcnt_u64(0x8000000000000000ULL) == 0 ? 1 : -1]; -char lzcntu64_2[_lzcnt_u64(0x0000000100000000ULL) == 31 ? 1 : -1]; -#endif +TEST_CONSTEXPR(_lzcnt_u64(0x0000000000000000ULL) == 64); +TEST_CONSTEXPR(_lzcnt_u64(0x8000000000000000ULL) == 0); +TEST_CONSTEXPR(_lzcnt_u64(0x0000000100000000ULL) == 31); diff --git a/clang/test/CodeGen/X86/mmx-builtins.c b/clang/test/CodeGen/X86/mmx-builtins.c index 52cbe45..7bd2475 100644 --- a/clang/test/CodeGen/X86/mmx-builtins.c +++ b/clang/test/CodeGen/X86/mmx-builtins.c @@ -7,6 +7,15 @@ // RUN: %clang_cc1 -x c++ -flax-vector-conversions=none -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +ssse3 -fno-signed-char -emit-llvm -o - -Wall -Werror | FileCheck %s --implicit-check-not=x86mmx // RUN: %clang_cc1 -x c++ -flax-vector-conversions=none -ffreestanding %s -triple=i386-apple-darwin -target-feature +ssse3 -fno-signed-char -emit-llvm -o - -Wall -Werror | FileCheck %s --implicit-check-not=x86mmx +// RUN: %clang_cc1 -x c -flax-vector-conversions=none -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +ssse3 -emit-llvm -o - -Wall -Werror -fexperimental-new-constant-interpreter | FileCheck %s --implicit-check-not=x86mmx +// RUN: %clang_cc1 -x c -flax-vector-conversions=none -ffreestanding %s -triple=i386-apple-darwin -target-feature +ssse3 -emit-llvm -o - -Wall -Werror -fexperimental-new-constant-interpreter | FileCheck %s --implicit-check-not=x86mmx +// RUN: %clang_cc1 -x c -flax-vector-conversions=none -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +ssse3 -fno-signed-char -emit-llvm -o - -Wall -Werror -fexperimental-new-constant-interpreter | FileCheck %s --implicit-check-not=x86mmx +// RUN: %clang_cc1 -x c -flax-vector-conversions=none -ffreestanding %s -triple=i386-apple-darwin -target-feature +ssse3 -fno-signed-char -emit-llvm -o - -Wall -Werror -fexperimental-new-constant-interpreter | FileCheck %s --implicit-check-not=x86mmx +// RUN: %clang_cc1 -x c++ -flax-vector-conversions=none -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +ssse3 -emit-llvm -o - -Wall -Werror -fexperimental-new-constant-interpreter | FileCheck %s --implicit-check-not=x86mmx +// RUN: %clang_cc1 -x c++ -flax-vector-conversions=none -ffreestanding %s -triple=i386-apple-darwin -target-feature +ssse3 -emit-llvm -o - -Wall -Werror -fexperimental-new-constant-interpreter | FileCheck %s --implicit-check-not=x86mmx +// RUN: %clang_cc1 -x c++ -flax-vector-conversions=none -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +ssse3 -fno-signed-char -emit-llvm -o - -Wall -Werror -fexperimental-new-constant-interpreter | FileCheck %s --implicit-check-not=x86mmx +// RUN: %clang_cc1 -x c++ -flax-vector-conversions=none -ffreestanding %s -triple=i386-apple-darwin -target-feature +ssse3 -fno-signed-char -emit-llvm -o - -Wall -Werror -fexperimental-new-constant-interpreter | FileCheck %s --implicit-check-not=x86mmx + #include <immintrin.h> #include "builtin_test_helpers.h" @@ -16,66 +25,77 @@ __m64 test_mm_abs_pi8(__m64 a) { // CHECK: call <8 x i8> @llvm.abs.v8i8( return _mm_abs_pi8(a); } +TEST_CONSTEXPR(match_v8qi(_mm_abs_pi8((__m64)(__v8qs){-3, +2, -1, 0, +1, -2, +3, -4}), 3, 2, 1, 0, 1, 2, 3, 4)); __m64 test_mm_abs_pi16(__m64 a) { // CHECK-LABEL: test_mm_abs_pi16 // CHECK: call <4 x i16> @llvm.abs.v4i16( return _mm_abs_pi16(a); } +TEST_CONSTEXPR(match_v4hi(_mm_abs_pi16((__m64)(__v4hi){+1, -2, +3, -4}), 1, 2, 3, 4)); __m64 test_mm_abs_pi32(__m64 a) { // CHECK-LABEL: test_mm_abs_pi32 // CHECK: call <2 x i32> @llvm.abs.v2i32( return _mm_abs_pi32(a); } +TEST_CONSTEXPR(match_v2si(_mm_abs_pi32((__m64)(__v2si){+5, -3}), 5, 3)); __m64 test_mm_add_pi8(__m64 a, __m64 b) { // CHECK-LABEL: test_mm_add_pi8 // CHECK: add <8 x i8> {{%.*}}, {{%.*}} return _mm_add_pi8(a, b); } +TEST_CONSTEXPR(match_v8qi(_mm_add_pi8((__m64)(__v8qs){-3, +2, -1, 0, +1, -2, +3, -4}, (__m64)(__v8qs){-18, +16, -14, +12, -10, +8, +6, -4}), -21, +18, -15, +12, -9, +6, +9, -8)); __m64 test_mm_add_pi16(__m64 a, __m64 b) { // CHECK-LABEL: test_mm_add_pi16 // CHECK: add <4 x i16> {{%.*}}, {{%.*}} return _mm_add_pi16(a, b); } +TEST_CONSTEXPR(match_v4hi(_mm_add_pi16((__m64)(__v4hi){+1, -2, +3, -4}, (__m64)(__v4hi){-10, +8, +6, -4}), -9, +6, +9, -8)); __m64 test_mm_add_pi32(__m64 a, __m64 b) { // CHECK-LABEL: test_mm_add_pi32 // CHECK: add <2 x i32> {{%.*}}, {{%.*}} return _mm_add_pi32(a, b); } +TEST_CONSTEXPR(match_v2si(_mm_add_pi32((__m64)(__v2si){+5, -3}, (__m64)(__v2si){-9, +8}), -4, +5)); __m64 test_mm_add_si64(__m64 a, __m64 b) { // CHECK-LABEL: test_mm_add_si64 // CHECK: add i64 {{%.*}}, {{%.*}} return _mm_add_si64(a, b); } +TEST_CONSTEXPR(match_v1di(_mm_add_si64((__m64)(__v1di){+42}, (__m64)(__v1di){-100}), -58)); __m64 test_mm_adds_pi8(__m64 a, __m64 b) { // CHECK-LABEL: test_mm_adds_pi8 // CHECK: call <8 x i8> @llvm.sadd.sat.v8i8( return _mm_adds_pi8(a, b); } +TEST_CONSTEXPR(match_v8qi(_mm_adds_pi8((__m64)(__v8qs){+100, +50, -100, +20, +80, -50, +120, -20}, (__m64)(__v8qs){+50, +80, -50, +110, +60, -30, +20, -10}), +127, +127, -128, +127, +127, -80, +127, -30)); __m64 test_mm_adds_pi16(__m64 a, __m64 b) { // CHECK-LABEL: test_mm_adds_pi16 // CHECK: call <4 x i16> @llvm.sadd.sat.v4i16( return _mm_adds_pi16(a, b); } +TEST_CONSTEXPR(match_v4hi(_mm_adds_pi16((__m64)(__v4hi){+32000, -32000, +32000, -32000}, (__m64)(__v4hi){+800, -800, -800, +800}), +32767, -32768, +31200, -31200)); __m64 test_mm_adds_pu8(__m64 a, __m64 b) { // CHECK-LABEL: test_mm_adds_pu8 // CHECK: call <8 x i8> @llvm.uadd.sat.v8i8( return _mm_adds_pu8(a, b); } +TEST_CONSTEXPR(match_v8qu(_mm_adds_pu8((__m64)(__v8qu){0, +1, +2, +3, +180, +150, +120, +200}, (__m64)(__v8qu){0, +1, +2, +3, +160, +30, +200, +10}), 0, +2, +4, +6, +255, +180, +255, +210)); __m64 test_mm_adds_pu16(__m64 a, __m64 b) { // CHECK-LABEL: test_mm_adds_pu16 // CHECK: call <4 x i16> @llvm.uadd.sat.v4i16( return _mm_adds_pu16(a, b); } +TEST_CONSTEXPR(match_v4hu(_mm_adds_pu16((__m64)(__v4hu){+0, +1, +32000, +33000}, (__m64)(__v4hu){0, +1, +800, +33000}), 0, +2, +32800, +65535)); __m64 test_mm_alignr_pi8(__m64 a, __m64 b) { // CHECK-LABEL: test_mm_alignr_pi8 @@ -88,6 +108,7 @@ __m64 test_mm_and_si64(__m64 a, __m64 b) { // CHECK: and <1 x i64> {{%.*}}, {{%.*}} return _mm_and_si64(a, b); } +TEST_CONSTEXPR(match_v4hi(_mm_and_si64((__m64)(__v4hi){0, -1, 0, -1}, (__m64)(__v4hi){0, 0, -1, -1}), 0, 0, 0, -1)); __m64 test_mm_andnot_si64(__m64 a, __m64 b) { // CHECK-LABEL: test_mm_andnot_si64 @@ -95,6 +116,7 @@ __m64 test_mm_andnot_si64(__m64 a, __m64 b) { // CHECK: and <1 x i64> [[TMP]], {{%.*}} return _mm_andnot_si64(a, b); } +TEST_CONSTEXPR(match_v4hi(_mm_andnot_si64((__m64)(__v4hi){0, -1, 0, -1}, (__m64)(__v4hi){0, 0, -1, -1}), 0, 0, -1, 0)); __m64 test_mm_avg_pu8(__m64 a, __m64 b) { // CHECK-LABEL: test_mm_avg_pu8 @@ -114,6 +136,7 @@ __m64 test_mm_cmpeq_pi8(__m64 a, __m64 b) { // CHECK-NEXT: {{%.*}} = sext <8 x i1> [[CMP]] to <8 x i8> return _mm_cmpeq_pi8(a, b); } +TEST_CONSTEXPR(match_v8qi(_mm_cmpeq_pi8((__m64)(__v8qs){-3, +2, -1, 0, +1, -2, +3, -4}, (__m64)(__v8qs){-3, -2, +1, 0, -1, -2, -3, -4}), -1, 0, 0, -1, 0, -1, 0, -1)); __m64 test_mm_cmpeq_pi16(__m64 a, __m64 b) { // CHECK-LABEL: test_mm_cmpeq_pi16 @@ -121,6 +144,7 @@ __m64 test_mm_cmpeq_pi16(__m64 a, __m64 b) { // CHECK-NEXT: {{%.*}} = sext <4 x i1> [[CMP]] to <4 x i16> return _mm_cmpeq_pi16(a, b); } +TEST_CONSTEXPR(match_v4hi(_mm_cmpeq_pi16((__m64)(__v4hi){+1, -2, +3, -4}, (__m64)(__v4hi){-1, -1, +3, +4}), 0, 0, -1, 0)); __m64 test_mm_cmpeq_pi32(__m64 a, __m64 b) { // CHECK-LABEL: test_mm_cmpeq_pi32 @@ -128,6 +152,7 @@ __m64 test_mm_cmpeq_pi32(__m64 a, __m64 b) { // CHECK-NEXT: {{%.*}} = sext <2 x i1> [[CMP]] to <2 x i32> return _mm_cmpeq_pi32(a, b); } +TEST_CONSTEXPR(match_v2si(_mm_cmpeq_pi32((__m64)(__v2si){+5, -3}, (__m64)(__v2si){-5, -3}), 0, -1)); __m64 test_mm_cmpgt_pi8(__m64 a, __m64 b) { // CHECK-LABEL: test_mm_cmpgt_pi8 @@ -135,6 +160,7 @@ __m64 test_mm_cmpgt_pi8(__m64 a, __m64 b) { // CHECK-NEXT: {{%.*}} = sext <8 x i1> [[CMP]] to <8 x i8> return _mm_cmpgt_pi8(a, b); } +TEST_CONSTEXPR(match_v8qi(_mm_cmpgt_pi8((__m64)(__v8qs){-3, +2, -1, 0, +1, -2, +3, -4}, (__m64)(__v8qs){-3, -2, +1, 0, -1, -2, -3, -4}), 0, -1, 0, 0, -1, 0, -1, 0)); __m64 test_mm_cmpgt_pi16(__m64 a, __m64 b) { // CHECK-LABEL: test_mm_cmpgt_pi16 @@ -142,6 +168,7 @@ __m64 test_mm_cmpgt_pi16(__m64 a, __m64 b) { // CHECK-NEXT: {{%.*}} = sext <4 x i1> [[CMP]] to <4 x i16> return _mm_cmpgt_pi16(a, b); } +TEST_CONSTEXPR(match_v4hi(_mm_cmpgt_pi16((__m64)(__v4hi){+1, -2, +3, -4}, (__m64)(__v4hi){-1, -1, +3, +4}), -1, 0, 0, 0)); __m64 test_mm_cmpgt_pi32(__m64 a, __m64 b) { // CHECK-LABEL: test_mm_cmpgt_pi32 @@ -149,12 +176,14 @@ __m64 test_mm_cmpgt_pi32(__m64 a, __m64 b) { // CHECK-NEXT: {{%.*}} = sext <2 x i1> [[CMP]] to <2 x i32> return _mm_cmpgt_pi32(a, b); } +TEST_CONSTEXPR(match_v2si(_mm_cmpgt_pi32((__m64)(__v2si){+5, -3}, (__m64)(__v2si){-5, -3}), -1, 0)); __m128 test_mm_cvt_pi2ps(__m128 a, __m64 b) { // CHECK-LABEL: test_mm_cvt_pi2ps // CHECK: sitofp <4 x i32> {{%.*}} to <4 x float> return _mm_cvt_pi2ps(a, b); } +TEST_CONSTEXPR(match_m128(_mm_cvt_pi2ps((__m128){-5.0f, +7.0f, -9.0f, +11.0f}, (__m64)(__v2si){-2,+4}), -2.0f, +4.0f, -9.0f, +11.0f)); __m64 test_mm_cvt_ps2pi(__m128 a) { // CHECK-LABEL: test_mm_cvt_ps2pi @@ -168,29 +197,40 @@ __m64 test_mm_cvtpd_pi32(__m128d a) { return _mm_cvtpd_pi32(a); } +__m128 test_mm_cvtpi8_ps(__m64 a) { + // CHECK-LABEL: test_mm_cvtpi8_ps + // CHECK: sitofp <4 x i8> {{%.*}} to <4 x float> + return _mm_cvtpi8_ps(a); +} +TEST_CONSTEXPR(match_m128(_mm_cvtpi8_ps((__m64)(__v8qi){1, 2, 3, 4, 5, 6, 7, 8}), +1.0f, +2.0f, +3.0f, +4.0f)); + __m128 test_mm_cvtpi16_ps(__m64 a) { // CHECK-LABEL: test_mm_cvtpi16_ps // CHECK: sitofp <4 x i16> {{%.*}} to <4 x float> return _mm_cvtpi16_ps(a); } +TEST_CONSTEXPR(match_m128(_mm_cvtpi16_ps((__m64)(__v4hi){-3, +9, -8, +256}), -3.0f, +9.0f, -8.0f, +256.0f)); __m128d test_mm_cvtpi32_pd(__m64 a) { // CHECK-LABEL: test_mm_cvtpi32_pd // CHECK: sitofp <2 x i32> {{%.*}} to <2 x double> return _mm_cvtpi32_pd(a); } +TEST_CONSTEXPR(match_m128d(_mm_cvtpi32_pd((__m64)(__v2si){-10,+17}), -10.0, +17.0)); __m128 test_mm_cvtpi32_ps(__m128 a, __m64 b) { // CHECK-LABEL: test_mm_cvtpi32_ps // CHECK: sitofp <4 x i32> {{%.*}} to <4 x float> return _mm_cvtpi32_ps(a, b); } +TEST_CONSTEXPR(match_m128(_mm_cvtpi32_ps((__m128){+1.0f, -2.0f, +3.0f, +5.0f}, (__m64)(__v2si){+100,-200}), +100.0f, -200.0f, +3.0f, +5.0f)); __m128 test_mm_cvtpi32x2_ps(__m64 a, __m64 b) { // CHECK-LABEL: test_mm_cvtpi32x2_ps // CHECK: sitofp <4 x i32> {{%.*}} to <4 x float> return _mm_cvtpi32x2_ps(a, b); } +TEST_CONSTEXPR(match_m128(_mm_cvtpi32x2_ps((__m64)(__v2si){-8,+7}, (__m64)(__v2si){+100,-200}), -8.0f, +7.0f, +100.0f, -200.0f)); __m64 test_mm_cvtps_pi16(__m128 a) { // CHECK-LABEL: test_mm_cvtps_pi16 @@ -205,17 +245,33 @@ __m64 test_mm_cvtps_pi32(__m128 a) { return _mm_cvtps_pi32(a); } +__m128 test_mm_cvtpu8_ps(__m64 a) { + // CHECK-LABEL: test_mm_cvtpu8_ps + // CHECK: uitofp <4 x i8> {{%.*}} to <4 x float> + return _mm_cvtpu8_ps(a); +} +TEST_CONSTEXPR(match_m128(_mm_cvtpu8_ps((__m64)(__v8qi){8, 7, 6, 5, 4, 3, 2, 1}), 8.0f, 7.0f, 6.0f, 5.0f)); + +__m128 test_mm_cvtpu16_ps(__m64 a) { + // CHECK-LABEL: test_mm_cvtpu16_ps + // CHECK: uitofp <4 x i16> {{%.*}} to <4 x float> + return _mm_cvtpu16_ps(a); +} +TEST_CONSTEXPR(match_m128(_mm_cvtpu16_ps((__m64)(__v4hi){-3, +9, -8, +256}), 65533.0f, 9.0f, 65528.0f, 256.0f)); + __m64 test_mm_cvtsi32_si64(int a) { // CHECK-LABEL: test_mm_cvtsi32_si64 // CHECK: insertelement <2 x i32> return _mm_cvtsi32_si64(a); } +TEST_CONSTEXPR(match_v2si(_mm_cvtsi32_si64(-127), -127, 0)); int test_mm_cvtsi64_si32(__m64 a) { // CHECK-LABEL: test_mm_cvtsi64_si32 // CHECK: extractelement <2 x i32> return _mm_cvtsi64_si32(a); } +TEST_CONSTEXPR(_mm_cvtsi64_si32((__m64)(__v4hi){-2, 0, -1, -1}) == 65534); __m64 test_mm_cvttpd_pi32(__m128d a) { // CHECK-LABEL: test_mm_cvttpd_pi32 @@ -240,11 +296,13 @@ __m64 test_m_from_int(int a) { // CHECK: insertelement <2 x i32> return _m_from_int(a); } +TEST_CONSTEXPR(match_v2si(_m_from_int(255), 255, 0)); __m64 test_m_from_int64(long long a) { // CHECK-LABEL: test_m_from_int64 return _m_from_int64(a); } +TEST_CONSTEXPR(match_v1di(_m_from_int64(-65536), -65536LL)); __m64 test_mm_hadd_pi16(__m64 a, __m64 b) { // CHECK-LABEL: test_mm_hadd_pi16 @@ -343,18 +401,21 @@ __m64 test_mm_mul_su32(__m64 a, __m64 b) { // CHECK: mul <2 x i64> %{{.*}}, %{{.*}} return _mm_mul_su32(a, b); } +TEST_CONSTEXPR(match_m64(_mm_mul_su32((__m64)(__v2si){+1, -2}, (__m64)(__v2si){-10, +8}), 4294967286)); __m64 test_mm_mulhi_pi16(__m64 a, __m64 b) { // CHECK-LABEL: test_mm_mulhi_pi16 // CHECK: call <8 x i16> @llvm.x86.sse2.pmulh.w( return _mm_mulhi_pi16(a, b); } +TEST_CONSTEXPR(match_v4hi(_mm_mulhi_pi16((__m64)(__v4hi){+1, -2, +3, -4}, (__m64)(__v4hi){-10, +8, +6, -4}), -1, -1, 0, 0)); __m64 test_mm_mulhi_pu16(__m64 a, __m64 b) { // CHECK-LABEL: test_mm_mulhi_pu16 // CHECK: call <8 x i16> @llvm.x86.sse2.pmulhu.w( return _mm_mulhi_pu16(a, b); } +TEST_CONSTEXPR(match_v4hi(_mm_mulhi_pu16((__m64)(__v4hi){+1, -2, +3, -4}, (__m64)(__v4hi){-10, +8, +6, -4}), 0, 7, 0, -8)); __m64 test_mm_mulhrs_pi16(__m64 a, __m64 b) { // CHECK-LABEL: test_mm_mulhrs_pi16 @@ -367,12 +428,14 @@ __m64 test_mm_mullo_pi16(__m64 a, __m64 b) { // CHECK: mul <4 x i16> {{%.*}}, {{%.*}} return _mm_mullo_pi16(a, b); } +TEST_CONSTEXPR(match_v4hi(_mm_mullo_pi16((__m64)(__v4hi){+1, -2, +3, -4}, (__m64)(__v4hi){-10, +8, +6, -4}), -10, -16, +18, +16)); __m64 test_mm_or_si64(__m64 a, __m64 b) { // CHECK-LABEL: test_mm_or_si64 // CHECK: or <1 x i64> {{%.*}}, {{%.*}} return _mm_or_si64(a, b); } +TEST_CONSTEXPR(match_v4hi(_mm_or_si64((__m64)(__v4hi){0, -1, 0, -1}, (__m64)(__v4hi){0, 0, -1, -1}), 0, -1, -1, -1)); __m64 test_mm_packs_pi16(__m64 a, __m64 b) { // CHECK-LABEL: test_mm_packs_pi16 @@ -554,18 +617,35 @@ __m64 test_mm_slli_pi16(__m64 a) { // CHECK: call <8 x i16> @llvm.x86.sse2.pslli.w( return _mm_slli_pi16(a, 3); } +TEST_CONSTEXPR(match_v4hi(_mm_slli_pi16((__m64)(__v4hi){0, 1, 2, 3}, 0), 0, 1, 2, 3)); +TEST_CONSTEXPR(match_v4hi(_mm_slli_pi16((__m64)(__v4hi){0, 1, 2, 3}, 1), 0, 0x2, 0x4, 0x6)); +TEST_CONSTEXPR(match_v4hi(_mm_slli_pi16((__m64)(__v4hi){0, 1, 2, 3}, 15), 0, 0x8000, 0x0, 0x8000)); +TEST_CONSTEXPR(match_v4hi(_mm_slli_pi16((__m64)(__v4hi){0, 1, 2, 3}, 16), 0, 0, 0, 0)); +TEST_CONSTEXPR(match_v4hi(_mm_slli_pi16((__m64)(__v4hi){0, 1, 2, 3}, 17), 0, 0, 0, 0)); __m64 test_mm_slli_pi32(__m64 a) { // CHECK-LABEL: test_mm_slli_pi32 // CHECK: call <4 x i32> @llvm.x86.sse2.pslli.d( return _mm_slli_pi32(a, 3); } +TEST_CONSTEXPR(match_v2si(_mm_slli_pi32((__m64)(__v2si){0, 1}, 0), 0, 1)); +TEST_CONSTEXPR(match_v2si(_mm_slli_pi32((__m64)(__v2si){0, 1}, 1), 0, 0x2)); +TEST_CONSTEXPR(match_v2si(_mm_slli_pi32((__m64)(__v2si){1, 2}, 2), 0x4, 0x8)); +TEST_CONSTEXPR(match_v2su(_mm_slli_pi32((__m64)(__v2su){1, 1}, 31), 0x80000000, 0x80000000)); +TEST_CONSTEXPR(match_v2si(_mm_slli_pi32((__m64)(__v2si){1, 1}, 32), 0, 0)); +TEST_CONSTEXPR(match_v2si(_mm_slli_pi32((__m64)(__v2si){1, 1}, 33), 0, 0)); __m64 test_mm_slli_si64(__m64 a) { // CHECK-LABEL: test_mm_slli_si64 // CHECK: call <2 x i64> @llvm.x86.sse2.pslli.q( return _mm_slli_si64(a, 3); } +TEST_CONSTEXPR(match_v1di(_mm_slli_si64((__m64)(__v1di){0}, 0), 0)); +TEST_CONSTEXPR(match_v1di(_mm_slli_si64((__m64)(__v1di){1}, 1), 0x2)); +TEST_CONSTEXPR(match_v1di(_mm_slli_si64((__m64)(__v1di){2}, 2), 0x8)); +TEST_CONSTEXPR(match_v1du(_mm_slli_si64((__m64)(__v1du){1}, 63), 0x8000000000000000ULL)); +TEST_CONSTEXPR(match_v1di(_mm_slli_si64((__m64)(__v1di){1}, 64), 0)); +TEST_CONSTEXPR(match_v1di(_mm_slli_si64((__m64)(__v1di){1}, 65), 0)); __m64 test_mm_sra_pi16(__m64 a, __m64 b) { // CHECK-LABEL: test_mm_sra_pi16 @@ -584,12 +664,25 @@ __m64 test_mm_srai_pi16(__m64 a) { // CHECK: call <8 x i16> @llvm.x86.sse2.psrai.w( return _mm_srai_pi16(a, 3); } +TEST_CONSTEXPR(match_v4hi(_mm_srai_pi16((__m64)(__v4hi){-1, 1, 2, 3}, 1), -1, 0, 1, 1)); +TEST_CONSTEXPR(match_v4hi(_mm_srai_pi16((__m64)(__v4hi){-32768, -1, 1, 2}, 15), -1, -1, 0, 0)); +TEST_CONSTEXPR(match_v4hi(_mm_srai_pi16((__m64)(__v4hi){-32768, -1, 2, 3}, 16), -1, -1, 0, 0)); +TEST_CONSTEXPR(match_v4hi(_mm_srai_pi16((__m64)(__v4hi){-1, 1, 2, 3}, 16), -1, 0, 0, 0)); +TEST_CONSTEXPR(match_v4hi(_mm_srai_pi16((__m64)(__v4hi){-1, 1, 2, 3}, 17), -1, 0, 0, 0)); +TEST_CONSTEXPR(match_v4hi(_mm_srai_pi16((__m64)(__v4hi){-1, 1, -42, -32768}, 100), -1, 0, -1, -1)); +TEST_CONSTEXPR(match_v4hi(_mm_srai_pi16((__m64)(__v4hi){-1, 1, 2, 3}, 200), -1, 0, 0, 0)); +TEST_CONSTEXPR(match_v4hi(_mm_srai_pi16((__m64)(__v4hi){-32768, 32767, -2, 0}, 1), -16384, 16383, -1, 0)); +TEST_CONSTEXPR(match_v4hi(_mm_srai_pi16((__m64)(__v4hi){-32768, 32767, -2, 0}, 15), -1, 0, -1, 0)); +TEST_CONSTEXPR(match_v4hi(_mm_srai_pi16((__m64)(__v4hi){-32768, 32767, -2, 0}, 30), -1, 0, -1, 0)); __m64 test_mm_srai_pi32(__m64 a) { // CHECK-LABEL: test_mm_srai_pi32 // CHECK: call <4 x i32> @llvm.x86.sse2.psrai.d( return _mm_srai_pi32(a, 3); } +TEST_CONSTEXPR(match_v2si(_mm_srai_pi32((__m64)(__v2si){-32768, 32767}, 30), -1, 0)); +TEST_CONSTEXPR(match_v2si(_mm_srai_pi32((__m64)(__v2si){-2, 20}, 1), -1, 0xa)); +TEST_CONSTEXPR(match_v2si(_mm_srai_pi32((__m64)(__v2si){-1, 20}, 1), -1, 0xa)); __m64 test_mm_srl_pi16(__m64 a, __m64 b) { // CHECK-LABEL: test_mm_srl_pi16 @@ -614,18 +707,25 @@ __m64 test_mm_srli_pi16(__m64 a) { // CHECK: call <8 x i16> @llvm.x86.sse2.psrli.w( return _mm_srli_pi16(a, 3); } +TEST_CONSTEXPR(match_v4hi(_mm_srli_pi16((__m64)(__v4hi){0, 1, 2, 3}, 1), 0, 0x0, 0x1, 0x1)); +TEST_CONSTEXPR(match_v4hi(_mm_srli_pi16((__m64)(__v4hi){0, 1, 2, 3}, 1), 0, 0x0, 0x1, 0x1)); +TEST_CONSTEXPR(match_v4hi(_mm_srli_pi16((__m64)(__v4hi){-1, 0, 0, 0}, 1), 0x7fff, 0, 0, 0)); +TEST_CONSTEXPR(match_v4hi(_mm_srli_pi16((__m64)(__v4hi){0, 1, 2, 3}, 16), 0, 0, 0, 0)); +TEST_CONSTEXPR(match_v4hi(_mm_srli_pi16((__m64)(__v4hi){0, 1, 2, 3}, 17), 0, 0, 0, 0)); __m64 test_mm_srli_pi32(__m64 a) { // CHECK-LABEL: test_mm_srli_pi32 // CHECK: call <4 x i32> @llvm.x86.sse2.psrli.d( return _mm_srli_pi32(a, 3); } +TEST_CONSTEXPR(match_v2si(_mm_srli_pi32((__m64)(__v2si){1, 1025}, 2), 0x0, 0x100)); __m64 test_mm_srli_si64(__m64 a) { // CHECK-LABEL: test_mm_srli_si64 // CHECK: call <2 x i64> @llvm.x86.sse2.psrli.q( return _mm_srli_si64(a, 3); } +TEST_CONSTEXPR(match_v1di(_mm_srli_si64((__m64)(__v1di){1025}, 2), 0x100)); void test_mm_stream_pi(__m64 *p, __m64 a) { // CHECK-LABEL: test_mm_stream_pi @@ -644,98 +744,115 @@ __m64 test_mm_sub_pi8(__m64 a, __m64 b) { // CHECK: sub <8 x i8> {{%.*}}, {{%.*}} return _mm_sub_pi8(a, b); } +TEST_CONSTEXPR(match_v8qi(_mm_sub_pi8((__m64)(__v8qs){-3, +2, -1, 0, +1, -2, +3, -4}, (__m64)(__v8qs){-18, +16, -14, +12, -10, +8, +6, -4}), +15, -14, +13, -12, +11, -10, -3, 0)); __m64 test_mm_sub_pi16(__m64 a, __m64 b) { // CHECK-LABEL: test_mm_sub_pi16 // CHECK: sub <4 x i16> {{%.*}}, {{%.*}} return _mm_sub_pi16(a, b); } +TEST_CONSTEXPR(match_v4hi(_mm_sub_pi16((__m64)(__v4hi){+1, -2, +3, -4}, (__m64)(__v4hi){-10, +8, +6, -4}), +11, -10, -3, 0)); __m64 test_mm_sub_pi32(__m64 a, __m64 b) { // CHECK-LABEL: test_mm_sub_pi32 // CHECK: sub <2 x i32> {{%.*}}, {{%.*}} return _mm_sub_pi32(a, b); } +TEST_CONSTEXPR(match_v2si(_mm_sub_pi32((__m64)(__v2si){+5, -3}, (__m64)(__v2si){-9, +8}), +14, -11)); __m64 test_mm_sub_si64(__m64 a, __m64 b) { // CHECK-LABEL: test_mm_sub_si64 // CHECK: sub i64 {{%.*}}, {{%.*}} return _mm_sub_si64(a, b); } +TEST_CONSTEXPR(match_v1di(_mm_sub_si64((__m64)(__v1di){+42}, (__m64)(__v1di){-100}), +142)); __m64 test_mm_subs_pi8(__m64 a, __m64 b) { // CHECK-LABEL: test_mm_subs_pi8 // CHECK: call <8 x i8> @llvm.ssub.sat.v8i8( return _mm_subs_pi8(a, b); } +TEST_CONSTEXPR(match_v8qi(_mm_subs_pi8((__m64)(__v8qs){+100, +50, -100, +20, +80, -50, +120, -20}, (__m64)(__v8qs){-50, -80, +50, -110, -60, +30, -20, +10}), +127, +127, -128, +127, +127, -80, +127, -30)); __m64 test_mm_subs_pi16(__m64 a, __m64 b) { // CHECK-LABEL: test_mm_subs_pi16 // CHECK: call <4 x i16> @llvm.ssub.sat.v4i16( return _mm_subs_pi16(a, b); } +TEST_CONSTEXPR(match_v4hi(_mm_subs_pi16((__m64)(__v4hi){+32000, -32000, +32000, -32000}, (__m64)(__v4hi){-800, +800, +800, -800}), +32767, -32768, +31200, -31200)); __m64 test_mm_subs_pu8(__m64 a, __m64 b) { // CHECK-LABEL: test_mm_subs_pu8 // CHECK: call <8 x i8> @llvm.usub.sat.v8i8( return _mm_subs_pu8(a, b); } +TEST_CONSTEXPR(match_v8qu(_mm_subs_pu8((__m64)(__v8qu){0, +1, +2, +3, +180, +250, +120, +200}, (__m64)(__v8qu){0, +1, +1, +255, +200, +30, +200, +10}), 0, 0, +1, 0, 0, +220, 0, +190)); __m64 test_mm_subs_pu16(__m64 a, __m64 b) { // CHECK-LABEL: test_mm_subs_pu16 // CHECK: call <4 x i16> @llvm.usub.sat.v4i16( return _mm_subs_pu16(a, b); } +TEST_CONSTEXPR(match_v4hu(_mm_subs_pu16((__m64)(__v4hu){+0, +1, +32000, +33000}, (__m64)(__v4hu){0, +65535, +800, +34000}), 0, 0, +31200, 0)); int test_m_to_int(__m64 a) { // CHECK-LABEL: test_m_to_int // CHECK: extractelement <2 x i32> return _m_to_int(a); } +TEST_CONSTEXPR(_m_to_int((__m64)(__v4hi){0, -2, -1, -1}) == -131072); long long test_m_to_int64(__m64 a) { // CHECK-LABEL: test_m_to_int64 return _m_to_int64(a); } +TEST_CONSTEXPR(_m_to_int64((__m64)(__v4hi){0, -2, 0, -1}) == -281470681874432LL); __m64 test_mm_unpackhi_pi8(__m64 a, __m64 b) { // CHECK-LABEL: test_mm_unpackhi_pi8 // CHECK: shufflevector <8 x i8> {{%.*}}, <8 x i8> {{%.*}}, <8 x i32> <i32 4, i32 12, i32 5, i32 13, i32 6, i32 14, i32 7, i32 15> return _mm_unpackhi_pi8(a, b); } +TEST_CONSTEXPR(match_v8qi(_mm_unpackhi_pi8((__m64)(__v8qi){0, 1, 2, 3, 4, 5, 6, 7}, (__m64)(__v8qi){8, 9, 10, 11, 12, 13, 14, 15}), 4, 12, 5, 13, 6, 14, 7, 15)); __m64 test_mm_unpackhi_pi16(__m64 a, __m64 b) { // CHECK-LABEL: test_mm_unpackhi_pi16 // CHECK: shufflevector <4 x i16> {{%.*}}, <4 x i16> {{%.*}}, <4 x i32> <i32 2, i32 6, i32 3, i32 7> return _mm_unpackhi_pi16(a, b); } +TEST_CONSTEXPR(match_v4hi(_mm_unpackhi_pi16((__m64)(__v4hi){0, 1, 2, 3}, (__m64)(__v4hi){ 4, 5, 6, 7}), 2, 6, 3, 7)); __m64 test_mm_unpackhi_pi32(__m64 a, __m64 b) { // CHECK-LABEL: test_mm_unpackhi_pi32 // CHECK: shufflevector <2 x i32> {{%.*}}, <2 x i32> {{%.*}}, <2 x i32> <i32 1, i32 3> return _mm_unpackhi_pi32(a, b); } +TEST_CONSTEXPR(match_v2si(_mm_unpackhi_pi32((__m64)(__v2si){0, 1}, (__m64)(__v2si){2, 3}), 1, 3)); __m64 test_mm_unpacklo_pi8(__m64 a, __m64 b) { // CHECK-LABEL: test_mm_unpacklo_pi8 // CHECK: shufflevector <8 x i8> {{%.*}}, <8 x i8> {{%.*}}, <8 x i32> <i32 0, i32 8, i32 1, i32 9, i32 2, i32 10, i32 3, i32 11> return _mm_unpacklo_pi8(a, b); } +TEST_CONSTEXPR(match_v8qi(_mm_unpacklo_pi8((__m64)(__v8qi){0, 1, 2, 3, 4, 5, 6, 7}, (__m64)(__v8qi){8, 9, 10, 11, 12, 13, 14, 15}), 0, 8, 1, 9, 2, 10, 3, 11)); __m64 test_mm_unpacklo_pi16(__m64 a, __m64 b) { // CHECK-LABEL: test_mm_unpacklo_pi16 // CHECK: shufflevector <4 x i16> {{%.*}}, <4 x i16> {{%.*}}, <4 x i32> <i32 0, i32 4, i32 1, i32 5> return _mm_unpacklo_pi16(a, b); } +TEST_CONSTEXPR(match_v4hi(_mm_unpacklo_pi16((__m64)(__v4hi){0, 1, 2, 3}, (__m64)(__v4hi){ 4, 5, 6, 7}), 0, 4, 1, 5)); __m64 test_mm_unpacklo_pi32(__m64 a, __m64 b) { // CHECK-LABEL: test_mm_unpacklo_pi32 // CHECK: shufflevector <2 x i32> {{%.*}}, <2 x i32> {{%.*}}, <2 x i32> <i32 0, i32 2> return _mm_unpacklo_pi32(a, b); } +TEST_CONSTEXPR(match_v2si(_mm_unpacklo_pi32((__m64)(__v2si){0, 1}, (__m64)(__v2si){2, 3}), 0, 2)); __m64 test_mm_xor_si64(__m64 a, __m64 b) { // CHECK-LABEL: test_mm_xor_si64 // CHECK: xor <1 x i64> {{%.*}}, {{%.*}} return _mm_xor_si64(a, b); } +TEST_CONSTEXPR(match_v4hi(_mm_xor_si64((__m64)(__v4hi){0, -1, 0, -1}, (__m64)(__v4hi){0, 0, -1, -1}), 0, -1, -1, 0)); diff --git a/clang/test/CodeGen/X86/popcnt-builtins.c b/clang/test/CodeGen/X86/popcnt-builtins.c index b27bc3f..fdd1a4c 100644 --- a/clang/test/CodeGen/X86/popcnt-builtins.c +++ b/clang/test/CodeGen/X86/popcnt-builtins.c @@ -3,24 +3,37 @@ // RUN: %clang_cc1 -x c -ffreestanding %s -triple=x86_64-apple-darwin -no-enable-noundef-analysis -emit-llvm -o - | FileCheck %s // RUN: %clang_cc1 -x c++ -std=c++11 -ffreestanding %s -triple=x86_64-apple-darwin -no-enable-noundef-analysis -emit-llvm -o - | FileCheck %s +// RUN: %clang_cc1 -x c -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +popcnt -no-enable-noundef-analysis -emit-llvm -o - -fexperimental-new-constant-interpreter | FileCheck %s --check-prefixes=CHECK,CHECK-POPCNT +// RUN: %clang_cc1 -x c++ -std=c++11 -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +popcnt -no-enable-noundef-analysis -emit-llvm -o - -fexperimental-new-constant-interpreter | FileCheck %s --check-prefixes=CHECK,CHECK-POPCNT +// RUN: %clang_cc1 -x c -ffreestanding %s -triple=x86_64-apple-darwin -no-enable-noundef-analysis -emit-llvm -o - -fexperimental-new-constant-interpreter | FileCheck %s +// RUN: %clang_cc1 -x c++ -std=c++11 -ffreestanding %s -triple=x86_64-apple-darwin -no-enable-noundef-analysis -emit-llvm -o - -fexperimental-new-constant-interpreter | FileCheck %s + + #include <x86intrin.h> +#include "builtin_test_helpers.h" #ifdef __POPCNT__ int test_mm_popcnt_u32(unsigned int __X) { //CHECK-POPCNT: call i32 @llvm.ctpop.i32 return _mm_popcnt_u32(__X); } +TEST_CONSTEXPR(_mm_popcnt_u32(0x00000000) == 0); +TEST_CONSTEXPR(_mm_popcnt_u32(0x000000F0) == 4); #endif int test_popcnt32(unsigned int __X) { //CHECK: call i32 @llvm.ctpop.i32 return _popcnt32(__X); } +TEST_CONSTEXPR(_popcnt32(0x00000000) == 0); +TEST_CONSTEXPR(_popcnt32(0x100000F0) == 5); int test__popcntd(unsigned int __X) { //CHECK: call i32 @llvm.ctpop.i32 return __popcntd(__X); } +TEST_CONSTEXPR(__popcntd(0x00000000) == 0); +TEST_CONSTEXPR(__popcntd(0x00F000F0) == 8); #ifdef __x86_64__ #ifdef __POPCNT__ @@ -28,42 +41,21 @@ long long test_mm_popcnt_u64(unsigned long long __X) { //CHECK-POPCNT: call i64 @llvm.ctpop.i64 return _mm_popcnt_u64(__X); } +TEST_CONSTEXPR(_mm_popcnt_u64(0x0000000000000000ULL) == 0); +TEST_CONSTEXPR(_mm_popcnt_u64(0xF000000000000001ULL) == 5); #endif long long test_popcnt64(unsigned long long __X) { //CHECK: call i64 @llvm.ctpop.i64 return _popcnt64(__X); } +TEST_CONSTEXPR(_popcnt64(0x0000000000000000ULL) == 0); +TEST_CONSTEXPR(_popcnt64(0xF00000F000000001ULL) == 9); long long test__popcntq(unsigned long long __X) { //CHECK: call i64 @llvm.ctpop.i64 return __popcntq(__X); } -#endif - -// Test constexpr handling. -#if defined(__cplusplus) && (__cplusplus >= 201103L) -#if defined(__POPCNT__) -char ctpop32_0[_mm_popcnt_u32(0x00000000) == 0 ? 1 : -1]; -char ctpop32_1[_mm_popcnt_u32(0x000000F0) == 4 ? 1 : -1]; -#endif - -char popcnt32_0[_popcnt32(0x00000000) == 0 ? 1 : -1]; -char popcnt32_1[_popcnt32(0x100000F0) == 5 ? 1 : -1]; - -char popcntd_0[__popcntd(0x00000000) == 0 ? 1 : -1]; -char popcntd_1[__popcntd(0x00F000F0) == 8 ? 1 : -1]; - -#ifdef __x86_64__ -#if defined(__POPCNT__) -char ctpop64_0[_mm_popcnt_u64(0x0000000000000000ULL) == 0 ? 1 : -1]; -char ctpop64_1[_mm_popcnt_u64(0xF000000000000001ULL) == 5 ? 1 : -1]; -#endif - -char popcnt64_0[_popcnt64(0x0000000000000000ULL) == 0 ? 1 : -1]; -char popcnt64_1[_popcnt64(0xF00000F000000001ULL) == 9 ? 1 : -1]; - -char popcntq_0[__popcntq(0x0000000000000000ULL) == 0 ? 1 : -1]; -char popcntq_1[__popcntq(0xF000010000300001ULL) == 8 ? 1 : -1]; -#endif +TEST_CONSTEXPR(__popcntq(0x0000000000000000ULL) == 0); +TEST_CONSTEXPR(__popcntq(0xF000010000300001ULL) == 8); #endif diff --git a/clang/test/CodeGen/X86/rot-intrinsics.c b/clang/test/CodeGen/X86/rot-intrinsics.c index 5da300b..338b06fb 100644 --- a/clang/test/CodeGen/X86/rot-intrinsics.c +++ b/clang/test/CodeGen/X86/rot-intrinsics.c @@ -5,14 +5,22 @@ // RUN: %clang_cc1 -x c -fms-extensions -fms-compatibility -fms-compatibility-version=17.00 -ffreestanding %s -triple=i686-windows-msvc -target-feature +sse2 -no-enable-noundef-analysis -emit-llvm -o - -Wall -Werror | FileCheck %s --check-prefixes CHECK,CHECK-32BIT-LONG // RUN: %clang_cc1 -x c -fms-extensions -fms-compatibility -fms-compatibility-version=17.00 -ffreestanding %s -triple=x86_64-windows-msvc -target-feature +sse2 -no-enable-noundef-analysis -emit-llvm -o - -Wall -Werror | FileCheck %s --check-prefixes CHECK,CHECK-32BIT-LONG -// RUN: %clang_cc1 -x c++ -std=c++11 -ffreestanding -triple i686--linux -no-enable-noundef-analysis -emit-llvm %s -o - | FileCheck %s --check-prefixes CHECK,CHECK-32BIT-LONG -// RUN: %clang_cc1 -x c++ -std=c++11 -ffreestanding -triple x86_64--linux -no-enable-noundef-analysis -emit-llvm %s -o - | FileCheck %s --check-prefixes CHECK,CHECK-64BIT-LONG -// RUN: %clang_cc1 -x c++ -std=c++11 -fms-extensions -fms-compatibility -ffreestanding %s -triple=i686-windows-msvc -target-feature +sse2 -no-enable-noundef-analysis -emit-llvm -o - -Wall -Werror | FileCheck %s --check-prefixes CHECK,CHECK-32BIT-LONG -// RUN: %clang_cc1 -x c++ -std=c++11 -fms-extensions -fms-compatibility -ffreestanding %s -triple=x86_64-windows-msvc -target-feature +sse2 -no-enable-noundef-analysis -emit-llvm -o - -Wall -Werror | FileCheck %s --check-prefixes CHECK,CHECK-32BIT-LONG -// RUN: %clang_cc1 -x c++ -std=c++11 -fms-extensions -fms-compatibility -fms-compatibility-version=17.00 -ffreestanding %s -triple=i686-windows-msvc -target-feature +sse2 -no-enable-noundef-analysis -emit-llvm -o - -Wall -Werror | FileCheck %s --check-prefixes CHECK,CHECK-32BIT-LONG -// RUN: %clang_cc1 -x c++ -std=c++11 -fms-extensions -fms-compatibility -fms-compatibility-version=17.00 -ffreestanding %s -triple=x86_64-windows-msvc -target-feature +sse2 -no-enable-noundef-analysis -emit-llvm -o - -Wall -Werror | FileCheck %s --check-prefixes CHECK,CHECK-32BIT-LONG +// RUN: %clang_cc1 -x c++ -ffreestanding -triple i686--linux -no-enable-noundef-analysis -emit-llvm %s -o - | FileCheck %s --check-prefixes CHECK,CHECK-32BIT-LONG +// RUN: %clang_cc1 -x c++ -ffreestanding -triple x86_64--linux -no-enable-noundef-analysis -emit-llvm %s -o - | FileCheck %s --check-prefixes CHECK,CHECK-64BIT-LONG +// RUN: %clang_cc1 -x c++ -fms-extensions -fms-compatibility -ffreestanding %s -triple=i686-windows-msvc -target-feature +sse2 -no-enable-noundef-analysis -emit-llvm -o - -Wall -Werror | FileCheck %s --check-prefixes CHECK,CHECK-32BIT-LONG +// RUN: %clang_cc1 -x c++ -fms-extensions -fms-compatibility -ffreestanding %s -triple=x86_64-windows-msvc -target-feature +sse2 -no-enable-noundef-analysis -emit-llvm -o - -Wall -Werror | FileCheck %s --check-prefixes CHECK,CHECK-32BIT-LONG +// RUN: %clang_cc1 -x c++ -fms-extensions -fms-compatibility -fms-compatibility-version=17.00 -ffreestanding %s -triple=i686-windows-msvc -target-feature +sse2 -no-enable-noundef-analysis -emit-llvm -o - -Wall -Werror | FileCheck %s --check-prefixes CHECK,CHECK-32BIT-LONG +// RUN: %clang_cc1 -x c++ -fms-extensions -fms-compatibility -fms-compatibility-version=17.00 -ffreestanding %s -triple=x86_64-windows-msvc -target-feature +sse2 -no-enable-noundef-analysis -emit-llvm -o - -Wall -Werror | FileCheck %s --check-prefixes CHECK,CHECK-32BIT-LONG + +// RUN: %clang_cc1 -x c++ -ffreestanding -triple i686--linux -no-enable-noundef-analysis -emit-llvm %s -o - -fexperimental-new-constant-interpreter | FileCheck %s --check-prefixes CHECK,CHECK-32BIT-LONG +// RUN: %clang_cc1 -x c++ -ffreestanding -triple x86_64--linux -no-enable-noundef-analysis -emit-llvm %s -o - -fexperimental-new-constant-interpreter | FileCheck %s --check-prefixes CHECK,CHECK-64BIT-LONG +// RUN: %clang_cc1 -x c++ -fms-extensions -fms-compatibility -ffreestanding %s -triple=i686-windows-msvc -target-feature +sse2 -no-enable-noundef-analysis -emit-llvm -o - -Wall -Werror -fexperimental-new-constant-interpreter | FileCheck %s --check-prefixes CHECK,CHECK-32BIT-LONG +// RUN: %clang_cc1 -x c++ -fms-extensions -fms-compatibility -ffreestanding %s -triple=x86_64-windows-msvc -target-feature +sse2 -no-enable-noundef-analysis -emit-llvm -o - -Wall -Werror -fexperimental-new-constant-interpreter | FileCheck %s --check-prefixes CHECK,CHECK-32BIT-LONG +// RUN: %clang_cc1 -x c++ -fms-extensions -fms-compatibility -fms-compatibility-version=17.00 -ffreestanding %s -triple=i686-windows-msvc -target-feature +sse2 -no-enable-noundef-analysis -emit-llvm -o - -Wall -Werror -fexperimental-new-constant-interpreter | FileCheck %s --check-prefixes CHECK,CHECK-32BIT-LONG +// RUN: %clang_cc1 -x c++ -fms-extensions -fms-compatibility -fms-compatibility-version=17.00 -ffreestanding %s -triple=x86_64-windows-msvc -target-feature +sse2 -no-enable-noundef-analysis -emit-llvm -o - -Wall -Werror -fexperimental-new-constant-interpreter | FileCheck %s --check-prefixes CHECK,CHECK-32BIT-LONG #include <x86intrin.h> +#include "builtin_test_helpers.h" unsigned char test__rolb(unsigned char value, int shift) { // CHECK-LABEL: test__rolb @@ -20,6 +28,7 @@ unsigned char test__rolb(unsigned char value, int shift) { // CHECK: ret i8 [[R]] return __rolb(value, shift); } +TEST_CONSTEXPR(__rolb(0x01, 5) == 0x20); unsigned short test__rolw(unsigned short value, int shift) { // CHECK-LABEL: test__rolw @@ -27,6 +36,7 @@ unsigned short test__rolw(unsigned short value, int shift) { // CHECK: ret i16 [[R]] return __rolw(value, shift); } +TEST_CONSTEXPR(__rolw(0x3210, 11) == 0x8190); unsigned int test__rold(unsigned int value, int shift) { // CHECK-LABEL: test__rold @@ -34,6 +44,7 @@ unsigned int test__rold(unsigned int value, int shift) { // CHECK: ret i32 [[R]] return __rold(value, shift); } +TEST_CONSTEXPR(__rold(0x76543210, 22) == 0x841D950C); #if defined(__x86_64__) unsigned long test__rolq(unsigned long value, int shift) { @@ -42,6 +53,7 @@ unsigned long test__rolq(unsigned long value, int shift) { // CHECK-LONG: ret i64 [[R]] return __rolq(value, shift); } +TEST_CONSTEXPR(__rolq(0xFEDCBA9876543210ULL, 55) == 0x087F6E5D4C3B2A19ULL); #endif unsigned char test__rorb(unsigned char value, int shift) { @@ -50,6 +62,7 @@ unsigned char test__rorb(unsigned char value, int shift) { // CHECK: ret i8 [[R]] return __rorb(value, shift); } +TEST_CONSTEXPR(__rorb(0x01, 5) == 0x08); unsigned short test__rorw(unsigned short value, int shift) { // CHECK-LABEL: test__rorw @@ -57,6 +70,7 @@ unsigned short test__rorw(unsigned short value, int shift) { // CHECK: ret i16 [[R]] return __rorw(value, shift); } +TEST_CONSTEXPR(__rorw(0x3210, 11) == 0x4206); unsigned int test__rord(unsigned int value, int shift) { // CHECK-LABEL: test__rord @@ -64,6 +78,7 @@ unsigned int test__rord(unsigned int value, int shift) { // CHECK: ret i32 [[R]] return __rord(value, shift); } +TEST_CONSTEXPR(__rord(0x76543210, 22) == 0x50C841D9); #if defined(__x86_64__) unsigned long test__rorq(unsigned long value, int shift) { @@ -72,6 +87,7 @@ unsigned long test__rorq(unsigned long value, int shift) { // CHECK-LONG: ret i64 [[R]] return __rorq(value, shift); } +TEST_CONSTEXPR(__rorq(0xFEDCBA9876543210ULL, 55) == 0xB97530ECA86421FDULL); #endif unsigned short test_rotwl(unsigned short value, int shift) { @@ -80,6 +96,7 @@ unsigned short test_rotwl(unsigned short value, int shift) { // CHECK: ret i16 [[R]] return _rotwl(value, shift); } +TEST_CONSTEXPR(_rotwl(0x3210, 4) == 0x2103); unsigned int test_rotl(unsigned int value, int shift) { // CHECK-LABEL: test_rotl @@ -87,6 +104,7 @@ unsigned int test_rotl(unsigned int value, int shift) { // CHECK: ret i32 [[R]] return _rotl(value, shift); } +TEST_CONSTEXPR(_rotl(0x76543210, 8) == 0x54321076); unsigned long test_lrotl(unsigned long value, int shift) { // CHECK-32BIT-LONG-LABEL: test_lrotl @@ -98,6 +116,11 @@ unsigned long test_lrotl(unsigned long value, int shift) { // CHECK-64BIT-LONG: ret i64 [[R]] return _lrotl(value, shift); } +#if defined(__LP64__) && !defined(_MSC_VER) +TEST_CONSTEXPR(_lrotl(0xFEDCBA9876543210ULL, 55) == 0x087F6E5D4C3B2A19ULL); +#else +TEST_CONSTEXPR(_lrotl(0x76543210, 22) == 0x841D950C); +#endif unsigned short test_rotwr(unsigned short value, int shift) { @@ -106,6 +129,7 @@ unsigned short test_rotwr(unsigned short value, int shift) { // CHECK: ret i16 [[R]] return _rotwr(value, shift); } +TEST_CONSTEXPR(_rotwr(0x3210, 4) == 0x0321); unsigned int test_rotr(unsigned int value, int shift) { // CHECK-LABEL: test_rotr @@ -113,6 +137,7 @@ unsigned int test_rotr(unsigned int value, int shift) { // CHECK: ret i32 [[R]] return _rotr(value, shift); } +TEST_CONSTEXPR(_rotr(0x76543210, 8) == 0x10765432); unsigned long test_lrotr(unsigned long value, int shift) { // CHECK-32BIT-LONG-LABEL: test_lrotr @@ -124,34 +149,9 @@ unsigned long test_lrotr(unsigned long value, int shift) { // CHECK-64BIT-LONG: ret i64 [[R]] return _lrotr(value, shift); } - -// Test constexpr handling. -#if defined(__cplusplus) && (__cplusplus >= 201103L) - -char rolb_0[__rolb(0x01, 5) == 0x20 ? 1 : -1]; -char rolw_0[__rolw(0x3210, 11) == 0x8190 ? 1 : -1]; -char rold_0[__rold(0x76543210, 22) == 0x841D950C ? 1 : -1]; - -char rorb_0[__rorb(0x01, 5) == 0x08 ? 1 : -1]; -char rorw_0[__rorw(0x3210, 11) == 0x4206 ? 1 : -1]; -char rord_0[__rord(0x76543210, 22) == 0x50C841D9 ? 1 : -1]; - -#if defined(__x86_64__) -char rolq_0[__rolq(0xFEDCBA9876543210ULL, 55) == 0x087F6E5D4C3B2A19ULL ? 1 : -1]; -char rorq_0[__rorq(0xFEDCBA9876543210ULL, 55) == 0xB97530ECA86421FDULL ? 1 : -1]; -#endif - -char rotwl_0[_rotwl(0x3210, 4) == 0x2103 ? 1 : -1]; -char rotwr_0[_rotwr(0x3210, 4) == 0x0321 ? 1 : -1]; -char rotl_0[_rotl(0x76543210, 8) == 0x54321076 ? 1 : -1]; -char rotr_0[_rotr(0x76543210, 8) == 0x10765432 ? 1 : -1]; - #if defined(__LP64__) && !defined(_MSC_VER) -char lrotl_0[_lrotl(0xFEDCBA9876543210ULL, 55) == 0x087F6E5D4C3B2A19ULL ? 1 : -1]; -char lrotr_0[_lrotr(0xFEDCBA9876543210ULL, 55) == 0xB97530ECA86421FDULL ? 1 : -1]; +TEST_CONSTEXPR(_lrotr(0xFEDCBA9876543210ULL, 55) == 0xB97530ECA86421FDULL); #else -char lrotl_0[_lrotl(0x76543210, 22) == 0x841D950C ? 1 : -1]; -char lrotr_0[_lrotr(0x76543210, 22) == 0x50C841D9 ? 1 : -1]; +TEST_CONSTEXPR(_lrotr(0x76543210, 22) == 0x50C841D9); #endif -#endif diff --git a/clang/test/CodeGen/X86/sse-builtins.c b/clang/test/CodeGen/X86/sse-builtins.c index 104bfea..3bad342 100644 --- a/clang/test/CodeGen/X86/sse-builtins.c +++ b/clang/test/CodeGen/X86/sse-builtins.c @@ -3,6 +3,11 @@ // RUN: %clang_cc1 -x c++ -flax-vector-conversions=none -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +sse -emit-llvm -o - -Wall -Werror | FileCheck %s // RUN: %clang_cc1 -x c++ -flax-vector-conversions=none -fms-extensions -fms-compatibility -ffreestanding %s -triple=x86_64-windows-msvc -target-feature +sse -emit-llvm -o - -Wall -Werror | FileCheck %s +// RUN: %clang_cc1 -x c -flax-vector-conversions=none -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +sse -emit-llvm -o - -Wall -Werror -fexperimental-new-constant-interpreter | FileCheck %s +// RUN: %clang_cc1 -x c -flax-vector-conversions=none -fms-extensions -fms-compatibility -ffreestanding %s -triple=x86_64-windows-msvc -target-feature +sse -emit-llvm -o - -Wall -Werror -fexperimental-new-constant-interpreter | FileCheck %s +// RUN: %clang_cc1 -x c++ -flax-vector-conversions=none -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +sse -emit-llvm -o - -Wall -Werror -fexperimental-new-constant-interpreter | FileCheck %s +// RUN: %clang_cc1 -x c++ -flax-vector-conversions=none -fms-extensions -fms-compatibility -ffreestanding %s -triple=x86_64-windows-msvc -target-feature +sse -emit-llvm -o - -Wall -Werror -fexperimental-new-constant-interpreter | FileCheck %s + #include <immintrin.h> #include "builtin_test_helpers.h" @@ -31,7 +36,7 @@ __m128 test_mm_and_ps(__m128 A, __m128 B) { // CHECK: and <4 x i32> return _mm_and_ps(A, B); } -TEST_CONSTEXPR(match_m128(_mm_and_ps((__m128){-4.0f, -5.0f, +6.0f, +7.0f}, (__m128){+0.0f, -0.0f, -0.0f, +7.0f}), -0.0f, -0.0f, +0.0f, +7.0f)); +TEST_CONSTEXPR(match_m128(_mm_and_ps((__m128){-4.0f, -5.0f, +6.0f, +7.0f}, (__m128){+0.0f, -0.0f, -0.0f, +7.0f}), +0.0f, -0.0f, +0.0f, +7.0f)); __m128 test_mm_andnot_ps(__m128 A, __m128 B) { // CHECK-LABEL: test_mm_andnot_ps @@ -39,7 +44,7 @@ __m128 test_mm_andnot_ps(__m128 A, __m128 B) { // CHECK: and <4 x i32> return _mm_andnot_ps(A, B); } -TEST_CONSTEXPR(match_m128(_mm_andnot_ps((__m128){-4.0f, -5.0f, +6.0f, +7.0f}, (__m128){+0.0f, -0.0f, -0.0f, +7.0f}), +0.0f, +0.0f, +0.0f, +0.0f)); +TEST_CONSTEXPR(match_m128(_mm_andnot_ps((__m128){-4.0f, -5.0f, +6.0f, +7.0f}, (__m128){+0.0f, -0.0f, -0.0f, +7.0f}), +0.0f, +0.0f, -0.0f, +0.0f)); __m128 test_mm_cmp_ps_eq_oq(__m128 a, __m128 b) { // CHECK-LABEL: test_mm_cmp_ps_eq_oq diff --git a/clang/test/CodeGen/X86/sse2-builtins.c b/clang/test/CodeGen/X86/sse2-builtins.c index 04df59e..69a6d89 100644 --- a/clang/test/CodeGen/X86/sse2-builtins.c +++ b/clang/test/CodeGen/X86/sse2-builtins.c @@ -9,6 +9,17 @@ // RUN: %clang_cc1 -x c++ -flax-vector-conversions=none -ffreestanding %s -triple=i386-apple-darwin -target-feature +sse2 -fno-signed-char -emit-llvm -o - -Wall -Werror | FileCheck %s --check-prefixes=CHECK,X86 // RUN: %clang_cc1 -x c++ -flax-vector-conversions=none -fms-extensions -fms-compatibility -ffreestanding %s -triple=x86_64-windows-msvc -target-feature +sse2 -emit-llvm -o - -Wall -Werror | FileCheck %s --check-prefixes=CHECK,X64 +// RUN: %clang_cc1 -x c -flax-vector-conversions=none -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +sse2 -emit-llvm -o - -Wall -Werror -fexperimental-new-constant-interpreter | FileCheck %s --check-prefixes=CHECK,X64 +// RUN: %clang_cc1 -x c -flax-vector-conversions=none -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +sse2 -fno-signed-char -emit-llvm -o - -Wall -Werror -fexperimental-new-constant-interpreter | FileCheck %s --check-prefixes=CHECK,X64 +// RUN: %clang_cc1 -x c -flax-vector-conversions=none -ffreestanding %s -triple=i386-apple-darwin -target-feature +sse2 -emit-llvm -o - -Wall -Werror -fexperimental-new-constant-interpreter | FileCheck %s --check-prefixes=CHECK,X86 +// RUN: %clang_cc1 -x c -flax-vector-conversions=none -ffreestanding %s -triple=i386-apple-darwin -target-feature +sse2 -fno-signed-char -emit-llvm -o - -Wall -Werror -fexperimental-new-constant-interpreter | FileCheck %s --check-prefixes=CHECK,X86 +// RUN: %clang_cc1 -x c -flax-vector-conversions=none -fms-extensions -fms-compatibility -ffreestanding %s -triple=x86_64-windows-msvc -target-feature +sse2 -emit-llvm -o - -Wall -Werror -fexperimental-new-constant-interpreter | FileCheck %s --check-prefixes=CHECK,X64 +// RUN: %clang_cc1 -x c++ -flax-vector-conversions=none -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +sse2 -emit-llvm -o - -Wall -Werror -fexperimental-new-constant-interpreter | FileCheck %s --check-prefixes=CHECK,X64 +// RUN: %clang_cc1 -x c++ -flax-vector-conversions=none -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +sse2 -fno-signed-char -emit-llvm -o - -Wall -Werror -fexperimental-new-constant-interpreter | FileCheck %s --check-prefixes=CHECK,X64 +// RUN: %clang_cc1 -x c++ -flax-vector-conversions=none -ffreestanding %s -triple=i386-apple-darwin -target-feature +sse2 -emit-llvm -o - -Wall -Werror -fexperimental-new-constant-interpreter | FileCheck %s --check-prefixes=CHECK,X86 +// RUN: %clang_cc1 -x c++ -flax-vector-conversions=none -ffreestanding %s -triple=i386-apple-darwin -target-feature +sse2 -fno-signed-char -emit-llvm -o - -Wall -Werror -fexperimental-new-constant-interpreter | FileCheck %s --check-prefixes=CHECK,X86 +// RUN: %clang_cc1 -x c++ -flax-vector-conversions=none -fms-extensions -fms-compatibility -ffreestanding %s -triple=x86_64-windows-msvc -target-feature +sse2 -emit-llvm -o - -Wall -Werror -fexperimental-new-constant-interpreter | FileCheck %s --check-prefixes=CHECK,X64 + #include <immintrin.h> #include "builtin_test_helpers.h" @@ -63,12 +74,14 @@ __m128i test_mm_adds_epi8(__m128i A, __m128i B) { // CHECK: call <16 x i8> @llvm.sadd.sat.v16i8(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}) return _mm_adds_epi8(A, B); } +TEST_CONSTEXPR(match_v16qi(_mm_adds_epi8((__m128i)(__v16qs){+100, +50, -100, +20, +80, -50, +120, -20, -100, -50, +100, -20, -80, +50, -120, +20}, (__m128i)(__v16qs){+50, +80, -50, +110, +60, -30, +20, -10, +50, +80, -50, +110, +60, -30, +20, -10}), +127, +127, -128, +127, +127, -80, +127, -30, -50, +30, +50, +90, -20, +20, -100, +10)); __m128i test_mm_adds_epi16(__m128i A, __m128i B) { // CHECK-LABEL: test_mm_adds_epi16 // CHECK: call <8 x i16> @llvm.sadd.sat.v8i16(<8 x i16> %{{.*}}, <8 x i16> %{{.*}}) return _mm_adds_epi16(A, B); } +TEST_CONSTEXPR(match_v8hi(_mm_adds_epi16((__m128i)(__v8hi){+32000, -32000, +32000, -32000, +80, -50, +120, -20}, (__m128i)(__v8hi){+800, -800, -800, +800, +60, -30, +20, -10}), +32767, -32768, +31200, -31200, +140, -80, +140, -30)); __m128i test_mm_adds_epu8(__m128i A, __m128i B) { // CHECK-LABEL: test_mm_adds_epu8 @@ -76,6 +89,7 @@ __m128i test_mm_adds_epu8(__m128i A, __m128i B) { // CHECK: call <16 x i8> @llvm.uadd.sat.v16i8(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}) return _mm_adds_epu8(A, B); } +TEST_CONSTEXPR(match_v16qu(_mm_adds_epu8((__m128i)(__v16qu){0, 0, 0, 0, +127, +127, +127, +127, +128, +128, +128, +128, +255, +255, +255, +255}, (__m128i)(__v16qu){0, +127, +128, +255, 0, +127, +128, +255, 0, +127, +128, +255, 0, +127, +128, +255}), 0, +127, +128, +255, +127, +254, +255, +255, +128, +255, +255, +255, +255, +255, +255, +255)); __m128i test_mm_adds_epu16(__m128i A, __m128i B) { // CHECK-LABEL: test_mm_adds_epu16 @@ -83,6 +97,7 @@ __m128i test_mm_adds_epu16(__m128i A, __m128i B) { // CHECK: call <8 x i16> @llvm.uadd.sat.v8i16(<8 x i16> %{{.*}}, <8 x i16> %{{.*}}) return _mm_adds_epu16(A, B); } +TEST_CONSTEXPR(match_v8hu(_mm_adds_epu16((__m128i)(__v8hu){0, 0, 0, +32767, +32767, +32767, +65535, +65535}, (__m128i)(__v8hu){0, +32767, +65535, 0, +32767, +65535, 0, +32767}), 0, +32767, +65535, +32767, +65534, +65535, +65535, +65535)); __m128d test_mm_and_pd(__m128d A, __m128d B) { // CHECK-LABEL: test_mm_and_pd @@ -96,6 +111,7 @@ __m128i test_mm_and_si128(__m128i A, __m128i B) { // CHECK: and <2 x i64> return _mm_and_si128(A, B); } +TEST_CONSTEXPR(match_v4si(_mm_and_si128((__m128i)(__v4si){0, -1, 0, -1}, (__m128i)(__v4si){0, 0, -1, -1}), 0, 0, 0, -1)); __m128d test_mm_andnot_pd(__m128d A, __m128d B) { // CHECK-LABEL: test_mm_andnot_pd @@ -103,7 +119,7 @@ __m128d test_mm_andnot_pd(__m128d A, __m128d B) { // CHECK: and <2 x i64> return _mm_andnot_pd(A, B); } -TEST_CONSTEXPR(match_m128d(_mm_andnot_pd((__m128d){+1.0, -3.0}, (__m128d){+0.0, -0.0}), +0.0, -0.0)); +TEST_CONSTEXPR(match_m128d(_mm_andnot_pd((__m128d){+1.0, -3.0}, (__m128d){-0.0, +0.0}), -0.0, +0.0)); __m128i test_mm_andnot_si128(__m128i A, __m128i B) { // CHECK-LABEL: test_mm_andnot_si128 @@ -111,6 +127,7 @@ __m128i test_mm_andnot_si128(__m128i A, __m128i B) { // CHECK: and <2 x i64> return _mm_andnot_si128(A, B); } +TEST_CONSTEXPR(match_v4si(_mm_andnot_si128((__m128i)(__v4si){0, -1, 0, -1}, (__m128i)(__v4si){0, 0, -1, -1}), 0, 0, -1, 0)); __m128i test_mm_avg_epu8(__m128i A, __m128i B) { // CHECK-LABEL: test_mm_avg_epu8 @@ -237,18 +254,21 @@ __m128i test_mm_cmpeq_epi8(__m128i A, __m128i B) { // CHECK: icmp eq <16 x i8> return _mm_cmpeq_epi8(A, B); } +TEST_CONSTEXPR(match_v16qi(_mm_cmpeq_epi8((__m128i)(__v16qs){1,-2,3,-4,-5,6,-7,8,-9,10,-11,12,-13,14,-15,16}, (__m128i)(__v16qs){10,-2,6,-4,-5,12,-14,8,-9,20,-22,12,-26,14,-30,16}), 0,-1,0,-1,-1,0,0,-1,-1,0,0,-1,0,-1,0,-1)); __m128i test_mm_cmpeq_epi16(__m128i A, __m128i B) { // CHECK-LABEL: test_mm_cmpeq_epi16 // CHECK: icmp eq <8 x i16> return _mm_cmpeq_epi16(A, B); } +TEST_CONSTEXPR(match_v8hi(_mm_cmpeq_epi16((__m128i)(__v8hi){+1, -2, +3, -4, +5, -6, +7, -8}, (__m128i)(__v8hi){-10, -2, +6, -4, +5, -12, +14, -8}), 0, -1, 0, -1, -1, 0, 0, -1)); __m128i test_mm_cmpeq_epi32(__m128i A, __m128i B) { // CHECK-LABEL: test_mm_cmpeq_epi32 // CHECK: icmp eq <4 x i32> return _mm_cmpeq_epi32(A, B); } +TEST_CONSTEXPR(match_v4si(_mm_cmpeq_epi32((__m128i)(__v4si){+1, -2, +3, -4}, (__m128i)(__v4si){-10, -2, +6, -4}), 0, -1, 0, -1)); __m128d test_mm_cmpeq_pd(__m128d A, __m128d B) { // CHECK-LABEL: test_mm_cmpeq_pd @@ -287,18 +307,24 @@ __m128i test_mm_cmpgt_epi8(__m128i A, __m128i B) { // CHECK: icmp sgt <16 x i8> return _mm_cmpgt_epi8(A, B); } +TEST_CONSTEXPR(match_v16qi(_mm_cmpgt_epi8( + (__m128i)(__v16qs){15,-2,8,-4,12,6,-20,8,25,-10,30,12,-35,14,40,-16}, + (__m128i)(__v16qs){10,-2,6,-4,5,12,-14,8,9,-20,22,12,-26,14,30,-16}), + -1, 0, -1, 0, -1, 0, 0, 0,-1, -1, -1, 0, 0, 0, -1, 0)); __m128i test_mm_cmpgt_epi16(__m128i A, __m128i B) { // CHECK-LABEL: test_mm_cmpgt_epi16 // CHECK: icmp sgt <8 x i16> return _mm_cmpgt_epi16(A, B); } +TEST_CONSTEXPR(match_v8hi(_mm_cmpgt_epi16((__m128i)(__v8hi){15,2,8,4,12,6,20,8}, (__m128i)(__v8hi){10,2,6,4,5,12,14,8}), -1,0,-1,0,-1,0,-1,0)); __m128i test_mm_cmpgt_epi32(__m128i A, __m128i B) { // CHECK-LABEL: test_mm_cmpgt_epi32 // CHECK: icmp sgt <4 x i32> return _mm_cmpgt_epi32(A, B); } +TEST_CONSTEXPR(match_v4si(_mm_cmpgt_epi32((__m128i)(__v4si){15,2,8,4}, (__m128i)(__v4si){10,2,6,4}), -1,0,-1,0)); __m128d test_mm_cmpgt_pd(__m128d A, __m128d B) { // CHECK-LABEL: test_mm_cmpgt_pd @@ -337,18 +363,24 @@ __m128i test_mm_cmplt_epi8(__m128i A, __m128i B) { // CHECK: icmp sgt <16 x i8> return _mm_cmplt_epi8(A, B); } +TEST_CONSTEXPR(match_v16qi(_mm_cmplt_epi8( + (__m128i)(__v16qs){15,-2,8,-4,12,6,-20,8,25,-10,30,12,-35,14,40,-16}, + (__m128i)(__v16qs){10,-2,6,-4,5,12,-14,8,9,-20,22,12,-26,14,30,-16}), + 0, 0, 0, 0, 0, -1, -1, 0,0, 0, 0, 0, -1, 0, 0, 0)); __m128i test_mm_cmplt_epi16(__m128i A, __m128i B) { // CHECK-LABEL: test_mm_cmplt_epi16 // CHECK: icmp sgt <8 x i16> return _mm_cmplt_epi16(A, B); } +TEST_CONSTEXPR(match_v8hi(_mm_cmplt_epi16((__m128i)(__v8hi){5,2,3,4,1,6,7,8}, (__m128i)(__v8hi){10,2,6,4,5,12,14,8}), -1, 0, -1, 0, -1, -1, -1, 0)); __m128i test_mm_cmplt_epi32(__m128i A, __m128i B) { // CHECK-LABEL: test_mm_cmplt_epi32 // CHECK: icmp sgt <4 x i32> return _mm_cmplt_epi32(A, B); } +TEST_CONSTEXPR(match_v4si(_mm_cmplt_epi32((__m128i)(__v4si){5,2,3,4}, (__m128i)(__v4si){10,2,6,4}), -1,0,-1,0)); __m128d test_mm_cmplt_pd(__m128d A, __m128d B) { // CHECK-LABEL: test_mm_cmplt_pd @@ -579,12 +611,14 @@ int test_mm_cvtsi128_si32(__m128i A) { // CHECK: extractelement <4 x i32> %{{.*}}, i32 0 return _mm_cvtsi128_si32(A); } +TEST_CONSTEXPR(_mm_cvtsi128_si32((__m128i)(__v4si){+1, -2, -3, +4}) == +1); long long test_mm_cvtsi128_si64(__m128i A) { // CHECK-LABEL: test_mm_cvtsi128_si64 // CHECK: extractelement <2 x i64> %{{.*}}, i32 0 return _mm_cvtsi128_si64(A); } +TEST_CONSTEXPR(_mm_cvtsi128_si64((__m128i)(__v2di){42LL, -42LL}) == 42LL); __m128d test_mm_cvtsi32_sd(__m128d A, int B) { // CHECK-LABEL: test_mm_cvtsi32_sd @@ -602,6 +636,7 @@ __m128i test_mm_cvtsi32_si128(int A) { // CHECK: insertelement <4 x i32> %{{.*}}, i32 0, i32 3 return _mm_cvtsi32_si128(A); } +TEST_CONSTEXPR(match_v4si(_mm_cvtsi32_si128(55), 55, 0, 0, 0)); #ifdef __x86_64__ __m128d test_mm_cvtsi64_sd(__m128d A, long long B) { @@ -619,6 +654,7 @@ __m128i test_mm_cvtsi64_si128(long long A) { // CHECK: insertelement <2 x i64> %{{.*}}, i64 0, i32 1 return _mm_cvtsi64_si128(A); } +TEST_CONSTEXPR(match_v2di(_mm_cvtsi64_si128(-99LL), -99LL, 0LL)); __m128d test_mm_cvtss_sd(__m128d A, __m128 B) { // CHECK-LABEL: test_mm_cvtss_sd @@ -915,6 +951,7 @@ __m128i test_mm_mul_epu32(__m128i A, __m128i B) { // CHECK: mul <2 x i64> %{{.*}}, %{{.*}} return _mm_mul_epu32(A, B); } +TEST_CONSTEXPR(match_m128i(_mm_mul_epu32((__m128i)(__v4si){+1, -2, +3, -4}, (__m128i)(__v4si){-16, -14, +12, +10}), 4294967280, 36)); __m128d test_mm_mul_pd(__m128d A, __m128d B) { // CHECK-LABEL: test_mm_mul_pd @@ -938,18 +975,21 @@ __m128i test_mm_mulhi_epi16(__m128i A, __m128i B) { // CHECK: call <8 x i16> @llvm.x86.sse2.pmulh.w(<8 x i16> %{{.*}}, <8 x i16> %{{.*}}) return _mm_mulhi_epi16(A, B); } +TEST_CONSTEXPR(match_v8hi(_mm_mulhi_epi16((__m128i)(__v8hi){+1, -2, +3, -4, +5, -6, +7, -8}, (__m128i)(__v8hi){-16, -14, +12, +10, -8, +6, -4, +2}), -1, 0, 0, -1, -1, -1, -1, -1)); __m128i test_mm_mulhi_epu16(__m128i A, __m128i B) { // CHECK-LABEL: test_mm_mulhi_epu16 // CHECK: call <8 x i16> @llvm.x86.sse2.pmulhu.w(<8 x i16> %{{.*}}, <8 x i16> %{{.*}}) return _mm_mulhi_epu16(A, B); } +TEST_CONSTEXPR(match_v8hi(_mm_mulhi_epu16((__m128i)(__v8hi){+1, -2, +3, -4, +5, -6, +7, -8}, (__m128i)(__v8hi){-16, -14, +12, +10, -8, +6, -4, +2}), 0, -16, 0, 9, 4, 5, 6, 1)); __m128i test_mm_mullo_epi16(__m128i A, __m128i B) { // CHECK-LABEL: test_mm_mullo_epi16 // CHECK: mul <8 x i16> %{{.*}}, %{{.*}} return _mm_mullo_epi16(A, B); } +TEST_CONSTEXPR(match_v8hi(_mm_mullo_epi16((__m128i)(__v8hi){+1, -2, +3, -4, +5, -6, +7, -8}, (__m128i)(__v8hi){-16, -14, +12, +10, -8, +6, -4, +2}), -16, 28, 36, -40, -40, -36, -28, -16)); __m128d test_mm_or_pd(__m128d A, __m128d B) { // CHECK-LABEL: test_mm_or_pd @@ -963,6 +1003,7 @@ __m128i test_mm_or_si128(__m128i A, __m128i B) { // CHECK: or <2 x i64> %{{.*}}, %{{.*}} return _mm_or_si128(A, B); } +TEST_CONSTEXPR(match_v4si(_mm_or_si128((__m128i)(__v4si){0, -1, 0, -1}, (__m128i)(__v4si){0, 0, -1, -1}), 0, -1, -1, -1)); __m128i test_mm_packs_epi16(__m128i A, __m128i B) { // CHECK-LABEL: test_mm_packs_epi16 @@ -1281,6 +1322,10 @@ __m128i test_mm_slli_epi16(__m128i A) { // CHECK: call <8 x i16> @llvm.x86.sse2.pslli.w(<8 x i16> %{{.*}}, i32 %{{.*}}) return _mm_slli_epi16(A, 1); } +TEST_CONSTEXPR(match_v8hi(_mm_slli_epi16((__m128i)(__v8hi){0, 1, 2, 3, 4, 5, 6, 7}, 0), 0, 1, 2, 3, 4, 5, 6, 7)); +TEST_CONSTEXPR(match_v8hi(_mm_slli_epi16((__m128i)(__v8hi){0, 1, 2, 3, 4, 5, 6, 7}, 1), 0, 0x2, 0x4, 0x6, 0x8, 0xa, 0xc, 0xe)); +TEST_CONSTEXPR(match_v8hi(_mm_slli_epi16((__m128i)(__v8hi){0, 8, 2, 3, 4, 5, 6, 7}, 8), 0, 0x800, 0x200, 0x300, 0x400, 0x500, 0x600, 0x700)); +TEST_CONSTEXPR(match_v8hi(_mm_slli_epi16((__m128i)(__v8hi){0, 8, 2, 3, 4, 5, 6, 7}, 16), 0, 0, 0, 0, 0, 0, 0, 0)); __m128i test_mm_slli_epi16_1(__m128i A) { // CHECK-LABEL: test_mm_slli_epi16_1 @@ -1299,6 +1344,11 @@ __m128i test_mm_slli_epi32(__m128i A) { // CHECK: call <4 x i32> @llvm.x86.sse2.pslli.d(<4 x i32> %{{.*}}, i32 %{{.*}}) return _mm_slli_epi32(A, 1); } +TEST_CONSTEXPR(match_v4si(_mm_slli_epi32((__m128i)(__v4si){0, 1, 2, 3}, 0), 0, 1, 2, 3)); +TEST_CONSTEXPR(match_v4si(_mm_slli_epi32((__m128i)(__v4si){0, 1, 2, 3}, 1), 0, 0x2, 0x4, 0x6)); +TEST_CONSTEXPR(match_v4su(_mm_slli_epi32((__m128i)(__v4su){0, 1, 2, 3}, 31), 0, 0x80000000, 0x0, 0x80000000)); +TEST_CONSTEXPR(match_v4si(_mm_slli_epi32((__m128i)(__v4si){0, 1, 2, 3}, 32), 0, 0, 0, 0)); +TEST_CONSTEXPR(match_v4si(_mm_slli_epi32((__m128i)(__v4si){0, 1, 2, 3}, 33), 0, 0, 0, 0)); __m128i test_mm_slli_epi32_1(__m128i A) { // CHECK-LABEL: test_mm_slli_epi32_1 @@ -1317,6 +1367,12 @@ __m128i test_mm_slli_epi64(__m128i A) { // CHECK: call {{.*}}<2 x i64> @llvm.x86.sse2.pslli.q(<2 x i64> %{{.*}}, i32 %{{.*}}) return _mm_slli_epi64(A, 1); } +TEST_CONSTEXPR(match_v2di(_mm_slli_epi64((__m128i)(__v2di){0, 1}, 0), 0, 1)); +TEST_CONSTEXPR(match_v2di(_mm_slli_epi64((__m128i)(__v2di){0, 1}, 1), 0, 0x2)); +TEST_CONSTEXPR(match_v2di(_mm_slli_epi64((__m128i)(__v2di){5, 8}, 6), 0x140, 0x200)); +TEST_CONSTEXPR(match_v2du(_mm_slli_epi64((__m128i)(__v2du){0, 1}, 63), 0, 0x8000000000000000ULL)); +TEST_CONSTEXPR(match_v2di(_mm_slli_epi64((__m128i)(__v2di){0, 1}, 64), 0, 0)); +TEST_CONSTEXPR(match_v2di(_mm_slli_epi64((__m128i)(__v2di){0, 1}, 65), 0, 0)); __m128i test_mm_slli_epi64_1(__m128i A) { // CHECK-LABEL: test_mm_slli_epi64_1 @@ -1373,6 +1429,8 @@ __m128i test_mm_srai_epi16(__m128i A) { // CHECK: call <8 x i16> @llvm.x86.sse2.psrai.w(<8 x i16> %{{.*}}, i32 %{{.*}}) return _mm_srai_epi16(A, 1); } +TEST_CONSTEXPR(match_v8hi(_mm_srai_epi16((__m128i)(__v8hi){-32768, 32767, -3, -2, -1, 0, 1, 2}, 1), -16384, 16383, -2, -1, -1, 0, 0, 1)); +TEST_CONSTEXPR(match_v8hi(_mm_srai_epi16((__m128i)(__v8hi){-32768, 32767, -3, -2, -1, 0, 1, 2}, 1), -16384, 16383, -2, -1, -1, 0, 0, 1)); __m128i test_mm_srai_epi16_1(__m128i A) { // CHECK-LABEL: test_mm_srai_epi16_1 @@ -1391,6 +1449,7 @@ __m128i test_mm_srai_epi32(__m128i A) { // CHECK: call <4 x i32> @llvm.x86.sse2.psrai.d(<4 x i32> %{{.*}}, i32 %{{.*}}) return _mm_srai_epi32(A, 1); } +TEST_CONSTEXPR(match_v4si(_mm_srai_epi32((__m128i)(__v4si){-32768, 32767, -3, 2}, 1), -16384, 16383, -2, 1)); __m128i test_mm_srai_epi32_1(__m128i A) { // CHECK-LABEL: test_mm_srai_epi32_1 @@ -1427,6 +1486,7 @@ __m128i test_mm_srli_epi16(__m128i A) { // CHECK: call <8 x i16> @llvm.x86.sse2.psrli.w(<8 x i16> %{{.*}}, i32 %{{.*}}) return _mm_srli_epi16(A, 1); } +TEST_CONSTEXPR(match_v8hi(_mm_srli_epi16((__m128i)(__v8hi){0, 1, 2, 3, 4, 5, 6, 7}, 1), 0, 0x0, 0x1, 0x1, 0x2, 0x2, 0x3, 0x3)); __m128i test_mm_srli_epi16_1(__m128i A) { // CHECK-LABEL: test_mm_srli_epi16_1 @@ -1445,6 +1505,7 @@ __m128i test_mm_srli_epi32(__m128i A) { // CHECK: call <4 x i32> @llvm.x86.sse2.psrli.d(<4 x i32> %{{.*}}, i32 %{{.*}}) return _mm_srli_epi32(A, 1); } +TEST_CONSTEXPR(match_v4si(_mm_srli_epi32((__m128i)(__v4si){0, 1, 2, 3}, 8), 0, 0x0, 0x0, 0x0)); __m128i test_mm_srli_epi32_1(__m128i A) { // CHECK-LABEL: test_mm_srli_epi32_1 @@ -1463,6 +1524,7 @@ __m128i test_mm_srli_epi64(__m128i A) { // CHECK: call {{.*}}<2 x i64> @llvm.x86.sse2.psrli.q(<2 x i64> %{{.*}}, i32 %{{.*}}) return _mm_srli_epi64(A, 1); } +TEST_CONSTEXPR(match_v2di(_mm_srli_epi64((__m128i)(__v2di){100005, 100008}, 6), 0x61a, 0x61a)); __m128i test_mm_srli_epi64_1(__m128i A) { // CHECK-LABEL: test_mm_srli_epi64_1 @@ -1685,12 +1747,14 @@ __m128i test_mm_subs_epi8(__m128i A, __m128i B) { // CHECK: call <16 x i8> @llvm.ssub.sat.v16i8(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}) return _mm_subs_epi8(A, B); } +TEST_CONSTEXPR(match_v16qi(_mm_subs_epi8((__m128i)(__v16qs){+100, +50, -100, +20, +80, -50, +120, -20, -100, -50, +100, -20, -80, +50, -120, +20}, (__m128i)(__v16qs){-50, -80, +50, -110, -60, +30, -20, +10, -50, -80, +50, -110, -60, +30, -20, +10}), +127, +127, -128, +127, +127, -80, +127, -30, -50, +30, +50, +90, -20, +20, -100, +10)); __m128i test_mm_subs_epi16(__m128i A, __m128i B) { // CHECK-LABEL: test_mm_subs_epi16 // CHECK: call <8 x i16> @llvm.ssub.sat.v8i16(<8 x i16> %{{.*}}, <8 x i16> %{{.*}}) return _mm_subs_epi16(A, B); } +TEST_CONSTEXPR(match_v8hi(_mm_subs_epi16((__m128i)(__v8hi){+32000, -32000, +32000, -32000, +80, -50, +120, -20}, (__m128i)(__v8hi){-800, +800, +800, -800, -60, +30, -20, +10}), +32767, -32768, +31200, -31200, +140, -80, +140, -30)); __m128i test_mm_subs_epu8(__m128i A, __m128i B) { // CHECK-LABEL: test_mm_subs_epu8 @@ -1698,6 +1762,7 @@ __m128i test_mm_subs_epu8(__m128i A, __m128i B) { // CHECK: call <16 x i8> @llvm.usub.sat.v16i8(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}) return _mm_subs_epu8(A, B); } +TEST_CONSTEXPR(match_v16qu(_mm_subs_epu8((__m128i)(__v16qu){0, 0, 0, 0, +127, +127, +127, +127, +128, +128, +128, +128, +255, +255, +255, +255}, (__m128i)(__v16qu){0, +127, +128, +255, 0, +127, +128, +255, 0, +127, +128, +255, 0, +127, +128, +255}), 0, 0, 0, 0, +127, 0, 0, 0, +128, +1, 0, 0, +255, +128, +127, 0)); __m128i test_mm_subs_epu16(__m128i A, __m128i B) { // CHECK-LABEL: test_mm_subs_epu16 @@ -1705,6 +1770,7 @@ __m128i test_mm_subs_epu16(__m128i A, __m128i B) { // CHECK: call <8 x i16> @llvm.usub.sat.v8i16(<8 x i16> %{{.*}}, <8 x i16> %{{.*}}) return _mm_subs_epu16(A, B); } +TEST_CONSTEXPR(match_v8hu(_mm_subs_epu16((__m128i)(__v8hu){0, 0, 0, +32767, +32767, +32767, +65535, +65535}, (__m128i)(__v8hu){0, +32767, +65535, 0, +32767, +65535, 0, +32767}), 0, 0, 0, +32767, 0, 0, +65535, +32768)); int test_mm_ucomieq_sd(__m128d A, __m128d B) { // CHECK-LABEL: test_mm_ucomieq_sd @@ -1762,24 +1828,28 @@ __m128i test_mm_unpackhi_epi8(__m128i A, __m128i B) { // CHECK: shufflevector <16 x i8> %{{.*}}, <16 x i8> %{{.*}}, <16 x i32> <i32 8, i32 24, i32 9, i32 25, i32 10, i32 26, i32 11, i32 27, i32 12, i32 28, i32 13, i32 29, i32 14, i32 30, i32 15, i32 31> return _mm_unpackhi_epi8(A, B); } +TEST_CONSTEXPR(match_v16qi(_mm_unpackhi_epi8((__m128i)(__v16qi){0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, (__m128i)(__v16qi){16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31}), 8, 24, 9, 25, 10, 26, 11, 27, 12, 28, 13, 29, 14, 30, 15, 31)); __m128i test_mm_unpackhi_epi16(__m128i A, __m128i B) { // CHECK-LABEL: test_mm_unpackhi_epi16 // CHECK: shufflevector <8 x i16> %{{.*}}, <8 x i16> %{{.*}}, <8 x i32> <i32 4, i32 12, i32 5, i32 13, i32 6, i32 14, i32 7, i32 15> return _mm_unpackhi_epi16(A, B); } +TEST_CONSTEXPR(match_v8hi(_mm_unpackhi_epi16((__m128i)(__v8hi){0, 1, 2, 3, 4, 5, 6, 7}, (__m128i)(__v8hi){8, 9, 10, 11, 12, 13, 14, 15}), 4, 12, 5, 13, 6, 14, 7, 15)); __m128i test_mm_unpackhi_epi32(__m128i A, __m128i B) { // CHECK-LABEL: test_mm_unpackhi_epi32 // CHECK: shufflevector <4 x i32> %{{.*}}, <4 x i32> %{{.*}}, <4 x i32> <i32 2, i32 6, i32 3, i32 7> return _mm_unpackhi_epi32(A, B); } +TEST_CONSTEXPR(match_v4si(_mm_unpackhi_epi32((__m128i)(__v4si){0, 1, 2, 3}, (__m128i)(__v4si){ 4, 5, 6, 7}), 2, 6, 3, 7)); __m128i test_mm_unpackhi_epi64(__m128i A, __m128i B) { // CHECK-LABEL: test_mm_unpackhi_epi64 // CHECK: shufflevector <2 x i64> %{{.*}}, <2 x i64> %{{.*}}, <2 x i32> <i32 1, i32 3> return _mm_unpackhi_epi64(A, B); } +TEST_CONSTEXPR(match_v2di(_mm_unpackhi_epi64((__m128i)(__v2di){0, 1}, (__m128i)(__v2di){2, 3}), 1, 3)); __m128d test_mm_unpackhi_pd(__m128d A, __m128d B) { // CHECK-LABEL: test_mm_unpackhi_pd @@ -1793,24 +1863,28 @@ __m128i test_mm_unpacklo_epi8(__m128i A, __m128i B) { // CHECK: shufflevector <16 x i8> %{{.*}}, <16 x i8> %{{.*}}, <16 x i32> <i32 0, i32 16, i32 1, i32 17, i32 2, i32 18, i32 3, i32 19, i32 4, i32 20, i32 5, i32 21, i32 6, i32 22, i32 7, i32 23> return _mm_unpacklo_epi8(A, B); } +TEST_CONSTEXPR(match_v16qi(_mm_unpacklo_epi8((__m128i)(__v16qi){0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, (__m128i)(__v16qi){16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31}), 0, 16, 1, 17, 2, 18, 3, 19, 4, 20, 5, 21, 6, 22, 7, 23)); __m128i test_mm_unpacklo_epi16(__m128i A, __m128i B) { // CHECK-LABEL: test_mm_unpacklo_epi16 // CHECK: shufflevector <8 x i16> %{{.*}}, <8 x i16> %{{.*}}, <8 x i32> <i32 0, i32 8, i32 1, i32 9, i32 2, i32 10, i32 3, i32 11> return _mm_unpacklo_epi16(A, B); } +TEST_CONSTEXPR(match_v8hi(_mm_unpacklo_epi16((__m128i)(__v8hi){0, 1, 2, 3, 4, 5, 6, 7}, (__m128i)(__v8hi){8, 9, 10, 11, 12, 13, 14, 15}), 0, 8, 1, 9, 2, 10, 3, 11)); __m128i test_mm_unpacklo_epi32(__m128i A, __m128i B) { // CHECK-LABEL: test_mm_unpacklo_epi32 // CHECK: shufflevector <4 x i32> %{{.*}}, <4 x i32> %{{.*}}, <4 x i32> <i32 0, i32 4, i32 1, i32 5> return _mm_unpacklo_epi32(A, B); } +TEST_CONSTEXPR(match_v4si(_mm_unpacklo_epi32((__m128i)(__v4si){0, 1, 2, 3}, (__m128i)(__v4si){ 4, 5, 6, 7}), 0, 4, 1, 5)); __m128i test_mm_unpacklo_epi64(__m128i A, __m128i B) { // CHECK-LABEL: test_mm_unpacklo_epi64 // CHECK: shufflevector <2 x i64> %{{.*}}, <2 x i64> %{{.*}}, <2 x i32> <i32 0, i32 2> return _mm_unpacklo_epi64(A, B); } +TEST_CONSTEXPR(match_v2di(_mm_unpacklo_epi64((__m128i)(__v2di){0, 1}, (__m128i)(__v2di){2, 3}), 0, 2)); __m128d test_mm_unpacklo_pd(__m128d A, __m128d B) { // CHECK-LABEL: test_mm_unpacklo_pd @@ -1831,3 +1905,4 @@ __m128i test_mm_xor_si128(__m128i A, __m128i B) { // CHECK: xor <2 x i64> %{{.*}}, %{{.*}} return _mm_xor_si128(A, B); } +TEST_CONSTEXPR(match_v4si(_mm_xor_si128((__m128i)(__v4si){0, -1, 0, -1}, (__m128i)(__v4si){0, 0, -1, -1}), 0, -1, -1, 0)); diff --git a/clang/test/CodeGen/X86/sse3-builtins.c b/clang/test/CodeGen/X86/sse3-builtins.c index d47c19b..c53afc5 100644 --- a/clang/test/CodeGen/X86/sse3-builtins.c +++ b/clang/test/CodeGen/X86/sse3-builtins.c @@ -3,6 +3,11 @@ // RUN: %clang_cc1 -x c++ -flax-vector-conversions=none -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +sse3 -emit-llvm -o - -Wall -Werror | FileCheck %s // RUN: %clang_cc1 -x c++ -flax-vector-conversions=none -ffreestanding %s -triple=i386-apple-darwin -target-feature +sse3 -emit-llvm -o - -Wall -Werror | FileCheck %s +// RUN: %clang_cc1 -x c -flax-vector-conversions=none -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +sse3 -emit-llvm -o - -Wall -Werror -fexperimental-new-constant-interpreter | FileCheck %s +// RUN: %clang_cc1 -x c -flax-vector-conversions=none -ffreestanding %s -triple=i386-apple-darwin -target-feature +sse3 -emit-llvm -o - -Wall -Werror -fexperimental-new-constant-interpreter | FileCheck %s +// RUN: %clang_cc1 -x c++ -flax-vector-conversions=none -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +sse3 -emit-llvm -o - -Wall -Werror -fexperimental-new-constant-interpreter | FileCheck %s +// RUN: %clang_cc1 -x c++ -flax-vector-conversions=none -ffreestanding %s -triple=i386-apple-darwin -target-feature +sse3 -emit-llvm -o - -Wall -Werror -fexperimental-new-constant-interpreter | FileCheck %s + #include <immintrin.h> #include "builtin_test_helpers.h" diff --git a/clang/test/CodeGen/X86/sse41-builtins.c b/clang/test/CodeGen/X86/sse41-builtins.c index d71a4b7..5f53614 100644 --- a/clang/test/CodeGen/X86/sse41-builtins.c +++ b/clang/test/CodeGen/X86/sse41-builtins.c @@ -7,8 +7,18 @@ // RUN: %clang_cc1 -x c++ -flax-vector-conversions=none -ffreestanding %s -triple=i386-apple-darwin -target-feature +sse4.1 -emit-llvm -o - -Wall -Werror | FileCheck %s --check-prefixes=CHECK // RUN: %clang_cc1 -x c++ -flax-vector-conversions=none -ffreestanding %s -triple=i386-apple-darwin -target-feature +sse4.1 -fno-signed-char -emit-llvm -o - -Wall -Werror | FileCheck %s --check-prefixes=CHECK +// RUN: %clang_cc1 -x c -flax-vector-conversions=none -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +sse4.1 -emit-llvm -o - -Wall -Werror -fexperimental-new-constant-interpreter | FileCheck %s --check-prefixes=CHECK,X64 +// RUN: %clang_cc1 -x c -flax-vector-conversions=none -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +sse4.1 -fno-signed-char -emit-llvm -o - -Wall -Werror -fexperimental-new-constant-interpreter | FileCheck %s --check-prefixes=CHECK,X64 +// RUN: %clang_cc1 -x c -flax-vector-conversions=none -ffreestanding %s -triple=i386-apple-darwin -target-feature +sse4.1 -emit-llvm -o - -Wall -Werror -fexperimental-new-constant-interpreter | FileCheck %s --check-prefixes=CHECK +// RUN: %clang_cc1 -x c -flax-vector-conversions=none -ffreestanding %s -triple=i386-apple-darwin -target-feature +sse4.1 -fno-signed-char -emit-llvm -o - -Wall -Werror -fexperimental-new-constant-interpreter | FileCheck %s --check-prefixes=CHECK +// RUN: %clang_cc1 -x c++ -flax-vector-conversions=none -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +sse4.1 -emit-llvm -o - -Wall -Werror -fexperimental-new-constant-interpreter | FileCheck %s --check-prefixes=CHECK,X64 +// RUN: %clang_cc1 -x c++ -flax-vector-conversions=none -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +sse4.1 -fno-signed-char -emit-llvm -o - -Wall -Werror -fexperimental-new-constant-interpreter | FileCheck %s --check-prefixes=CHECK,X64 +// RUN: %clang_cc1 -x c++ -flax-vector-conversions=none -ffreestanding %s -triple=i386-apple-darwin -target-feature +sse4.1 -emit-llvm -o - -Wall -Werror -fexperimental-new-constant-interpreter | FileCheck %s --check-prefixes=CHECK +// RUN: %clang_cc1 -x c++ -flax-vector-conversions=none -ffreestanding %s -triple=i386-apple-darwin -target-feature +sse4.1 -fno-signed-char -emit-llvm -o - -Wall -Werror -fexperimental-new-constant-interpreter | FileCheck %s --check-prefixes=CHECK + #include <immintrin.h> +#include "builtin_test_helpers.h" // NOTE: This should match the tests in llvm/test/CodeGen/X86/sse41-intrinsics-fast-isel.ll @@ -78,6 +88,7 @@ __m128i test_mm_cmpeq_epi64(__m128i A, __m128i B) { // CHECK: sext <2 x i1> %{{.*}} to <2 x i64> return _mm_cmpeq_epi64(A, B); } +TEST_CONSTEXPR(match_v2di(_mm_cmpeq_epi64((__m128i)(__v2di){+1, -8}, (__m128i)(__v2di){-10, -8}), 0, -1)); __m128i test_mm_cvtepi8_epi16(__m128i a) { // CHECK-LABEL: test_mm_cvtepi8_epi16 @@ -86,6 +97,8 @@ __m128i test_mm_cvtepi8_epi16(__m128i a) { return _mm_cvtepi8_epi16(a); } +TEST_CONSTEXPR(match_v8hi(_mm_cvtepi8_epi16(_mm_setr_epi8(-3, 2, -1, 0, 1, -2, 3, -4, 0, 0, 0, 0, 0, 0, 0, 0)), -3, 2, -1, 0, 1, -2, 3, -4)); + __m128i test_mm_cvtepi8_epi32(__m128i a) { // CHECK-LABEL: test_mm_cvtepi8_epi32 // CHECK: shufflevector <16 x i8> {{.*}}, <16 x i8> {{.*}}, <4 x i32> <i32 0, i32 1, i32 2, i32 3> @@ -93,6 +106,8 @@ __m128i test_mm_cvtepi8_epi32(__m128i a) { return _mm_cvtepi8_epi32(a); } +TEST_CONSTEXPR(match_v4si(_mm_cvtepi8_epi32(_mm_setr_epi8(-3, 2, -1, 0, 1, -2, 3, -4, 0, 0, 0, 0, 0, 0, 0, 0)), -3, 2, -1, 0)); + __m128i test_mm_cvtepi8_epi64(__m128i a) { // CHECK-LABEL: test_mm_cvtepi8_epi64 // CHECK: shufflevector <16 x i8> {{.*}}, <16 x i8> {{.*}}, <2 x i32> <i32 0, i32 1> @@ -100,6 +115,8 @@ __m128i test_mm_cvtepi8_epi64(__m128i a) { return _mm_cvtepi8_epi64(a); } +TEST_CONSTEXPR(match_v2di(_mm_cvtepi8_epi64(_mm_setr_epi8(-3, 2, -1, 0, 1, -2, 3, -4, 0, 0, 0, 0, 0, 0, 0, 0)), -3, 2)); + __m128i test_mm_cvtepi16_epi32(__m128i a) { // CHECK-LABEL: test_mm_cvtepi16_epi32 // CHECK: shufflevector <8 x i16> {{.*}}, <8 x i16> {{.*}}, <4 x i32> <i32 0, i32 1, i32 2, i32 3> @@ -107,6 +124,8 @@ __m128i test_mm_cvtepi16_epi32(__m128i a) { return _mm_cvtepi16_epi32(a); } +TEST_CONSTEXPR(match_v4si(_mm_cvtepi16_epi32(_mm_setr_epi16(-300, 2, -1, 0, 1, -2, 3, -4)), -300, 2, -1, 0)); + __m128i test_mm_cvtepi16_epi64(__m128i a) { // CHECK-LABEL: test_mm_cvtepi16_epi64 // CHECK: shufflevector <8 x i16> {{.*}}, <8 x i16> {{.*}}, <2 x i32> <i32 0, i32 1> @@ -114,6 +133,8 @@ __m128i test_mm_cvtepi16_epi64(__m128i a) { return _mm_cvtepi16_epi64(a); } +TEST_CONSTEXPR(match_v2di(_mm_cvtepi16_epi64(_mm_setr_epi16(-300, 2, -1, 0, 1, -2, 3, -4)), -300, 2)); + __m128i test_mm_cvtepi32_epi64(__m128i a) { // CHECK-LABEL: test_mm_cvtepi32_epi64 // CHECK: shufflevector <4 x i32> {{.*}}, <4 x i32> {{.*}}, <2 x i32> <i32 0, i32 1> @@ -121,6 +142,8 @@ __m128i test_mm_cvtepi32_epi64(__m128i a) { return _mm_cvtepi32_epi64(a); } +TEST_CONSTEXPR(match_v2di(_mm_cvtepi32_epi64(_mm_setr_epi32(-70000, 2, -1, 0)), -70000, 2)); + __m128i test_mm_cvtepu8_epi16(__m128i a) { // CHECK-LABEL: test_mm_cvtepu8_epi16 // CHECK: shufflevector <16 x i8> {{.*}}, <16 x i8> {{.*}}, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7> @@ -128,6 +151,8 @@ __m128i test_mm_cvtepu8_epi16(__m128i a) { return _mm_cvtepu8_epi16(a); } +TEST_CONSTEXPR(match_v8hi(_mm_cvtepu8_epi16(_mm_setr_epi8(-3, 2, -1, 0, 1, -2, 3, -4, 0, 0, 0, 0, 0, 0, 0, 0)), 253, 2, 255, 0, 1, 254, 3, 252)); + __m128i test_mm_cvtepu8_epi32(__m128i a) { // CHECK-LABEL: test_mm_cvtepu8_epi32 // CHECK: shufflevector <16 x i8> {{.*}}, <16 x i8> {{.*}}, <4 x i32> <i32 0, i32 1, i32 2, i32 3> @@ -135,6 +160,8 @@ __m128i test_mm_cvtepu8_epi32(__m128i a) { return _mm_cvtepu8_epi32(a); } +TEST_CONSTEXPR(match_v4si(_mm_cvtepu8_epi32(_mm_setr_epi8(-3, 2, -1, 0, 1, -2, 3, -4, 0, 0, 0, 0, 0, 0, 0, 0)), 253, 2, 255, 0)); + __m128i test_mm_cvtepu8_epi64(__m128i a) { // CHECK-LABEL: test_mm_cvtepu8_epi64 // CHECK: shufflevector <16 x i8> {{.*}}, <16 x i8> {{.*}}, <2 x i32> <i32 0, i32 1> @@ -142,6 +169,8 @@ __m128i test_mm_cvtepu8_epi64(__m128i a) { return _mm_cvtepu8_epi64(a); } +TEST_CONSTEXPR(match_v2di(_mm_cvtepu8_epi64(_mm_setr_epi8(-3, 2, -1, 0, 1, -2, 3, -4, 0, 0, 0, 0, 0, 0, 0, 0)), 253, 2)); + __m128i test_mm_cvtepu16_epi32(__m128i a) { // CHECK-LABEL: test_mm_cvtepu16_epi32 // CHECK: shufflevector <8 x i16> {{.*}}, <8 x i16> {{.*}}, <4 x i32> <i32 0, i32 1, i32 2, i32 3> @@ -149,6 +178,8 @@ __m128i test_mm_cvtepu16_epi32(__m128i a) { return _mm_cvtepu16_epi32(a); } +TEST_CONSTEXPR(match_v4si(_mm_cvtepu16_epi32(_mm_setr_epi16(-300, 2, -1, 0, 1, -2, 3, -4)), 65236, 2, 65535, 0)); + __m128i test_mm_cvtepu16_epi64(__m128i a) { // CHECK-LABEL: test_mm_cvtepu16_epi64 // CHECK: shufflevector <8 x i16> {{.*}}, <8 x i16> {{.*}}, <2 x i32> <i32 0, i32 1> @@ -156,6 +187,8 @@ __m128i test_mm_cvtepu16_epi64(__m128i a) { return _mm_cvtepu16_epi64(a); } +TEST_CONSTEXPR(match_v2di(_mm_cvtepu16_epi64(_mm_setr_epi16(-300, 2, -1, 0, 1, -2, 3, -4)), 65236, 2)); + __m128i test_mm_cvtepu32_epi64(__m128i a) { // CHECK-LABEL: test_mm_cvtepu32_epi64 // CHECK: shufflevector <4 x i32> {{.*}}, <4 x i32> {{.*}}, <2 x i32> <i32 0, i32 1> @@ -163,6 +196,8 @@ __m128i test_mm_cvtepu32_epi64(__m128i a) { return _mm_cvtepu32_epi64(a); } +TEST_CONSTEXPR(match_v2di(_mm_cvtepu32_epi64(_mm_setr_epi32(-70000, 2, -1, 0)), 4294897296, 2)); + __m128d test_mm_dp_pd(__m128d x, __m128d y) { // CHECK-LABEL: test_mm_dp_pd // CHECK: call {{.*}}<2 x double> @llvm.x86.sse41.dppd(<2 x double> {{.*}}, <2 x double> {{.*}}, i8 7) @@ -319,12 +354,14 @@ __m128i test_mm_mul_epi32(__m128i x, __m128i y) { // CHECK: mul <2 x i64> %{{.*}}, %{{.*}} return _mm_mul_epi32(x, y); } +TEST_CONSTEXPR(match_m128i(_mm_mul_epi32((__m128i)(__v4si){+1, -2, +3, -4}, (__m128i)(__v4si){-16, -14, +12, +10}), -16, 36)); __m128i test_mm_mullo_epi32(__m128i x, __m128i y) { // CHECK-LABEL: test_mm_mullo_epi32 // CHECK: mul <4 x i32> return _mm_mullo_epi32(x, y); } +TEST_CONSTEXPR(match_v4si(_mm_mullo_epi32((__m128i)(__v4si){+1, -2, +3, -4}, (__m128i)(__v4si){-16, +14, +12, -10}), -16, -28, +36, +40)); __m128i test_mm_packus_epi32(__m128i x, __m128i y) { // CHECK-LABEL: test_mm_packus_epi32 diff --git a/clang/test/CodeGen/X86/sse42-builtins.c b/clang/test/CodeGen/X86/sse42-builtins.c index d0c0cce..3a1e8fc 100644 --- a/clang/test/CodeGen/X86/sse42-builtins.c +++ b/clang/test/CodeGen/X86/sse42-builtins.c @@ -7,8 +7,18 @@ // RUN: %clang_cc1 -x c++ -flax-vector-conversions=none -ffreestanding %s -triple=i386-apple-darwin -target-feature +sse4.2 -emit-llvm -o - -Wall -Werror | FileCheck %s --check-prefixes=CHECK // RUN: %clang_cc1 -x c++ -flax-vector-conversions=none -ffreestanding %s -triple=i386-apple-darwin -target-feature +sse4.2 -fno-signed-char -emit-llvm -o - -Wall -Werror | FileCheck %s --check-prefixes=CHECK +// RUN: %clang_cc1 -x c -flax-vector-conversions=none -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +sse4.2 -emit-llvm -o - -Wall -Werror -fexperimental-new-constant-interpreter | FileCheck %s --check-prefixes=CHECK,X64 +// RUN: %clang_cc1 -x c -flax-vector-conversions=none -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +sse4.2 -fno-signed-char -emit-llvm -o - -Wall -Werror -fexperimental-new-constant-interpreter | FileCheck %s --check-prefixes=CHECK,X64 +// RUN: %clang_cc1 -x c -flax-vector-conversions=none -ffreestanding %s -triple=i386-apple-darwin -target-feature +sse4.2 -emit-llvm -o - -Wall -Werror -fexperimental-new-constant-interpreter | FileCheck %s --check-prefixes=CHECK +// RUN: %clang_cc1 -x c -flax-vector-conversions=none -ffreestanding %s -triple=i386-apple-darwin -target-feature +sse4.2 -fno-signed-char -emit-llvm -o - -Wall -Werror -fexperimental-new-constant-interpreter | FileCheck %s --check-prefixes=CHECK +// RUN: %clang_cc1 -x c++ -flax-vector-conversions=none -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +sse4.2 -emit-llvm -o - -Wall -Werror -fexperimental-new-constant-interpreter | FileCheck %s --check-prefixes=CHECK,X64 +// RUN: %clang_cc1 -x c++ -flax-vector-conversions=none -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +sse4.2 -fno-signed-char -emit-llvm -o - -Wall -Werror -fexperimental-new-constant-interpreter | FileCheck %s --check-prefixes=CHECK,X64 +// RUN: %clang_cc1 -x c++ -flax-vector-conversions=none -ffreestanding %s -triple=i386-apple-darwin -target-feature +sse4.2 -emit-llvm -o - -Wall -Werror -fexperimental-new-constant-interpreter | FileCheck %s --check-prefixes=CHECK +// RUN: %clang_cc1 -x c++ -flax-vector-conversions=none -ffreestanding %s -triple=i386-apple-darwin -target-feature +sse4.2 -fno-signed-char -emit-llvm -o - -Wall -Werror -fexperimental-new-constant-interpreter | FileCheck %s --check-prefixes=CHECK + #include <immintrin.h> +#include "builtin_test_helpers.h" // NOTE: This should match the tests in llvm/test/CodeGen/X86/sse42-intrinsics-fast-isel.ll @@ -59,6 +69,7 @@ __m128i test_mm_cmpgt_epi64(__m128i A, __m128i B) { // CHECK: icmp sgt <2 x i64> return _mm_cmpgt_epi64(A, B); } +TEST_CONSTEXPR(match_v2di(_mm_cmpgt_epi64((__m128i)(__v2di){+1, -8}, (__m128i)(__v2di){-10, -8}), -1, 0)); int test_mm_cmpistra(__m128i A, __m128i B) { // CHECK-LABEL: test_mm_cmpistra diff --git a/clang/test/CodeGen/X86/ssse3-builtins.c b/clang/test/CodeGen/X86/ssse3-builtins.c index 982c74c..56ff73f0 100644 --- a/clang/test/CodeGen/X86/ssse3-builtins.c +++ b/clang/test/CodeGen/X86/ssse3-builtins.c @@ -1,10 +1,24 @@ // RUN: %clang_cc1 -x c -flax-vector-conversions=none -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +ssse3 -emit-llvm -o - -Wall -Werror | FileCheck %s +// RUN: %clang_cc1 -x c -flax-vector-conversions=none -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +ssse3 -fno-signed-char -emit-llvm -o - -Wall -Werror | FileCheck %s // RUN: %clang_cc1 -x c -flax-vector-conversions=none -ffreestanding %s -triple=i386-apple-darwin -target-feature +ssse3 -emit-llvm -o - -Wall -Werror | FileCheck %s +// RUN: %clang_cc1 -x c -flax-vector-conversions=none -ffreestanding %s -triple=i386-apple-darwin -target-feature +ssse3 -fno-signed-char -emit-llvm -o - -Wall -Werror | FileCheck %s // RUN: %clang_cc1 -x c++ -flax-vector-conversions=none -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +ssse3 -emit-llvm -o - -Wall -Werror | FileCheck %s +// RUN: %clang_cc1 -x c++ -flax-vector-conversions=none -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +ssse3 -fno-signed-char -emit-llvm -o - -Wall -Werror | FileCheck %s // RUN: %clang_cc1 -x c++ -flax-vector-conversions=none -ffreestanding %s -triple=i386-apple-darwin -target-feature +ssse3 -emit-llvm -o - -Wall -Werror | FileCheck %s +// RUN: %clang_cc1 -x c++ -flax-vector-conversions=none -ffreestanding %s -triple=i386-apple-darwin -target-feature +ssse3 -fno-signed-char -emit-llvm -o - -Wall -Werror | FileCheck %s + +// RUN: %clang_cc1 -x c -flax-vector-conversions=none -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +ssse3 -emit-llvm -o - -Wall -Werror -fexperimental-new-constant-interpreter | FileCheck %s +// RUN: %clang_cc1 -x c -flax-vector-conversions=none -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +ssse3 -fno-signed-char -emit-llvm -o - -Wall -Werror -fexperimental-new-constant-interpreter | FileCheck %s +// RUN: %clang_cc1 -x c -flax-vector-conversions=none -ffreestanding %s -triple=i386-apple-darwin -target-feature +ssse3 -emit-llvm -o - -Wall -Werror -fexperimental-new-constant-interpreter | FileCheck %s +// RUN: %clang_cc1 -x c -flax-vector-conversions=none -ffreestanding %s -triple=i386-apple-darwin -target-feature +ssse3 -fno-signed-char -emit-llvm -o - -Wall -Werror -fexperimental-new-constant-interpreter | FileCheck %s +// RUN: %clang_cc1 -x c++ -flax-vector-conversions=none -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +ssse3 -emit-llvm -o - -Wall -Werror -fexperimental-new-constant-interpreter | FileCheck %s +// RUN: %clang_cc1 -x c++ -flax-vector-conversions=none -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +ssse3 -fno-signed-char -emit-llvm -o - -Wall -Werror -fexperimental-new-constant-interpreter | FileCheck %s +// RUN: %clang_cc1 -x c++ -flax-vector-conversions=none -ffreestanding %s -triple=i386-apple-darwin -target-feature +ssse3 -emit-llvm -o - -Wall -Werror -fexperimental-new-constant-interpreter | FileCheck %s +// RUN: %clang_cc1 -x c++ -flax-vector-conversions=none -ffreestanding %s -triple=i386-apple-darwin -target-feature +ssse3 -fno-signed-char -emit-llvm -o - -Wall -Werror -fexperimental-new-constant-interpreter | FileCheck %s #include <immintrin.h> +#include "builtin_test_helpers.h" // NOTE: This should match the tests in llvm/test/CodeGen/X86/ssse3-intrinsics-fast-isel.ll @@ -13,18 +27,21 @@ __m128i test_mm_abs_epi8(__m128i a) { // CHECK: [[ABS:%.*]] = call <16 x i8> @llvm.abs.v16i8(<16 x i8> %{{.*}}, i1 false) return _mm_abs_epi8(a); } +TEST_CONSTEXPR(match_v16qi(_mm_abs_epi8((__m128i)(__v16qs){+100, +50, -100, +20, +80, -50, +120, -20, -100, -50, +100, -20, -80, +50, -120, +20}), 100, 50, 100, 20, 80, 50, 120, 20, 100, 50, 100, 20, 80, 50, 120, 20)); __m128i test_mm_abs_epi16(__m128i a) { // CHECK-LABEL: test_mm_abs_epi16 // CHECK: [[ABS:%.*]] = call <8 x i16> @llvm.abs.v8i16(<8 x i16> %{{.*}}, i1 false) return _mm_abs_epi16(a); } +TEST_CONSTEXPR(match_v8hi(_mm_abs_epi16((__m128i)(__v8hi){+32000, -32000, +6, -60, +80, -50, +120, -20}), 32000, 32000, 6, 60, 80, 50, 120, 20)); __m128i test_mm_abs_epi32(__m128i a) { // CHECK-LABEL: test_mm_abs_epi32 // CHECK: [[ABS:%.*]] = call <4 x i32> @llvm.abs.v4i32(<4 x i32> %{{.*}}, i1 false) return _mm_abs_epi32(a); } +TEST_CONSTEXPR(match_v4si(_mm_abs_epi32((__m128i)(__v4si){-5, -1, 0, 1}), 5, 1, 0, 1)); __m128i test_mm_alignr_epi8(__m128i a, __m128i b) { // CHECK-LABEL: test_mm_alignr_epi8 diff --git a/clang/test/CodeGen/X86/x86-bswap.c b/clang/test/CodeGen/X86/x86-bswap.c index 589dd83..8a5baac 100644 --- a/clang/test/CodeGen/X86/x86-bswap.c +++ b/clang/test/CodeGen/X86/x86-bswap.c @@ -1,45 +1,41 @@ // RUN: %clang_cc1 -x c -ffreestanding %s -triple=x86_64-apple-darwin -no-enable-noundef-analysis -emit-llvm -o - | FileCheck %s // RUN: %clang_cc1 -x c++ -std=c++11 -ffreestanding %s -triple=x86_64-apple-darwin -no-enable-noundef-analysis -emit-llvm -o - | FileCheck %s +// RUN: %clang_cc1 -x c -ffreestanding %s -triple=x86_64-apple-darwin -no-enable-noundef-analysis -emit-llvm -o - -fexperimental-new-constant-interpreter | FileCheck %s +// RUN: %clang_cc1 -x c++ -std=c++11 -ffreestanding %s -triple=x86_64-apple-darwin -no-enable-noundef-analysis -emit-llvm -o - -fexperimental-new-constant-interpreter | FileCheck %s + + #include <x86intrin.h> +#include "builtin_test_helpers.h" int test__bswapd(int X) { // CHECK-LABEL: test__bswapd // CHECK: call i32 @llvm.bswap.i32 return __bswapd(X); } +TEST_CONSTEXPR(__bswapd(0x00000000) == 0x00000000); +TEST_CONSTEXPR(__bswapd(0x01020304) == 0x04030201); int test_bswap(int X) { // CHECK-LABEL: test_bswap // CHECK: call i32 @llvm.bswap.i32 return _bswap(X); } +TEST_CONSTEXPR(_bswap(0x00000000) == 0x00000000); +TEST_CONSTEXPR(_bswap(0x10203040) == 0x40302010); long test__bswapq(long long X) { // CHECK-LABEL: test__bswapq // CHECK: call i64 @llvm.bswap.i64 return __bswapq(X); } +TEST_CONSTEXPR(__bswapq(0x0000000000000000ULL) == 0x0000000000000000); +TEST_CONSTEXPR(__bswapq(0x0102030405060708ULL) == 0x0807060504030201); long test_bswap64(long long X) { // CHECK-LABEL: test_bswap64 // CHECK: call i64 @llvm.bswap.i64 return _bswap64(X); } - -// Test constexpr handling. -#if defined(__cplusplus) && (__cplusplus >= 201103L) - -char bswapd_0[__bswapd(0x00000000) == 0x00000000 ? 1 : -1]; -char bswapd_1[__bswapd(0x01020304) == 0x04030201 ? 1 : -1]; - -char bswap_0[_bswap(0x00000000) == 0x00000000 ? 1 : -1]; -char bswap_1[_bswap(0x10203040) == 0x40302010 ? 1 : -1]; - -char bswapq_0[__bswapq(0x0000000000000000ULL) == 0x0000000000000000 ? 1 : -1]; -char bswapq_1[__bswapq(0x0102030405060708ULL) == 0x0807060504030201 ? 1 : -1]; - -char bswap64_0[_bswap64(0x0000000000000000ULL) == 0x0000000000000000 ? 1 : -1]; -char bswap64_1[_bswap64(0x1020304050607080ULL) == 0x8070605040302010 ? 1 : -1]; - -#endif +TEST_CONSTEXPR(_bswap64(0x0000000000000000ULL) == 0x0000000000000000); +TEST_CONSTEXPR(_bswap64(0x1020304050607080ULL) == 0x8070605040302010); diff --git a/clang/test/CodeGen/X86/x86-builtins.c b/clang/test/CodeGen/X86/x86-builtins.c index e503e47..37cfe3e 100644 --- a/clang/test/CodeGen/X86/x86-builtins.c +++ b/clang/test/CodeGen/X86/x86-builtins.c @@ -1,39 +1,40 @@ // RUN: %clang_cc1 -x c -ffreestanding %s -triple=x86_64-unknown-unknown -emit-llvm -o - -Wall -Werror | FileCheck %s // RUN: %clang_cc1 -x c -ffreestanding %s -triple=i386-unknown-unknown -emit-llvm -o - -Wall -Werror | FileCheck %s -// RUN: %clang_cc1 -x c++ -std=c++11 -ffreestanding %s -triple=x86_64-unknown-unknown -emit-llvm -o - -Wall -Werror | FileCheck %s -// RUN: %clang_cc1 -x c++ -std=c++11 -ffreestanding %s -triple=i386-unknown-unknown -emit-llvm -o - -Wall -Werror | FileCheck %s +// RUN: %clang_cc1 -x c++ -ffreestanding %s -triple=x86_64-unknown-unknown -emit-llvm -o - -Wall -Werror | FileCheck %s +// RUN: %clang_cc1 -x c++ -ffreestanding %s -triple=i386-unknown-unknown -emit-llvm -o - -Wall -Werror | FileCheck %s + +// RUN: %clang_cc1 -x c -ffreestanding %s -triple=x86_64-unknown-unknown -emit-llvm -o - -Wall -Werror -fexperimental-new-constant-interpreter | FileCheck %s +// RUN: %clang_cc1 -x c -ffreestanding %s -triple=i386-unknown-unknown -emit-llvm -o - -Wall -Werror -fexperimental-new-constant-interpreter | FileCheck %s +// RUN: %clang_cc1 -x c++ -ffreestanding %s -triple=x86_64-unknown-unknown -emit-llvm -o - -Wall -Werror -fexperimental-new-constant-interpreter | FileCheck %s +// RUN: %clang_cc1 -x c++ -ffreestanding %s -triple=i386-unknown-unknown -emit-llvm -o - -Wall -Werror -fexperimental-new-constant-interpreter | FileCheck %s #include <x86intrin.h> +#include "builtin_test_helpers.h" unsigned int test_castf32_u32 (float __A){ // CHECK-LABEL: test_castf32_u32 // CHECK: %{{.*}} = load i32, ptr %{{.*}}, align 4 return _castf32_u32(__A); } +TEST_CONSTEXPR(_castf32_u32(-0.0f) == 0x80000000); unsigned long long test_castf64_u64 (double __A){ // CHECK-LABEL: test_castf64_u64 // CHECK: %{{.*}} = load i64, ptr %{{.*}}, align 8 return _castf64_u64(__A); } +TEST_CONSTEXPR(_castf64_u64(-0.0) == 0x8000000000000000); float test_castu32_f32 (unsigned int __A){ // CHECK-LABEL: test_castu32_f32 // CHECK: %{{.*}} = load float, ptr %{{.*}}, align 4 return _castu32_f32(__A); } +TEST_CONSTEXPR(_castu32_f32(0x3F800000) == +1.0f); double test_castu64_f64 (unsigned long long __A){ // CHECK-LABEL: test_castu64_f64 // CHECK: %{{.*}} = load double, ptr %{{.*}}, align 8 return _castu64_f64(__A); } - -// Test constexpr handling. -#if defined(__cplusplus) && (__cplusplus >= 201103L) -char cast_f32_u32_0[_castf32_u32(-0.0f) == 0x80000000 ? 1 : -1]; -char cast_u32_f32_0[_castu32_f32(0x3F800000) == +1.0f ? 1 : -1]; - -char castf64_u64_0[_castf64_u64(-0.0) == 0x8000000000000000 ? 1 : -1]; -char castu64_f64_0[_castu64_f64(0xBFF0000000000000ULL) == -1.0 ? 1 : -1]; -#endif +TEST_CONSTEXPR(_castu64_f64(0xBFF0000000000000ULL) == -1.0); diff --git a/clang/test/CodeGen/X86/xop-builtins.c b/clang/test/CodeGen/X86/xop-builtins.c index 8ba6b8b..994fc7b 100644 --- a/clang/test/CodeGen/X86/xop-builtins.c +++ b/clang/test/CodeGen/X86/xop-builtins.c @@ -1,10 +1,24 @@ -// RUN: %clang_cc1 -flax-vector-conversions=none -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +xop -emit-llvm -o - -Wall -Werror | FileCheck %s -// RUN: %clang_cc1 -flax-vector-conversions=none -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +xop -fno-signed-char -emit-llvm -o - -Wall -Werror | FileCheck %s -// RUN: %clang_cc1 -flax-vector-conversions=none -ffreestanding %s -triple=i386-apple-darwin -target-feature +xop -emit-llvm -o - -Wall -Werror | FileCheck %s -// RUN: %clang_cc1 -flax-vector-conversions=none -ffreestanding %s -triple=i386-apple-darwin -target-feature +xop -fno-signed-char -emit-llvm -o - -Wall -Werror | FileCheck %s +// RUN: %clang_cc1 -x c -flax-vector-conversions=none -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +xop -emit-llvm -o - -Wall -Werror | FileCheck %s +// RUN: %clang_cc1 -x c -flax-vector-conversions=none -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +xop -fno-signed-char -emit-llvm -o - -Wall -Werror | FileCheck %s +// RUN: %clang_cc1 -x c -flax-vector-conversions=none -ffreestanding %s -triple=i386-apple-darwin -target-feature +xop -emit-llvm -o - -Wall -Werror | FileCheck %s +// RUN: %clang_cc1 -x c -flax-vector-conversions=none -ffreestanding %s -triple=i386-apple-darwin -target-feature +xop -fno-signed-char -emit-llvm -o - -Wall -Werror | FileCheck %s +// RUN: %clang_cc1 -x c++ -flax-vector-conversions=none -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +xop -emit-llvm -o - -Wall -Werror | FileCheck %s +// RUN: %clang_cc1 -x c++ -flax-vector-conversions=none -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +xop -fno-signed-char -emit-llvm -o - -Wall -Werror | FileCheck %s +// RUN: %clang_cc1 -x c++ -flax-vector-conversions=none -ffreestanding %s -triple=i386-apple-darwin -target-feature +xop -emit-llvm -o - -Wall -Werror | FileCheck %s +// RUN: %clang_cc1 -x c++ -flax-vector-conversions=none -ffreestanding %s -triple=i386-apple-darwin -target-feature +xop -fno-signed-char -emit-llvm -o - -Wall -Werror | FileCheck %s + +// RUN: %clang_cc1 -x c -flax-vector-conversions=none -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +xop -emit-llvm -o - -Wall -Werror -fexperimental-new-constant-interpreter | FileCheck %s +// RUN: %clang_cc1 -x c -flax-vector-conversions=none -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +xop -fno-signed-char -emit-llvm -o - -Wall -Werror -fexperimental-new-constant-interpreter | FileCheck %s +// RUN: %clang_cc1 -x c -flax-vector-conversions=none -ffreestanding %s -triple=i386-apple-darwin -target-feature +xop -emit-llvm -o - -Wall -Werror -fexperimental-new-constant-interpreter | FileCheck %s +// RUN: %clang_cc1 -x c -flax-vector-conversions=none -ffreestanding %s -triple=i386-apple-darwin -target-feature +xop -fno-signed-char -emit-llvm -o - -Wall -Werror -fexperimental-new-constant-interpreter | FileCheck %s +// RUN: %clang_cc1 -x c++ -flax-vector-conversions=none -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +xop -emit-llvm -o - -Wall -Werror -fexperimental-new-constant-interpreter | FileCheck %s +// RUN: %clang_cc1 -x c++ -flax-vector-conversions=none -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +xop -fno-signed-char -emit-llvm -o - -Wall -Werror -fexperimental-new-constant-interpreter | FileCheck %s +// RUN: %clang_cc1 -x c++ -flax-vector-conversions=none -ffreestanding %s -triple=i386-apple-darwin -target-feature +xop -emit-llvm -o - -Wall -Werror -fexperimental-new-constant-interpreter | FileCheck %s +// RUN: %clang_cc1 -x c++ -flax-vector-conversions=none -ffreestanding %s -triple=i386-apple-darwin -target-feature +xop -fno-signed-char -emit-llvm -o - -Wall -Werror -fexperimental-new-constant-interpreter | FileCheck %s #include <x86intrin.h> +#include "builtin_test_helpers.h" // NOTE: This should match the tests in llvm/test/CodeGen/X86/xop-intrinsics-fast-isel.ll @@ -46,25 +60,25 @@ __m128i test_mm_macc_epi32(__m128i a, __m128i b, __m128i c) { __m128i test_mm_maccslo_epi32(__m128i a, __m128i b, __m128i c) { // CHECK-LABEL: test_mm_maccslo_epi32 - // CHECK: call <2 x i64> @llvm.x86.xop.vpmacssdql(<4 x i32> %{{.*}}, <4 x i32> %{{.*}}, <2 x i64> %{{.*}}) + // CHECK: call {{.*}}<2 x i64> @llvm.x86.xop.vpmacssdql(<4 x i32> %{{.*}}, <4 x i32> %{{.*}}, <2 x i64> %{{.*}}) return _mm_maccslo_epi32(a, b, c); } __m128i test_mm_macclo_epi32(__m128i a, __m128i b, __m128i c) { // CHECK-LABEL: test_mm_macclo_epi32 - // CHECK: call <2 x i64> @llvm.x86.xop.vpmacsdql(<4 x i32> %{{.*}}, <4 x i32> %{{.*}}, <2 x i64> %{{.*}}) + // CHECK: call {{.*}}<2 x i64> @llvm.x86.xop.vpmacsdql(<4 x i32> %{{.*}}, <4 x i32> %{{.*}}, <2 x i64> %{{.*}}) return _mm_macclo_epi32(a, b, c); } __m128i test_mm_maccshi_epi32(__m128i a, __m128i b, __m128i c) { // CHECK-LABEL: test_mm_maccshi_epi32 - // CHECK: call <2 x i64> @llvm.x86.xop.vpmacssdqh(<4 x i32> %{{.*}}, <4 x i32> %{{.*}}, <2 x i64> %{{.*}}) + // CHECK: call {{.*}}<2 x i64> @llvm.x86.xop.vpmacssdqh(<4 x i32> %{{.*}}, <4 x i32> %{{.*}}, <2 x i64> %{{.*}}) return _mm_maccshi_epi32(a, b, c); } __m128i test_mm_macchi_epi32(__m128i a, __m128i b, __m128i c) { // CHECK-LABEL: test_mm_macchi_epi32 - // CHECK: call <2 x i64> @llvm.x86.xop.vpmacsdqh(<4 x i32> %{{.*}}, <4 x i32> %{{.*}}, <2 x i64> %{{.*}}) + // CHECK: call {{.*}}<2 x i64> @llvm.x86.xop.vpmacsdqh(<4 x i32> %{{.*}}, <4 x i32> %{{.*}}, <2 x i64> %{{.*}}) return _mm_macchi_epi32(a, b, c); } @@ -94,7 +108,7 @@ __m128i test_mm_haddd_epi8(__m128i a) { __m128i test_mm_haddq_epi8(__m128i a) { // CHECK-LABEL: test_mm_haddq_epi8 - // CHECK: call <2 x i64> @llvm.x86.xop.vphaddbq(<16 x i8> %{{.*}}) + // CHECK: call {{.*}}<2 x i64> @llvm.x86.xop.vphaddbq(<16 x i8> %{{.*}}) return _mm_haddq_epi8(a); } @@ -106,13 +120,13 @@ __m128i test_mm_haddd_epi16(__m128i a) { __m128i test_mm_haddq_epi16(__m128i a) { // CHECK-LABEL: test_mm_haddq_epi16 - // CHECK: call <2 x i64> @llvm.x86.xop.vphaddwq(<8 x i16> %{{.*}}) + // CHECK: call {{.*}}<2 x i64> @llvm.x86.xop.vphaddwq(<8 x i16> %{{.*}}) return _mm_haddq_epi16(a); } __m128i test_mm_haddq_epi32(__m128i a) { // CHECK-LABEL: test_mm_haddq_epi32 - // CHECK: call <2 x i64> @llvm.x86.xop.vphadddq(<4 x i32> %{{.*}}) + // CHECK: call {{.*}}<2 x i64> @llvm.x86.xop.vphadddq(<4 x i32> %{{.*}}) return _mm_haddq_epi32(a); } @@ -130,7 +144,7 @@ __m128i test_mm_haddd_epu8(__m128i a) { __m128i test_mm_haddq_epu8(__m128i a) { // CHECK-LABEL: test_mm_haddq_epu8 - // CHECK: call <2 x i64> @llvm.x86.xop.vphaddubq(<16 x i8> %{{.*}}) + // CHECK: call {{.*}}<2 x i64> @llvm.x86.xop.vphaddubq(<16 x i8> %{{.*}}) return _mm_haddq_epu8(a); } @@ -142,13 +156,13 @@ __m128i test_mm_haddd_epu16(__m128i a) { __m128i test_mm_haddq_epu16(__m128i a) { // CHECK-LABEL: test_mm_haddq_epu16 - // CHECK: call <2 x i64> @llvm.x86.xop.vphadduwq(<8 x i16> %{{.*}}) + // CHECK: call {{.*}}<2 x i64> @llvm.x86.xop.vphadduwq(<8 x i16> %{{.*}}) return _mm_haddq_epu16(a); } __m128i test_mm_haddq_epu32(__m128i a) { // CHECK-LABEL: test_mm_haddq_epu32 - // CHECK: call <2 x i64> @llvm.x86.xop.vphaddudq(<4 x i32> %{{.*}}) + // CHECK: call {{.*}}<2 x i64> @llvm.x86.xop.vphaddudq(<4 x i32> %{{.*}}) return _mm_haddq_epu32(a); } @@ -166,7 +180,7 @@ __m128i test_mm_hsubd_epi16(__m128i a) { __m128i test_mm_hsubq_epi32(__m128i a) { // CHECK-LABEL: test_mm_hsubq_epi32 - // CHECK: call <2 x i64> @llvm.x86.xop.vphsubdq(<4 x i32> %{{.*}}) + // CHECK: call {{.*}}<2 x i64> @llvm.x86.xop.vphsubdq(<4 x i32> %{{.*}}) return _mm_hsubq_epi32(a); } @@ -178,6 +192,7 @@ __m128i test_mm_cmov_si128(__m128i a, __m128i b, __m128i c) { // CHECK-NEXT: %{{.*}} = or <2 x i64> [[AND]], [[ANDN]] return _mm_cmov_si128(a, b, c); } +TEST_CONSTEXPR(match_v4si(_mm_cmov_si128((__m128i)(__v4si){+1,+2,+3,+4}, (__m128i)(__v4si){-4,-3,-2,-1}, (__m128i)(__v4si){-1,0,0,-1}), +1, -3, -2, +4)); __m256i test_mm256_cmov_si256(__m256i a, __m256i b, __m256i c) { // CHECK-LABEL: test_mm256_cmov_si256 @@ -187,6 +202,7 @@ __m256i test_mm256_cmov_si256(__m256i a, __m256i b, __m256i c) { // CHECK-NEXT: %{{.*}} = or <4 x i64> [[AND]], [[ANDN]] return _mm256_cmov_si256(a, b, c); } +TEST_CONSTEXPR(match_v4di(_mm256_cmov_si256((__m256i)(__v4di){+1,+2,+3,+4}, (__m256i)(__v4di){-4,-3,-2,-1}, (__m256i)(__v4di){0,-1,0,-1}), -4, +2, -2, +4)); __m128i test_mm_perm_epi8(__m128i a, __m128i b, __m128i c) { // CHECK-LABEL: test_mm_perm_epi8 @@ -214,7 +230,7 @@ __m128i test_mm_rot_epi32(__m128i a, __m128i b) { __m128i test_mm_rot_epi64(__m128i a, __m128i b) { // CHECK-LABEL: test_mm_rot_epi64 - // CHECK: call <2 x i64> @llvm.fshl.v2i64(<2 x i64> %{{.*}}, <2 x i64> %{{.*}}, <2 x i64> %{{.*}}) + // CHECK: call {{.*}}<2 x i64> @llvm.fshl.v2i64(<2 x i64> %{{.*}}, <2 x i64> %{{.*}}, <2 x i64> %{{.*}}) return _mm_rot_epi64(a, b); } @@ -223,24 +239,28 @@ __m128i test_mm_roti_epi8(__m128i a) { // CHECK: call <16 x i8> @llvm.fshl.v16i8(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, <16 x i8> splat (i8 1)) return _mm_roti_epi8(a, 1); } +TEST_CONSTEXPR(match_v16qi(_mm_roti_epi8(((__m128i)(__v16qs){0, 1, -2, 3, -4, 5, -6, 7, -8, 9, -10, 11, -12, 13, -14, 15}), 3), 0, 8, -9, 24, -25, 40, -41, 56, -57, 72, -73, 88, -89, 104, -105, 120)); __m128i test_mm_roti_epi16(__m128i a) { // CHECK-LABEL: test_mm_roti_epi16 // CHECK: call <8 x i16> @llvm.fshl.v8i16(<8 x i16> %{{.*}}, <8 x i16> %{{.*}}, <8 x i16> splat (i16 50)) return _mm_roti_epi16(a, 50); } +TEST_CONSTEXPR(match_v8hi(_mm_roti_epi16(((__m128i)(__v8hi){2, -3, 4, -5, 6, -7, 8, -9}), 1), 4, -5, 8, -9, 12, -13, 16, -17)); __m128i test_mm_roti_epi32(__m128i a) { // CHECK-LABEL: test_mm_roti_epi32 // CHECK: call <4 x i32> @llvm.fshl.v4i32(<4 x i32> %{{.*}}, <4 x i32> %{{.*}}, <4 x i32> splat (i32 226)) return _mm_roti_epi32(a, -30); } +TEST_CONSTEXPR(match_v4si(_mm_roti_epi32(((__m128i)(__v4si){1, -2, 3, -4}), 5), 32, -33, 96, -97)); __m128i test_mm_roti_epi64(__m128i a) { // CHECK-LABEL: test_mm_roti_epi64 - // CHECK: call <2 x i64> @llvm.fshl.v2i64(<2 x i64> %{{.*}}, <2 x i64> %{{.*}}, <2 x i64> splat (i64 100)) + // CHECK: call {{.*}}<2 x i64> @llvm.fshl.v2i64(<2 x i64> %{{.*}}, <2 x i64> %{{.*}}, <2 x i64> splat (i64 100)) return _mm_roti_epi64(a, 100); } +TEST_CONSTEXPR(match_v2di(_mm_roti_epi64(((__m128i)(__v2di){99, -55}), 19), 51904512, -28311553)); __m128i test_mm_shl_epi8(__m128i a, __m128i b) { // CHECK-LABEL: test_mm_shl_epi8 @@ -262,7 +282,7 @@ __m128i test_mm_shl_epi32(__m128i a, __m128i b) { __m128i test_mm_shl_epi64(__m128i a, __m128i b) { // CHECK-LABEL: test_mm_shl_epi64 - // CHECK: call <2 x i64> @llvm.x86.xop.vpshlq(<2 x i64> %{{.*}}, <2 x i64> %{{.*}}) + // CHECK: call {{.*}}<2 x i64> @llvm.x86.xop.vpshlq(<2 x i64> %{{.*}}, <2 x i64> %{{.*}}) return _mm_shl_epi64(a, b); } @@ -286,7 +306,7 @@ __m128i test_mm_sha_epi32(__m128i a, __m128i b) { __m128i test_mm_sha_epi64(__m128i a, __m128i b) { // CHECK-LABEL: test_mm_sha_epi64 - // CHECK: call <2 x i64> @llvm.x86.xop.vpshaq(<2 x i64> %{{.*}}, <2 x i64> %{{.*}}) + // CHECK: call {{.*}}<2 x i64> @llvm.x86.xop.vpshaq(<2 x i64> %{{.*}}, <2 x i64> %{{.*}}) return _mm_sha_epi64(a, b); } @@ -372,36 +392,36 @@ __m256 test_mm256_permute2_ps(__m256 a, __m256 b, __m256i c) { __m128 test_mm_frcz_ss(__m128 a) { // CHECK-LABEL: test_mm_frcz_ss - // CHECK: call <4 x float> @llvm.x86.xop.vfrcz.ss(<4 x float> %{{.*}}) + // CHECK: call {{.*}}<4 x float> @llvm.x86.xop.vfrcz.ss(<4 x float> %{{.*}}) return _mm_frcz_ss(a); } __m128d test_mm_frcz_sd(__m128d a) { // CHECK-LABEL: test_mm_frcz_sd - // CHECK: call <2 x double> @llvm.x86.xop.vfrcz.sd(<2 x double> %{{.*}}) + // CHECK: call {{.*}}<2 x double> @llvm.x86.xop.vfrcz.sd(<2 x double> %{{.*}}) return _mm_frcz_sd(a); } __m128 test_mm_frcz_ps(__m128 a) { // CHECK-LABEL: test_mm_frcz_ps - // CHECK: call <4 x float> @llvm.x86.xop.vfrcz.ps(<4 x float> %{{.*}}) + // CHECK: call {{.*}}<4 x float> @llvm.x86.xop.vfrcz.ps(<4 x float> %{{.*}}) return _mm_frcz_ps(a); } __m128d test_mm_frcz_pd(__m128d a) { // CHECK-LABEL: test_mm_frcz_pd - // CHECK: call <2 x double> @llvm.x86.xop.vfrcz.pd(<2 x double> %{{.*}}) + // CHECK: call {{.*}}<2 x double> @llvm.x86.xop.vfrcz.pd(<2 x double> %{{.*}}) return _mm_frcz_pd(a); } __m256 test_mm256_frcz_ps(__m256 a) { // CHECK-LABEL: test_mm256_frcz_ps - // CHECK: call <8 x float> @llvm.x86.xop.vfrcz.ps.256(<8 x float> %{{.*}}) + // CHECK: call {{.*}}<8 x float> @llvm.x86.xop.vfrcz.ps.256(<8 x float> %{{.*}}) return _mm256_frcz_ps(a); } __m256d test_mm256_frcz_pd(__m256d a) { // CHECK-LABEL: test_mm256_frcz_pd - // CHECK: call <4 x double> @llvm.x86.xop.vfrcz.pd.256(<4 x double> %{{.*}}) + // CHECK: call {{.*}}<4 x double> @llvm.x86.xop.vfrcz.pd.256(<4 x double> %{{.*}}) return _mm256_frcz_pd(a); } diff --git a/clang/test/CodeGen/afn-flag-test.c b/clang/test/CodeGen/afn-flag-test.c index f948fc0..bc2ff5b 100644 --- a/clang/test/CodeGen/afn-flag-test.c +++ b/clang/test/CodeGen/afn-flag-test.c @@ -7,8 +7,6 @@ double afn_option_test(double x) { // CHECK-LABEL: define{{.*}} double @afn_option_test(double %x) #0 { // CHECK-AFN: %{{.*}} = call afn double @{{.*}}exp{{.*}}(double %{{.*}}) - // CHECK-AFN: attributes #0 ={{.*}} "approx-func-fp-math"="true" {{.*}} // CHECK-NO-AFN: %{{.*}} = call double @{{.*}}exp{{.*}}(double %{{.*}}) - // CHECK-NO-AFN-NOT: attributes #0 ={{.*}} "approx-func-fp-math"="true" {{.*}} } diff --git a/clang/test/CodeGen/aggregate-assign-call.c b/clang/test/CodeGen/aggregate-assign-call.c index 7d97239..f09e77032 100644 --- a/clang/test/CodeGen/aggregate-assign-call.c +++ b/clang/test/CodeGen/aggregate-assign-call.c @@ -24,23 +24,23 @@ struct S bar(void) { // O1: %[[TMP2_ALLOCA:[^ ]+]] = alloca %struct.S // O1: %[[TMP3_ALLOCA:[^ ]+]] = alloca %struct.S - // O1: call void @llvm.lifetime.start.p0({{[^,]*}}, ptr %[[TMP1_ALLOCA]]) + // O1: call void @llvm.lifetime.start.p0(ptr %[[TMP1_ALLOCA]]) // O1: call void @foo r = foo(); // O1: memcpy - // O1: call void @llvm.lifetime.end.p0({{[^,]*}}, ptr %[[TMP1_ALLOCA]]) + // O1: call void @llvm.lifetime.end.p0(ptr %[[TMP1_ALLOCA]]) - // O1: call void @llvm.lifetime.start.p0({{[^,]*}}, ptr %[[TMP2_ALLOCA]]) + // O1: call void @llvm.lifetime.start.p0(ptr %[[TMP2_ALLOCA]]) // O1: call void @foo r = foo(); // O1: memcpy - // O1: call void @llvm.lifetime.end.p0({{[^,]*}}, ptr %[[TMP2_ALLOCA]]) + // O1: call void @llvm.lifetime.end.p0(ptr %[[TMP2_ALLOCA]]) - // O1: call void @llvm.lifetime.start.p0({{[^,]*}}, ptr %[[TMP3_ALLOCA]]) + // O1: call void @llvm.lifetime.start.p0(ptr %[[TMP3_ALLOCA]]) // O1: call void @foo r = foo(); // O1: memcpy - // O1: call void @llvm.lifetime.end.p0({{[^,]*}}, ptr %[[TMP3_ALLOCA]]) + // O1: call void @llvm.lifetime.end.p0(ptr %[[TMP3_ALLOCA]]) return r; } @@ -59,17 +59,17 @@ struct S baz(int i, volatile int *j) { // O1: %[[TMP2_ALLOCA:[^ ]+]] = alloca %struct.S do { - // O1: call void @llvm.lifetime.start.p0({{[^,]*}}, ptr %[[TMP1_ALLOCA]]) + // O1: call void @llvm.lifetime.start.p0(ptr %[[TMP1_ALLOCA]]) // - // O1: call void @llvm.lifetime.end.p0({{[^,]*}}, ptr %[[TMP1_ALLOCA]]) + // O1: call void @llvm.lifetime.end.p0(ptr %[[TMP1_ALLOCA]]) // // O1: call void @foo_int(ptr dead_on_unwind writable sret(%struct.S) align 4 %[[TMP1_ALLOCA]], // O1: call void @llvm.memcpy - // O1: call void @llvm.lifetime.end.p0({{[^,]*}}, ptr %[[TMP1_ALLOCA]]) - // O1: call void @llvm.lifetime.start.p0({{[^,]*}}, ptr %[[TMP2_ALLOCA]]) + // O1: call void @llvm.lifetime.end.p0(ptr %[[TMP1_ALLOCA]]) + // O1: call void @llvm.lifetime.start.p0(ptr %[[TMP2_ALLOCA]]) // O1: call void @foo_int(ptr dead_on_unwind writable sret(%struct.S) align 4 %[[TMP2_ALLOCA]], // O1: call void @llvm.memcpy - // O1: call void @llvm.lifetime.end.p0({{[^,]*}}, ptr %[[TMP2_ALLOCA]]) + // O1: call void @llvm.lifetime.end.p0(ptr %[[TMP2_ALLOCA]]) r = foo_int(({ if (*j) break; diff --git a/clang/test/CodeGen/amdgpu-barrier-type-debug-info.c b/clang/test/CodeGen/amdgpu-barrier-type-debug-info.c deleted file mode 100644 index 4eafbba..0000000 --- a/clang/test/CodeGen/amdgpu-barrier-type-debug-info.c +++ /dev/null @@ -1,8 +0,0 @@ -// REQUIRES: amdgpu-registered-target -// RUN: %clang_cc1 -triple amdgcn -emit-llvm -o - %s -debug-info-kind=limited 2>&1 | FileCheck %s - -// CHECK: name: "__amdgpu_named_workgroup_barrier_t",{{.*}}baseType: ![[BT:[0-9]+]] -// CHECK: [[BT]] = !DIBasicType(name: "__amdgpu_named_workgroup_barrier_t", size: 128, encoding: DW_ATE_unsigned) -void test_locals(void) { - __amdgpu_named_workgroup_barrier_t *k0; -} diff --git a/clang/test/CodeGen/amdgpu-buffer-rsrc-type-debug-info.c b/clang/test/CodeGen/amdgpu-buffer-rsrc-type-debug-info.c deleted file mode 100644 index c266fa8..0000000 --- a/clang/test/CodeGen/amdgpu-buffer-rsrc-type-debug-info.c +++ /dev/null @@ -1,8 +0,0 @@ -// REQUIRES: amdgpu-registered-target -// RUN: %clang_cc1 -triple amdgcn -emit-llvm -o - %s -debug-info-kind=limited 2>&1 | FileCheck %s - -// CHECK: name: "__amdgpu_buffer_rsrc_t",{{.*}}baseType: ![[BT:[0-9]+]] -// CHECK: [[BT]] = !DICompositeType(tag: DW_TAG_structure_type, name: "__amdgpu_buffer_rsrc_t", {{.*}} flags: DIFlagFwdDecl) -void test_locals(void) { - __amdgpu_buffer_rsrc_t k; -} diff --git a/clang/test/CodeGen/arm_acle.c b/clang/test/CodeGen/arm_acle.c index 74de824..0f539cb 100644 --- a/clang/test/CodeGen/arm_acle.c +++ b/clang/test/CodeGen/arm_acle.c @@ -139,29 +139,10 @@ void test_dbg(void) { #endif /* 8.5 Swap */ -// AArch32-LABEL: @test_swp( -// AArch32-NEXT: entry: -// AArch32-NEXT: br label [[DO_BODY_I:%.*]] -// AArch32: do.body.i: -// AArch32-NEXT: [[LDREX_I:%.*]] = call i32 @llvm.arm.ldrex.p0(ptr elementtype(i32) [[P:%.*]]) -// AArch32-NEXT: [[STREX_I:%.*]] = call i32 @llvm.arm.strex.p0(i32 [[X:%.*]], ptr elementtype(i32) [[P]]) -// AArch32-NEXT: [[TOBOOL_I:%.*]] = icmp ne i32 [[STREX_I]], 0 -// AArch32-NEXT: br i1 [[TOBOOL_I]], label [[DO_BODY_I]], label [[__SWP_EXIT:%.*]], !llvm.loop [[LOOP3:![0-9]+]] -// AArch32: __swp.exit: -// AArch32-NEXT: ret void -// -// AArch64-LABEL: @test_swp( -// AArch64-NEXT: entry: -// AArch64-NEXT: br label [[DO_BODY_I:%.*]] -// AArch64: do.body.i: -// AArch64-NEXT: [[LDXR_I:%.*]] = call i64 @llvm.aarch64.ldxr.p0(ptr elementtype(i32) [[P:%.*]]) -// AArch64-NEXT: [[TMP0:%.*]] = trunc i64 [[LDXR_I]] to i32 -// AArch64-NEXT: [[TMP1:%.*]] = zext i32 [[X:%.*]] to i64 -// AArch64-NEXT: [[STXR_I:%.*]] = call i32 @llvm.aarch64.stxr.p0(i64 [[TMP1]], ptr elementtype(i32) [[P]]) -// AArch64-NEXT: [[TOBOOL_I:%.*]] = icmp ne i32 [[STXR_I]], 0 -// AArch64-NEXT: br i1 [[TOBOOL_I]], label [[DO_BODY_I]], label [[__SWP_EXIT:%.*]], !llvm.loop [[LOOP2:![0-9]+]] -// AArch64: __swp.exit: -// AArch64-NEXT: ret void +// ARM-LABEL: @test_swp( +// ARM-NEXT: entry: +// ARM-NEXT: [[TMP0:%.*]] = atomicrmw volatile xchg ptr [[P:%.*]], i32 [[X:%.*]] monotonic, align 4 +// ARM-NEXT: ret void // void test_swp(uint32_t x, volatile void *p) { __swp(x, p); diff --git a/clang/test/CodeGen/arm_acle_swp.c b/clang/test/CodeGen/arm_acle_swp.c new file mode 100644 index 0000000..15fb49d --- /dev/null +++ b/clang/test/CodeGen/arm_acle_swp.c @@ -0,0 +1,17 @@ +// RUN: %clang_cc1 -ffreestanding -triple thumbv7m-none-eabi -O0 -disable-O0-optnone -emit-llvm -o - %s | opt -S -passes=mem2reg | FileCheck %s -check-prefix=ATOMIC +// RUN: %clang_cc1 -ffreestanding -triple armv7a-none-eabi -O0 -disable-O0-optnone -emit-llvm -o - %s | opt -S -passes=mem2reg | FileCheck %s -check-prefix=ATOMIC +// RUN: %clang_cc1 -ffreestanding -triple armv6-none-eabi -O0 -disable-O0-optnone -emit-llvm -o - %s | opt -S -passes=mem2reg | FileCheck %s -check-prefix=ATOMIC +// RUN: %clang_cc1 -ffreestanding -triple thumbv6m-none-eabi -O0 -disable-O0-optnone -emit-llvm -o - %s | opt -S -passes=mem2reg | FileCheck %s -check-prefix=ATOMIC +// RUN: %clang_cc1 -ffreestanding -triple armv5-unknown-linux-gnu -target-abi aapcs -O0 -disable-O0-optnone -emit-llvm -o - %s | opt -S -passes=mem2reg | FileCheck %s -check-prefix=ATOMIC +// RUN: %clang_cc1 -ffreestanding -triple armv5-none-eabi -O0 -disable-O0-optnone -emit-llvm -o - %s | opt -S -passes=mem2reg | FileCheck %s -check-prefix=SWP + +// REQUIRES: arm-registered-target + +#include <arm_acle.h> + +// SWP: call i32 asm "swp $0, $1, [$2]", "=r,r,r,~{memory}"(i32 {{.*}}, ptr {{.*}}) + +// ATOMIC: atomicrmw volatile xchg ptr {{.*}}, i32 {{.*}} monotonic, align 4 +uint32_t test_swp(uint32_t x, volatile void *p) { + return __swp(x, p); +} diff --git a/clang/test/CodeGen/artificial.c b/clang/test/CodeGen/artificial.c deleted file mode 100644 index 5c433c8..0000000 --- a/clang/test/CodeGen/artificial.c +++ /dev/null @@ -1,10 +0,0 @@ -// RUN: %clang_cc1 -triple=x86_64-unknown-linux-gnu -emit-llvm -debug-info-kind=limited %s -o - | FileCheck %s - -extern void foo(void); -// CHECK: !DISubprogram(name: "foo" -// CHECK-SAME: flags: DIFlagArtificial -inline void __attribute__((artificial)) foo(void) {} - -void baz(void) { - foo(); -} diff --git a/clang/test/CodeGen/asan-unified-lto.ll b/clang/test/CodeGen/asan-unified-lto.ll index 7b790d4..21734e1 100644 --- a/clang/test/CodeGen/asan-unified-lto.ll +++ b/clang/test/CodeGen/asan-unified-lto.ll @@ -5,6 +5,7 @@ ; RUN: %clang_cc1 -emit-llvm-bc -O1 -flto -fsanitize=address -o - -x ir < %s | llvm-dis -o - | FileCheck %s ; RUN: %clang_cc1 -emit-llvm-bc -O1 -flto -funified-lto -fsanitize=address -o - -x ir < %s | llvm-dis -o - | FileCheck %s +; RUN: %clang_cc1 -emit-llvm-bc -O1 -flto -fno-unified-lto -fsanitize=address -o - -x ir < %s | llvm-dis -o - | FileCheck %s ; CHECK: @anon.3ee0898e5200a57350fed5485ae5d237 target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128" diff --git a/clang/test/CodeGen/assignment-tracking/assignment-tracking.cpp b/clang/test/CodeGen/assignment-tracking/assignment-tracking.cpp deleted file mode 100644 index b7309af..0000000 --- a/clang/test/CodeGen/assignment-tracking/assignment-tracking.cpp +++ /dev/null @@ -1,97 +0,0 @@ -// RUN: %clang_cc1 -triple x86_64-none-linux-gnu -debug-info-kind=standalone -O0 \ -// RUN: -emit-llvm -fexperimental-assignment-tracking=forced %s -o - \ -// RUN: -disable-O0-optnone \ -// RUN: | FileCheck %s --implicit-check-not="call void @llvm.dbg" - -// Based on llvm/test/DebugInfo/Generic/track-assignments.ll - check that using -// -Xclang -fexperimental-assignment-tracking results in emitting (or, as it is -// set up currently, telling llvm to create) assignment tracking metadata. -// -// See the original test for more info. - -struct Inner { int A, B; }; -struct Outer { Inner A, B; }; -struct Large { int A[10]; }; -struct LCopyCtor { int A[4]; LCopyCtor(); LCopyCtor(LCopyCtor const &); }; -int Value, Index, Cond; -Inner InnerA, InnerB; -Large L; - -void zeroInit() { int Z[3] = {0, 0, 0}; } -// CHECK-LABEL: define dso_local void @_Z8zeroInitv -// CHECK: %Z = alloca [3 x i32], align 4, !DIAssignID ![[ID_0:[0-9]+]] -// CHECK-NEXT: #dbg_assign(i1 poison, ![[VAR_0:[0-9]+]], !DIExpression(), ![[ID_0]], ptr %Z, !DIExpression(), -// CHECK: @llvm.memset{{.*}}, !DIAssignID ![[ID_1:[0-9]+]] -// CHECK-NEXT: #dbg_assign(i8 0, ![[VAR_0]], !DIExpression(), ![[ID_1]], ptr %Z, !DIExpression(), - -void memcpyInit() { int A[4] = {0, 1, 2, 3}; } -// CHECK-LABEL: define dso_local void @_Z10memcpyInitv -// CHECK: %A = alloca [4 x i32], align 16, !DIAssignID ![[ID_2:[0-9]+]] -// CHECK-NEXT: #dbg_assign(i1 poison, ![[VAR_1:[0-9]+]], !DIExpression(), ![[ID_2]], ptr %A, !DIExpression(), -// CHECK: @llvm.memcpy{{.*}}, !DIAssignID ![[ID_3:[0-9]+]] -// CHECK-NEXT: #dbg_assign(i1 poison, ![[VAR_1]], !DIExpression(), ![[ID_3]], ptr %A, !DIExpression(), - -void setField() { - Outer O; - O.A.B = Value; -} -// CHECK-LABEL: define dso_local void @_Z8setFieldv -// CHECK: %O = alloca %struct.Outer, align 4, !DIAssignID ![[ID_4:[0-9]+]] -// CHECK-NEXT: #dbg_assign(i1 poison, ![[VAR_2:[0-9]+]], !DIExpression(), ![[ID_4]], ptr %O, !DIExpression(), -// CHECK: store i32 %0, ptr %B, align 4,{{.*}}!DIAssignID ![[ID_5:[0-9]+]] -// CHECK-NEXT: #dbg_assign(i32 %0, ![[VAR_2]], !DIExpression(DW_OP_LLVM_fragment, 32, 32), ![[ID_5]], ptr %B, !DIExpression(), - -void unknownOffset() { - int A[2]; - A[Index] = Value; -} -// CHECK-LABEL: define dso_local void @_Z13unknownOffsetv -// CHECK: %A = alloca [2 x i32], align 4, !DIAssignID ![[ID_6:[0-9]+]] -// CHECK-NEXT: #dbg_assign(i1 poison, ![[VAR_3:[0-9]+]], !DIExpression(), ![[ID_6]], ptr %A, !DIExpression(), - -Inner sharedAlloca() { - if (Cond) { - Inner A = InnerA; - return A; - } else { - Inner B = InnerB; - return B; - } -} -// CHECK-LABEL: define dso_local i64 @_Z12sharedAllocav -// CHECK: %retval = alloca %struct.Inner, align 4, !DIAssignID ![[ID_7:[0-9]+]] -// CHECK-NEXT: #dbg_assign(i1 poison, ![[VAR_4:[0-9]+]], !DIExpression(), ![[ID_7]], ptr %retval, !DIExpression(), -// CHECK-NEXT: #dbg_assign(i1 poison, ![[VAR_5:[0-9]+]], !DIExpression(), ![[ID_7]], ptr %retval, !DIExpression(), -// CHECK: if.then: -// CHECK: call void @llvm.memcpy{{.*}}, !DIAssignID ![[ID_8:[0-9]+]] -// CHECK-NEXT: #dbg_assign(i1 poison, ![[VAR_4]], !DIExpression(), ![[ID_8]], ptr %retval, !DIExpression(), -// CHECK-NEXT: #dbg_assign(i1 poison, ![[VAR_5]], !DIExpression(), ![[ID_8]], ptr %retval, !DIExpression(), -// CHECK: if.else: -// CHECK: call void @llvm.memcpy{{.*}}, !DIAssignID ![[ID_9:[0-9]+]] -// CHECK-NEXT: #dbg_assign(i1 poison, ![[VAR_4]], !DIExpression(), ![[ID_9]], ptr %retval, !DIExpression(), -// CHECK-NEXT: #dbg_assign(i1 poison, ![[VAR_5]], !DIExpression(), ![[ID_9]], ptr %retval, !DIExpression(), - -Large sret() { - Large X = L; - return X; -} -// CHECK-LABEL: define dso_local void @_Z4sretv -// CHECK: #dbg_declare - -void byval(Large X) {} -// CHECK-LABEL: define dso_local void @_Z5byval5Large -// CHECK: #dbg_declare - -LCopyCtor indirectReturn() { - LCopyCtor R; - return R; -} -// CHECK-LABEL: define dso_local void @_Z14indirectReturnv -// CHECK: #dbg_declare - -// CHECK-DAG: ![[VAR_0]] = !DILocalVariable(name: "Z", -// CHECK-DAG: ![[VAR_1]] = !DILocalVariable(name: "A", -// CHECK-DAG: ![[VAR_2]] = !DILocalVariable(name: "O", -// CHECK-DAG: ![[VAR_3]] = !DILocalVariable(name: "A", -// CHECK-DAG: ![[VAR_4]] = !DILocalVariable(name: "B", -// CHECK-DAG: ![[VAR_5]] = !DILocalVariable(name: "A", diff --git a/clang/test/CodeGen/assignment-tracking/flag.cpp b/clang/test/CodeGen/assignment-tracking/flag.cpp deleted file mode 100644 index 3bd974f..0000000 --- a/clang/test/CodeGen/assignment-tracking/flag.cpp +++ /dev/null @@ -1,64 +0,0 @@ -//// Explicitly enabled: -// RUN: %clang_cc1 -triple x86_64-none-linux-gnu -debug-info-kind=standalone \ -// RUN: -emit-llvm -fexperimental-assignment-tracking=enabled %s -o - -O1 \ -// RUN: | FileCheck %s --check-prefixes=ENABLE - -//// Explicitly disabled: -// RUN: %clang_cc1 -triple x86_64-none-linux-gnu -debug-info-kind=standalone \ -// RUN: -emit-llvm %s -o - -fexperimental-assignment-tracking=disabled -O1\ -// RUN: | FileCheck %s --check-prefixes=DISABLE - -//// Enabled by default: -// RUN: %clang_cc1 -triple x86_64-none-linux-gnu -debug-info-kind=standalone \ -// RUN: -emit-llvm %s -o - -O1 \ -// RUN: | FileCheck %s --check-prefixes=ENABLE - -//// Disabled at O0 unless forced. -// RUN: %clang_cc1 -triple x86_64-none-linux-gnu -debug-info-kind=standalone \ -// RUN: -emit-llvm %s -o - -fexperimental-assignment-tracking=enabled \ -// RUN: -O0 -disable-O0-optnone \ -// RUN: | FileCheck %s --check-prefixes=DISABLE -// RUN: %clang_cc1 -triple x86_64-none-linux-gnu -debug-info-kind=standalone \ -// RUN: -emit-llvm %s -o - -fexperimental-assignment-tracking=forced \ -// RUN: -O0 -disable-O0-optnone \ -// RUN: | FileCheck %s --check-prefixes=ENABLE - -//// Disabled for LTO and thinLTO unless forced. -// RUN: %clang_cc1 -triple x86_64-none-linux-gnu -debug-info-kind=standalone \ -// RUN: -emit-llvm %s -o - -fexperimental-assignment-tracking=enabled \ -// RUN: -O1 -flto=full \ -// RUN: | FileCheck %s --check-prefixes=DISABLE -// RUN: %clang_cc1 -triple x86_64-none-linux-gnu -debug-info-kind=standalone \ -// RUN: -emit-llvm %s -o - -fexperimental-assignment-tracking=enabled \ -// RUN: -O1 -flto=thin \ -// RUN: | FileCheck %s --check-prefixes=DISABLE -// RUN: %clang_cc1 -triple x86_64-none-linux-gnu -debug-info-kind=standalone \ -// RUN: -emit-llvm %s -o - -fexperimental-assignment-tracking=forced \ -// RUN: -O1 -flto=full \ -// RUN: | FileCheck %s --check-prefixes=ENABLE -// RUN: %clang_cc1 -triple x86_64-none-linux-gnu -debug-info-kind=standalone \ -// RUN: -emit-llvm %s -o - -fexperimental-assignment-tracking=forced \ -// RUN: -O1 -flto=thin \ -// RUN: | FileCheck %s --check-prefixes=ENABLE - -//// Disabled for LLDB debugger tuning unless forced. -// RUN: %clang_cc1 -triple x86_64-none-linux-gnu -debug-info-kind=standalone \ -// RUN: -emit-llvm %s -o - -fexperimental-assignment-tracking=enabled \ -// RUN: -O1 -debugger-tuning=lldb \ -// RUN: | FileCheck %s --check-prefixes=DISABLE -// RUN: %clang_cc1 -triple x86_64-none-linux-gnu -debug-info-kind=standalone \ -// RUN: -emit-llvm %s -o - -fexperimental-assignment-tracking=forced \ -// RUN: -O1 -debugger-tuning=lldb \ -// RUN: | FileCheck %s --check-prefixes=ENABLE - -// Check the assignment-tracking module flag appears in the output when the -// flag -fexperimental-assignment-tracking is set to 'enabled' (in some cases) -// or 'forced' (always), and is does not appear when the flag is set to -// 'disabled' (default). - -// ENABLE: "debug-info-assignment-tracking" -// DISABLE-NOT: "debug-info-assignment-tracking" -//// Check there's actually any output at all. -// DISABLE: llvm.module.flags - -void fun(int a) {} diff --git a/clang/test/CodeGen/assignment-tracking/memcpy-fragment.cpp b/clang/test/CodeGen/assignment-tracking/memcpy-fragment.cpp deleted file mode 100644 index 34fc804..0000000 --- a/clang/test/CodeGen/assignment-tracking/memcpy-fragment.cpp +++ /dev/null @@ -1,57 +0,0 @@ -// RUN: %clang_cc1 -triple x86_64-none-linux-gnu -debug-info-kind=standalone -O0 \ -// RUN: -emit-llvm -fexperimental-assignment-tracking=forced %s -o - \ -// RUN: -disable-O0-optnone \ -// RUN: | FileCheck %s - -// Check that the (debug) codegen looks right with assignment tracking -// enabled. Each fragment that is written to should have a dbg.assign that has -// the DIAssignID of the write as an argument. The fragment offset and size -// should match the offset into the base storage and size of the store. Each of -// the scenarios below results in slightly different arguments generated for -// the memcpy. - -// Test write a complete struct field only. -void fragmentWhole() -{ - struct Record { - int num; - char ch; - }; - - Record dest; - char src = '\0'; - __builtin_memcpy(&dest.ch, &src, sizeof(char)); -} -// CHECK: call void @llvm.memcpy{{.+}}, !DIAssignID ![[memberID:[0-9]+]] -// CHECK-NEXT: #dbg_assign({{.*}}poison, !{{[0-9]+}}, !DIExpression(DW_OP_LLVM_fragment, 32, 8), ![[memberID]], ptr %ch, !DIExpression(), - -// Write starting at a field and overlapping part of another. -void fragmentWholeToPartial() -{ - struct Record { - int num1; - int num2; - }; - - Record dest; - char src[5]="\0\0\0\0"; - __builtin_memcpy(&dest.num1, &src, 5); -} -// CHECK: call void @llvm.memcpy{{.+}}, !DIAssignID ![[exceed:[0-9]+]] -// CHECK-NEXT: #dbg_assign({{.*}}poison, !{{[0-9]+}}, !DIExpression(DW_OP_LLVM_fragment, 0, 40), ![[exceed]], ptr %num1, !DIExpression(), - -// Write starting between fields. -void fragmentPartialToWhole() -{ - struct record { - int num1; - int num2; - int num3; -}; - - record dest; - char src[5]="\0\0\0\0"; - __builtin_memcpy((char*)&(dest.num2) + 3, &src, 5); -} -// CHECK: call void @llvm.memcpy{{.+}}, !DIAssignID ![[addendID:[0-9]+]] -// CHECK-NEXT: #dbg_assign({{.*}}poison, !{{.*}}, !DIExpression(DW_OP_LLVM_fragment, 56, 40), ![[addendID]], ptr %add.ptr, !DIExpression(), diff --git a/clang/test/CodeGen/assignment-tracking/nested-scope.cpp b/clang/test/CodeGen/assignment-tracking/nested-scope.cpp deleted file mode 100644 index 7d91882..0000000 --- a/clang/test/CodeGen/assignment-tracking/nested-scope.cpp +++ /dev/null @@ -1,20 +0,0 @@ -// RUN: %clang_cc1 -triple x86_64-none-linux-gnu -debug-info-kind=standalone -O0 \ -// RUN: -emit-llvm -fexperimental-assignment-tracking=forced %s -o - \ -// RUN: -disable-O0-optnone \ -// RUN: | FileCheck %s - -// Check that dbg.assign intrinsics get a !dbg with with the same scope as -// their variable. - -// CHECK: #dbg_assign({{.+}}, [[local:![0-9]+]], {{.+}}, {{.+}}, {{.+}}, [[dbg:![0-9]+]] -// CHECK-DAG: [[local]] = !DILocalVariable(name: "local", scope: [[scope:![0-9]+]], -// CHECK-DAG: [[dbg]] = !DILocation({{.+}}, scope: [[scope]]) -// CHECK-DAG: [[scope]] = distinct !DILexicalBlock - -void ext(int*); -void fun() { - { - int local; - } -} - diff --git a/clang/test/CodeGen/attr-btf_tag-typedef.c b/clang/test/CodeGen/attr-btf_tag-typedef.c deleted file mode 100644 index 1f00246..0000000 --- a/clang/test/CodeGen/attr-btf_tag-typedef.c +++ /dev/null @@ -1,13 +0,0 @@ -// RUN: %clang_cc1 -triple %itanium_abi_triple -debug-info-kind=limited -emit-llvm -o - %s | FileCheck %s - -#define __tag1 __attribute__((btf_decl_tag("tag1"))) -typedef struct { int a; } __s __tag1; -typedef unsigned * __u __tag1; -__s a; -__u u; - -// CHECK: !DIDerivedType(tag: DW_TAG_typedef, name: "__u", file: ![[#]], line: [[#]], baseType: ![[#]], annotations: ![[ANNOT:[0-9]+]]) -// CHECK: ![[ANNOT]] = !{![[TAG1:[0-9]+]]} -// CHECK: ![[TAG1]] = !{!"btf_decl_tag", !"tag1"} - -// CHECK: !DIDerivedType(tag: DW_TAG_typedef, name: "__s", file: ![[#]], line: [[#]], baseType: ![[#]], annotations: ![[ANNOT]]) diff --git a/clang/test/CodeGen/attr-btf_type_tag-func-ptr.c b/clang/test/CodeGen/attr-btf_type_tag-func-ptr.c deleted file mode 100644 index 26935c8..0000000 --- a/clang/test/CodeGen/attr-btf_type_tag-func-ptr.c +++ /dev/null @@ -1,15 +0,0 @@ -// RUN: %clang_cc1 -triple %itanium_abi_triple -debug-info-kind=limited -emit-llvm -o - %s | FileCheck %s - -struct t { - int (__attribute__((btf_type_tag("rcu"))) *f)(); - int a; -}; -int foo(struct t *arg) { - return arg->a; -} - -// CHECK: !DIDerivedType(tag: DW_TAG_member, name: "f" -// CHECK-SAME: baseType: ![[L18:[0-9]+]] -// CHECK: ![[L18]] = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: ![[#]], size: [[#]], annotations: ![[L21:[0-9]+]]) -// CHECK: ![[L21]] = !{![[L22:[0-9]+]]} -// CHECK: ![[L22]] = !{!"btf_type_tag", !"rcu"} diff --git a/clang/test/CodeGen/attr-btf_type_tag-func.c b/clang/test/CodeGen/attr-btf_type_tag-func.c deleted file mode 100644 index dbb8864..0000000 --- a/clang/test/CodeGen/attr-btf_type_tag-func.c +++ /dev/null @@ -1,28 +0,0 @@ -// RUN: %clang_cc1 -triple %itanium_abi_triple -debug-info-kind=limited -emit-llvm -o - %s | FileCheck %s -// RUN: %clang_cc1 -triple %itanium_abi_triple -DDOUBLE_BRACKET_ATTRS=1 -debug-info-kind=limited -emit-llvm -o - %s | FileCheck %s - -#if DOUBLE_BRACKET_ATTRS -#define __tag1 [[clang::btf_type_tag("tag1")]] -#define __tag2 [[clang::btf_type_tag("tag2")]] -#define __tag3 [[clang::btf_type_tag("tag3")]] -#define __tag4 [[clang::btf_type_tag("tag4")]] -#else -#define __tag1 __attribute__((btf_type_tag("tag1"))) -#define __tag2 __attribute__((btf_type_tag("tag2"))) -#define __tag3 __attribute__((btf_type_tag("tag3"))) -#define __tag4 __attribute__((btf_type_tag("tag4"))) -#endif - -int __tag1 * __tag2 *foo(int __tag1 * __tag2 *arg) { return arg; } - -// CHECK: distinct !DISubprogram(name: "foo", scope: ![[#]], file: ![[#]], line: [[#]], type: ![[L9:[0-9]+]] -// CHECK: ![[L9]] = !DISubroutineType(types: ![[L10:[0-9]+]] -// CHECK: ![[L10]] = !{![[L11:[0-9]+]], ![[L11]]} -// CHECK: ![[L11]] = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: ![[L12:[0-9]+]], size: [[#]], annotations: ![[L16:[0-9]+]] -// CHECK: ![[L12]] = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: ![[L13:[0-9]+]], size: [[#]], annotations: ![[L14:[0-9]+]] -// CHECK: ![[L13]] = !DIBasicType(name: "int", size: 32, encoding: DW_ATE_signed -// CHECK: ![[L14]] = !{![[L15:[0-9]+]]} -// CHECK: ![[L15]] = !{!"btf_type_tag", !"tag1"} -// CHECK: ![[L16]] = !{![[L17:[0-9]+]]} -// CHECK: ![[L17]] = !{!"btf_type_tag", !"tag2"} -// CHECK: !DILocalVariable(name: "arg", arg: 1, scope: ![[#]], file: ![[#]], line: [[#]], type: ![[L11]]) diff --git a/clang/test/CodeGen/attr-btf_type_tag-similar-type.c b/clang/test/CodeGen/attr-btf_type_tag-similar-type.c deleted file mode 100644 index ba9cd2e..0000000 --- a/clang/test/CodeGen/attr-btf_type_tag-similar-type.c +++ /dev/null @@ -1,39 +0,0 @@ -// RUN: %clang_cc1 -triple %itanium_abi_triple -debug-info-kind=limited -emit-llvm -o - %s | FileCheck %s -// RUN: %clang_cc1 -triple %itanium_abi_triple -DDOUBLE_BRACKET_ATTRS=1 -debug-info-kind=limited -emit-llvm -o - %s | FileCheck %s - -#if DOUBLE_BRACKET_ATTRS -#define __tag1 [[clang::btf_type_tag("tag1")]] -#define __tag2 [[clang::btf_type_tag("tag2")]] -#define __tag3 [[clang::btf_type_tag("tag3")]] -#define __tag4 [[clang::btf_type_tag("tag4")]] -#else -#define __tag1 __attribute__((btf_type_tag("tag1"))) -#define __tag2 __attribute__((btf_type_tag("tag2"))) -#define __tag3 __attribute__((btf_type_tag("tag3"))) -#define __tag4 __attribute__((btf_type_tag("tag4"))) -#endif - -struct map_value { - int __tag1 __tag3 *a; - int __tag2 __tag4 *b; -}; - -struct map_value *func(void); - -int test(struct map_value *arg) -{ - return *arg->a; -} - -// CHECK: distinct !DICompositeType(tag: DW_TAG_structure_type, name: "map_value", file: ![[#]], line: [[#]], size: [[#]], elements: ![[L14:[0-9]+]] -// CHECK: ![[L14]] = !{![[L15:[0-9]+]], ![[L20:[0-9]+]]} -// CHECK: ![[L15]] = !DIDerivedType(tag: DW_TAG_member, name: "a", scope: ![[#]], file: ![[#]], line: [[#]], baseType: ![[L16:[0-9]+]] -// CHECK: ![[L16]] = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: ![[#]], size: [[#]], annotations: ![[L17:[0-9]+]] -// CHECK: ![[L17]] = !{![[L18:[0-9]+]], ![[L19:[0-9]+]]} -// CHECK: ![[L18]] = !{!"btf_type_tag", !"tag1"} -// CHECK: ![[L19]] = !{!"btf_type_tag", !"tag3"} -// CHECK: ![[L20]] = !DIDerivedType(tag: DW_TAG_member, name: "b", scope: ![[#]], file: ![[#]], line: [[#]], baseType: ![[L21:[0-9]+]] -// CHECK: ![[L21:[0-9]+]] = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: ![[#]], size: [[#]], annotations: ![[L22:[0-9]+]] -// CHECK: ![[L22]] = !{![[L23:[0-9]+]], ![[L24:[0-9]+]]} -// CHECK: ![[L23]] = !{!"btf_type_tag", !"tag2"} -// CHECK: ![[L24]] = !{!"btf_type_tag", !"tag4"} diff --git a/clang/test/CodeGen/attr-btf_type_tag-typedef-field.c b/clang/test/CodeGen/attr-btf_type_tag-typedef-field.c deleted file mode 100644 index 0c02336..0000000 --- a/clang/test/CodeGen/attr-btf_type_tag-typedef-field.c +++ /dev/null @@ -1,41 +0,0 @@ -// RUN: %clang_cc1 -triple %itanium_abi_triple -debug-info-kind=limited -emit-llvm -o - %s | FileCheck %s -// RUN: %clang_cc1 -triple %itanium_abi_triple -DDOUBLE_BRACKET_ATTRS=1 -debug-info-kind=limited -emit-llvm -o - %s | FileCheck %s - -#if DOUBLE_BRACKET_ATTRS -#define __tag1 [[clang::btf_type_tag("tag1")]] -#define __tag2 [[clang::btf_type_tag("tag2")]] -#else -#define __tag1 __attribute__((btf_type_tag("tag1"))) -#define __tag2 __attribute__((btf_type_tag("tag2"))) -#endif - -typedef void __fn_t(int); -typedef __fn_t __tag1 __tag2 *__fn2_t; -struct t { - int __tag1 * __tag2 *a; - __fn2_t b; - long c; -}; -int *foo1(struct t *a1) { - return (int *)a1->c; -} - -// CHECK: ![[L4:[0-9]+]] = !DIBasicType(name: "int", size: 32, encoding: DW_ATE_signed) -// CHECK: distinct !DICompositeType(tag: DW_TAG_structure_type, name: "t", file: ![[#]], line: [[#]], size: [[#]], elements: ![[L16:[0-9]+]]) -// CHECK: ![[L16]] = !{![[L17:[0-9]+]], ![[L24:[0-9]+]], ![[L31:[0-9]+]]} -// CHECK: ![[L17]] = !DIDerivedType(tag: DW_TAG_member, name: "a", scope: ![[#]], file: ![[#]], line: [[#]], baseType: ![[L18:[0-9]+]], size: [[#]]) -// CHECK: ![[L18]] = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: ![[L19:[0-9]+]], size: [[#]], annotations: ![[L22:[0-9]+]]) -// CHECK: ![[L19]] = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: ![[L4]], size: [[#]], annotations: ![[L20:[0-9]+]]) -// CHECK: ![[L20]] = !{![[L21:[0-9]+]]} -// CHECK: ![[L21]] = !{!"btf_type_tag", !"tag1"} -// CHECK: ![[L22]] = !{![[L23:[0-9]+]]} -// CHECK: ![[L23]] = !{!"btf_type_tag", !"tag2"} -// CHECK: ![[L24]] = !DIDerivedType(tag: DW_TAG_member, name: "b", scope: ![[#]], file: ![[#]], line: [[#]], baseType: ![[L25:[0-9]+]] -// CHECK: ![[L25]] = !DIDerivedType(tag: DW_TAG_typedef, name: "__fn2_t", file: ![[#]], line: [[#]], baseType: ![[L26:[0-9]+]]) -// CHECK: ![[L26]] = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: ![[L27:[0-9]+]], size: [[#]], annotations: ![[L30:[0-9]+]]) -// CHECK: ![[L27]] = !DIDerivedType(tag: DW_TAG_typedef, name: "__fn_t", file: ![[#]], line: [[#]], baseType: ![[L28:[0-9]+]]) -// CHECK: ![[L28]] = !DISubroutineType(types: ![[L29:[0-9]+]]) -// CHECK: ![[L29]] = !{null, ![[L4]]} -// CHECK: ![[L30]] = !{![[L21]], ![[L23]]} -// CHECK: ![[L31]] = !DIDerivedType(tag: DW_TAG_member, name: "c", scope: ![[#]], file: ![[#]], line: [[#]], baseType: ![[L32:[0-9]+]] -// CHECK: ![[L32]] = !DIBasicType(name: "long", size: [[#]], encoding: DW_ATE_signed) diff --git a/clang/test/CodeGen/attr-btf_type_tag-var.c b/clang/test/CodeGen/attr-btf_type_tag-var.c deleted file mode 100644 index ed729e2..0000000 --- a/clang/test/CodeGen/attr-btf_type_tag-var.c +++ /dev/null @@ -1,43 +0,0 @@ -// RUN: %clang_cc1 -triple %itanium_abi_triple -debug-info-kind=limited -emit-llvm -o - %s | FileCheck %s -// RUN: %clang_cc1 -triple %itanium_abi_triple -DDOUBLE_BRACKET_ATTRS=1 -debug-info-kind=limited -emit-llvm -o - %s | FileCheck %s - -#if DOUBLE_BRACKET_ATTRS -#define __tag1 [[clang::btf_type_tag("tag1")]] -#define __tag2 [[clang::btf_type_tag("tag2")]] -#define __tag3 [[clang::btf_type_tag("tag3")]] -#define __tag4 [[clang::btf_type_tag("tag4")]] -#define __tag5 [[clang::btf_type_tag("tag5")]] -#define __tag6 [[clang::btf_type_tag("tag6")]] - -const volatile int __tag1 __tag2 * __tag3 __tag4 const volatile * __tag5 __tag6 const volatile * g; -#else -#define __tag1 __attribute__((btf_type_tag("tag1"))) -#define __tag2 __attribute__((btf_type_tag("tag2"))) -#define __tag3 __attribute__((btf_type_tag("tag3"))) -#define __tag4 __attribute__((btf_type_tag("tag4"))) -#define __tag5 __attribute__((btf_type_tag("tag5"))) -#define __tag6 __attribute__((btf_type_tag("tag6"))) - -const int __tag1 __tag2 volatile * const __tag3 __tag4 volatile * __tag5 __tag6 const volatile * g; -#endif - -// CHECK: distinct !DIGlobalVariable(name: "g", scope: ![[#]], file: ![[#]], line: [[#]], type: ![[L6:[0-9]+]] -// CHECK: ![[L6]] = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: ![[L7:[0-9]+]], size: [[#]], annotations: ![[L22:[0-9]+]] -// CHECK: ![[L7]] = !DIDerivedType(tag: DW_TAG_const_type, baseType: ![[L8:[0-9]+]] -// CHECK: ![[L8]] = !DIDerivedType(tag: DW_TAG_volatile_type, baseType: ![[L9:[0-9]+]] -// CHECK: ![[L9]] = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: ![[L10:[0-9]+]], size: [[#]], annotations: ![[L19:[0-9]+]] -// CHECK: ![[L10]] = !DIDerivedType(tag: DW_TAG_const_type, baseType: ![[L11:[0-9]+]] -// CHECK: ![[L11]] = !DIDerivedType(tag: DW_TAG_volatile_type, baseType: ![[L12:[0-9]+]] -// CHECK: ![[L12]] = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: ![[L13:[0-9]+]], size: [[#]], annotations: ![[L16:[0-9]+]] -// CHECK: ![[L13]] = !DIDerivedType(tag: DW_TAG_const_type, baseType: ![[L14:[0-9]+]] -// CHECK: ![[L14]] = !DIDerivedType(tag: DW_TAG_volatile_type, baseType: ![[L15:[0-9]+]] -// CHECK: ![[L15]] = !DIBasicType(name: "int", size: 32, encoding: DW_ATE_signed -// CHECK: ![[L16]] = !{![[L17:[0-9]+]], ![[L18:[0-9]+]]} -// CHECK: ![[L17]] = !{!"btf_type_tag", !"tag1"} -// CHECK: ![[L18]] = !{!"btf_type_tag", !"tag2"} -// CHECK: ![[L19]] = !{![[L20:[0-9]+]], ![[L21:[0-9]+]]} -// CHECK: ![[L20]] = !{!"btf_type_tag", !"tag3"} -// CHECK: ![[L21]] = !{!"btf_type_tag", !"tag4"} -// CHECK: ![[L22]] = !{![[L23:[0-9]+]], ![[L24:[0-9]+]]} -// CHECK: ![[L23]] = !{!"btf_type_tag", !"tag5"} -// CHECK: ![[L24]] = !{!"btf_type_tag", !"tag6"} diff --git a/clang/test/CodeGen/attr-counted-by-debug-info.c b/clang/test/CodeGen/attr-counted-by-debug-info.c deleted file mode 100644 index a6c2b13..0000000 --- a/clang/test/CodeGen/attr-counted-by-debug-info.c +++ /dev/null @@ -1,18 +0,0 @@ -// RUN: %clang -emit-llvm -DCOUNTED_BY -S -g %s -o - | FileCheck %s -// RUN: %clang -emit-llvm -S -g %s -o - | FileCheck %s - -#ifdef COUNTED_BY -#define __counted_by(member) __attribute__((__counted_by__(member))) -#else -#define __counted_by(member) -#endif - -struct { - int num_counters; - long value[] __counted_by(num_counters); -} agent_send_response_port_num; - -// CHECK: !DICompositeType(tag: DW_TAG_array_type, baseType: ![[BT:.*]], elements: ![[ELEMENTS:.*]]) -// CHECK: ![[BT]] = !DIBasicType(name: "long", size: {{.*}}, encoding: DW_ATE_signed) -// CHECK: ![[ELEMENTS]] = !{![[COUNT:.*]]} -// CHECK: ![[COUNT]] = !DISubrange(count: -1)
\ No newline at end of file diff --git a/clang/test/CodeGen/attr-counted-by-for-pointers.c b/clang/test/CodeGen/attr-counted-by-for-pointers.c index e939e49..0d72b58 100644 --- a/clang/test/CodeGen/attr-counted-by-for-pointers.c +++ b/clang/test/CodeGen/attr-counted-by-for-pointers.c @@ -32,7 +32,7 @@ struct annotated_ptr { // SANITIZE-WITH-ATTR-NEXT: entry: // SANITIZE-WITH-ATTR-NEXT: [[IDXPROM:%.*]] = sext i32 [[INDEX]] to i64 // SANITIZE-WITH-ATTR-NEXT: [[DOTCOUNTED_BY_GEP:%.*]] = getelementptr inbounds nuw i8, ptr [[P]], i64 16 -// SANITIZE-WITH-ATTR-NEXT: [[DOTCOUNTED_BY_LOAD:%.*]] = load i32, ptr [[DOTCOUNTED_BY_GEP]], align 4 +// SANITIZE-WITH-ATTR-NEXT: [[DOTCOUNTED_BY_LOAD:%.*]] = load i32, ptr [[DOTCOUNTED_BY_GEP]], align 8 // SANITIZE-WITH-ATTR-NEXT: [[TMP0:%.*]] = zext i32 [[DOTCOUNTED_BY_LOAD]] to i64, !nosanitize [[META2:![0-9]+]] // SANITIZE-WITH-ATTR-NEXT: [[TMP1:%.*]] = icmp ult i64 [[IDXPROM]], [[TMP0]], !nosanitize [[META2]] // SANITIZE-WITH-ATTR-NEXT: br i1 [[TMP1]], label [[CONT10:%.*]], label [[HANDLER_OUT_OF_BOUNDS:%.*]], !prof [[PROF3:![0-9]+]], !nosanitize [[META2]] @@ -85,7 +85,7 @@ void test1(struct annotated_ptr *p, int index, struct foo *value) { // SANITIZE-WITH-ATTR-NEXT: entry: // SANITIZE-WITH-ATTR-NEXT: [[IDXPROM:%.*]] = sext i32 [[INDEX]] to i64 // SANITIZE-WITH-ATTR-NEXT: [[DOTCOUNTED_BY_GEP:%.*]] = getelementptr inbounds nuw i8, ptr [[P]], i64 16 -// SANITIZE-WITH-ATTR-NEXT: [[DOTCOUNTED_BY_LOAD:%.*]] = load i32, ptr [[DOTCOUNTED_BY_GEP]], align 4 +// SANITIZE-WITH-ATTR-NEXT: [[DOTCOUNTED_BY_LOAD:%.*]] = load i32, ptr [[DOTCOUNTED_BY_GEP]], align 8 // SANITIZE-WITH-ATTR-NEXT: [[TMP0:%.*]] = zext i32 [[DOTCOUNTED_BY_LOAD]] to i64, !nosanitize [[META2]] // SANITIZE-WITH-ATTR-NEXT: [[TMP1:%.*]] = icmp ult i64 [[IDXPROM]], [[TMP0]], !nosanitize [[META2]] // SANITIZE-WITH-ATTR-NEXT: br i1 [[TMP1]], label [[CONT10:%.*]], label [[HANDLER_OUT_OF_BOUNDS:%.*]], !prof [[PROF3]], !nosanitize [[META2]] @@ -138,7 +138,7 @@ void test2(struct annotated_ptr *p, int index, struct foo *value) { // SANITIZE-WITH-ATTR-NEXT: entry: // SANITIZE-WITH-ATTR-NEXT: [[IDXPROM:%.*]] = sext i32 [[INDEX]] to i64 // SANITIZE-WITH-ATTR-NEXT: [[DOTCOUNTED_BY_GEP:%.*]] = getelementptr inbounds nuw i8, ptr [[P]], i64 16 -// SANITIZE-WITH-ATTR-NEXT: [[DOTCOUNTED_BY_LOAD:%.*]] = load i32, ptr [[DOTCOUNTED_BY_GEP]], align 4 +// SANITIZE-WITH-ATTR-NEXT: [[DOTCOUNTED_BY_LOAD:%.*]] = load i32, ptr [[DOTCOUNTED_BY_GEP]], align 8 // SANITIZE-WITH-ATTR-NEXT: [[TMP0:%.*]] = zext i32 [[DOTCOUNTED_BY_LOAD]] to i64, !nosanitize [[META2]] // SANITIZE-WITH-ATTR-NEXT: [[DOTNOT:%.*]] = icmp ugt i64 [[IDXPROM]], [[TMP0]], !nosanitize [[META2]] // SANITIZE-WITH-ATTR-NEXT: br i1 [[DOTNOT]], label [[HANDLER_OUT_OF_BOUNDS:%.*]], label [[CONT10:%.*]], !prof [[PROF15:![0-9]+]], !nosanitize [[META2]] @@ -311,7 +311,7 @@ size_t test6(struct annotated_ptr *p, int index) { // SANITIZE-WITH-ATTR-NEXT: entry: // SANITIZE-WITH-ATTR-NEXT: [[IDXPROM:%.*]] = sext i32 [[INDEX]] to i64 // SANITIZE-WITH-ATTR-NEXT: [[DOTCOUNTED_BY_GEP:%.*]] = getelementptr inbounds nuw i8, ptr [[P]], i64 16 -// SANITIZE-WITH-ATTR-NEXT: [[DOTCOUNTED_BY_LOAD:%.*]] = load i32, ptr [[DOTCOUNTED_BY_GEP]], align 4 +// SANITIZE-WITH-ATTR-NEXT: [[DOTCOUNTED_BY_LOAD:%.*]] = load i32, ptr [[DOTCOUNTED_BY_GEP]], align 8 // SANITIZE-WITH-ATTR-NEXT: [[TMP0:%.*]] = zext i32 [[DOTCOUNTED_BY_LOAD]] to i64, !nosanitize [[META2]] // SANITIZE-WITH-ATTR-NEXT: [[TMP1:%.*]] = icmp ult i64 [[IDXPROM]], [[TMP0]], !nosanitize [[META2]] // SANITIZE-WITH-ATTR-NEXT: br i1 [[TMP1]], label [[CONT10:%.*]], label [[HANDLER_OUT_OF_BOUNDS:%.*]], !prof [[PROF3]], !nosanitize [[META2]] diff --git a/clang/test/CodeGen/attr-counted-by.c b/clang/test/CodeGen/attr-counted-by.c index 9fb50c6..cb23efd 100644 --- a/clang/test/CodeGen/attr-counted-by.c +++ b/clang/test/CodeGen/attr-counted-by.c @@ -72,7 +72,7 @@ struct anon_struct { // SANITIZE-WITH-ATTR-NEXT: unreachable, !nosanitize [[META2]] // SANITIZE-WITH-ATTR: cont3: // SANITIZE-WITH-ATTR-NEXT: [[ARRAY:%.*]] = getelementptr inbounds nuw i8, ptr [[P]], i64 12 -// SANITIZE-WITH-ATTR-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds nuw [0 x i32], ptr [[ARRAY]], i64 0, i64 [[IDXPROM]] +// SANITIZE-WITH-ATTR-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds nuw i32, ptr [[ARRAY]], i64 [[IDXPROM]] // SANITIZE-WITH-ATTR-NEXT: store i32 [[VAL]], ptr [[ARRAYIDX]], align 4, !tbaa [[TBAA4:![0-9]+]] // SANITIZE-WITH-ATTR-NEXT: ret void // @@ -81,7 +81,7 @@ struct anon_struct { // NO-SANITIZE-WITH-ATTR-NEXT: entry: // NO-SANITIZE-WITH-ATTR-NEXT: [[ARRAY:%.*]] = getelementptr inbounds nuw i8, ptr [[P]], i64 12 // NO-SANITIZE-WITH-ATTR-NEXT: [[IDXPROM:%.*]] = sext i32 [[INDEX]] to i64 -// NO-SANITIZE-WITH-ATTR-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds [0 x i32], ptr [[ARRAY]], i64 0, i64 [[IDXPROM]] +// NO-SANITIZE-WITH-ATTR-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds i32, ptr [[ARRAY]], i64 [[IDXPROM]] // NO-SANITIZE-WITH-ATTR-NEXT: store i32 [[VAL]], ptr [[ARRAYIDX]], align 4, !tbaa [[TBAA2:![0-9]+]] // NO-SANITIZE-WITH-ATTR-NEXT: ret void // @@ -90,7 +90,7 @@ struct anon_struct { // SANITIZE-WITHOUT-ATTR-NEXT: entry: // SANITIZE-WITHOUT-ATTR-NEXT: [[ARRAY:%.*]] = getelementptr inbounds nuw i8, ptr [[P]], i64 12 // SANITIZE-WITHOUT-ATTR-NEXT: [[IDXPROM:%.*]] = sext i32 [[INDEX]] to i64 -// SANITIZE-WITHOUT-ATTR-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds [0 x i32], ptr [[ARRAY]], i64 0, i64 [[IDXPROM]] +// SANITIZE-WITHOUT-ATTR-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds i32, ptr [[ARRAY]], i64 [[IDXPROM]] // SANITIZE-WITHOUT-ATTR-NEXT: store i32 [[VAL]], ptr [[ARRAYIDX]], align 4, !tbaa [[TBAA2:![0-9]+]] // SANITIZE-WITHOUT-ATTR-NEXT: ret void // @@ -99,7 +99,7 @@ struct anon_struct { // NO-SANITIZE-WITHOUT-ATTR-NEXT: entry: // NO-SANITIZE-WITHOUT-ATTR-NEXT: [[ARRAY:%.*]] = getelementptr inbounds nuw i8, ptr [[P]], i64 12 // NO-SANITIZE-WITHOUT-ATTR-NEXT: [[IDXPROM:%.*]] = sext i32 [[INDEX]] to i64 -// NO-SANITIZE-WITHOUT-ATTR-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds [0 x i32], ptr [[ARRAY]], i64 0, i64 [[IDXPROM]] +// NO-SANITIZE-WITHOUT-ATTR-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds i32, ptr [[ARRAY]], i64 [[IDXPROM]] // NO-SANITIZE-WITHOUT-ATTR-NEXT: store i32 [[VAL]], ptr [[ARRAYIDX]], align 4, !tbaa [[TBAA2:![0-9]+]] // NO-SANITIZE-WITHOUT-ATTR-NEXT: ret void // @@ -120,7 +120,7 @@ void test1(struct annotated *p, int index, int val) { // SANITIZE-WITH-ATTR-NEXT: unreachable, !nosanitize [[META2]] // SANITIZE-WITH-ATTR: cont6: // SANITIZE-WITH-ATTR-NEXT: [[ARRAY:%.*]] = getelementptr inbounds nuw i8, ptr [[P]], i64 12 -// SANITIZE-WITH-ATTR-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds nuw [0 x i32], ptr [[ARRAY]], i64 0, i64 [[INDEX]] +// SANITIZE-WITH-ATTR-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds nuw i32, ptr [[ARRAY]], i64 [[INDEX]] // SANITIZE-WITH-ATTR-NEXT: [[TMP2:%.*]] = tail call i32 @llvm.smax.i32(i32 [[COUNTED_BY_LOAD]], i32 0) // SANITIZE-WITH-ATTR-NEXT: [[CONV:%.*]] = shl i32 [[TMP2]], 2 // SANITIZE-WITH-ATTR-NEXT: store i32 [[CONV]], ptr [[ARRAYIDX]], align 4, !tbaa [[TBAA4]] @@ -134,7 +134,7 @@ void test1(struct annotated *p, int index, int val) { // NO-SANITIZE-WITH-ATTR-NEXT: [[COUNTED_BY_LOAD:%.*]] = load i32, ptr [[COUNTED_BY_GEP]], align 4 // NO-SANITIZE-WITH-ATTR-NEXT: [[TMP0:%.*]] = tail call i32 @llvm.smax.i32(i32 [[COUNTED_BY_LOAD]], i32 0) // NO-SANITIZE-WITH-ATTR-NEXT: [[CONV:%.*]] = shl i32 [[TMP0]], 2 -// NO-SANITIZE-WITH-ATTR-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds nuw [0 x i32], ptr [[ARRAY]], i64 0, i64 [[INDEX]] +// NO-SANITIZE-WITH-ATTR-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds nuw i32, ptr [[ARRAY]], i64 [[INDEX]] // NO-SANITIZE-WITH-ATTR-NEXT: store i32 [[CONV]], ptr [[ARRAYIDX]], align 4, !tbaa [[TBAA2]] // NO-SANITIZE-WITH-ATTR-NEXT: ret void // @@ -142,7 +142,7 @@ void test1(struct annotated *p, int index, int val) { // SANITIZE-WITHOUT-ATTR-SAME: ptr noundef [[P:%.*]], i64 noundef [[INDEX:%.*]]) local_unnamed_addr #[[ATTR0]] { // SANITIZE-WITHOUT-ATTR-NEXT: entry: // SANITIZE-WITHOUT-ATTR-NEXT: [[ARRAY:%.*]] = getelementptr inbounds nuw i8, ptr [[P]], i64 12 -// SANITIZE-WITHOUT-ATTR-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds nuw [0 x i32], ptr [[ARRAY]], i64 0, i64 [[INDEX]] +// SANITIZE-WITHOUT-ATTR-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds nuw i32, ptr [[ARRAY]], i64 [[INDEX]] // SANITIZE-WITHOUT-ATTR-NEXT: store i32 -1, ptr [[ARRAYIDX]], align 4, !tbaa [[TBAA2]] // SANITIZE-WITHOUT-ATTR-NEXT: ret void // @@ -150,7 +150,7 @@ void test1(struct annotated *p, int index, int val) { // NO-SANITIZE-WITHOUT-ATTR-SAME: ptr noundef [[P:%.*]], i64 noundef [[INDEX:%.*]]) local_unnamed_addr #[[ATTR0]] { // NO-SANITIZE-WITHOUT-ATTR-NEXT: entry: // NO-SANITIZE-WITHOUT-ATTR-NEXT: [[ARRAY:%.*]] = getelementptr inbounds nuw i8, ptr [[P]], i64 12 -// NO-SANITIZE-WITHOUT-ATTR-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds nuw [0 x i32], ptr [[ARRAY]], i64 0, i64 [[INDEX]] +// NO-SANITIZE-WITHOUT-ATTR-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds nuw i32, ptr [[ARRAY]], i64 [[INDEX]] // NO-SANITIZE-WITHOUT-ATTR-NEXT: store i32 -1, ptr [[ARRAYIDX]], align 4, !tbaa [[TBAA2]] // NO-SANITIZE-WITHOUT-ATTR-NEXT: ret void // @@ -243,7 +243,7 @@ size_t test2_bdos_cast(struct annotated *p) { // SANITIZE-WITH-ATTR-NEXT: unreachable, !nosanitize [[META2]] // SANITIZE-WITH-ATTR: cont3: // SANITIZE-WITH-ATTR-NEXT: [[ARRAY:%.*]] = getelementptr inbounds nuw i8, ptr [[P]], i64 12 -// SANITIZE-WITH-ATTR-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds nuw [0 x i32], ptr [[ARRAY]], i64 0, i64 [[INDEX]] +// SANITIZE-WITH-ATTR-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds nuw i32, ptr [[ARRAY]], i64 [[INDEX]] // SANITIZE-WITH-ATTR-NEXT: store i32 -1, ptr [[ARRAYIDX]], align 4, !tbaa [[TBAA4]] // SANITIZE-WITH-ATTR-NEXT: ret void // @@ -251,7 +251,7 @@ size_t test2_bdos_cast(struct annotated *p) { // NO-SANITIZE-WITH-ATTR-SAME: ptr noundef [[P:%.*]], i64 noundef [[INDEX:%.*]]) local_unnamed_addr #[[ATTR0]] { // NO-SANITIZE-WITH-ATTR-NEXT: entry: // NO-SANITIZE-WITH-ATTR-NEXT: [[ARRAY:%.*]] = getelementptr inbounds nuw i8, ptr [[P]], i64 12 -// NO-SANITIZE-WITH-ATTR-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds nuw [0 x i32], ptr [[ARRAY]], i64 0, i64 [[INDEX]] +// NO-SANITIZE-WITH-ATTR-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds nuw i32, ptr [[ARRAY]], i64 [[INDEX]] // NO-SANITIZE-WITH-ATTR-NEXT: store i32 -1, ptr [[ARRAYIDX]], align 4, !tbaa [[TBAA2]] // NO-SANITIZE-WITH-ATTR-NEXT: ret void // @@ -259,7 +259,7 @@ size_t test2_bdos_cast(struct annotated *p) { // SANITIZE-WITHOUT-ATTR-SAME: ptr noundef [[P:%.*]], i64 noundef [[INDEX:%.*]]) local_unnamed_addr #[[ATTR0]] { // SANITIZE-WITHOUT-ATTR-NEXT: entry: // SANITIZE-WITHOUT-ATTR-NEXT: [[ARRAY:%.*]] = getelementptr inbounds nuw i8, ptr [[P]], i64 12 -// SANITIZE-WITHOUT-ATTR-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds nuw [0 x i32], ptr [[ARRAY]], i64 0, i64 [[INDEX]] +// SANITIZE-WITHOUT-ATTR-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds nuw i32, ptr [[ARRAY]], i64 [[INDEX]] // SANITIZE-WITHOUT-ATTR-NEXT: store i32 -1, ptr [[ARRAYIDX]], align 4, !tbaa [[TBAA2]] // SANITIZE-WITHOUT-ATTR-NEXT: ret void // @@ -267,7 +267,7 @@ size_t test2_bdos_cast(struct annotated *p) { // NO-SANITIZE-WITHOUT-ATTR-SAME: ptr noundef [[P:%.*]], i64 noundef [[INDEX:%.*]]) local_unnamed_addr #[[ATTR0]] { // NO-SANITIZE-WITHOUT-ATTR-NEXT: entry: // NO-SANITIZE-WITHOUT-ATTR-NEXT: [[ARRAY:%.*]] = getelementptr inbounds nuw i8, ptr [[P]], i64 12 -// NO-SANITIZE-WITHOUT-ATTR-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds nuw [0 x i32], ptr [[ARRAY]], i64 0, i64 [[INDEX]] +// NO-SANITIZE-WITHOUT-ATTR-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds nuw i32, ptr [[ARRAY]], i64 [[INDEX]] // NO-SANITIZE-WITHOUT-ATTR-NEXT: store i32 -1, ptr [[ARRAYIDX]], align 4, !tbaa [[TBAA2]] // NO-SANITIZE-WITHOUT-ATTR-NEXT: ret void // @@ -350,7 +350,7 @@ size_t test3_bdos_cast(struct annotated *p) { // SANITIZE-WITH-ATTR-NEXT: [[RESULT:%.*]] = add i32 [[FLEXIBLE_ARRAY_MEMBER_SIZE]], 244 // SANITIZE-WITH-ATTR-NEXT: [[TMP4:%.*]] = and i32 [[RESULT]], 252 // SANITIZE-WITH-ATTR-NEXT: [[CONV2:%.*]] = select i1 [[TMP3]], i32 [[TMP4]], i32 0 -// SANITIZE-WITH-ATTR-NEXT: [[ARRAYIDX10:%.*]] = getelementptr inbounds nuw [0 x i32], ptr [[ARRAY]], i64 0, i64 [[IDXPROM]] +// SANITIZE-WITH-ATTR-NEXT: [[ARRAYIDX10:%.*]] = getelementptr inbounds nuw i32, ptr [[ARRAY]], i64 [[IDXPROM]] // SANITIZE-WITH-ATTR-NEXT: store i32 [[CONV2]], ptr [[ARRAYIDX10]], align 4, !tbaa [[TBAA4]] // SANITIZE-WITH-ATTR-NEXT: [[DOTNOT81:%.*]] = icmp eq i32 [[DOTCOUNTED_BY_LOAD]], 3 // SANITIZE-WITH-ATTR-NEXT: br i1 [[DOTNOT81]], label [[HANDLER_OUT_OF_BOUNDS18:%.*]], label [[CONT19:%.*]], !prof [[PROF8:![0-9]+]], !nosanitize [[META2]] @@ -370,7 +370,7 @@ size_t test3_bdos_cast(struct annotated *p) { // SANITIZE-WITH-ATTR-NEXT: [[RESULT25:%.*]] = add i32 [[FLEXIBLE_ARRAY_MEMBER_SIZE]], 240 // SANITIZE-WITH-ATTR-NEXT: [[TMP7:%.*]] = and i32 [[RESULT25]], 252 // SANITIZE-WITH-ATTR-NEXT: [[CONV27:%.*]] = select i1 [[TMP6]], i32 [[TMP7]], i32 0 -// SANITIZE-WITH-ATTR-NEXT: [[ARRAYIDX36:%.*]] = getelementptr inbounds nuw [0 x i32], ptr [[ARRAY]], i64 0, i64 [[IDXPROM31]] +// SANITIZE-WITH-ATTR-NEXT: [[ARRAYIDX36:%.*]] = getelementptr inbounds nuw i32, ptr [[ARRAY]], i64 [[IDXPROM31]] // SANITIZE-WITH-ATTR-NEXT: store i32 [[CONV27]], ptr [[ARRAYIDX36]], align 4, !tbaa [[TBAA4]] // SANITIZE-WITH-ATTR-NEXT: [[IDXPROM42:%.*]] = sext i32 [[FAM_IDX]] to i64 // SANITIZE-WITH-ATTR-NEXT: [[DOTCOUNTED_BY_LOAD44:%.*]] = load i32, ptr [[DOTCOUNTED_BY_GEP]], align 4 @@ -389,7 +389,7 @@ size_t test3_bdos_cast(struct annotated *p) { // SANITIZE-WITH-ATTR-NEXT: tail call void @__ubsan_handle_out_of_bounds_abort(ptr nonnull @[[GLOB10:[0-9]+]], i64 [[IDXPROM60]]) #[[ATTR8]], !nosanitize [[META2]] // SANITIZE-WITH-ATTR-NEXT: unreachable, !nosanitize [[META2]] // SANITIZE-WITH-ATTR: cont67: -// SANITIZE-WITH-ATTR-NEXT: [[ARRAYIDX65:%.*]] = getelementptr inbounds nuw [0 x i32], ptr [[ARRAY]], i64 0, i64 [[IDXPROM60]] +// SANITIZE-WITH-ATTR-NEXT: [[ARRAYIDX65:%.*]] = getelementptr inbounds nuw i32, ptr [[ARRAY]], i64 [[IDXPROM60]] // SANITIZE-WITH-ATTR-NEXT: [[COUNT50:%.*]] = sext i32 [[DOTCOUNTED_BY_LOAD44]] to i64 // SANITIZE-WITH-ATTR-NEXT: [[TMP10:%.*]] = sub nsw i64 [[COUNT50]], [[IDXPROM42]] // SANITIZE-WITH-ATTR-NEXT: [[TMP11:%.*]] = tail call i64 @llvm.smax.i64(i64 [[TMP10]], i64 0) @@ -411,7 +411,7 @@ size_t test3_bdos_cast(struct annotated *p) { // NO-SANITIZE-WITH-ATTR-NEXT: [[TMP1:%.*]] = and i32 [[RESULT]], 252 // NO-SANITIZE-WITH-ATTR-NEXT: [[CONV1:%.*]] = select i1 [[TMP0]], i32 [[TMP1]], i32 0 // NO-SANITIZE-WITH-ATTR-NEXT: [[IDXPROM:%.*]] = sext i32 [[INDEX]] to i64 -// NO-SANITIZE-WITH-ATTR-NEXT: [[ARRAYIDX3:%.*]] = getelementptr inbounds [0 x i32], ptr [[ARRAY]], i64 0, i64 [[IDXPROM]] +// NO-SANITIZE-WITH-ATTR-NEXT: [[ARRAYIDX3:%.*]] = getelementptr inbounds i32, ptr [[ARRAY]], i64 [[IDXPROM]] // NO-SANITIZE-WITH-ATTR-NEXT: store i32 [[CONV1]], ptr [[ARRAYIDX3]], align 4, !tbaa [[TBAA2]] // NO-SANITIZE-WITH-ATTR-NEXT: [[COUNTED_BY_LOAD7:%.*]] = load i32, ptr [[COUNTED_BY_GEP]], align 4 // NO-SANITIZE-WITH-ATTR-NEXT: [[FLEXIBLE_ARRAY_MEMBER_SIZE9:%.*]] = shl i32 [[COUNTED_BY_LOAD7]], 2 @@ -419,9 +419,7 @@ size_t test3_bdos_cast(struct annotated *p) { // NO-SANITIZE-WITH-ATTR-NEXT: [[TMP2:%.*]] = icmp sgt i32 [[COUNTED_BY_LOAD7]], 3 // NO-SANITIZE-WITH-ATTR-NEXT: [[TMP3:%.*]] = and i32 [[RESULT10]], 252 // NO-SANITIZE-WITH-ATTR-NEXT: [[CONV12:%.*]] = select i1 [[TMP2]], i32 [[TMP3]], i32 0 -// NO-SANITIZE-WITH-ATTR-NEXT: [[ADD:%.*]] = add nsw i32 [[INDEX]], 1 -// NO-SANITIZE-WITH-ATTR-NEXT: [[IDXPROM14:%.*]] = sext i32 [[ADD]] to i64 -// NO-SANITIZE-WITH-ATTR-NEXT: [[ARRAYIDX15:%.*]] = getelementptr inbounds [0 x i32], ptr [[ARRAY]], i64 0, i64 [[IDXPROM14]] +// NO-SANITIZE-WITH-ATTR-NEXT: [[ARRAYIDX15:%.*]] = getelementptr i8, ptr [[ARRAYIDX3]], i64 4 // NO-SANITIZE-WITH-ATTR-NEXT: store i32 [[CONV12]], ptr [[ARRAYIDX15]], align 4, !tbaa [[TBAA2]] // NO-SANITIZE-WITH-ATTR-NEXT: [[IDXPROM17:%.*]] = sext i32 [[FAM_IDX]] to i64 // NO-SANITIZE-WITH-ATTR-NEXT: [[COUNTED_BY_LOAD20:%.*]] = load i32, ptr [[COUNTED_BY_GEP]], align 4 @@ -434,9 +432,7 @@ size_t test3_bdos_cast(struct annotated *p) { // NO-SANITIZE-WITH-ATTR-NEXT: [[TMP8:%.*]] = shl i32 [[DOTTR]], 2 // NO-SANITIZE-WITH-ATTR-NEXT: [[TMP9:%.*]] = and i32 [[TMP8]], 252 // NO-SANITIZE-WITH-ATTR-NEXT: [[CONV26:%.*]] = select i1 [[TMP7]], i32 [[TMP9]], i32 0 -// NO-SANITIZE-WITH-ATTR-NEXT: [[ADD28:%.*]] = add nsw i32 [[INDEX]], 2 -// NO-SANITIZE-WITH-ATTR-NEXT: [[IDXPROM29:%.*]] = sext i32 [[ADD28]] to i64 -// NO-SANITIZE-WITH-ATTR-NEXT: [[ARRAYIDX30:%.*]] = getelementptr inbounds [0 x i32], ptr [[ARRAY]], i64 0, i64 [[IDXPROM29]] +// NO-SANITIZE-WITH-ATTR-NEXT: [[ARRAYIDX30:%.*]] = getelementptr i8, ptr [[ARRAYIDX3]], i64 8 // NO-SANITIZE-WITH-ATTR-NEXT: store i32 [[CONV26]], ptr [[ARRAYIDX30]], align 4, !tbaa [[TBAA2]] // NO-SANITIZE-WITH-ATTR-NEXT: ret void // @@ -445,15 +441,11 @@ size_t test3_bdos_cast(struct annotated *p) { // SANITIZE-WITHOUT-ATTR-NEXT: entry: // SANITIZE-WITHOUT-ATTR-NEXT: [[ARRAY:%.*]] = getelementptr inbounds nuw i8, ptr [[P]], i64 12 // SANITIZE-WITHOUT-ATTR-NEXT: [[IDXPROM:%.*]] = sext i32 [[INDEX]] to i64 -// SANITIZE-WITHOUT-ATTR-NEXT: [[ARRAYIDX5:%.*]] = getelementptr inbounds [0 x i32], ptr [[ARRAY]], i64 0, i64 [[IDXPROM]] +// SANITIZE-WITHOUT-ATTR-NEXT: [[ARRAYIDX5:%.*]] = getelementptr i32, ptr [[ARRAY]], i64 [[IDXPROM]] // SANITIZE-WITHOUT-ATTR-NEXT: store i32 255, ptr [[ARRAYIDX5]], align 4, !tbaa [[TBAA2]] -// SANITIZE-WITHOUT-ATTR-NEXT: [[ADD:%.*]] = add nsw i32 [[INDEX]], 1 -// SANITIZE-WITHOUT-ATTR-NEXT: [[IDXPROM17:%.*]] = sext i32 [[ADD]] to i64 -// SANITIZE-WITHOUT-ATTR-NEXT: [[ARRAYIDX18:%.*]] = getelementptr inbounds [0 x i32], ptr [[ARRAY]], i64 0, i64 [[IDXPROM17]] +// SANITIZE-WITHOUT-ATTR-NEXT: [[ARRAYIDX18:%.*]] = getelementptr i8, ptr [[ARRAYIDX5]], i64 4 // SANITIZE-WITHOUT-ATTR-NEXT: store i32 255, ptr [[ARRAYIDX18]], align 4, !tbaa [[TBAA2]] -// SANITIZE-WITHOUT-ATTR-NEXT: [[ADD31:%.*]] = add nsw i32 [[INDEX]], 2 -// SANITIZE-WITHOUT-ATTR-NEXT: [[IDXPROM32:%.*]] = sext i32 [[ADD31]] to i64 -// SANITIZE-WITHOUT-ATTR-NEXT: [[ARRAYIDX33:%.*]] = getelementptr inbounds [0 x i32], ptr [[ARRAY]], i64 0, i64 [[IDXPROM32]] +// SANITIZE-WITHOUT-ATTR-NEXT: [[ARRAYIDX33:%.*]] = getelementptr i8, ptr [[ARRAYIDX5]], i64 8 // SANITIZE-WITHOUT-ATTR-NEXT: store i32 255, ptr [[ARRAYIDX33]], align 4, !tbaa [[TBAA2]] // SANITIZE-WITHOUT-ATTR-NEXT: ret void // @@ -462,15 +454,11 @@ size_t test3_bdos_cast(struct annotated *p) { // NO-SANITIZE-WITHOUT-ATTR-NEXT: entry: // NO-SANITIZE-WITHOUT-ATTR-NEXT: [[ARRAY:%.*]] = getelementptr inbounds nuw i8, ptr [[P]], i64 12 // NO-SANITIZE-WITHOUT-ATTR-NEXT: [[IDXPROM:%.*]] = sext i32 [[INDEX]] to i64 -// NO-SANITIZE-WITHOUT-ATTR-NEXT: [[ARRAYIDX3:%.*]] = getelementptr inbounds [0 x i32], ptr [[ARRAY]], i64 0, i64 [[IDXPROM]] +// NO-SANITIZE-WITHOUT-ATTR-NEXT: [[ARRAYIDX3:%.*]] = getelementptr inbounds i32, ptr [[ARRAY]], i64 [[IDXPROM]] // NO-SANITIZE-WITHOUT-ATTR-NEXT: store i32 255, ptr [[ARRAYIDX3]], align 4, !tbaa [[TBAA2]] -// NO-SANITIZE-WITHOUT-ATTR-NEXT: [[ADD:%.*]] = add nsw i32 [[INDEX]], 1 -// NO-SANITIZE-WITHOUT-ATTR-NEXT: [[IDXPROM9:%.*]] = sext i32 [[ADD]] to i64 -// NO-SANITIZE-WITHOUT-ATTR-NEXT: [[ARRAYIDX10:%.*]] = getelementptr inbounds [0 x i32], ptr [[ARRAY]], i64 0, i64 [[IDXPROM9]] +// NO-SANITIZE-WITHOUT-ATTR-NEXT: [[ARRAYIDX10:%.*]] = getelementptr i8, ptr [[ARRAYIDX3]], i64 4 // NO-SANITIZE-WITHOUT-ATTR-NEXT: store i32 255, ptr [[ARRAYIDX10]], align 4, !tbaa [[TBAA2]] -// NO-SANITIZE-WITHOUT-ATTR-NEXT: [[ADD17:%.*]] = add nsw i32 [[INDEX]], 2 -// NO-SANITIZE-WITHOUT-ATTR-NEXT: [[IDXPROM18:%.*]] = sext i32 [[ADD17]] to i64 -// NO-SANITIZE-WITHOUT-ATTR-NEXT: [[ARRAYIDX19:%.*]] = getelementptr inbounds [0 x i32], ptr [[ARRAY]], i64 0, i64 [[IDXPROM18]] +// NO-SANITIZE-WITHOUT-ATTR-NEXT: [[ARRAYIDX19:%.*]] = getelementptr i8, ptr [[ARRAYIDX3]], i64 8 // NO-SANITIZE-WITHOUT-ATTR-NEXT: store i32 255, ptr [[ARRAYIDX19]], align 4, !tbaa [[TBAA2]] // NO-SANITIZE-WITHOUT-ATTR-NEXT: ret void // @@ -632,7 +620,7 @@ size_t test4_bdos_cast2(struct annotated *p, int index) { // SANITIZE-WITH-ATTR-NEXT: unreachable, !nosanitize [[META2]] // SANITIZE-WITH-ATTR: cont3: // SANITIZE-WITH-ATTR-NEXT: [[TMP1:%.*]] = getelementptr inbounds nuw i8, ptr [[P]], i64 16 -// SANITIZE-WITH-ATTR-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds [0 x i32], ptr [[TMP1]], i64 0, i64 [[IDXPROM]] +// SANITIZE-WITH-ATTR-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds i32, ptr [[TMP1]], i64 [[IDXPROM]] // SANITIZE-WITH-ATTR-NEXT: store i32 -1, ptr [[ARRAYIDX]], align 4, !tbaa [[TBAA4]] // SANITIZE-WITH-ATTR-NEXT: ret void // @@ -641,7 +629,7 @@ size_t test4_bdos_cast2(struct annotated *p, int index) { // NO-SANITIZE-WITH-ATTR-NEXT: entry: // NO-SANITIZE-WITH-ATTR-NEXT: [[TMP0:%.*]] = getelementptr inbounds nuw i8, ptr [[P]], i64 16 // NO-SANITIZE-WITH-ATTR-NEXT: [[IDXPROM:%.*]] = sext i32 [[INDEX]] to i64 -// NO-SANITIZE-WITH-ATTR-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds [0 x i32], ptr [[TMP0]], i64 0, i64 [[IDXPROM]] +// NO-SANITIZE-WITH-ATTR-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds i32, ptr [[TMP0]], i64 [[IDXPROM]] // NO-SANITIZE-WITH-ATTR-NEXT: store i32 -1, ptr [[ARRAYIDX]], align 4, !tbaa [[TBAA2]] // NO-SANITIZE-WITH-ATTR-NEXT: ret void // @@ -650,7 +638,7 @@ size_t test4_bdos_cast2(struct annotated *p, int index) { // SANITIZE-WITHOUT-ATTR-NEXT: entry: // SANITIZE-WITHOUT-ATTR-NEXT: [[TMP0:%.*]] = getelementptr inbounds nuw i8, ptr [[P]], i64 16 // SANITIZE-WITHOUT-ATTR-NEXT: [[IDXPROM:%.*]] = sext i32 [[INDEX]] to i64 -// SANITIZE-WITHOUT-ATTR-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds [0 x i32], ptr [[TMP0]], i64 0, i64 [[IDXPROM]] +// SANITIZE-WITHOUT-ATTR-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds i32, ptr [[TMP0]], i64 [[IDXPROM]] // SANITIZE-WITHOUT-ATTR-NEXT: store i32 -1, ptr [[ARRAYIDX]], align 4, !tbaa [[TBAA2]] // SANITIZE-WITHOUT-ATTR-NEXT: ret void // @@ -659,7 +647,7 @@ size_t test4_bdos_cast2(struct annotated *p, int index) { // NO-SANITIZE-WITHOUT-ATTR-NEXT: entry: // NO-SANITIZE-WITHOUT-ATTR-NEXT: [[TMP0:%.*]] = getelementptr inbounds nuw i8, ptr [[P]], i64 16 // NO-SANITIZE-WITHOUT-ATTR-NEXT: [[IDXPROM:%.*]] = sext i32 [[INDEX]] to i64 -// NO-SANITIZE-WITHOUT-ATTR-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds [0 x i32], ptr [[TMP0]], i64 0, i64 [[IDXPROM]] +// NO-SANITIZE-WITHOUT-ATTR-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds i32, ptr [[TMP0]], i64 [[IDXPROM]] // NO-SANITIZE-WITHOUT-ATTR-NEXT: store i32 -1, ptr [[ARRAYIDX]], align 4, !tbaa [[TBAA2]] // NO-SANITIZE-WITHOUT-ATTR-NEXT: ret void // @@ -704,7 +692,7 @@ size_t test5_bdos(struct anon_struct *p) { // SANITIZE-WITH-ATTR-NEXT: unreachable, !nosanitize [[META2]] // SANITIZE-WITH-ATTR: cont6: // SANITIZE-WITH-ATTR-NEXT: [[TMP1:%.*]] = getelementptr inbounds nuw i8, ptr [[P]], i64 16 -// SANITIZE-WITH-ATTR-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds [0 x i32], ptr [[TMP1]], i64 0, i64 [[IDXPROM]] +// SANITIZE-WITH-ATTR-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds i32, ptr [[TMP1]], i64 [[IDXPROM]] // SANITIZE-WITH-ATTR-NEXT: [[FLEXIBLE_ARRAY_MEMBER_SIZE:%.*]] = shl nuw i64 [[COUNTED_BY_LOAD]], 2 // SANITIZE-WITH-ATTR-NEXT: [[TMP2:%.*]] = tail call i64 @llvm.smax.i64(i64 [[FLEXIBLE_ARRAY_MEMBER_SIZE]], i64 0) // SANITIZE-WITH-ATTR-NEXT: [[CONV:%.*]] = trunc i64 [[TMP2]] to i32 @@ -721,7 +709,7 @@ size_t test5_bdos(struct anon_struct *p) { // NO-SANITIZE-WITH-ATTR-NEXT: [[TMP1:%.*]] = tail call i64 @llvm.smax.i64(i64 [[FLEXIBLE_ARRAY_MEMBER_SIZE]], i64 0) // NO-SANITIZE-WITH-ATTR-NEXT: [[CONV:%.*]] = trunc i64 [[TMP1]] to i32 // NO-SANITIZE-WITH-ATTR-NEXT: [[IDXPROM:%.*]] = sext i32 [[INDEX]] to i64 -// NO-SANITIZE-WITH-ATTR-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds [0 x i32], ptr [[TMP0]], i64 0, i64 [[IDXPROM]] +// NO-SANITIZE-WITH-ATTR-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds i32, ptr [[TMP0]], i64 [[IDXPROM]] // NO-SANITIZE-WITH-ATTR-NEXT: store i32 [[CONV]], ptr [[ARRAYIDX]], align 4, !tbaa [[TBAA2]] // NO-SANITIZE-WITH-ATTR-NEXT: ret void // @@ -730,7 +718,7 @@ size_t test5_bdos(struct anon_struct *p) { // SANITIZE-WITHOUT-ATTR-NEXT: entry: // SANITIZE-WITHOUT-ATTR-NEXT: [[TMP0:%.*]] = getelementptr inbounds nuw i8, ptr [[P]], i64 16 // SANITIZE-WITHOUT-ATTR-NEXT: [[IDXPROM:%.*]] = sext i32 [[INDEX]] to i64 -// SANITIZE-WITHOUT-ATTR-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds [0 x i32], ptr [[TMP0]], i64 0, i64 [[IDXPROM]] +// SANITIZE-WITHOUT-ATTR-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds i32, ptr [[TMP0]], i64 [[IDXPROM]] // SANITIZE-WITHOUT-ATTR-NEXT: store i32 -1, ptr [[ARRAYIDX]], align 4, !tbaa [[TBAA2]] // SANITIZE-WITHOUT-ATTR-NEXT: ret void // @@ -739,7 +727,7 @@ size_t test5_bdos(struct anon_struct *p) { // NO-SANITIZE-WITHOUT-ATTR-NEXT: entry: // NO-SANITIZE-WITHOUT-ATTR-NEXT: [[TMP0:%.*]] = getelementptr inbounds nuw i8, ptr [[P]], i64 16 // NO-SANITIZE-WITHOUT-ATTR-NEXT: [[IDXPROM:%.*]] = sext i32 [[INDEX]] to i64 -// NO-SANITIZE-WITHOUT-ATTR-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds [0 x i32], ptr [[TMP0]], i64 0, i64 [[IDXPROM]] +// NO-SANITIZE-WITHOUT-ATTR-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds i32, ptr [[TMP0]], i64 [[IDXPROM]] // NO-SANITIZE-WITHOUT-ATTR-NEXT: store i32 -1, ptr [[ARRAYIDX]], align 4, !tbaa [[TBAA2]] // NO-SANITIZE-WITHOUT-ATTR-NEXT: ret void // @@ -793,7 +781,7 @@ size_t test6_bdos(struct anon_struct *p) { // SANITIZE-WITH-ATTR-NEXT: unreachable, !nosanitize [[META2]] // SANITIZE-WITH-ATTR: cont7: // SANITIZE-WITH-ATTR-NEXT: [[INTS:%.*]] = getelementptr inbounds nuw i8, ptr [[P]], i64 9 -// SANITIZE-WITH-ATTR-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds nuw [0 x i8], ptr [[INTS]], i64 0, i64 [[IDXPROM]] +// SANITIZE-WITH-ATTR-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds nuw i8, ptr [[INTS]], i64 [[IDXPROM]] // SANITIZE-WITH-ATTR-NEXT: store i8 -1, ptr [[ARRAYIDX]], align 1, !tbaa [[TBAA9:![0-9]+]] // SANITIZE-WITH-ATTR-NEXT: ret void // @@ -802,7 +790,7 @@ size_t test6_bdos(struct anon_struct *p) { // NO-SANITIZE-WITH-ATTR-NEXT: entry: // NO-SANITIZE-WITH-ATTR-NEXT: [[INTS:%.*]] = getelementptr inbounds nuw i8, ptr [[P]], i64 9 // NO-SANITIZE-WITH-ATTR-NEXT: [[IDXPROM:%.*]] = sext i32 [[INDEX]] to i64 -// NO-SANITIZE-WITH-ATTR-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds [0 x i8], ptr [[INTS]], i64 0, i64 [[IDXPROM]] +// NO-SANITIZE-WITH-ATTR-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds i8, ptr [[INTS]], i64 [[IDXPROM]] // NO-SANITIZE-WITH-ATTR-NEXT: store i8 -1, ptr [[ARRAYIDX]], align 1, !tbaa [[TBAA6:![0-9]+]] // NO-SANITIZE-WITH-ATTR-NEXT: ret void // @@ -811,7 +799,7 @@ size_t test6_bdos(struct anon_struct *p) { // SANITIZE-WITHOUT-ATTR-NEXT: entry: // SANITIZE-WITHOUT-ATTR-NEXT: [[INTS:%.*]] = getelementptr inbounds nuw i8, ptr [[P]], i64 9 // SANITIZE-WITHOUT-ATTR-NEXT: [[IDXPROM:%.*]] = sext i32 [[INDEX]] to i64 -// SANITIZE-WITHOUT-ATTR-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds [0 x i8], ptr [[INTS]], i64 0, i64 [[IDXPROM]] +// SANITIZE-WITHOUT-ATTR-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds i8, ptr [[INTS]], i64 [[IDXPROM]] // SANITIZE-WITHOUT-ATTR-NEXT: store i8 -1, ptr [[ARRAYIDX]], align 1, !tbaa [[TBAA6:![0-9]+]] // SANITIZE-WITHOUT-ATTR-NEXT: ret void // @@ -820,7 +808,7 @@ size_t test6_bdos(struct anon_struct *p) { // NO-SANITIZE-WITHOUT-ATTR-NEXT: entry: // NO-SANITIZE-WITHOUT-ATTR-NEXT: [[INTS:%.*]] = getelementptr inbounds nuw i8, ptr [[P]], i64 9 // NO-SANITIZE-WITHOUT-ATTR-NEXT: [[IDXPROM:%.*]] = sext i32 [[INDEX]] to i64 -// NO-SANITIZE-WITHOUT-ATTR-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds [0 x i8], ptr [[INTS]], i64 0, i64 [[IDXPROM]] +// NO-SANITIZE-WITHOUT-ATTR-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds i8, ptr [[INTS]], i64 [[IDXPROM]] // NO-SANITIZE-WITHOUT-ATTR-NEXT: store i8 -1, ptr [[ARRAYIDX]], align 1, !tbaa [[TBAA6:![0-9]+]] // NO-SANITIZE-WITHOUT-ATTR-NEXT: ret void // @@ -866,7 +854,7 @@ size_t test7_bdos(struct union_of_fams *p) { // SANITIZE-WITH-ATTR-NEXT: unreachable, !nosanitize [[META2]] // SANITIZE-WITH-ATTR: cont14: // SANITIZE-WITH-ATTR-NEXT: [[INTS:%.*]] = getelementptr inbounds nuw i8, ptr [[P]], i64 9 -// SANITIZE-WITH-ATTR-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds nuw [0 x i8], ptr [[INTS]], i64 0, i64 [[IDXPROM]] +// SANITIZE-WITH-ATTR-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds nuw i8, ptr [[INTS]], i64 [[IDXPROM]] // SANITIZE-WITH-ATTR-NEXT: store i8 [[COUNTED_BY_LOAD]], ptr [[ARRAYIDX]], align 1, !tbaa [[TBAA9]] // SANITIZE-WITH-ATTR-NEXT: ret void // @@ -877,7 +865,7 @@ size_t test7_bdos(struct union_of_fams *p) { // NO-SANITIZE-WITH-ATTR-NEXT: [[INTS:%.*]] = getelementptr inbounds nuw i8, ptr [[P]], i64 9 // NO-SANITIZE-WITH-ATTR-NEXT: [[COUNTED_BY_LOAD:%.*]] = load i8, ptr [[TMP0]], align 4 // NO-SANITIZE-WITH-ATTR-NEXT: [[IDXPROM:%.*]] = sext i32 [[INDEX]] to i64 -// NO-SANITIZE-WITH-ATTR-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds [0 x i8], ptr [[INTS]], i64 0, i64 [[IDXPROM]] +// NO-SANITIZE-WITH-ATTR-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds i8, ptr [[INTS]], i64 [[IDXPROM]] // NO-SANITIZE-WITH-ATTR-NEXT: store i8 [[COUNTED_BY_LOAD]], ptr [[ARRAYIDX]], align 1, !tbaa [[TBAA6]] // NO-SANITIZE-WITH-ATTR-NEXT: ret void // @@ -886,7 +874,7 @@ size_t test7_bdos(struct union_of_fams *p) { // SANITIZE-WITHOUT-ATTR-NEXT: entry: // SANITIZE-WITHOUT-ATTR-NEXT: [[INTS:%.*]] = getelementptr inbounds nuw i8, ptr [[P]], i64 9 // SANITIZE-WITHOUT-ATTR-NEXT: [[IDXPROM:%.*]] = sext i32 [[INDEX]] to i64 -// SANITIZE-WITHOUT-ATTR-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds [0 x i8], ptr [[INTS]], i64 0, i64 [[IDXPROM]] +// SANITIZE-WITHOUT-ATTR-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds i8, ptr [[INTS]], i64 [[IDXPROM]] // SANITIZE-WITHOUT-ATTR-NEXT: store i8 -1, ptr [[ARRAYIDX]], align 1, !tbaa [[TBAA6]] // SANITIZE-WITHOUT-ATTR-NEXT: ret void // @@ -895,7 +883,7 @@ size_t test7_bdos(struct union_of_fams *p) { // NO-SANITIZE-WITHOUT-ATTR-NEXT: entry: // NO-SANITIZE-WITHOUT-ATTR-NEXT: [[INTS:%.*]] = getelementptr inbounds nuw i8, ptr [[P]], i64 9 // NO-SANITIZE-WITHOUT-ATTR-NEXT: [[IDXPROM:%.*]] = sext i32 [[INDEX]] to i64 -// NO-SANITIZE-WITHOUT-ATTR-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds [0 x i8], ptr [[INTS]], i64 0, i64 [[IDXPROM]] +// NO-SANITIZE-WITHOUT-ATTR-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds i8, ptr [[INTS]], i64 [[IDXPROM]] // NO-SANITIZE-WITHOUT-ATTR-NEXT: store i8 -1, ptr [[ARRAYIDX]], align 1, !tbaa [[TBAA6]] // NO-SANITIZE-WITHOUT-ATTR-NEXT: ret void // @@ -947,7 +935,7 @@ size_t test8_bdos(struct union_of_fams *p) { // SANITIZE-WITH-ATTR-NEXT: unreachable, !nosanitize [[META2]] // SANITIZE-WITH-ATTR: cont7: // SANITIZE-WITH-ATTR-NEXT: [[BYTES:%.*]] = getelementptr inbounds nuw i8, ptr [[P]], i64 12 -// SANITIZE-WITH-ATTR-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds nuw [0 x i8], ptr [[BYTES]], i64 0, i64 [[IDXPROM]] +// SANITIZE-WITH-ATTR-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds nuw i8, ptr [[BYTES]], i64 [[IDXPROM]] // SANITIZE-WITH-ATTR-NEXT: store i8 -1, ptr [[ARRAYIDX]], align 1, !tbaa [[TBAA9]] // SANITIZE-WITH-ATTR-NEXT: ret void // @@ -956,7 +944,7 @@ size_t test8_bdos(struct union_of_fams *p) { // NO-SANITIZE-WITH-ATTR-NEXT: entry: // NO-SANITIZE-WITH-ATTR-NEXT: [[BYTES:%.*]] = getelementptr inbounds nuw i8, ptr [[P]], i64 12 // NO-SANITIZE-WITH-ATTR-NEXT: [[IDXPROM:%.*]] = sext i32 [[INDEX]] to i64 -// NO-SANITIZE-WITH-ATTR-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds [0 x i8], ptr [[BYTES]], i64 0, i64 [[IDXPROM]] +// NO-SANITIZE-WITH-ATTR-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds i8, ptr [[BYTES]], i64 [[IDXPROM]] // NO-SANITIZE-WITH-ATTR-NEXT: store i8 -1, ptr [[ARRAYIDX]], align 1, !tbaa [[TBAA6]] // NO-SANITIZE-WITH-ATTR-NEXT: ret void // @@ -965,7 +953,7 @@ size_t test8_bdos(struct union_of_fams *p) { // SANITIZE-WITHOUT-ATTR-NEXT: entry: // SANITIZE-WITHOUT-ATTR-NEXT: [[BYTES:%.*]] = getelementptr inbounds nuw i8, ptr [[P]], i64 12 // SANITIZE-WITHOUT-ATTR-NEXT: [[IDXPROM:%.*]] = sext i32 [[INDEX]] to i64 -// SANITIZE-WITHOUT-ATTR-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds [0 x i8], ptr [[BYTES]], i64 0, i64 [[IDXPROM]] +// SANITIZE-WITHOUT-ATTR-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds i8, ptr [[BYTES]], i64 [[IDXPROM]] // SANITIZE-WITHOUT-ATTR-NEXT: store i8 -1, ptr [[ARRAYIDX]], align 1, !tbaa [[TBAA6]] // SANITIZE-WITHOUT-ATTR-NEXT: ret void // @@ -974,7 +962,7 @@ size_t test8_bdos(struct union_of_fams *p) { // NO-SANITIZE-WITHOUT-ATTR-NEXT: entry: // NO-SANITIZE-WITHOUT-ATTR-NEXT: [[BYTES:%.*]] = getelementptr inbounds nuw i8, ptr [[P]], i64 12 // NO-SANITIZE-WITHOUT-ATTR-NEXT: [[IDXPROM:%.*]] = sext i32 [[INDEX]] to i64 -// NO-SANITIZE-WITHOUT-ATTR-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds [0 x i8], ptr [[BYTES]], i64 0, i64 [[IDXPROM]] +// NO-SANITIZE-WITHOUT-ATTR-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds i8, ptr [[BYTES]], i64 [[IDXPROM]] // NO-SANITIZE-WITHOUT-ATTR-NEXT: store i8 -1, ptr [[ARRAYIDX]], align 1, !tbaa [[TBAA6]] // NO-SANITIZE-WITHOUT-ATTR-NEXT: ret void // @@ -1020,7 +1008,7 @@ size_t test9_bdos(struct union_of_fams *p) { // SANITIZE-WITH-ATTR-NEXT: unreachable, !nosanitize [[META2]] // SANITIZE-WITH-ATTR: cont14: // SANITIZE-WITH-ATTR-NEXT: [[BYTES:%.*]] = getelementptr inbounds nuw i8, ptr [[P]], i64 12 -// SANITIZE-WITH-ATTR-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds nuw [0 x i8], ptr [[BYTES]], i64 0, i64 [[IDXPROM]] +// SANITIZE-WITH-ATTR-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds nuw i8, ptr [[BYTES]], i64 [[IDXPROM]] // SANITIZE-WITH-ATTR-NEXT: [[NARROW:%.*]] = tail call i32 @llvm.smax.i32(i32 [[COUNTED_BY_LOAD]], i32 0) // SANITIZE-WITH-ATTR-NEXT: [[CONV:%.*]] = trunc i32 [[NARROW]] to i8 // SANITIZE-WITH-ATTR-NEXT: store i8 [[CONV]], ptr [[ARRAYIDX]], align 1, !tbaa [[TBAA9]] @@ -1035,7 +1023,7 @@ size_t test9_bdos(struct union_of_fams *p) { // NO-SANITIZE-WITH-ATTR-NEXT: [[NARROW:%.*]] = tail call i32 @llvm.smax.i32(i32 [[COUNTED_BY_LOAD]], i32 0) // NO-SANITIZE-WITH-ATTR-NEXT: [[CONV:%.*]] = trunc i32 [[NARROW]] to i8 // NO-SANITIZE-WITH-ATTR-NEXT: [[IDXPROM:%.*]] = sext i32 [[INDEX]] to i64 -// NO-SANITIZE-WITH-ATTR-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds [0 x i8], ptr [[BYTES]], i64 0, i64 [[IDXPROM]] +// NO-SANITIZE-WITH-ATTR-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds i8, ptr [[BYTES]], i64 [[IDXPROM]] // NO-SANITIZE-WITH-ATTR-NEXT: store i8 [[CONV]], ptr [[ARRAYIDX]], align 1, !tbaa [[TBAA6]] // NO-SANITIZE-WITH-ATTR-NEXT: ret void // @@ -1044,7 +1032,7 @@ size_t test9_bdos(struct union_of_fams *p) { // SANITIZE-WITHOUT-ATTR-NEXT: entry: // SANITIZE-WITHOUT-ATTR-NEXT: [[BYTES:%.*]] = getelementptr inbounds nuw i8, ptr [[P]], i64 12 // SANITIZE-WITHOUT-ATTR-NEXT: [[IDXPROM:%.*]] = sext i32 [[INDEX]] to i64 -// SANITIZE-WITHOUT-ATTR-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds [0 x i8], ptr [[BYTES]], i64 0, i64 [[IDXPROM]] +// SANITIZE-WITHOUT-ATTR-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds i8, ptr [[BYTES]], i64 [[IDXPROM]] // SANITIZE-WITHOUT-ATTR-NEXT: store i8 -1, ptr [[ARRAYIDX]], align 1, !tbaa [[TBAA6]] // SANITIZE-WITHOUT-ATTR-NEXT: ret void // @@ -1053,7 +1041,7 @@ size_t test9_bdos(struct union_of_fams *p) { // NO-SANITIZE-WITHOUT-ATTR-NEXT: entry: // NO-SANITIZE-WITHOUT-ATTR-NEXT: [[BYTES:%.*]] = getelementptr inbounds nuw i8, ptr [[P]], i64 12 // NO-SANITIZE-WITHOUT-ATTR-NEXT: [[IDXPROM:%.*]] = sext i32 [[INDEX]] to i64 -// NO-SANITIZE-WITHOUT-ATTR-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds [0 x i8], ptr [[BYTES]], i64 0, i64 [[IDXPROM]] +// NO-SANITIZE-WITHOUT-ATTR-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds i8, ptr [[BYTES]], i64 [[IDXPROM]] // NO-SANITIZE-WITHOUT-ATTR-NEXT: store i8 -1, ptr [[ARRAYIDX]], align 1, !tbaa [[TBAA6]] // NO-SANITIZE-WITHOUT-ATTR-NEXT: ret void // @@ -1107,7 +1095,7 @@ size_t test10_bdos(struct union_of_fams *p) { // SANITIZE-WITH-ATTR-NEXT: unreachable, !nosanitize [[META2]] // SANITIZE-WITH-ATTR: cont6: // SANITIZE-WITH-ATTR-NEXT: [[ARRAY:%.*]] = getelementptr inbounds nuw i8, ptr [[P]], i64 12 -// SANITIZE-WITH-ATTR-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds nuw [0 x i32], ptr [[ARRAY]], i64 0, i64 [[IDXPROM]] +// SANITIZE-WITH-ATTR-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds nuw i32, ptr [[ARRAY]], i64 [[IDXPROM]] // SANITIZE-WITH-ATTR-NEXT: [[TMP2:%.*]] = icmp sgt i32 [[COUNTED_BY_LOAD]], -3 // SANITIZE-WITH-ATTR-NEXT: [[FLEXIBLE_ARRAY_MEMBER_SIZE:%.*]] = shl i32 [[COUNTED_BY_LOAD]], 2 // SANITIZE-WITH-ATTR-NEXT: [[RESULT:%.*]] = add i32 [[FLEXIBLE_ARRAY_MEMBER_SIZE]], 8 @@ -1126,7 +1114,7 @@ size_t test10_bdos(struct union_of_fams *p) { // NO-SANITIZE-WITH-ATTR-NEXT: [[CONV:%.*]] = select i1 [[TMP0]], i32 [[RESULT]], i32 0 // NO-SANITIZE-WITH-ATTR-NEXT: [[ARRAY:%.*]] = getelementptr inbounds nuw i8, ptr [[P]], i64 12 // NO-SANITIZE-WITH-ATTR-NEXT: [[IDXPROM:%.*]] = sext i32 [[INDEX]] to i64 -// NO-SANITIZE-WITH-ATTR-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds [0 x i32], ptr [[ARRAY]], i64 0, i64 [[IDXPROM]] +// NO-SANITIZE-WITH-ATTR-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds i32, ptr [[ARRAY]], i64 [[IDXPROM]] // NO-SANITIZE-WITH-ATTR-NEXT: store i32 [[CONV]], ptr [[ARRAYIDX]], align 4, !tbaa [[TBAA2]] // NO-SANITIZE-WITH-ATTR-NEXT: ret void // @@ -1135,7 +1123,7 @@ size_t test10_bdos(struct union_of_fams *p) { // SANITIZE-WITHOUT-ATTR-NEXT: entry: // SANITIZE-WITHOUT-ATTR-NEXT: [[ARRAY:%.*]] = getelementptr inbounds nuw i8, ptr [[P]], i64 12 // SANITIZE-WITHOUT-ATTR-NEXT: [[IDXPROM:%.*]] = sext i32 [[INDEX]] to i64 -// SANITIZE-WITHOUT-ATTR-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds [0 x i32], ptr [[ARRAY]], i64 0, i64 [[IDXPROM]] +// SANITIZE-WITHOUT-ATTR-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds i32, ptr [[ARRAY]], i64 [[IDXPROM]] // SANITIZE-WITHOUT-ATTR-NEXT: store i32 -1, ptr [[ARRAYIDX]], align 4, !tbaa [[TBAA2]] // SANITIZE-WITHOUT-ATTR-NEXT: ret void // @@ -1144,7 +1132,7 @@ size_t test10_bdos(struct union_of_fams *p) { // NO-SANITIZE-WITHOUT-ATTR-NEXT: entry: // NO-SANITIZE-WITHOUT-ATTR-NEXT: [[ARRAY:%.*]] = getelementptr inbounds nuw i8, ptr [[P]], i64 12 // NO-SANITIZE-WITHOUT-ATTR-NEXT: [[IDXPROM:%.*]] = sext i32 [[INDEX]] to i64 -// NO-SANITIZE-WITHOUT-ATTR-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds [0 x i32], ptr [[ARRAY]], i64 0, i64 [[IDXPROM]] +// NO-SANITIZE-WITHOUT-ATTR-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds i32, ptr [[ARRAY]], i64 [[IDXPROM]] // NO-SANITIZE-WITHOUT-ATTR-NEXT: store i32 -1, ptr [[ARRAYIDX]], align 4, !tbaa [[TBAA2]] // NO-SANITIZE-WITHOUT-ATTR-NEXT: ret void // @@ -1209,7 +1197,7 @@ int test12_a, test12_b; // SANITIZE-WITH-ATTR-SAME: i32 noundef [[INDEX:%.*]]) local_unnamed_addr #[[ATTR3:[0-9]+]] { // SANITIZE-WITH-ATTR-NEXT: entry: // SANITIZE-WITH-ATTR-NEXT: [[BAZ:%.*]] = alloca [[STRUCT_HANG:%.*]], align 4 -// SANITIZE-WITH-ATTR-NEXT: call void @llvm.lifetime.start.p0(i64 24, ptr nonnull [[BAZ]]) #[[ATTR9:[0-9]+]] +// SANITIZE-WITH-ATTR-NEXT: call void @llvm.lifetime.start.p0(ptr nonnull [[BAZ]]) #[[ATTR9:[0-9]+]] // SANITIZE-WITH-ATTR-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(24) [[BAZ]], ptr noundef nonnull align 4 dereferenceable(24) @test12_bar, i64 24, i1 false), !tbaa.struct [[TBAA_STRUCT10:![0-9]+]] // SANITIZE-WITH-ATTR-NEXT: [[TMP0:%.*]] = icmp ult i32 [[INDEX]], 6 // SANITIZE-WITH-ATTR-NEXT: [[TMP1:%.*]] = zext i32 [[INDEX]] to i64 @@ -1218,7 +1206,7 @@ int test12_a, test12_b; // SANITIZE-WITH-ATTR-NEXT: tail call void @__ubsan_handle_out_of_bounds_abort(ptr nonnull @[[GLOB22:[0-9]+]], i64 [[TMP1]]) #[[ATTR8]], !nosanitize [[META2]] // SANITIZE-WITH-ATTR-NEXT: unreachable, !nosanitize [[META2]] // SANITIZE-WITH-ATTR: cont: -// SANITIZE-WITH-ATTR-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds nuw [6 x i32], ptr [[BAZ]], i64 0, i64 [[TMP1]] +// SANITIZE-WITH-ATTR-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds nuw i32, ptr [[BAZ]], i64 [[TMP1]] // SANITIZE-WITH-ATTR-NEXT: [[TMP2:%.*]] = load i32, ptr [[ARRAYIDX]], align 4, !tbaa [[TBAA4]] // SANITIZE-WITH-ATTR-NEXT: store i32 [[TMP2]], ptr @test12_b, align 4, !tbaa [[TBAA4]] // SANITIZE-WITH-ATTR-NEXT: [[DOTCOUNTED_BY_LOAD:%.*]] = load i32, ptr @test12_foo, align 4 @@ -1235,10 +1223,10 @@ int test12_a, test12_b; // NO-SANITIZE-WITH-ATTR-SAME: i32 noundef [[INDEX:%.*]]) local_unnamed_addr #[[ATTR4:[0-9]+]] { // NO-SANITIZE-WITH-ATTR-NEXT: entry: // NO-SANITIZE-WITH-ATTR-NEXT: [[BAZ:%.*]] = alloca [[STRUCT_HANG:%.*]], align 4 -// NO-SANITIZE-WITH-ATTR-NEXT: call void @llvm.lifetime.start.p0(i64 24, ptr nonnull [[BAZ]]) #[[ATTR12:[0-9]+]] +// NO-SANITIZE-WITH-ATTR-NEXT: call void @llvm.lifetime.start.p0(ptr nonnull [[BAZ]]) #[[ATTR12:[0-9]+]] // NO-SANITIZE-WITH-ATTR-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(24) [[BAZ]], ptr noundef nonnull align 4 dereferenceable(24) @test12_bar, i64 24, i1 false), !tbaa.struct [[TBAA_STRUCT7:![0-9]+]] // NO-SANITIZE-WITH-ATTR-NEXT: [[IDXPROM:%.*]] = sext i32 [[INDEX]] to i64 -// NO-SANITIZE-WITH-ATTR-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds [6 x i32], ptr [[BAZ]], i64 0, i64 [[IDXPROM]] +// NO-SANITIZE-WITH-ATTR-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds i32, ptr [[BAZ]], i64 [[IDXPROM]] // NO-SANITIZE-WITH-ATTR-NEXT: [[TMP0:%.*]] = load i32, ptr [[ARRAYIDX]], align 4, !tbaa [[TBAA2]] // NO-SANITIZE-WITH-ATTR-NEXT: store i32 [[TMP0]], ptr @test12_b, align 4, !tbaa [[TBAA2]] // NO-SANITIZE-WITH-ATTR-NEXT: [[TMP1:%.*]] = load i32, ptr getelementptr inbounds nuw (i8, ptr @test12_foo, i64 4), align 4, !tbaa [[TBAA2]] @@ -1251,7 +1239,7 @@ int test12_a, test12_b; // SANITIZE-WITHOUT-ATTR-SAME: i32 noundef [[INDEX:%.*]]) local_unnamed_addr #[[ATTR3:[0-9]+]] { // SANITIZE-WITHOUT-ATTR-NEXT: entry: // SANITIZE-WITHOUT-ATTR-NEXT: [[BAZ:%.*]] = alloca [[STRUCT_HANG:%.*]], align 4 -// SANITIZE-WITHOUT-ATTR-NEXT: call void @llvm.lifetime.start.p0(i64 24, ptr nonnull [[BAZ]]) #[[ATTR7:[0-9]+]] +// SANITIZE-WITHOUT-ATTR-NEXT: call void @llvm.lifetime.start.p0(ptr nonnull [[BAZ]]) #[[ATTR7:[0-9]+]] // SANITIZE-WITHOUT-ATTR-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(24) [[BAZ]], ptr noundef nonnull align 4 dereferenceable(24) @test12_bar, i64 24, i1 false), !tbaa.struct [[TBAA_STRUCT7:![0-9]+]] // SANITIZE-WITHOUT-ATTR-NEXT: [[TMP0:%.*]] = icmp ult i32 [[INDEX]], 6 // SANITIZE-WITHOUT-ATTR-NEXT: [[TMP1:%.*]] = zext i32 [[INDEX]] to i64 @@ -1260,7 +1248,7 @@ int test12_a, test12_b; // SANITIZE-WITHOUT-ATTR-NEXT: tail call void @__ubsan_handle_out_of_bounds_abort(ptr nonnull @[[GLOB2:[0-9]+]], i64 [[TMP1]]) #[[ATTR8:[0-9]+]], !nosanitize [[META9]] // SANITIZE-WITHOUT-ATTR-NEXT: unreachable, !nosanitize [[META9]] // SANITIZE-WITHOUT-ATTR: cont: -// SANITIZE-WITHOUT-ATTR-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds nuw [6 x i32], ptr [[BAZ]], i64 0, i64 [[TMP1]] +// SANITIZE-WITHOUT-ATTR-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds nuw i32, ptr [[BAZ]], i64 [[TMP1]] // SANITIZE-WITHOUT-ATTR-NEXT: [[TMP2:%.*]] = load i32, ptr [[ARRAYIDX]], align 4, !tbaa [[TBAA2]] // SANITIZE-WITHOUT-ATTR-NEXT: store i32 [[TMP2]], ptr @test12_b, align 4, !tbaa [[TBAA2]] // SANITIZE-WITHOUT-ATTR-NEXT: [[DOTCOUNTED_BY_LOAD:%.*]] = load i32, ptr @test12_foo, align 4 @@ -1277,10 +1265,10 @@ int test12_a, test12_b; // NO-SANITIZE-WITHOUT-ATTR-SAME: i32 noundef [[INDEX:%.*]]) local_unnamed_addr #[[ATTR2:[0-9]+]] { // NO-SANITIZE-WITHOUT-ATTR-NEXT: entry: // NO-SANITIZE-WITHOUT-ATTR-NEXT: [[BAZ:%.*]] = alloca [[STRUCT_HANG:%.*]], align 4 -// NO-SANITIZE-WITHOUT-ATTR-NEXT: call void @llvm.lifetime.start.p0(i64 24, ptr nonnull [[BAZ]]) #[[ATTR10:[0-9]+]] +// NO-SANITIZE-WITHOUT-ATTR-NEXT: call void @llvm.lifetime.start.p0(ptr nonnull [[BAZ]]) #[[ATTR10:[0-9]+]] // NO-SANITIZE-WITHOUT-ATTR-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(24) [[BAZ]], ptr noundef nonnull align 4 dereferenceable(24) @test12_bar, i64 24, i1 false), !tbaa.struct [[TBAA_STRUCT7:![0-9]+]] // NO-SANITIZE-WITHOUT-ATTR-NEXT: [[IDXPROM:%.*]] = sext i32 [[INDEX]] to i64 -// NO-SANITIZE-WITHOUT-ATTR-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds [6 x i32], ptr [[BAZ]], i64 0, i64 [[IDXPROM]] +// NO-SANITIZE-WITHOUT-ATTR-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds i32, ptr [[BAZ]], i64 [[IDXPROM]] // NO-SANITIZE-WITHOUT-ATTR-NEXT: [[TMP0:%.*]] = load i32, ptr [[ARRAYIDX]], align 4, !tbaa [[TBAA2]] // NO-SANITIZE-WITHOUT-ATTR-NEXT: store i32 [[TMP0]], ptr @test12_b, align 4, !tbaa [[TBAA2]] // NO-SANITIZE-WITHOUT-ATTR-NEXT: [[TMP1:%.*]] = load i32, ptr getelementptr inbounds nuw (i8, ptr @test12_foo, i64 4), align 4, !tbaa [[TBAA2]] @@ -1322,7 +1310,7 @@ struct test13_bar { // SANITIZE-WITH-ATTR-NEXT: unreachable, !nosanitize [[META2]] // SANITIZE-WITH-ATTR: cont5: // SANITIZE-WITH-ATTR-NEXT: [[REVMAP:%.*]] = getelementptr inbounds nuw i8, ptr [[TMP0]], i64 16 -// SANITIZE-WITH-ATTR-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds nuw [0 x ptr], ptr [[REVMAP]], i64 0, i64 [[INDEX]] +// SANITIZE-WITH-ATTR-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds nuw ptr, ptr [[REVMAP]], i64 [[INDEX]] // SANITIZE-WITH-ATTR-NEXT: store ptr null, ptr [[ARRAYIDX]], align 8, !tbaa [[TBAA15:![0-9]+]] // SANITIZE-WITH-ATTR-NEXT: ret i32 0 // @@ -1331,7 +1319,7 @@ struct test13_bar { // NO-SANITIZE-WITH-ATTR-NEXT: entry: // NO-SANITIZE-WITH-ATTR-NEXT: [[TMP0:%.*]] = load ptr, ptr @test13_f, align 8, !tbaa [[TBAA8:![0-9]+]] // NO-SANITIZE-WITH-ATTR-NEXT: [[REVMAP:%.*]] = getelementptr inbounds nuw i8, ptr [[TMP0]], i64 16 -// NO-SANITIZE-WITH-ATTR-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds [0 x ptr], ptr [[REVMAP]], i64 0, i64 [[INDEX]] +// NO-SANITIZE-WITH-ATTR-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds ptr, ptr [[REVMAP]], i64 [[INDEX]] // NO-SANITIZE-WITH-ATTR-NEXT: store ptr null, ptr [[ARRAYIDX]], align 8, !tbaa [[TBAA12:![0-9]+]] // NO-SANITIZE-WITH-ATTR-NEXT: ret i32 0 // @@ -1349,7 +1337,7 @@ struct test13_bar { // SANITIZE-WITHOUT-ATTR-NEXT: unreachable, !nosanitize [[META9]] // SANITIZE-WITHOUT-ATTR: cont5: // SANITIZE-WITHOUT-ATTR-NEXT: [[REVMAP:%.*]] = getelementptr inbounds nuw i8, ptr [[TMP0]], i64 16 -// SANITIZE-WITHOUT-ATTR-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds nuw [0 x ptr], ptr [[REVMAP]], i64 0, i64 [[INDEX]] +// SANITIZE-WITHOUT-ATTR-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds nuw ptr, ptr [[REVMAP]], i64 [[INDEX]] // SANITIZE-WITHOUT-ATTR-NEXT: store ptr null, ptr [[ARRAYIDX]], align 8, !tbaa [[TBAA15:![0-9]+]] // SANITIZE-WITHOUT-ATTR-NEXT: ret i32 0 // @@ -1358,7 +1346,7 @@ struct test13_bar { // NO-SANITIZE-WITHOUT-ATTR-NEXT: entry: // NO-SANITIZE-WITHOUT-ATTR-NEXT: [[TMP0:%.*]] = load ptr, ptr @test13_f, align 8, !tbaa [[TBAA8:![0-9]+]] // NO-SANITIZE-WITHOUT-ATTR-NEXT: [[REVMAP:%.*]] = getelementptr inbounds nuw i8, ptr [[TMP0]], i64 16 -// NO-SANITIZE-WITHOUT-ATTR-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds [0 x ptr], ptr [[REVMAP]], i64 0, i64 [[INDEX]] +// NO-SANITIZE-WITHOUT-ATTR-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds ptr, ptr [[REVMAP]], i64 [[INDEX]] // NO-SANITIZE-WITHOUT-ATTR-NEXT: store ptr null, ptr [[ARRAYIDX]], align 8, !tbaa [[TBAA12:![0-9]+]] // NO-SANITIZE-WITHOUT-ATTR-NEXT: ret i32 0 // @@ -1393,7 +1381,7 @@ struct test14_foo { // NO-SANITIZE-WITH-ATTR-NEXT: store i32 2, ptr [[Y]], align 4, !tbaa [[TBAA2]] // NO-SANITIZE-WITH-ATTR-NEXT: [[BLAH:%.*]] = getelementptr inbounds nuw i8, ptr [[DOTCOMPOUNDLITERAL]], i64 8 // NO-SANITIZE-WITH-ATTR-NEXT: [[IDXPROM:%.*]] = sext i32 [[IDX]] to i64 -// NO-SANITIZE-WITH-ATTR-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds [0 x i32], ptr [[BLAH]], i64 0, i64 [[IDXPROM]] +// NO-SANITIZE-WITH-ATTR-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds i32, ptr [[BLAH]], i64 [[IDXPROM]] // NO-SANITIZE-WITH-ATTR-NEXT: [[TMP0:%.*]] = load i32, ptr [[ARRAYIDX]], align 4, !tbaa [[TBAA2]] // NO-SANITIZE-WITH-ATTR-NEXT: ret i32 [[TMP0]] // @@ -1418,7 +1406,7 @@ struct test14_foo { // NO-SANITIZE-WITHOUT-ATTR-NEXT: store i32 2, ptr [[Y]], align 4, !tbaa [[TBAA2]] // NO-SANITIZE-WITHOUT-ATTR-NEXT: [[BLAH:%.*]] = getelementptr inbounds nuw i8, ptr [[DOTCOMPOUNDLITERAL]], i64 8 // NO-SANITIZE-WITHOUT-ATTR-NEXT: [[IDXPROM:%.*]] = sext i32 [[IDX]] to i64 -// NO-SANITIZE-WITHOUT-ATTR-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds [0 x i32], ptr [[BLAH]], i64 0, i64 [[IDXPROM]] +// NO-SANITIZE-WITHOUT-ATTR-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds i32, ptr [[BLAH]], i64 [[IDXPROM]] // NO-SANITIZE-WITHOUT-ATTR-NEXT: [[TMP0:%.*]] = load i32, ptr [[ARRAYIDX]], align 4, !tbaa [[TBAA2]] // NO-SANITIZE-WITHOUT-ATTR-NEXT: ret i32 [[TMP0]] // @@ -1442,7 +1430,7 @@ int test14(int idx) { // NO-SANITIZE-WITH-ATTR-SAME: i32 noundef [[IDX:%.*]]) local_unnamed_addr #[[ATTR3]] { // NO-SANITIZE-WITH-ATTR-NEXT: entry: // NO-SANITIZE-WITH-ATTR-NEXT: [[IDXPROM:%.*]] = sext i32 [[IDX]] to i64 -// NO-SANITIZE-WITH-ATTR-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds [0 x i32], ptr getelementptr inbounds nuw (i8, ptr @__const.test15.foo, i64 8), i64 0, i64 [[IDXPROM]] +// NO-SANITIZE-WITH-ATTR-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds i32, ptr getelementptr inbounds nuw (i8, ptr @__const.test15.foo, i64 8), i64 [[IDXPROM]] // NO-SANITIZE-WITH-ATTR-NEXT: [[TMP0:%.*]] = load i32, ptr [[ARRAYIDX]], align 4, !tbaa [[TBAA2]] // NO-SANITIZE-WITH-ATTR-NEXT: ret i32 [[TMP0]] // @@ -1462,7 +1450,7 @@ int test14(int idx) { // NO-SANITIZE-WITHOUT-ATTR-SAME: i32 noundef [[IDX:%.*]]) local_unnamed_addr #[[ATTR1]] { // NO-SANITIZE-WITHOUT-ATTR-NEXT: entry: // NO-SANITIZE-WITHOUT-ATTR-NEXT: [[IDXPROM:%.*]] = sext i32 [[IDX]] to i64 -// NO-SANITIZE-WITHOUT-ATTR-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds [0 x i32], ptr getelementptr inbounds nuw (i8, ptr @__const.test15.foo, i64 8), i64 0, i64 [[IDXPROM]] +// NO-SANITIZE-WITHOUT-ATTR-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds i32, ptr getelementptr inbounds nuw (i8, ptr @__const.test15.foo, i64 8), i64 [[IDXPROM]] // NO-SANITIZE-WITHOUT-ATTR-NEXT: [[TMP0:%.*]] = load i32, ptr [[ARRAYIDX]], align 4, !tbaa [[TBAA2]] // NO-SANITIZE-WITHOUT-ATTR-NEXT: ret i32 [[TMP0]] // @@ -1718,7 +1706,7 @@ struct test26_foo { // SANITIZE-WITH-ATTR-NEXT: unreachable, !nosanitize [[META2]] // SANITIZE-WITH-ATTR: cont5: // SANITIZE-WITH-ATTR-NEXT: [[ARR:%.*]] = getelementptr inbounds nuw i8, ptr [[FOO]], i64 8 -// SANITIZE-WITH-ATTR-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds nuw [0 x i32], ptr [[ARR]], i64 0, i64 [[IDXPROM]] +// SANITIZE-WITH-ATTR-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds nuw i32, ptr [[ARR]], i64 [[IDXPROM]] // SANITIZE-WITH-ATTR-NEXT: [[TMP2:%.*]] = load i32, ptr [[ARRAYIDX]], align 4, !tbaa [[TBAA4]] // SANITIZE-WITH-ATTR-NEXT: ret i32 [[TMP2]] // @@ -1727,7 +1715,7 @@ struct test26_foo { // NO-SANITIZE-WITH-ATTR-NEXT: entry: // NO-SANITIZE-WITH-ATTR-NEXT: [[ARR:%.*]] = getelementptr inbounds nuw i8, ptr [[FOO]], i64 8 // NO-SANITIZE-WITH-ATTR-NEXT: [[IDXPROM:%.*]] = sext i32 [[C]] to i64 -// NO-SANITIZE-WITH-ATTR-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds [0 x i32], ptr [[ARR]], i64 0, i64 [[IDXPROM]] +// NO-SANITIZE-WITH-ATTR-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds i32, ptr [[ARR]], i64 [[IDXPROM]] // NO-SANITIZE-WITH-ATTR-NEXT: [[TMP0:%.*]] = load i32, ptr [[ARRAYIDX]], align 4, !tbaa [[TBAA2]] // NO-SANITIZE-WITH-ATTR-NEXT: ret i32 [[TMP0]] // @@ -1736,7 +1724,7 @@ struct test26_foo { // SANITIZE-WITHOUT-ATTR-NEXT: entry: // SANITIZE-WITHOUT-ATTR-NEXT: [[ARR:%.*]] = getelementptr inbounds nuw i8, ptr [[FOO]], i64 8 // SANITIZE-WITHOUT-ATTR-NEXT: [[IDXPROM:%.*]] = sext i32 [[C]] to i64 -// SANITIZE-WITHOUT-ATTR-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds [0 x i32], ptr [[ARR]], i64 0, i64 [[IDXPROM]] +// SANITIZE-WITHOUT-ATTR-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds i32, ptr [[ARR]], i64 [[IDXPROM]] // SANITIZE-WITHOUT-ATTR-NEXT: [[TMP0:%.*]] = load i32, ptr [[ARRAYIDX]], align 4, !tbaa [[TBAA2]] // SANITIZE-WITHOUT-ATTR-NEXT: ret i32 [[TMP0]] // @@ -1745,7 +1733,7 @@ struct test26_foo { // NO-SANITIZE-WITHOUT-ATTR-NEXT: entry: // NO-SANITIZE-WITHOUT-ATTR-NEXT: [[ARR:%.*]] = getelementptr inbounds nuw i8, ptr [[FOO]], i64 8 // NO-SANITIZE-WITHOUT-ATTR-NEXT: [[IDXPROM:%.*]] = sext i32 [[C]] to i64 -// NO-SANITIZE-WITHOUT-ATTR-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds [0 x i32], ptr [[ARR]], i64 0, i64 [[IDXPROM]] +// NO-SANITIZE-WITHOUT-ATTR-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds i32, ptr [[ARR]], i64 [[IDXPROM]] // NO-SANITIZE-WITHOUT-ATTR-NEXT: [[TMP0:%.*]] = load i32, ptr [[ARRAYIDX]], align 4, !tbaa [[TBAA2]] // NO-SANITIZE-WITHOUT-ATTR-NEXT: ret i32 [[TMP0]] // @@ -1789,7 +1777,7 @@ struct test27_foo { // SANITIZE-WITH-ATTR-NEXT: unreachable, !nosanitize [[META2]] // SANITIZE-WITH-ATTR: cont3: // SANITIZE-WITH-ATTR-NEXT: [[ENTRIES:%.*]] = getelementptr inbounds nuw i8, ptr [[P]], i64 24 -// SANITIZE-WITH-ATTR-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds nuw [0 x ptr], ptr [[ENTRIES]], i64 0, i64 [[IDXPROM]] +// SANITIZE-WITH-ATTR-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds nuw ptr, ptr [[ENTRIES]], i64 [[IDXPROM]] // SANITIZE-WITH-ATTR-NEXT: [[TMP2:%.*]] = load ptr, ptr [[ARRAYIDX]], align 8, !tbaa [[TBAA19:![0-9]+]] // SANITIZE-WITH-ATTR-NEXT: [[IDXPROM4:%.*]] = sext i32 [[J]] to i64 // SANITIZE-WITH-ATTR-NEXT: [[ARRAYIDX5:%.*]] = getelementptr inbounds [[STRUCT_TEST27_BAR:%.*]], ptr [[TMP2]], i64 [[IDXPROM4]] @@ -1800,7 +1788,7 @@ struct test27_foo { // NO-SANITIZE-WITH-ATTR-NEXT: entry: // NO-SANITIZE-WITH-ATTR-NEXT: [[ENTRIES:%.*]] = getelementptr inbounds nuw i8, ptr [[P]], i64 24 // NO-SANITIZE-WITH-ATTR-NEXT: [[IDXPROM:%.*]] = sext i32 [[I]] to i64 -// NO-SANITIZE-WITH-ATTR-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds [0 x ptr], ptr [[ENTRIES]], i64 0, i64 [[IDXPROM]] +// NO-SANITIZE-WITH-ATTR-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds ptr, ptr [[ENTRIES]], i64 [[IDXPROM]] // NO-SANITIZE-WITH-ATTR-NEXT: [[TMP0:%.*]] = load ptr, ptr [[ARRAYIDX]], align 8, !tbaa [[TBAA16:![0-9]+]] // NO-SANITIZE-WITH-ATTR-NEXT: [[IDXPROM1:%.*]] = sext i32 [[J]] to i64 // NO-SANITIZE-WITH-ATTR-NEXT: [[ARRAYIDX2:%.*]] = getelementptr inbounds [[STRUCT_TEST27_BAR:%.*]], ptr [[TMP0]], i64 [[IDXPROM1]] @@ -1811,7 +1799,7 @@ struct test27_foo { // SANITIZE-WITHOUT-ATTR-NEXT: entry: // SANITIZE-WITHOUT-ATTR-NEXT: [[ENTRIES:%.*]] = getelementptr inbounds nuw i8, ptr [[P]], i64 24 // SANITIZE-WITHOUT-ATTR-NEXT: [[IDXPROM:%.*]] = sext i32 [[I]] to i64 -// SANITIZE-WITHOUT-ATTR-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds [0 x ptr], ptr [[ENTRIES]], i64 0, i64 [[IDXPROM]] +// SANITIZE-WITHOUT-ATTR-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds ptr, ptr [[ENTRIES]], i64 [[IDXPROM]] // SANITIZE-WITHOUT-ATTR-NEXT: [[TMP0:%.*]] = load ptr, ptr [[ARRAYIDX]], align 8, !tbaa [[TBAA19:![0-9]+]] // SANITIZE-WITHOUT-ATTR-NEXT: [[IDXPROM3:%.*]] = sext i32 [[J]] to i64 // SANITIZE-WITHOUT-ATTR-NEXT: [[ARRAYIDX4:%.*]] = getelementptr inbounds [[STRUCT_TEST27_BAR:%.*]], ptr [[TMP0]], i64 [[IDXPROM3]] @@ -1822,7 +1810,7 @@ struct test27_foo { // NO-SANITIZE-WITHOUT-ATTR-NEXT: entry: // NO-SANITIZE-WITHOUT-ATTR-NEXT: [[ENTRIES:%.*]] = getelementptr inbounds nuw i8, ptr [[P]], i64 24 // NO-SANITIZE-WITHOUT-ATTR-NEXT: [[IDXPROM:%.*]] = sext i32 [[I]] to i64 -// NO-SANITIZE-WITHOUT-ATTR-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds [0 x ptr], ptr [[ENTRIES]], i64 0, i64 [[IDXPROM]] +// NO-SANITIZE-WITHOUT-ATTR-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds ptr, ptr [[ENTRIES]], i64 [[IDXPROM]] // NO-SANITIZE-WITHOUT-ATTR-NEXT: [[TMP0:%.*]] = load ptr, ptr [[ARRAYIDX]], align 8, !tbaa [[TBAA16:![0-9]+]] // NO-SANITIZE-WITHOUT-ATTR-NEXT: [[IDXPROM1:%.*]] = sext i32 [[J]] to i64 // NO-SANITIZE-WITHOUT-ATTR-NEXT: [[ARRAYIDX2:%.*]] = getelementptr inbounds [[STRUCT_TEST27_BAR:%.*]], ptr [[TMP0]], i64 [[IDXPROM1]] @@ -1855,7 +1843,7 @@ struct test28_foo { // SANITIZE-WITH-ATTR-NEXT: unreachable, !nosanitize [[META2]] // SANITIZE-WITH-ATTR: cont17: // SANITIZE-WITH-ATTR-NEXT: [[ARR:%.*]] = getelementptr inbounds nuw i8, ptr [[TMP2]], i64 12 -// SANITIZE-WITH-ATTR-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds nuw [0 x i32], ptr [[ARR]], i64 0, i64 [[IDXPROM]] +// SANITIZE-WITH-ATTR-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds nuw i32, ptr [[ARR]], i64 [[IDXPROM]] // SANITIZE-WITH-ATTR-NEXT: [[TMP5:%.*]] = load i32, ptr [[ARRAYIDX]], align 4, !tbaa [[TBAA4]] // SANITIZE-WITH-ATTR-NEXT: ret i32 [[TMP5]] // @@ -1867,7 +1855,7 @@ struct test28_foo { // NO-SANITIZE-WITH-ATTR-NEXT: [[TMP2:%.*]] = load ptr, ptr [[TMP1]], align 8, !tbaa [[TBAA18]] // NO-SANITIZE-WITH-ATTR-NEXT: [[ARR:%.*]] = getelementptr inbounds nuw i8, ptr [[TMP2]], i64 12 // NO-SANITIZE-WITH-ATTR-NEXT: [[IDXPROM:%.*]] = sext i32 [[I]] to i64 -// NO-SANITIZE-WITH-ATTR-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds [0 x i32], ptr [[ARR]], i64 0, i64 [[IDXPROM]] +// NO-SANITIZE-WITH-ATTR-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds i32, ptr [[ARR]], i64 [[IDXPROM]] // NO-SANITIZE-WITH-ATTR-NEXT: [[TMP3:%.*]] = load i32, ptr [[ARRAYIDX]], align 4, !tbaa [[TBAA2]] // NO-SANITIZE-WITH-ATTR-NEXT: ret i32 [[TMP3]] // @@ -1879,7 +1867,7 @@ struct test28_foo { // SANITIZE-WITHOUT-ATTR-NEXT: [[TMP2:%.*]] = load ptr, ptr [[TMP1]], align 8, !tbaa [[TBAA21]] // SANITIZE-WITHOUT-ATTR-NEXT: [[ARR:%.*]] = getelementptr inbounds nuw i8, ptr [[TMP2]], i64 12 // SANITIZE-WITHOUT-ATTR-NEXT: [[IDXPROM:%.*]] = sext i32 [[I]] to i64 -// SANITIZE-WITHOUT-ATTR-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds [0 x i32], ptr [[ARR]], i64 0, i64 [[IDXPROM]] +// SANITIZE-WITHOUT-ATTR-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds i32, ptr [[ARR]], i64 [[IDXPROM]] // SANITIZE-WITHOUT-ATTR-NEXT: [[TMP3:%.*]] = load i32, ptr [[ARRAYIDX]], align 4, !tbaa [[TBAA2]] // SANITIZE-WITHOUT-ATTR-NEXT: ret i32 [[TMP3]] // @@ -1891,7 +1879,7 @@ struct test28_foo { // NO-SANITIZE-WITHOUT-ATTR-NEXT: [[TMP2:%.*]] = load ptr, ptr [[TMP1]], align 8, !tbaa [[TBAA18]] // NO-SANITIZE-WITHOUT-ATTR-NEXT: [[ARR:%.*]] = getelementptr inbounds nuw i8, ptr [[TMP2]], i64 12 // NO-SANITIZE-WITHOUT-ATTR-NEXT: [[IDXPROM:%.*]] = sext i32 [[I]] to i64 -// NO-SANITIZE-WITHOUT-ATTR-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds [0 x i32], ptr [[ARR]], i64 0, i64 [[IDXPROM]] +// NO-SANITIZE-WITHOUT-ATTR-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds i32, ptr [[ARR]], i64 [[IDXPROM]] // NO-SANITIZE-WITHOUT-ATTR-NEXT: [[TMP3:%.*]] = load i32, ptr [[ARRAYIDX]], align 4, !tbaa [[TBAA2]] // NO-SANITIZE-WITHOUT-ATTR-NEXT: ret i32 [[TMP3]] // @@ -1916,7 +1904,7 @@ struct annotated_struct_array { // SANITIZE-WITH-ATTR-NEXT: tail call void @__ubsan_handle_out_of_bounds_abort(ptr nonnull @[[GLOB41:[0-9]+]], i64 [[TMP1]]) #[[ATTR8]], !nosanitize [[META2]] // SANITIZE-WITH-ATTR-NEXT: unreachable, !nosanitize [[META2]] // SANITIZE-WITH-ATTR: cont3: -// SANITIZE-WITH-ATTR-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds nuw [10 x ptr], ptr [[ANN]], i64 0, i64 [[TMP1]] +// SANITIZE-WITH-ATTR-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds nuw ptr, ptr [[ANN]], i64 [[TMP1]] // SANITIZE-WITH-ATTR-NEXT: [[TMP2:%.*]] = load ptr, ptr [[ARRAYIDX]], align 8, !tbaa [[TBAA23:![0-9]+]] // SANITIZE-WITH-ATTR-NEXT: [[COUNTED_BY_GEP:%.*]] = getelementptr inbounds nuw i8, ptr [[TMP2]], i64 8 // SANITIZE-WITH-ATTR-NEXT: [[COUNTED_BY_LOAD:%.*]] = load i32, ptr [[COUNTED_BY_GEP]], align 4 @@ -1929,7 +1917,7 @@ struct annotated_struct_array { // SANITIZE-WITH-ATTR-NEXT: unreachable, !nosanitize [[META2]] // SANITIZE-WITH-ATTR: cont32: // SANITIZE-WITH-ATTR-NEXT: [[ARRAY:%.*]] = getelementptr inbounds nuw i8, ptr [[TMP2]], i64 12 -// SANITIZE-WITH-ATTR-NEXT: [[ARRAYIDX30:%.*]] = getelementptr inbounds nuw [0 x i32], ptr [[ARRAY]], i64 0, i64 [[IDXPROM27]] +// SANITIZE-WITH-ATTR-NEXT: [[ARRAYIDX30:%.*]] = getelementptr inbounds nuw i32, ptr [[ARRAY]], i64 [[IDXPROM27]] // SANITIZE-WITH-ATTR-NEXT: [[TMP5:%.*]] = tail call i32 @llvm.smax.i32(i32 [[COUNTED_BY_LOAD]], i32 0) // SANITIZE-WITH-ATTR-NEXT: [[CONV:%.*]] = shl i32 [[TMP5]], 2 // SANITIZE-WITH-ATTR-NEXT: store i32 [[CONV]], ptr [[ARRAYIDX30]], align 4, !tbaa [[TBAA4]] @@ -1939,7 +1927,7 @@ struct annotated_struct_array { // NO-SANITIZE-WITH-ATTR-SAME: ptr noundef readonly captures(none) [[ANN:%.*]], i32 noundef [[IDX1:%.*]], i32 noundef [[IDX2:%.*]]) local_unnamed_addr #[[ATTR9:[0-9]+]] { // NO-SANITIZE-WITH-ATTR-NEXT: entry: // NO-SANITIZE-WITH-ATTR-NEXT: [[IDXPROM:%.*]] = sext i32 [[IDX1]] to i64 -// NO-SANITIZE-WITH-ATTR-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds [10 x ptr], ptr [[ANN]], i64 0, i64 [[IDXPROM]] +// NO-SANITIZE-WITH-ATTR-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds ptr, ptr [[ANN]], i64 [[IDXPROM]] // NO-SANITIZE-WITH-ATTR-NEXT: [[TMP0:%.*]] = load ptr, ptr [[ARRAYIDX]], align 8, !tbaa [[TBAA20:![0-9]+]] // NO-SANITIZE-WITH-ATTR-NEXT: [[ARRAY:%.*]] = getelementptr inbounds nuw i8, ptr [[TMP0]], i64 12 // NO-SANITIZE-WITH-ATTR-NEXT: [[COUNTED_BY_GEP:%.*]] = getelementptr inbounds nuw i8, ptr [[TMP0]], i64 8 @@ -1947,7 +1935,7 @@ struct annotated_struct_array { // NO-SANITIZE-WITH-ATTR-NEXT: [[TMP1:%.*]] = tail call i32 @llvm.smax.i32(i32 [[COUNTED_BY_LOAD]], i32 0) // NO-SANITIZE-WITH-ATTR-NEXT: [[CONV:%.*]] = shl i32 [[TMP1]], 2 // NO-SANITIZE-WITH-ATTR-NEXT: [[IDXPROM8:%.*]] = sext i32 [[IDX2]] to i64 -// NO-SANITIZE-WITH-ATTR-NEXT: [[ARRAYIDX9:%.*]] = getelementptr inbounds [0 x i32], ptr [[ARRAY]], i64 0, i64 [[IDXPROM8]] +// NO-SANITIZE-WITH-ATTR-NEXT: [[ARRAYIDX9:%.*]] = getelementptr inbounds i32, ptr [[ARRAY]], i64 [[IDXPROM8]] // NO-SANITIZE-WITH-ATTR-NEXT: store i32 [[CONV]], ptr [[ARRAYIDX9]], align 4, !tbaa [[TBAA2]] // NO-SANITIZE-WITH-ATTR-NEXT: ret void // @@ -1961,11 +1949,11 @@ struct annotated_struct_array { // SANITIZE-WITHOUT-ATTR-NEXT: tail call void @__ubsan_handle_out_of_bounds_abort(ptr nonnull @[[GLOB13:[0-9]+]], i64 [[TMP1]]) #[[ATTR8]], !nosanitize [[META9]] // SANITIZE-WITHOUT-ATTR-NEXT: unreachable, !nosanitize [[META9]] // SANITIZE-WITHOUT-ATTR: cont21: -// SANITIZE-WITHOUT-ATTR-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds nuw [10 x ptr], ptr [[ANN]], i64 0, i64 [[TMP1]] +// SANITIZE-WITHOUT-ATTR-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds nuw ptr, ptr [[ANN]], i64 [[TMP1]] // SANITIZE-WITHOUT-ATTR-NEXT: [[TMP2:%.*]] = load ptr, ptr [[ARRAYIDX]], align 8, !tbaa [[TBAA23:![0-9]+]] // SANITIZE-WITHOUT-ATTR-NEXT: [[ARRAY:%.*]] = getelementptr inbounds nuw i8, ptr [[TMP2]], i64 12 // SANITIZE-WITHOUT-ATTR-NEXT: [[IDXPROM18:%.*]] = sext i32 [[IDX2]] to i64 -// SANITIZE-WITHOUT-ATTR-NEXT: [[ARRAYIDX19:%.*]] = getelementptr inbounds [0 x i32], ptr [[ARRAY]], i64 0, i64 [[IDXPROM18]] +// SANITIZE-WITHOUT-ATTR-NEXT: [[ARRAYIDX19:%.*]] = getelementptr inbounds i32, ptr [[ARRAY]], i64 [[IDXPROM18]] // SANITIZE-WITHOUT-ATTR-NEXT: store i32 -1, ptr [[ARRAYIDX19]], align 4, !tbaa [[TBAA2]] // SANITIZE-WITHOUT-ATTR-NEXT: ret void // @@ -1973,11 +1961,11 @@ struct annotated_struct_array { // NO-SANITIZE-WITHOUT-ATTR-SAME: ptr noundef readonly captures(none) [[ANN:%.*]], i32 noundef [[IDX1:%.*]], i32 noundef [[IDX2:%.*]]) local_unnamed_addr #[[ATTR8:[0-9]+]] { // NO-SANITIZE-WITHOUT-ATTR-NEXT: entry: // NO-SANITIZE-WITHOUT-ATTR-NEXT: [[IDXPROM:%.*]] = sext i32 [[IDX1]] to i64 -// NO-SANITIZE-WITHOUT-ATTR-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds [10 x ptr], ptr [[ANN]], i64 0, i64 [[IDXPROM]] +// NO-SANITIZE-WITHOUT-ATTR-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds ptr, ptr [[ANN]], i64 [[IDXPROM]] // NO-SANITIZE-WITHOUT-ATTR-NEXT: [[TMP0:%.*]] = load ptr, ptr [[ARRAYIDX]], align 8, !tbaa [[TBAA20:![0-9]+]] // NO-SANITIZE-WITHOUT-ATTR-NEXT: [[ARRAY:%.*]] = getelementptr inbounds nuw i8, ptr [[TMP0]], i64 12 // NO-SANITIZE-WITHOUT-ATTR-NEXT: [[IDXPROM5:%.*]] = sext i32 [[IDX2]] to i64 -// NO-SANITIZE-WITHOUT-ATTR-NEXT: [[ARRAYIDX6:%.*]] = getelementptr inbounds [0 x i32], ptr [[ARRAY]], i64 0, i64 [[IDXPROM5]] +// NO-SANITIZE-WITHOUT-ATTR-NEXT: [[ARRAYIDX6:%.*]] = getelementptr inbounds i32, ptr [[ARRAY]], i64 [[IDXPROM5]] // NO-SANITIZE-WITHOUT-ATTR-NEXT: store i32 -1, ptr [[ARRAYIDX6]], align 4, !tbaa [[TBAA2]] // NO-SANITIZE-WITHOUT-ATTR-NEXT: ret void // @@ -2008,7 +1996,7 @@ struct test30_struct { // NO-SANITIZE-WITH-ATTR-NEXT: entry: // NO-SANITIZE-WITH-ATTR-NEXT: [[PCPU_REFCNT:%.*]] = getelementptr inbounds nuw i8, ptr [[PTR]], i64 12 // NO-SANITIZE-WITH-ATTR-NEXT: [[IDXPROM:%.*]] = sext i32 [[IDX]] to i64 -// NO-SANITIZE-WITH-ATTR-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds [0 x i8], ptr [[PCPU_REFCNT]], i64 0, i64 [[IDXPROM]] +// NO-SANITIZE-WITH-ATTR-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds i8, ptr [[PCPU_REFCNT]], i64 [[IDXPROM]] // NO-SANITIZE-WITH-ATTR-NEXT: store i8 -1, ptr [[ARRAYIDX]], align 1, !tbaa [[TBAA6]] // NO-SANITIZE-WITH-ATTR-NEXT: ret void // @@ -2024,7 +2012,7 @@ struct test30_struct { // NO-SANITIZE-WITHOUT-ATTR-NEXT: entry: // NO-SANITIZE-WITHOUT-ATTR-NEXT: [[PCPU_REFCNT:%.*]] = getelementptr inbounds nuw i8, ptr [[PTR]], i64 12 // NO-SANITIZE-WITHOUT-ATTR-NEXT: [[IDXPROM:%.*]] = sext i32 [[IDX]] to i64 -// NO-SANITIZE-WITHOUT-ATTR-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds [0 x i8], ptr [[PCPU_REFCNT]], i64 0, i64 [[IDXPROM]] +// NO-SANITIZE-WITHOUT-ATTR-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds i8, ptr [[PCPU_REFCNT]], i64 [[IDXPROM]] // NO-SANITIZE-WITHOUT-ATTR-NEXT: store i8 -1, ptr [[ARRAYIDX]], align 1, !tbaa [[TBAA6]] // NO-SANITIZE-WITHOUT-ATTR-NEXT: ret void // @@ -2091,7 +2079,7 @@ struct annotated_with_array { // SANITIZE-WITH-ATTR-NEXT: unreachable, !nosanitize [[META2]] // SANITIZE-WITH-ATTR: cont9: // SANITIZE-WITH-ATTR-NEXT: [[ARRAY:%.*]] = getelementptr inbounds nuw i8, ptr [[PTR]], i64 344 -// SANITIZE-WITH-ATTR-NEXT: [[ARRAYIDX7:%.*]] = getelementptr inbounds nuw [0 x i64], ptr [[ARRAY]], i64 0, i64 [[IDXPROM4]] +// SANITIZE-WITH-ATTR-NEXT: [[ARRAYIDX7:%.*]] = getelementptr inbounds nuw i64, ptr [[ARRAY]], i64 [[IDXPROM4]] // SANITIZE-WITH-ATTR-NEXT: [[COUNT:%.*]] = sext i32 [[COUNTED_BY_LOAD]] to i64 // SANITIZE-WITH-ATTR-NEXT: [[FLEXIBLE_ARRAY_MEMBER_SIZE:%.*]] = shl nsw i64 [[COUNT]], 3 // SANITIZE-WITH-ATTR-NEXT: [[TMP4:%.*]] = shl nuw nsw i32 [[IDX2]], 3 @@ -2118,7 +2106,7 @@ struct annotated_with_array { // NO-SANITIZE-WITH-ATTR-NEXT: [[TMP4:%.*]] = select i1 [[TMP3]], i64 [[RESULT]], i64 0 // NO-SANITIZE-WITH-ATTR-NEXT: [[ARRAY:%.*]] = getelementptr inbounds nuw i8, ptr [[PTR]], i64 344 // NO-SANITIZE-WITH-ATTR-NEXT: [[IDXPROM1:%.*]] = sext i32 [[IDX1]] to i64 -// NO-SANITIZE-WITH-ATTR-NEXT: [[ARRAYIDX2:%.*]] = getelementptr inbounds [0 x i64], ptr [[ARRAY]], i64 0, i64 [[IDXPROM1]] +// NO-SANITIZE-WITH-ATTR-NEXT: [[ARRAYIDX2:%.*]] = getelementptr inbounds i64, ptr [[ARRAY]], i64 [[IDXPROM1]] // NO-SANITIZE-WITH-ATTR-NEXT: store i64 [[TMP4]], ptr [[ARRAYIDX2]], align 8, !tbaa [[TBAA22:![0-9]+]] // NO-SANITIZE-WITH-ATTR-NEXT: ret void // @@ -2134,7 +2122,7 @@ struct annotated_with_array { // SANITIZE-WITHOUT-ATTR: cont7: // SANITIZE-WITHOUT-ATTR-NEXT: [[ARRAY:%.*]] = getelementptr inbounds nuw i8, ptr [[PTR]], i64 344 // SANITIZE-WITHOUT-ATTR-NEXT: [[IDXPROM4:%.*]] = sext i32 [[IDX1]] to i64 -// SANITIZE-WITHOUT-ATTR-NEXT: [[ARRAYIDX5:%.*]] = getelementptr inbounds [0 x i64], ptr [[ARRAY]], i64 0, i64 [[IDXPROM4]] +// SANITIZE-WITHOUT-ATTR-NEXT: [[ARRAYIDX5:%.*]] = getelementptr inbounds i64, ptr [[ARRAY]], i64 [[IDXPROM4]] // SANITIZE-WITHOUT-ATTR-NEXT: store i64 -1, ptr [[ARRAYIDX5]], align 8, !tbaa [[TBAA25:![0-9]+]] // SANITIZE-WITHOUT-ATTR-NEXT: ret void // @@ -2143,7 +2131,7 @@ struct annotated_with_array { // NO-SANITIZE-WITHOUT-ATTR-NEXT: entry: // NO-SANITIZE-WITHOUT-ATTR-NEXT: [[ARRAY:%.*]] = getelementptr inbounds nuw i8, ptr [[PTR]], i64 344 // NO-SANITIZE-WITHOUT-ATTR-NEXT: [[IDXPROM1:%.*]] = sext i32 [[IDX1]] to i64 -// NO-SANITIZE-WITHOUT-ATTR-NEXT: [[ARRAYIDX2:%.*]] = getelementptr inbounds [0 x i64], ptr [[ARRAY]], i64 0, i64 [[IDXPROM1]] +// NO-SANITIZE-WITHOUT-ATTR-NEXT: [[ARRAYIDX2:%.*]] = getelementptr inbounds i64, ptr [[ARRAY]], i64 [[IDXPROM1]] // NO-SANITIZE-WITHOUT-ATTR-NEXT: store i64 -1, ptr [[ARRAYIDX2]], align 8, !tbaa [[TBAA22:![0-9]+]] // NO-SANITIZE-WITHOUT-ATTR-NEXT: ret void // @@ -2353,7 +2341,7 @@ size_t test34(struct multi_subscripts *ptr, int idx1, int idx2) { // SANITIZE-WITH-ATTR-NEXT: unreachable, !nosanitize [[META2]] // SANITIZE-WITH-ATTR: cont3: // SANITIZE-WITH-ATTR-NEXT: [[ARRAY:%.*]] = getelementptr inbounds nuw i8, ptr [[P]], i64 12 -// SANITIZE-WITH-ATTR-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds nuw [0 x i32], ptr [[ARRAY]], i64 0, i64 [[INDEX]] +// SANITIZE-WITH-ATTR-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds nuw i32, ptr [[ARRAY]], i64 [[INDEX]] // SANITIZE-WITH-ATTR-NEXT: store i32 0, ptr [[ARRAYIDX]], align 4, !tbaa [[TBAA4]] // SANITIZE-WITH-ATTR-NEXT: ret void // @@ -2361,7 +2349,7 @@ size_t test34(struct multi_subscripts *ptr, int idx1, int idx2) { // NO-SANITIZE-WITH-ATTR-SAME: ptr noundef writeonly captures(none) [[P:%.*]], i64 noundef [[INDEX:%.*]]) local_unnamed_addr #[[ATTR0]] { // NO-SANITIZE-WITH-ATTR-NEXT: entry: // NO-SANITIZE-WITH-ATTR-NEXT: [[ARRAY:%.*]] = getelementptr inbounds nuw i8, ptr [[P]], i64 12 -// NO-SANITIZE-WITH-ATTR-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds nuw [0 x i32], ptr [[ARRAY]], i64 0, i64 [[INDEX]] +// NO-SANITIZE-WITH-ATTR-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds nuw i32, ptr [[ARRAY]], i64 [[INDEX]] // NO-SANITIZE-WITH-ATTR-NEXT: store i32 0, ptr [[ARRAYIDX]], align 4, !tbaa [[TBAA2]] // NO-SANITIZE-WITH-ATTR-NEXT: ret void // @@ -2369,7 +2357,7 @@ size_t test34(struct multi_subscripts *ptr, int idx1, int idx2) { // SANITIZE-WITHOUT-ATTR-SAME: ptr noundef [[P:%.*]], i64 noundef [[INDEX:%.*]]) local_unnamed_addr #[[ATTR0]] { // SANITIZE-WITHOUT-ATTR-NEXT: entry: // SANITIZE-WITHOUT-ATTR-NEXT: [[ARRAY:%.*]] = getelementptr inbounds nuw i8, ptr [[P]], i64 12 -// SANITIZE-WITHOUT-ATTR-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds nuw [0 x i32], ptr [[ARRAY]], i64 0, i64 [[INDEX]] +// SANITIZE-WITHOUT-ATTR-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds nuw i32, ptr [[ARRAY]], i64 [[INDEX]] // SANITIZE-WITHOUT-ATTR-NEXT: store i32 0, ptr [[ARRAYIDX]], align 4, !tbaa [[TBAA2]] // SANITIZE-WITHOUT-ATTR-NEXT: ret void // @@ -2377,7 +2365,7 @@ size_t test34(struct multi_subscripts *ptr, int idx1, int idx2) { // NO-SANITIZE-WITHOUT-ATTR-SAME: ptr noundef writeonly captures(none) [[P:%.*]], i64 noundef [[INDEX:%.*]]) local_unnamed_addr #[[ATTR0]] { // NO-SANITIZE-WITHOUT-ATTR-NEXT: entry: // NO-SANITIZE-WITHOUT-ATTR-NEXT: [[ARRAY:%.*]] = getelementptr inbounds nuw i8, ptr [[P]], i64 12 -// NO-SANITIZE-WITHOUT-ATTR-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds nuw [0 x i32], ptr [[ARRAY]], i64 0, i64 [[INDEX]] +// NO-SANITIZE-WITHOUT-ATTR-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds nuw i32, ptr [[ARRAY]], i64 [[INDEX]] // NO-SANITIZE-WITHOUT-ATTR-NEXT: store i32 0, ptr [[ARRAYIDX]], align 4, !tbaa [[TBAA2]] // NO-SANITIZE-WITHOUT-ATTR-NEXT: ret void // diff --git a/clang/test/CodeGen/attr-nodebug.c b/clang/test/CodeGen/attr-nodebug.c deleted file mode 100644 index 75b4089..0000000 --- a/clang/test/CodeGen/attr-nodebug.c +++ /dev/null @@ -1,32 +0,0 @@ -// RUN: %clang_cc1 -debug-info-kind=limited -emit-llvm -o - %s | FileCheck %s - -void t1(void) __attribute__((nodebug)); - -void t1(void) -{ - int a = 10; - a++; -} - -void t2(void) -{ - int b = 10; - b++; -} - -// With nodebug, IR should have no llvm.dbg.* calls, or !dbg annotations. -// CHECK-LABEL: @t1 -// CHECK-NOT: dbg -// CHECK: } - -// Verify those things do occur normally. -// CHECK-LABEL: @t2 -// CHECK: #dbg_declare -// CHECK: !dbg -// CHECK: } - -// We should see a function description for t2 but not t1. -// CHECK-NOT: DISubprogram(name: "t1" -// CHECK: DISubprogram(name: "t2" -// CHECK-NOT: DISubprogram(name: "t1" - diff --git a/clang/test/CodeGen/attr-nodebug2.c b/clang/test/CodeGen/attr-nodebug2.c deleted file mode 100644 index a17e1e6..0000000 --- a/clang/test/CodeGen/attr-nodebug2.c +++ /dev/null @@ -1,34 +0,0 @@ -// RUN: %clang_cc1 -x c -debug-info-kind=limited -debugger-tuning=gdb -dwarf-version=4 -O -disable-llvm-passes -emit-llvm -o - %s | FileCheck %s -// RUN: %clang_cc1 -x c++ -debug-info-kind=limited -debugger-tuning=gdb -dwarf-version=4 -O -disable-llvm-passes -emit-llvm -o - %s | FileCheck %s - -#ifdef __cplusplus -extern "C" { -#endif - -void t1(void); - -void use(void) { t1(); } - -__attribute__((nodebug)) void t1(void) { - int a = 10; - a++; -} - -#ifdef __cplusplus -} -#endif - -// CHECK-LABEL: define{{.*}} void @use() -// CHECK-SAME: !dbg -// CHECK-SAME: { -// CHECK: !dbg -// CHECK: } - -// PR50767 Function __attribute__((nodebug)) inconsistency causes crash -// illegal (non-distinct) !dbg metadata was being added to _Z2t1v definition - -// CHECK-LABEL: define{{.*}} void @t1() -// CHECK-NOT: !dbg -// CHECK-SAME: { -// CHECK-NOT: !dbg -// CHECK: } diff --git a/clang/test/CodeGen/bounds-checking-debuginfo.c b/clang/test/CodeGen/bounds-checking-debuginfo.c deleted file mode 100644 index bd7aedd..0000000 --- a/clang/test/CodeGen/bounds-checking-debuginfo.c +++ /dev/null @@ -1,127 +0,0 @@ -// NOTE: Assertions have been autogenerated by utils/update_cc_test_checks.py UTC_ARGS: --version 5 - -// RUN: %clang_cc1 -emit-llvm -fdebug-prefix-map=%S/= -fno-ident -fdebug-compilation-dir=%S -fsanitize=array-bounds -fsanitize-trap=array-bounds -fsanitize-annotate-debug-info=array-bounds -triple x86_64 -debug-info-kind=limited %s -o - | FileCheck --check-prefix=CHECK-TRAP %s -// RUN: %clang_cc1 -emit-llvm -fdebug-prefix-map=%S/= -fno-ident -fdebug-compilation-dir=%S -fsanitize=array-bounds -fsanitize-annotate-debug-info=array-bounds -triple x86_64 -debug-info-kind=limited %s -o - | FileCheck --check-prefix=CHECK-NOTRAP %s - -int f(); -void d(double*); - -// CHECK-LABEL: @f1 -// CHECK-TRAP-LABEL: define dso_local double @f1( -// CHECK-TRAP-SAME: i32 noundef [[B:%.*]], i32 noundef [[I:%.*]]) #[[ATTR0:[0-9]+]] !dbg [[DBG4:![0-9]+]] { -// CHECK-TRAP-NEXT: [[ENTRY:.*:]] -// CHECK-TRAP-NEXT: [[B_ADDR:%.*]] = alloca i32, align 4 -// CHECK-TRAP-NEXT: [[I_ADDR:%.*]] = alloca i32, align 4 -// CHECK-TRAP-NEXT: [[A:%.*]] = alloca [10 x double], align 16 -// CHECK-TRAP-NEXT: store i32 [[B]], ptr [[B_ADDR]], align 4 -// CHECK-TRAP-NEXT: #dbg_declare(ptr [[B_ADDR]], [[META11:![0-9]+]], !DIExpression(), [[META12:![0-9]+]]) -// CHECK-TRAP-NEXT: store i32 [[I]], ptr [[I_ADDR]], align 4 -// CHECK-TRAP-NEXT: #dbg_declare(ptr [[I_ADDR]], [[META13:![0-9]+]], !DIExpression(), [[META14:![0-9]+]]) -// CHECK-TRAP-NEXT: #dbg_declare(ptr [[A]], [[META15:![0-9]+]], !DIExpression(), [[META19:![0-9]+]]) -// CHECK-TRAP-NEXT: [[ARRAYDECAY:%.*]] = getelementptr inbounds [10 x double], ptr [[A]], i64 0, i64 0, !dbg [[DBG20:![0-9]+]] -// CHECK-TRAP-NEXT: call void @d(ptr noundef [[ARRAYDECAY]]), !dbg [[DBG21:![0-9]+]] -// CHECK-TRAP-NEXT: [[CALL:%.*]] = call i32 (...) @f(), !dbg [[DBG22:![0-9]+]] -// CHECK-TRAP-NEXT: [[TMP0:%.*]] = sext i32 [[CALL]] to i64, !dbg [[DBG23:![0-9]+]], !nosanitize [[META10:![0-9]+]] -// CHECK-TRAP-NEXT: [[TMP1:%.*]] = icmp ult i64 [[TMP0]], 10, !dbg [[DBG23]], !nosanitize [[META10]] -// CHECK-TRAP-NEXT: br i1 [[TMP1]], label %[[CONT:.*]], label %[[TRAP:.*]], !dbg [[DBG23]], !prof [[PROF27:![0-9]+]], !nosanitize [[META10]] -// CHECK-TRAP: [[TRAP]]: -// CHECK-TRAP-NEXT: call void @llvm.ubsantrap(i8 18) #[[ATTR3:[0-9]+]], !dbg [[DBGTRAP:![0-9]+]], !nosanitize [[META10]] -// CHECK-TRAP-NEXT: unreachable, !dbg [[DBGTRAP]], !nosanitize [[META10]] -// CHECK-TRAP: [[CONT]]: -// CHECK-TRAP-NEXT: [[IDXPROM:%.*]] = sext i32 [[CALL]] to i64, !dbg [[DBG26:![0-9]+]] -// CHECK-TRAP-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds [10 x double], ptr [[A]], i64 0, i64 [[IDXPROM]], !dbg [[DBG26]] -// CHECK-TRAP-NEXT: [[TMP2:%.*]] = load double, ptr [[ARRAYIDX]], align 8, !dbg [[DBG26]] -// CHECK-TRAP-NEXT: ret double [[TMP2]], !dbg [[DBG30:![0-9]+]] -// -// CHECK-NOTRAP-LABEL: define dso_local double @f1( -// CHECK-NOTRAP-SAME: i32 noundef [[B:%.*]], i32 noundef [[I:%.*]]) #[[ATTR0:[0-9]+]] !dbg [[DBG4:![0-9]+]] { -// CHECK-NOTRAP-NEXT: [[ENTRY:.*:]] -// CHECK-NOTRAP-NEXT: [[B_ADDR:%.*]] = alloca i32, align 4 -// CHECK-NOTRAP-NEXT: [[I_ADDR:%.*]] = alloca i32, align 4 -// CHECK-NOTRAP-NEXT: [[A:%.*]] = alloca [10 x double], align 16 -// CHECK-NOTRAP-NEXT: store i32 [[B]], ptr [[B_ADDR]], align 4 -// CHECK-NOTRAP-NEXT: #dbg_declare(ptr [[B_ADDR]], [[META11:![0-9]+]], !DIExpression(), [[META12:![0-9]+]]) -// CHECK-NOTRAP-NEXT: store i32 [[I]], ptr [[I_ADDR]], align 4 -// CHECK-NOTRAP-NEXT: #dbg_declare(ptr [[I_ADDR]], [[META13:![0-9]+]], !DIExpression(), [[META14:![0-9]+]]) -// CHECK-NOTRAP-NEXT: #dbg_declare(ptr [[A]], [[META15:![0-9]+]], !DIExpression(), [[META19:![0-9]+]]) -// CHECK-NOTRAP-NEXT: [[ARRAYDECAY:%.*]] = getelementptr inbounds [10 x double], ptr [[A]], i64 0, i64 0, !dbg [[DBG20:![0-9]+]] -// CHECK-NOTRAP-NEXT: call void @d(ptr noundef [[ARRAYDECAY]]), !dbg [[DBG21:![0-9]+]] -// CHECK-NOTRAP-NEXT: [[CALL:%.*]] = call i32 (...) @f(), !dbg [[DBG22:![0-9]+]] -// CHECK-NOTRAP-NEXT: [[TMP0:%.*]] = sext i32 [[CALL]] to i64, !dbg [[DBG23:![0-9]+]], !nosanitize [[META10:![0-9]+]] -// CHECK-NOTRAP-NEXT: [[TMP1:%.*]] = icmp ult i64 [[TMP0]], 10, !dbg [[DBG23]], !nosanitize [[META10]] -// CHECK-NOTRAP-NEXT: br i1 [[TMP1]], label %[[CONT:.*]], label %[[HANDLER_OUT_OF_BOUNDS:.*]], !dbg [[DBG23]], !prof [[PROF27:![0-9]+]], !nosanitize [[META10]] -// CHECK-NOTRAP: [[HANDLER_OUT_OF_BOUNDS]]: -// CHECK-NOTRAP-NEXT: [[TMP2:%.*]] = zext i32 [[CALL]] to i64, !dbg [[DBG23]], !nosanitize [[META10]] -// CHECK-NOTRAP-NEXT: call void @__ubsan_handle_out_of_bounds_abort(ptr @[[GLOB2:[0-9]+]], i64 [[TMP2]]) #[[ATTR3:[0-9]+]], !dbg [[DBG23]], !nosanitize [[META10]] -// CHECK-NOTRAP-NEXT: unreachable, !dbg [[DBG23]], !nosanitize [[META10]] -// CHECK-NOTRAP: [[CONT]]: -// CHECK-NOTRAP-NEXT: [[IDXPROM:%.*]] = sext i32 [[CALL]] to i64, !dbg [[DBG26:![0-9]+]] -// CHECK-NOTRAP-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds [10 x double], ptr [[A]], i64 0, i64 [[IDXPROM]], !dbg [[DBG26]] -// CHECK-NOTRAP-NEXT: [[TMP3:%.*]] = load double, ptr [[ARRAYIDX]], align 8, !dbg [[DBG26]] -// CHECK-NOTRAP-NEXT: ret double [[TMP3]], !dbg [[DBG28:![0-9]+]] -// -double f1(int b, int i) { - double a[10]; - d(a); - return a[f()]; -} - -//. -// CHECK-TRAP: [[META0:![0-9]+]] = distinct !DICompileUnit(language: DW_LANG_C11, file: [[META1:![0-9]+]], isOptimized: false, runtimeVersion: 0, emissionKind: FullDebug, splitDebugInlining: false, nameTableKind: None) -// CHECK-TRAP: [[META1]] = !DIFile(filename: "<stdin>", directory: {{.*}}) -// CHECK-TRAP: [[DBG4]] = distinct !DISubprogram(name: "f1", scope: [[META5:![0-9]+]], file: [[META5]], line: 63, type: [[META6:![0-9]+]], scopeLine: 63, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: [[META0]], retainedNodes: [[META10]]) -// CHECK-TRAP: [[META5]] = !DIFile(filename: "bounds-checking-debuginfo.c", directory: {{.*}}) -// CHECK-TRAP: [[META6]] = !DISubroutineType(types: [[META7:![0-9]+]]) -// CHECK-TRAP: [[META7]] = !{[[META8:![0-9]+]], [[META9:![0-9]+]], [[META9]]} -// CHECK-TRAP: [[META8]] = !DIBasicType(name: "double", size: 64, encoding: DW_ATE_float) -// CHECK-TRAP: [[META9]] = !DIBasicType(name: "int", size: 32, encoding: DW_ATE_signed) -// CHECK-TRAP: [[META10]] = !{} -// CHECK-TRAP: [[META11]] = !DILocalVariable(name: "b", arg: 1, scope: [[DBG4]], file: [[META5]], line: 63, type: [[META9]]) -// CHECK-TRAP: [[META12]] = !DILocation(line: 63, column: 15, scope: [[DBG4]]) -// CHECK-TRAP: [[META13]] = !DILocalVariable(name: "i", arg: 2, scope: [[DBG4]], file: [[META5]], line: 63, type: [[META9]]) -// CHECK-TRAP: [[META14]] = !DILocation(line: 63, column: 22, scope: [[DBG4]]) -// CHECK-TRAP: [[META15]] = !DILocalVariable(name: "a", scope: [[DBG4]], file: [[META5]], line: 64, type: [[META16:![0-9]+]]) -// CHECK-TRAP: [[META16]] = !DICompositeType(tag: DW_TAG_array_type, baseType: [[META8]], size: 640, elements: [[META17:![0-9]+]]) -// CHECK-TRAP: [[META17]] = !{[[META18:![0-9]+]]} -// CHECK-TRAP: [[META18]] = !DISubrange(count: 10) -// CHECK-TRAP: [[META19]] = !DILocation(line: 64, column: 10, scope: [[DBG4]]) -// CHECK-TRAP: [[DBG20]] = !DILocation(line: 65, column: 5, scope: [[DBG4]]) -// CHECK-TRAP: [[DBG21]] = !DILocation(line: 65, column: 3, scope: [[DBG4]]) -// CHECK-TRAP: [[DBG22]] = !DILocation(line: 66, column: 12, scope: [[DBG4]]) -// CHECK-TRAP: [[DBG23]] = !DILocation(line: 0, scope: [[META24:![0-9]+]], inlinedAt: [[DBG26]]) -// CHECK-TRAP: [[META24]] = distinct !DISubprogram(name: "__ubsan_check_array_bounds", scope: [[META5]], file: [[META5]], type: [[META25:![0-9]+]], flags: DIFlagArtificial, spFlags: DISPFlagDefinition, unit: [[META0]]) -// CHECK-TRAP: [[META25]] = !DISubroutineType(types: null) -// CHECK-TRAP: [[DBG26]] = !DILocation(line: 66, column: 10, scope: [[DBG4]]) -// CHECK-TRAP: [[PROF27]] = !{!"branch_weights", i32 1048575, i32 1} -// CHECK-TRAP: [[DBGTRAP]] = !DILocation(line: 0, scope: [[TRAPMSG:![0-9]+]], inlinedAt: [[DBG23]]) -// CHECK-TRAP: [[TRAPMSG]] = distinct !DISubprogram(name: "__clang_trap_msg$Undefined Behavior Sanitizer$Array index out of bounds", scope: [[META5]], file: [[META5]], type: [[META25]], flags: DIFlagArtificial, spFlags: DISPFlagDefinition, unit: [[META0]]) -// CHECK-TRAP: [[DBG30]] = !DILocation(line: 66, column: 3, scope: [[DBG4]]) -//. -// CHECK-NOTRAP: [[META0:![0-9]+]] = distinct !DICompileUnit(language: DW_LANG_C11, file: [[META1:![0-9]+]], isOptimized: false, runtimeVersion: 0, emissionKind: FullDebug, splitDebugInlining: false, nameTableKind: None) -// CHECK-NOTRAP: [[META1]] = !DIFile(filename: "<stdin>", directory: {{.*}}) -// CHECK-NOTRAP: [[DBG4]] = distinct !DISubprogram(name: "f1", scope: [[META5:![0-9]+]], file: [[META5]], line: 63, type: [[META6:![0-9]+]], scopeLine: 63, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: [[META0]], retainedNodes: [[META10]]) -// CHECK-NOTRAP: [[META5]] = !DIFile(filename: "bounds-checking-debuginfo.c", directory: {{.*}}) -// CHECK-NOTRAP: [[META6]] = !DISubroutineType(types: [[META7:![0-9]+]]) -// CHECK-NOTRAP: [[META7]] = !{[[META8:![0-9]+]], [[META9:![0-9]+]], [[META9]]} -// CHECK-NOTRAP: [[META8]] = !DIBasicType(name: "double", size: 64, encoding: DW_ATE_float) -// CHECK-NOTRAP: [[META9]] = !DIBasicType(name: "int", size: 32, encoding: DW_ATE_signed) -// CHECK-NOTRAP: [[META10]] = !{} -// CHECK-NOTRAP: [[META11]] = !DILocalVariable(name: "b", arg: 1, scope: [[DBG4]], file: [[META5]], line: 63, type: [[META9]]) -// CHECK-NOTRAP: [[META12]] = !DILocation(line: 63, column: 15, scope: [[DBG4]]) -// CHECK-NOTRAP: [[META13]] = !DILocalVariable(name: "i", arg: 2, scope: [[DBG4]], file: [[META5]], line: 63, type: [[META9]]) -// CHECK-NOTRAP: [[META14]] = !DILocation(line: 63, column: 22, scope: [[DBG4]]) -// CHECK-NOTRAP: [[META15]] = !DILocalVariable(name: "a", scope: [[DBG4]], file: [[META5]], line: 64, type: [[META16:![0-9]+]]) -// CHECK-NOTRAP: [[META16]] = !DICompositeType(tag: DW_TAG_array_type, baseType: [[META8]], size: 640, elements: [[META17:![0-9]+]]) -// CHECK-NOTRAP: [[META17]] = !{[[META18:![0-9]+]]} -// CHECK-NOTRAP: [[META18]] = !DISubrange(count: 10) -// CHECK-NOTRAP: [[META19]] = !DILocation(line: 64, column: 10, scope: [[DBG4]]) -// CHECK-NOTRAP: [[DBG20]] = !DILocation(line: 65, column: 5, scope: [[DBG4]]) -// CHECK-NOTRAP: [[DBG21]] = !DILocation(line: 65, column: 3, scope: [[DBG4]]) -// CHECK-NOTRAP: [[DBG22]] = !DILocation(line: 66, column: 12, scope: [[DBG4]]) -// CHECK-NOTRAP: [[DBG23]] = !DILocation(line: 0, scope: [[META24:![0-9]+]], inlinedAt: [[DBG26]]) -// CHECK-NOTRAP: [[META24]] = distinct !DISubprogram(name: "__ubsan_check_array_bounds", scope: [[META5]], file: [[META5]], type: [[META25:![0-9]+]], flags: DIFlagArtificial, spFlags: DISPFlagDefinition, unit: [[META0]]) -// CHECK-NOTRAP: [[META25]] = !DISubroutineType(types: null) -// CHECK-NOTRAP: [[DBG26]] = !DILocation(line: 66, column: 10, scope: [[DBG4]]) -// CHECK-NOTRAP: [[PROF27]] = !{!"branch_weights", i32 1048575, i32 1} -// CHECK-NOTRAP: [[DBG28]] = !DILocation(line: 66, column: 3, scope: [[DBG4]]) -//. diff --git a/clang/test/CodeGen/bpf-attr-type-tag-atomic.c b/clang/test/CodeGen/bpf-attr-type-tag-atomic.c deleted file mode 100644 index a10a45d..0000000 --- a/clang/test/CodeGen/bpf-attr-type-tag-atomic.c +++ /dev/null @@ -1,16 +0,0 @@ -// REQUIRES: bpf-registered-target -// RUN: %clang_cc1 -triple bpf -emit-llvm -disable-llvm-passes -debug-info-kind=limited %s -o - | FileCheck %s - -#define __tag1 __attribute__((btf_type_tag("tag1"))) -int _Atomic __tag1 *g1; -volatile int _Atomic __tag1 *g2; - -// CHECK: distinct !DIGlobalVariable(name: "g1", scope: ![[#]], file: ![[#]], line: [[#]], type: ![[PTR1:[0-9]+]] -// CHECK: distinct !DIGlobalVariable(name: "g2", scope: ![[#]], file: ![[#]], line: [[#]], type: ![[PTR2:[0-9]+]] -// CHECK: ![[PTR2]] = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: ![[BASE2:[0-9]+]], size: [[#]], annotations: ![[ANNOT:[0-9]+]]) -// CHECK: ![[BASE2]] = !DIDerivedType(tag: DW_TAG_volatile_type, baseType: ![[BASE1:[0-9]+]]) -// CHECK: ![[BASE1]] = !DIDerivedType(tag: DW_TAG_atomic_type, baseType: ![[BASIC:[0-9]+]]) -// CHECK: ![[BASIC]] = !DIBasicType(name: "int", size: [[#]], encoding: DW_ATE_signed) -// CHECK: ![[ANNOT]] = !{![[ENTRY:[0-9]+]]} -// CHECK: ![[ENTRY]] = !{!"btf_type_tag", !"tag1"} -// CHECK: ![[PTR1]] = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: ![[BASE1]], size: [[#]], annotations: ![[ANNOT]]) diff --git a/clang/test/CodeGen/bpf-debug-info-extern-func.c b/clang/test/CodeGen/bpf-debug-info-extern-func.c deleted file mode 100644 index e87c8be..0000000 --- a/clang/test/CodeGen/bpf-debug-info-extern-func.c +++ /dev/null @@ -1,9 +0,0 @@ -// RUN: %clang -g -target bpf -S -emit-llvm %s -o - | FileCheck %s -// -// When linking BPF object files via bpftool, BTF info is required for -// every symbol. BTF is generated from debug info. Ensure that debug info -// is emitted for extern functions referenced via variable initializers. -// -// CHECK: !DISubprogram(name: "fn" -extern void fn(void); -void (*pfn) (void) = &fn; diff --git a/clang/test/CodeGen/bpf-debug-info-unref.c b/clang/test/CodeGen/bpf-debug-info-unref.c deleted file mode 100644 index 91f761e..0000000 --- a/clang/test/CodeGen/bpf-debug-info-unref.c +++ /dev/null @@ -1,11 +0,0 @@ -// RUN: %clang -g -target bpf -S -emit-llvm %s -o - | FileCheck %s -// -// No debug info is produced for unreferenced functions. -// CHECK-NOT: !DISubprogram -void unref(void); -void unref2(typeof(unref)); - -// No debug info for unused extern variables as well. -// CHECK-NOT: !DiGlobalVariable -extern int unused; -extern int unused2[sizeof(unused)]; diff --git a/clang/test/CodeGen/builtin-bpf-btf-type-id.c b/clang/test/CodeGen/builtin-bpf-btf-type-id.c index 4c6efd6..c8f29ee 100644 --- a/clang/test/CodeGen/builtin-bpf-btf-type-id.c +++ b/clang/test/CodeGen/builtin-bpf-btf-type-id.c @@ -21,5 +21,5 @@ unsigned test3() { // // CHECK: ![[INT]] = !DIBasicType(name: "int", size: 32, encoding: DW_ATE_signed // CHECK: ![[INT_POINTER]] = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: ![[INT]], size: 64 -// CHECK: ![[STRUCT_T1]] = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "t1" // CHECK: ![[TYPEDEF_T1]] = !DIDerivedType(tag: DW_TAG_typedef, name: "__t1" +// CHECK: ![[STRUCT_T1]] = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "t1" diff --git a/clang/test/CodeGen/builtin-masked.c b/clang/test/CodeGen/builtin-masked.c new file mode 100644 index 0000000..579cf5c --- /dev/null +++ b/clang/test/CodeGen/builtin-masked.c @@ -0,0 +1,131 @@ +// NOTE: Assertions have been autogenerated by utils/update_cc_test_checks.py UTC_ARGS: --version 5 +// RUN: %clang_cc1 -triple x86_64-unknown-unknown -emit-llvm -o - %s | FileCheck %s + +typedef int v8i __attribute__((ext_vector_type(8))); +typedef _Bool v8b __attribute__((ext_vector_type(8))); + +// CHECK-LABEL: define dso_local <8 x i32> @test_load( +// CHECK-SAME: i8 noundef [[M_COERCE:%.*]], ptr noundef [[P:%.*]]) #[[ATTR0:[0-9]+]] { +// CHECK-NEXT: [[ENTRY:.*:]] +// CHECK-NEXT: [[M:%.*]] = alloca i8, align 1 +// CHECK-NEXT: [[M_ADDR:%.*]] = alloca i8, align 1 +// CHECK-NEXT: [[P_ADDR:%.*]] = alloca ptr, align 8 +// CHECK-NEXT: store i8 [[M_COERCE]], ptr [[M]], align 1 +// CHECK-NEXT: [[LOAD_BITS:%.*]] = load i8, ptr [[M]], align 1 +// CHECK-NEXT: [[M1:%.*]] = bitcast i8 [[LOAD_BITS]] to <8 x i1> +// CHECK-NEXT: [[TMP0:%.*]] = bitcast <8 x i1> [[M1]] to i8 +// CHECK-NEXT: store i8 [[TMP0]], ptr [[M_ADDR]], align 1 +// CHECK-NEXT: store ptr [[P]], ptr [[P_ADDR]], align 8 +// CHECK-NEXT: [[LOAD_BITS2:%.*]] = load i8, ptr [[M_ADDR]], align 1 +// CHECK-NEXT: [[TMP1:%.*]] = bitcast i8 [[LOAD_BITS2]] to <8 x i1> +// CHECK-NEXT: [[TMP2:%.*]] = load ptr, ptr [[P_ADDR]], align 8 +// CHECK-NEXT: [[MASKED_LOAD:%.*]] = call <8 x i32> @llvm.masked.load.v8i32.p0(ptr [[TMP2]], i32 32, <8 x i1> [[TMP1]], <8 x i32> poison) +// CHECK-NEXT: ret <8 x i32> [[MASKED_LOAD]] +// +v8i test_load(v8b m, v8i *p) { + return __builtin_masked_load(m, p); +} + +// CHECK-LABEL: define dso_local <8 x i32> @test_load_passthru( +// CHECK-SAME: i8 noundef [[M_COERCE:%.*]], ptr noundef [[P:%.*]], ptr noundef byval(<8 x i32>) align 32 [[TMP0:%.*]]) #[[ATTR0]] { +// CHECK-NEXT: [[ENTRY:.*:]] +// CHECK-NEXT: [[M:%.*]] = alloca i8, align 1 +// CHECK-NEXT: [[M_ADDR:%.*]] = alloca i8, align 1 +// CHECK-NEXT: [[P_ADDR:%.*]] = alloca ptr, align 8 +// CHECK-NEXT: [[T_ADDR:%.*]] = alloca <8 x i32>, align 32 +// CHECK-NEXT: store i8 [[M_COERCE]], ptr [[M]], align 1 +// CHECK-NEXT: [[LOAD_BITS:%.*]] = load i8, ptr [[M]], align 1 +// CHECK-NEXT: [[M1:%.*]] = bitcast i8 [[LOAD_BITS]] to <8 x i1> +// CHECK-NEXT: [[T:%.*]] = load <8 x i32>, ptr [[TMP0]], align 32 +// CHECK-NEXT: [[TMP1:%.*]] = bitcast <8 x i1> [[M1]] to i8 +// CHECK-NEXT: store i8 [[TMP1]], ptr [[M_ADDR]], align 1 +// CHECK-NEXT: store ptr [[P]], ptr [[P_ADDR]], align 8 +// CHECK-NEXT: store <8 x i32> [[T]], ptr [[T_ADDR]], align 32 +// CHECK-NEXT: [[LOAD_BITS2:%.*]] = load i8, ptr [[M_ADDR]], align 1 +// CHECK-NEXT: [[TMP2:%.*]] = bitcast i8 [[LOAD_BITS2]] to <8 x i1> +// CHECK-NEXT: [[TMP3:%.*]] = load ptr, ptr [[P_ADDR]], align 8 +// CHECK-NEXT: [[TMP4:%.*]] = load <8 x i32>, ptr [[T_ADDR]], align 32 +// CHECK-NEXT: [[MASKED_LOAD:%.*]] = call <8 x i32> @llvm.masked.load.v8i32.p0(ptr [[TMP3]], i32 32, <8 x i1> [[TMP2]], <8 x i32> [[TMP4]]) +// CHECK-NEXT: ret <8 x i32> [[MASKED_LOAD]] +// +v8i test_load_passthru(v8b m, v8i *p, v8i t) { + return __builtin_masked_load(m, p, t); +} + +// CHECK-LABEL: define dso_local <8 x i32> @test_load_expand( +// CHECK-SAME: i8 noundef [[M_COERCE:%.*]], ptr noundef [[P:%.*]], ptr noundef byval(<8 x i32>) align 32 [[TMP0:%.*]]) #[[ATTR0]] { +// CHECK-NEXT: [[ENTRY:.*:]] +// CHECK-NEXT: [[M:%.*]] = alloca i8, align 1 +// CHECK-NEXT: [[M_ADDR:%.*]] = alloca i8, align 1 +// CHECK-NEXT: [[P_ADDR:%.*]] = alloca ptr, align 8 +// CHECK-NEXT: [[T_ADDR:%.*]] = alloca <8 x i32>, align 32 +// CHECK-NEXT: store i8 [[M_COERCE]], ptr [[M]], align 1 +// CHECK-NEXT: [[LOAD_BITS:%.*]] = load i8, ptr [[M]], align 1 +// CHECK-NEXT: [[M1:%.*]] = bitcast i8 [[LOAD_BITS]] to <8 x i1> +// CHECK-NEXT: [[T:%.*]] = load <8 x i32>, ptr [[TMP0]], align 32 +// CHECK-NEXT: [[TMP1:%.*]] = bitcast <8 x i1> [[M1]] to i8 +// CHECK-NEXT: store i8 [[TMP1]], ptr [[M_ADDR]], align 1 +// CHECK-NEXT: store ptr [[P]], ptr [[P_ADDR]], align 8 +// CHECK-NEXT: store <8 x i32> [[T]], ptr [[T_ADDR]], align 32 +// CHECK-NEXT: [[LOAD_BITS2:%.*]] = load i8, ptr [[M_ADDR]], align 1 +// CHECK-NEXT: [[TMP2:%.*]] = bitcast i8 [[LOAD_BITS2]] to <8 x i1> +// CHECK-NEXT: [[TMP3:%.*]] = load ptr, ptr [[P_ADDR]], align 8 +// CHECK-NEXT: [[TMP4:%.*]] = load <8 x i32>, ptr [[T_ADDR]], align 32 +// CHECK-NEXT: [[MASKED_EXPAND_LOAD:%.*]] = call <8 x i32> @llvm.masked.expandload.v8i32(ptr [[TMP3]], <8 x i1> [[TMP2]], <8 x i32> [[TMP4]]) +// CHECK-NEXT: ret <8 x i32> [[MASKED_EXPAND_LOAD]] +// +v8i test_load_expand(v8b m, v8i *p, v8i t) { + return __builtin_masked_expand_load(m, p, t); +} + +// CHECK-LABEL: define dso_local void @test_store( +// CHECK-SAME: i8 noundef [[M_COERCE:%.*]], ptr noundef byval(<8 x i32>) align 32 [[TMP0:%.*]], ptr noundef [[P:%.*]]) #[[ATTR3:[0-9]+]] { +// CHECK-NEXT: [[ENTRY:.*:]] +// CHECK-NEXT: [[M:%.*]] = alloca i8, align 1 +// CHECK-NEXT: [[M_ADDR:%.*]] = alloca i8, align 1 +// CHECK-NEXT: [[V_ADDR:%.*]] = alloca <8 x i32>, align 32 +// CHECK-NEXT: [[P_ADDR:%.*]] = alloca ptr, align 8 +// CHECK-NEXT: store i8 [[M_COERCE]], ptr [[M]], align 1 +// CHECK-NEXT: [[LOAD_BITS:%.*]] = load i8, ptr [[M]], align 1 +// CHECK-NEXT: [[M1:%.*]] = bitcast i8 [[LOAD_BITS]] to <8 x i1> +// CHECK-NEXT: [[V:%.*]] = load <8 x i32>, ptr [[TMP0]], align 32 +// CHECK-NEXT: [[TMP1:%.*]] = bitcast <8 x i1> [[M1]] to i8 +// CHECK-NEXT: store i8 [[TMP1]], ptr [[M_ADDR]], align 1 +// CHECK-NEXT: store <8 x i32> [[V]], ptr [[V_ADDR]], align 32 +// CHECK-NEXT: store ptr [[P]], ptr [[P_ADDR]], align 8 +// CHECK-NEXT: [[LOAD_BITS2:%.*]] = load i8, ptr [[M_ADDR]], align 1 +// CHECK-NEXT: [[TMP2:%.*]] = bitcast i8 [[LOAD_BITS2]] to <8 x i1> +// CHECK-NEXT: [[TMP3:%.*]] = load <8 x i32>, ptr [[V_ADDR]], align 32 +// CHECK-NEXT: [[TMP4:%.*]] = load ptr, ptr [[P_ADDR]], align 8 +// CHECK-NEXT: call void @llvm.masked.store.v8i32.p0(<8 x i32> [[TMP3]], ptr [[TMP4]], i32 32, <8 x i1> [[TMP2]]) +// CHECK-NEXT: ret void +// +void test_store(v8b m, v8i v, v8i *p) { + __builtin_masked_store(m, v, p); +} + +// CHECK-LABEL: define dso_local void @test_compress_store( +// CHECK-SAME: i8 noundef [[M_COERCE:%.*]], ptr noundef byval(<8 x i32>) align 32 [[TMP0:%.*]], ptr noundef [[P:%.*]]) #[[ATTR3]] { +// CHECK-NEXT: [[ENTRY:.*:]] +// CHECK-NEXT: [[M:%.*]] = alloca i8, align 1 +// CHECK-NEXT: [[M_ADDR:%.*]] = alloca i8, align 1 +// CHECK-NEXT: [[V_ADDR:%.*]] = alloca <8 x i32>, align 32 +// CHECK-NEXT: [[P_ADDR:%.*]] = alloca ptr, align 8 +// CHECK-NEXT: store i8 [[M_COERCE]], ptr [[M]], align 1 +// CHECK-NEXT: [[LOAD_BITS:%.*]] = load i8, ptr [[M]], align 1 +// CHECK-NEXT: [[M1:%.*]] = bitcast i8 [[LOAD_BITS]] to <8 x i1> +// CHECK-NEXT: [[V:%.*]] = load <8 x i32>, ptr [[TMP0]], align 32 +// CHECK-NEXT: [[TMP1:%.*]] = bitcast <8 x i1> [[M1]] to i8 +// CHECK-NEXT: store i8 [[TMP1]], ptr [[M_ADDR]], align 1 +// CHECK-NEXT: store <8 x i32> [[V]], ptr [[V_ADDR]], align 32 +// CHECK-NEXT: store ptr [[P]], ptr [[P_ADDR]], align 8 +// CHECK-NEXT: [[LOAD_BITS2:%.*]] = load i8, ptr [[M_ADDR]], align 1 +// CHECK-NEXT: [[TMP2:%.*]] = bitcast i8 [[LOAD_BITS2]] to <8 x i1> +// CHECK-NEXT: [[TMP3:%.*]] = load <8 x i32>, ptr [[V_ADDR]], align 32 +// CHECK-NEXT: [[TMP4:%.*]] = load ptr, ptr [[P_ADDR]], align 8 +// CHECK-NEXT: call void @llvm.masked.compressstore.v8i32(<8 x i32> [[TMP3]], ptr [[TMP4]], <8 x i1> [[TMP2]]) +// CHECK-NEXT: ret void +// +void test_compress_store(v8b m, v8i v, v8i *p) { + __builtin_masked_compress_store(m, v, p); +} diff --git a/clang/test/CodeGen/builtin-preserve-access-index-array.c b/clang/test/CodeGen/builtin-preserve-access-index-array.c deleted file mode 100644 index 3ac5409..0000000 --- a/clang/test/CodeGen/builtin-preserve-access-index-array.c +++ /dev/null @@ -1,18 +0,0 @@ -// RUN: %clang_cc1 -triple x86_64 -emit-llvm -debug-info-kind=limited %s -o - | FileCheck %s - -#define _(x) (__builtin_preserve_access_index(x)) - -struct s1 { - char a; - int b[4]; -}; - -const void *unit1(struct s1 *arg) { - return _(&arg->b[2]); -} -// CHECK: define dso_local ptr @unit1 -// CHECK: call ptr @llvm.preserve.struct.access.index.p0.p0(ptr elementtype(%struct.s1) %{{[0-9a-z]+}}, i32 1, i32 1), !dbg !{{[0-9]+}}, !llvm.preserve.access.index ![[STRUCT_S1:[0-9]+]] -// CHECK: call ptr @llvm.preserve.array.access.index.p0.p0(ptr elementtype([4 x i32]) %{{[0-9a-z]+}}, i32 1, i32 2), !dbg !{{[0-9]+}}, !llvm.preserve.access.index ![[ARRAY:[0-9]+]] -// -// CHECK: ![[ARRAY]] = !DICompositeType(tag: DW_TAG_array_type -// CHECK: ![[STRUCT_S1]] = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "s1" diff --git a/clang/test/CodeGen/builtin-preserve-access-index-nonptr.c b/clang/test/CodeGen/builtin-preserve-access-index-nonptr.c deleted file mode 100644 index 319498c..0000000 --- a/clang/test/CodeGen/builtin-preserve-access-index-nonptr.c +++ /dev/null @@ -1,18 +0,0 @@ -// RUN: %clang_cc1 -triple x86_64 -emit-llvm -debug-info-kind=limited %s -o - | FileCheck %s - -#define _(x) (__builtin_preserve_access_index(x)) - -struct s1 { - char a; - int b[4]; -}; - -int unit1(struct s1 *arg) { - return _(arg->b[2]); -} -// CHECK: define dso_local i32 @unit1 -// CHECK: call ptr @llvm.preserve.struct.access.index.p0.p0(ptr elementtype(%struct.s1) %{{[0-9a-z]+}}, i32 1, i32 1), !dbg !{{[0-9]+}}, !llvm.preserve.access.index ![[STRUCT_S1:[0-9]+]] -// CHECK: call ptr @llvm.preserve.array.access.index.p0.p0(ptr elementtype([4 x i32]) %{{[0-9a-z]+}}, i32 1, i32 2), !dbg !{{[0-9]+}}, !llvm.preserve.access.index ![[ARRAY:[0-9]+]] -// -// CHECK: ![[ARRAY]] = !DICompositeType(tag: DW_TAG_array_type -// CHECK: ![[STRUCT_S1]] = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "s1" diff --git a/clang/test/CodeGen/builtins-bpf-preserve-field-info-1.c b/clang/test/CodeGen/builtins-bpf-preserve-field-info-1.c deleted file mode 100644 index e0b289d..0000000 --- a/clang/test/CodeGen/builtins-bpf-preserve-field-info-1.c +++ /dev/null @@ -1,35 +0,0 @@ -// REQUIRES: bpf-registered-target -// RUN: %clang_cc1 -triple bpf -emit-llvm -debug-info-kind=limited -disable-llvm-passes %s -o - | FileCheck %s - -#define _(x, y) (__builtin_preserve_field_info((x), (y))) - -struct s1 { - char a; - char b:2; -}; - -union u1 { - char a; - char b:2; -}; - -unsigned unit1(struct s1 *arg) { - return _(arg->a, 10) + _(arg->b, 10); -} -// CHECK: define dso_local i32 @unit1 -// CHECK: call ptr @llvm.preserve.struct.access.index.p0.p0(ptr elementtype(%struct.s1) %{{[0-9a-z]+}}, i32 0, i32 0), !dbg !{{[0-9]+}}, !llvm.preserve.access.index ![[STRUCT_S1:[0-9]+]] -// CHECK: call i32 @llvm.bpf.preserve.field.info.p0(ptr %{{[0-9a-z]+}}, i64 10), !dbg !{{[0-9]+}} -// CHECK: call ptr @llvm.preserve.struct.access.index.p0.p0(ptr elementtype(%struct.s1) %{{[0-9a-z]+}}, i32 1, i32 1), !dbg !{{[0-9]+}}, !llvm.preserve.access.index ![[STRUCT_S1:[0-9]+]] -// CHECK: call i32 @llvm.bpf.preserve.field.info.p0(ptr %{{[0-9a-z]+}}, i64 10), !dbg !{{[0-9]+}} - -unsigned unit2(union u1 *arg) { - return _(arg->a, 10) + _(arg->b, 10); -} -// CHECK: define dso_local i32 @unit2 -// CHECK: call ptr @llvm.preserve.union.access.index.p0.p0(ptr %{{[0-9a-z]+}}, i32 0), !dbg !{{[0-9]+}}, !llvm.preserve.access.index ![[UNION_U1:[0-9]+]] -// CHECK: call i32 @llvm.bpf.preserve.field.info.p0(ptr %{{[0-9a-z]+}}, i64 10), !dbg !{{[0-9]+}} -// CHECK: call ptr @llvm.preserve.struct.access.index.p0.p0(ptr elementtype(%union.u1) %{{[0-9a-z]+}}, i32 0, i32 1), !dbg !{{[0-9]+}}, !llvm.preserve.access.index ![[UNION_U1:[0-9]+]] -// CHECK: call i32 @llvm.bpf.preserve.field.info.p0(ptr %{{[0-9a-z]+}}, i64 10), !dbg !{{[0-9]+}} - -// CHECK: ![[STRUCT_S1]] = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "s1" -// CHECK: ![[UNION_U1]] = distinct !DICompositeType(tag: DW_TAG_union_type, name: "u1" diff --git a/clang/test/CodeGen/builtins-bpf-preserve-field-info-2.c b/clang/test/CodeGen/builtins-bpf-preserve-field-info-2.c deleted file mode 100644 index ad4f64a..0000000 --- a/clang/test/CodeGen/builtins-bpf-preserve-field-info-2.c +++ /dev/null @@ -1,26 +0,0 @@ -// REQUIRES: bpf-registered-target -// RUN: %clang_cc1 -triple bpf -emit-llvm -debug-info-kind=limited -disable-llvm-passes %s -o - | FileCheck %s - -#define _(x, y) (__builtin_preserve_field_info((x), (y))) - -struct s1 { - char a; - char b:2; -}; -struct s2 { - struct s1 s; -}; - -unsigned unit1(struct s2 *arg) { - return _(arg->s.a, 10) + _(arg->s.b, 10); -} -// CHECK: define dso_local i32 @unit1 -// CHECK: call ptr @llvm.preserve.struct.access.index.p0.p0(ptr elementtype(%struct.s2) %{{[0-9a-z]+}}, i32 0, i32 0), !dbg !{{[0-9]+}}, !llvm.preserve.access.index ![[STRUCT_S2:[0-9]+]] -// CHECK: call ptr @llvm.preserve.struct.access.index.p0.p0(ptr elementtype(%struct.s1) %{{[0-9a-z]+}}, i32 0, i32 0), !dbg !{{[0-9]+}}, !llvm.preserve.access.index ![[STRUCT_S1:[0-9]+]] -// CHECK: call i32 @llvm.bpf.preserve.field.info.p0(ptr %{{[0-9a-z]+}}, i64 10), !dbg !{{[0-9]+}} -// CHECK: call ptr @llvm.preserve.struct.access.index.p0.p0(ptr elementtype(%struct.s2) %{{[0-9a-z]+}}, i32 0, i32 0), !dbg !{{[0-9]+}}, !llvm.preserve.access.index ![[STRUCT_S2:[0-9]+]] -// CHECK: call ptr @llvm.preserve.struct.access.index.p0.p0(ptr elementtype(%struct.s1) %{{[0-9a-z]+}}, i32 1, i32 1), !dbg !{{[0-9]+}}, !llvm.preserve.access.index ![[STRUCT_S1:[0-9]+]] -// CHECK: call i32 @llvm.bpf.preserve.field.info.p0(ptr %{{[0-9a-z]+}}, i64 10), !dbg !{{[0-9]+}} - -// CHECK: ![[STRUCT_S2]] = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "s2" -// CHECK: ![[STRUCT_S1]] = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "s1" diff --git a/clang/test/CodeGen/builtins-bpf-preserve-field-info-3.c b/clang/test/CodeGen/builtins-bpf-preserve-field-info-3.c deleted file mode 100644 index 53b4489..0000000 --- a/clang/test/CodeGen/builtins-bpf-preserve-field-info-3.c +++ /dev/null @@ -1,41 +0,0 @@ -// REQUIRES: bpf-registered-target -// RUN: %clang_cc1 -triple bpf -emit-llvm -debug-info-kind=limited -disable-llvm-passes %s -o - | FileCheck %s - -#define _(x, y) (__builtin_preserve_type_info((x), (y))) - -struct s { - char a; -}; -typedef int __int; -enum AA { - VAL1 = 1, - VAL2 = 2, -}; - -unsigned unit1() { - struct s v = {}; - return _(v, 0) + _(*(struct s *)0, 0); -} - -// CHECK: call i32 @llvm.bpf.preserve.type.info(i32 0, i64 0), !dbg !{{[0-9]+}}, !llvm.preserve.access.index ![[STRUCT_S:[0-9]+]] -// CHECK: call i32 @llvm.bpf.preserve.type.info(i32 1, i64 0), !dbg !{{[0-9]+}}, !llvm.preserve.access.index ![[STRUCT_S]] - -unsigned unit2() { - __int n; - return _(n, 1) + _(*(__int *)0, 1); -} - -// CHECK: call i32 @llvm.bpf.preserve.type.info(i32 2, i64 1), !dbg !{{[0-9]+}}, !llvm.preserve.access.index ![[TYPEDEF_INT:[0-9]+]] -// CHECK: call i32 @llvm.bpf.preserve.type.info(i32 3, i64 1), !dbg !{{[0-9]+}}, !llvm.preserve.access.index ![[TYPEDEF_INT]] - -unsigned unit3() { - enum AA t; - return _(t, 0) + _(*(enum AA *)0, 1); -} - -// CHECK: call i32 @llvm.bpf.preserve.type.info(i32 4, i64 0), !dbg !{{[0-9]+}}, !llvm.preserve.access.index ![[ENUM_AA:[0-9]+]] -// CHECK: call i32 @llvm.bpf.preserve.type.info(i32 5, i64 1), !dbg !{{[0-9]+}}, !llvm.preserve.access.index ![[ENUM_AA]] - -// CHECK: ![[ENUM_AA]] = !DICompositeType(tag: DW_TAG_enumeration_type, name: "AA" -// CHECK: ![[STRUCT_S]] = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "s" -// CHECK: ![[TYPEDEF_INT]] = !DIDerivedType(tag: DW_TAG_typedef, name: "__int" diff --git a/clang/test/CodeGen/builtins-bpf-preserve-field-info-4.c b/clang/test/CodeGen/builtins-bpf-preserve-field-info-4.c deleted file mode 100644 index 993f94f..0000000 --- a/clang/test/CodeGen/builtins-bpf-preserve-field-info-4.c +++ /dev/null @@ -1,42 +0,0 @@ -// REQUIRES: bpf-registered-target -// RUN: %clang_cc1 -triple bpf -emit-llvm -debug-info-kind=limited -disable-llvm-passes %s -o - | FileCheck %s - -#define _(x, y) (__builtin_preserve_enum_value((x), (y))) - -enum AA { - VAL0 = 0, - VAL1 = 2, - VAL2 = 0xffffffff80000000UL, -}; -typedef enum { VAL00, VAL10 = -2, VAL11 = 0xffff8000, } __BB; - -unsigned unit1() { - return _(*(enum AA *)VAL1, 0) + _(*(__BB *)VAL10, 1); -} - -unsigned unit2() { - return _(*(enum AA *)VAL2, 0) + _(*(__BB *)VAL11, 1); -} - -unsigned unit3() { - return _(*(enum AA *)VAL0, 0) + _(*(__BB *)VAL00, 1); -} - -// CHECK: @0 = private unnamed_addr constant [7 x i8] c"VAL1:2\00", align 1 -// CHECK: @1 = private unnamed_addr constant [9 x i8] c"VAL10:-2\00", align 1 -// CHECK: @2 = private unnamed_addr constant [17 x i8] c"VAL2:-2147483648\00", align 1 -// CHECK: @3 = private unnamed_addr constant [17 x i8] c"VAL11:4294934528\00", align 1 -// CHECK: @4 = private unnamed_addr constant [7 x i8] c"VAL0:0\00", align 1 -// CHECK: @5 = private unnamed_addr constant [8 x i8] c"VAL00:0\00", align 1 - -// CHECK: call i64 @llvm.bpf.preserve.enum.value(i32 0, ptr @0, i64 0), !dbg !{{[0-9]+}}, !llvm.preserve.access.index ![[ENUM_AA:[0-9]+]] -// CHECK: call i64 @llvm.bpf.preserve.enum.value(i32 1, ptr @1, i64 1), !dbg !{{[0-9]+}}, !llvm.preserve.access.index ![[TYPEDEF_ENUM:[0-9]+]] - -// CHECK: call i64 @llvm.bpf.preserve.enum.value(i32 2, ptr @2, i64 0), !dbg !{{[0-9]+}}, !llvm.preserve.access.index ![[ENUM_AA]] -// CHECK: call i64 @llvm.bpf.preserve.enum.value(i32 3, ptr @3, i64 1), !dbg !{{[0-9]+}}, !llvm.preserve.access.index ![[TYPEDEF_ENUM]] - -// CHECK: call i64 @llvm.bpf.preserve.enum.value(i32 4, ptr @4, i64 0), !dbg !{{[0-9]+}}, !llvm.preserve.access.index ![[ENUM_AA]] -// CHECK: call i64 @llvm.bpf.preserve.enum.value(i32 5, ptr @5, i64 1), !dbg !{{[0-9]+}}, !llvm.preserve.access.index ![[TYPEDEF_ENUM]] - -// CHECK: ![[ENUM_AA]] = !DICompositeType(tag: DW_TAG_enumeration_type, name: "AA" -// CHECK: ![[TYPEDEF_ENUM]] = !DIDerivedType(tag: DW_TAG_typedef, name: "__BB" diff --git a/clang/test/CodeGen/builtins-elementwise-math.c b/clang/test/CodeGen/builtins-elementwise-math.c index ee8345f..188a6c3 100644 --- a/clang/test/CodeGen/builtins-elementwise-math.c +++ b/clang/test/CodeGen/builtins-elementwise-math.c @@ -66,7 +66,7 @@ void test_builtin_elementwise_abs(float f1, float f2, double d1, double d2, // CHECK-NEXT: call i32 @llvm.abs.i32(i32 [[IA1]], i1 false) b = __builtin_elementwise_abs(int_as_one); - // CHECK: call i32 @llvm.abs.i32(i32 -10, i1 false) + // CHECK: store i32 %elt.abs11, ptr @b, align 4 b = __builtin_elementwise_abs(-10); // CHECK: [[SI:%.+]] = load i16, ptr %si.addr, align 2 @@ -418,7 +418,7 @@ void test_builtin_elementwise_max(float f1, float f2, double d1, double d2, // CHECK-NEXT: call i32 @llvm.smax.i32(i32 [[IAS1]], i32 [[B]]) int_as_one = __builtin_elementwise_max(int_as_one, b); - // CHECK: call i32 @llvm.smax.i32(i32 1, i32 97) + // CHECK: store i64 97, ptr [[I1:%.+]], align 8 i1 = __builtin_elementwise_max(1, 'a'); } @@ -508,6 +508,9 @@ void test_builtin_elementwise_min(float f1, float f2, double d1, double d2, // CHECK-NEXT: [[B:%.+]] = load i32, ptr @b, align 4 // CHECK-NEXT: call i32 @llvm.smin.i32(i32 [[IAS1]], i32 [[B]]) int_as_one = __builtin_elementwise_min(int_as_one, b); + + // CHECK: store i64 2, ptr [[I1:%.+]], align 8 + i1 = __builtin_elementwise_min(2, 'b'); } void test_builtin_elementwise_bitreverse(si8 vi1, si8 vi2, @@ -1176,3 +1179,185 @@ void test_builtin_elementwise_fma(float f32, double f64, half2 tmp2_v2f16 = __builtin_elementwise_fma(v2f16, v2f16, (half2)4.0); } + +void test_builtin_elementwise_fshl(long long int i1, long long int i2, + long long int i3, unsigned short us1, + unsigned short us2, unsigned short us3, + char c1, char c2, char c3, + unsigned char uc1, unsigned char uc2, + unsigned char uc3, si8 vi1, si8 vi2, + si8 vi3, u4 vu1, u4 vu2, u4 vu3) { + // CHECK: [[I1:%.+]] = load i64, ptr %i1.addr + // CHECK-NEXT: [[I2:%.+]] = load i64, ptr %i2.addr + // CHECK-NEXT: [[I3:%.+]] = load i64, ptr %i3.addr + // CHECK-NEXT: [[I4:%.+]] = call i64 @llvm.fshl.i64(i64 [[I1]], i64 [[I2]], i64 [[I3]]) + // CHECK-NEXT: store i64 [[I4]], ptr %tmp_lli_l + // CHECK-NEXT: [[I5:%.+]] = load i64, ptr %i1.addr + // CHECK-NEXT: [[I6:%.+]] = load i64, ptr %i2.addr + // CHECK-NEXT: [[I7:%.+]] = load i64, ptr %i3.addr + // CHECK-NEXT: [[I8:%.+]] = call i64 @llvm.fshr.i64(i64 [[I5]], i64 [[I6]], i64 [[I7]]) + // CHECK-NEXT: store i64 [[I8]], ptr %tmp_lli_r + long long int tmp_lli_l = __builtin_elementwise_fshl(i1, i2, i3); + long long int tmp_lli_r = __builtin_elementwise_fshr(i1, i2, i3); + + // CHECK: [[US1:%.+]] = load i16, ptr %us1.addr + // CHECK-NEXT: [[US2:%.+]] = load i16, ptr %us2.addr + // CHECK-NEXT: [[US3:%.+]] = load i16, ptr %us3.addr + // CHECK-NEXT: [[US4:%.+]] = call i16 @llvm.fshl.i16(i16 [[US1]], i16 [[US2]], i16 [[US3]]) + // CHECK-NEXT: store i16 [[US4]], ptr %tmp_usi_l + // CHECK-NEXT: [[US5:%.+]] = load i16, ptr %us1.addr + // CHECK-NEXT: [[US6:%.+]] = load i16, ptr %us2.addr + // CHECK-NEXT: [[US7:%.+]] = load i16, ptr %us3.addr + // CHECK-NEXT: [[US8:%.+]] = call i16 @llvm.fshr.i16(i16 [[US5]], i16 [[US6]], i16 [[US7]]) + // CHECK-NEXT: store i16 [[US8]], ptr %tmp_usi_r + unsigned short tmp_usi_l = __builtin_elementwise_fshl(us1, us2, us3); + unsigned short tmp_usi_r = __builtin_elementwise_fshr(us1, us2, us3); + + // CHECK: [[C1:%.+]] = load i8, ptr %c1.addr + // CHECK-NEXT: [[C2:%.+]] = load i8, ptr %c2.addr + // CHECK-NEXT: [[C3:%.+]] = load i8, ptr %c3.addr + // CHECK-NEXT: [[C4:%.+]] = call i8 @llvm.fshl.i8(i8 [[C1]], i8 [[C2]], i8 [[C3]]) + // CHECK-NEXT: store i8 [[C4]], ptr %tmp_c_l + // CHECK-NEXT: [[C5:%.+]] = load i8, ptr %c1.addr + // CHECK-NEXT: [[C6:%.+]] = load i8, ptr %c2.addr + // CHECK-NEXT: [[C7:%.+]] = load i8, ptr %c3.addr + // CHECK-NEXT: [[C8:%.+]] = call i8 @llvm.fshr.i8(i8 [[C5]], i8 [[C6]], i8 [[C7]]) + // CHECK-NEXT: store i8 [[C8]], ptr %tmp_c_r + char tmp_c_l = __builtin_elementwise_fshl(c1, c2, c3); + char tmp_c_r = __builtin_elementwise_fshr(c1, c2, c3); + + // CHECK: [[UC1:%.+]] = load i8, ptr %uc1.addr + // CHECK-NEXT: [[UC2:%.+]] = load i8, ptr %uc2.addr + // CHECK-NEXT: [[UC3:%.+]] = load i8, ptr %uc3.addr + // CHECK-NEXT: [[UC4:%.+]] = call i8 @llvm.fshl.i8(i8 [[UC1]], i8 [[UC2]], i8 [[UC3]]) + // CHECK-NEXT: store i8 [[UC4]], ptr %tmp_uc_l + // CHECK-NEXT: [[UC5:%.+]] = load i8, ptr %uc1.addr + // CHECK-NEXT: [[UC6:%.+]] = load i8, ptr %uc2.addr + // CHECK-NEXT: [[UC7:%.+]] = load i8, ptr %uc3.addr + // CHECK-NEXT: [[UC8:%.+]] = call i8 @llvm.fshr.i8(i8 [[UC5]], i8 [[UC6]], i8 [[UC7]]) + // CHECK-NEXT: store i8 [[UC8]], ptr %tmp_uc_r + unsigned char tmp_uc_l = __builtin_elementwise_fshl(uc1, uc2, uc3); + unsigned char tmp_uc_r = __builtin_elementwise_fshr(uc1, uc2, uc3); + + // CHECK: [[VI1:%.+]] = load <8 x i16>, ptr %vi1.addr + // CHECK-NEXT: [[VI2:%.+]] = load <8 x i16>, ptr %vi2.addr + // CHECK-NEXT: [[VI3:%.+]] = load <8 x i16>, ptr %vi3.addr + // CHECK-NEXT: [[VI4:%.+]] = call <8 x i16> @llvm.fshl.v8i16(<8 x i16> [[VI1]], <8 x i16> [[VI2]], <8 x i16> [[VI3]]) + // CHECK-NEXT: store <8 x i16> [[VI4]], ptr %tmp_vi_l + // CHECK-NEXT: [[VI5:%.+]] = load <8 x i16>, ptr %vi1.addr + // CHECK-NEXT: [[VI6:%.+]] = load <8 x i16>, ptr %vi2.addr + // CHECK-NEXT: [[VI7:%.+]] = load <8 x i16>, ptr %vi3.addr + // CHECK-NEXT: [[VI8:%.+]] = call <8 x i16> @llvm.fshr.v8i16(<8 x i16> [[VI5]], <8 x i16> [[VI6]], <8 x i16> [[VI7]]) + // CHECK-NEXT: store <8 x i16> [[VI8]], ptr %tmp_vi_r + si8 tmp_vi_l = __builtin_elementwise_fshl(vi1, vi2, vi3); + si8 tmp_vi_r = __builtin_elementwise_fshr(vi1, vi2, vi3); + + // CHECK: [[VU1:%.+]] = load <4 x i32>, ptr %vu1.addr + // CHECK-NEXT: [[VU2:%.+]] = load <4 x i32>, ptr %vu2.addr + // CHECK-NEXT: [[VU3:%.+]] = load <4 x i32>, ptr %vu3.addr + // CHECK-NEXT: [[VU4:%.+]] = call <4 x i32> @llvm.fshl.v4i32(<4 x i32> [[VU1]], <4 x i32> [[VU2]], <4 x i32> [[VU3]]) + // CHECK-NEXT: store <4 x i32> [[VU4]], ptr %tmp_vu_l + // CHECK-NEXT: [[VU5:%.+]] = load <4 x i32>, ptr %vu1.addr + // CHECK-NEXT: [[VU6:%.+]] = load <4 x i32>, ptr %vu2.addr + // CHECK-NEXT: [[VU7:%.+]] = load <4 x i32>, ptr %vu3.addr + // CHECK-NEXT: [[VU8:%.+]] = call <4 x i32> @llvm.fshr.v4i32(<4 x i32> [[VU5]], <4 x i32> [[VU6]], <4 x i32> [[VU7]]) + // CHECK-NEXT: store <4 x i32> [[VU8]], ptr %tmp_vu_r + u4 tmp_vu_l = __builtin_elementwise_fshl(vu1, vu2, vu3); + u4 tmp_vu_r = __builtin_elementwise_fshr(vu1, vu2, vu3); +} + +void test_builtin_elementwise_ctlz(si8 vs1, si8 vs2, u4 vu1, + long long int lli, short si, + _BitInt(31) bi, int i, + char ci) { + // CHECK: [[V8S1:%.+]] = load <8 x i16>, ptr %vs1.addr + // CHECK-NEXT: call <8 x i16> @llvm.ctlz.v8i16(<8 x i16> [[V8S1]], i1 true) + vs1 = __builtin_elementwise_ctlz(vs1); + + // CHECK: [[V8S1:%.+]] = load <8 x i16>, ptr %vs1.addr + // CHECK-NEXT: [[CLZ:%.+]] = call <8 x i16> @llvm.ctlz.v8i16(<8 x i16> [[V8S1]], i1 true) + // CHECK-NEXT: [[ISZERO:%.+]] = icmp eq <8 x i16> [[V8S1]], zeroinitializer + // CHECK-NEXT: [[V8S2:%.+]] = load <8 x i16>, ptr %vs2.addr + // select <8 x i1> [[ISZERO]], <8 x i16> [[CLZ]], <8 x i16> [[V8S2]] + vs1 = __builtin_elementwise_ctlz(vs1, vs2); + + // CHECK: [[V4U1:%.+]] = load <4 x i32>, ptr %vu1.addr + // CHECK-NEXT: call <4 x i32> @llvm.ctlz.v4i32(<4 x i32> [[V4U1]], i1 true) + vu1 = __builtin_elementwise_ctlz(vu1); + + // CHECK: [[LLI:%.+]] = load i64, ptr %lli.addr + // CHECK-NEXT: call i64 @llvm.ctlz.i64(i64 [[LLI]], i1 true) + lli = __builtin_elementwise_ctlz(lli); + + // CHECK: [[SI:%.+]] = load i16, ptr %si.addr + // CHECK-NEXT: call i16 @llvm.ctlz.i16(i16 [[SI]], i1 true) + si = __builtin_elementwise_ctlz(si); + + // CHECK: [[BI1:%.+]] = load i32, ptr %bi.addr + // CHECK-NEXT: [[BI2:%.+]] = trunc i32 [[BI1]] to i31 + // CHECK-NEXT: call i31 @llvm.ctlz.i31(i31 [[BI2]], i1 true) + bi = __builtin_elementwise_ctlz(bi); + + // CHECK: [[BI1:%.+]] = load i32, ptr %bi.addr + // CHECK-NEXT: [[BI2:%.+]] = trunc i32 [[BI1]] to i31 + // CHECK-NEXT: [[CLZ:%.+]] = call i31 @llvm.ctlz.i31(i31 [[BI2]], i1 true) + // CHECK-NEXT: [[ISZERO:%.+]] = icmp eq i31 [[BI2]], 0 + // CHECK-NEXT: select i1 [[ISZERO]], i31 1, i31 [[CLZ]] + bi = __builtin_elementwise_ctlz(bi, (_BitInt(31))1); + + // CHECK: [[I:%.+]] = load i32, ptr %i.addr + // CHECK-NEXT: call i32 @llvm.ctlz.i32(i32 [[I]], i1 true) + i = __builtin_elementwise_ctlz(i); + + // CHECK: [[CI:%.+]] = load i8, ptr %ci.addr + // CHECK-NEXT: call i8 @llvm.ctlz.i8(i8 [[CI]], i1 true) + ci = __builtin_elementwise_ctlz(ci); +} + +void test_builtin_elementwise_cttz(si8 vs1, si8 vs2, u4 vu1, + long long int lli, short si, + _BitInt(31) bi, int i, + char ci) { + // CHECK: [[V8S1:%.+]] = load <8 x i16>, ptr %vs1.addr + // CHECK-NEXT: call <8 x i16> @llvm.cttz.v8i16(<8 x i16> [[V8S1]], i1 true) + vs1 = __builtin_elementwise_cttz(vs1); + + // CHECK: [[V8S1:%.+]] = load <8 x i16>, ptr %vs1.addr + // CHECK-NEXT: [[ctz:%.+]] = call <8 x i16> @llvm.cttz.v8i16(<8 x i16> [[V8S1]], i1 true) + // CHECK-NEXT: [[ISZERO:%.+]] = icmp eq <8 x i16> [[V8S1]], zeroinitializer + // CHECK-NEXT: [[V8S2:%.+]] = load <8 x i16>, ptr %vs2.addr + // select <8 x i1> [[ISZERO]], <8 x i16> [[ctz]], <8 x i16> [[V8S2]] + vs1 = __builtin_elementwise_cttz(vs1, vs2); + + // CHECK: [[V4U1:%.+]] = load <4 x i32>, ptr %vu1.addr + // CHECK-NEXT: call <4 x i32> @llvm.cttz.v4i32(<4 x i32> [[V4U1]], i1 true) + vu1 = __builtin_elementwise_cttz(vu1); + + // CHECK: [[LLI:%.+]] = load i64, ptr %lli.addr + // CHECK-NEXT: call i64 @llvm.cttz.i64(i64 [[LLI]], i1 true) + lli = __builtin_elementwise_cttz(lli); + + // CHECK: [[SI:%.+]] = load i16, ptr %si.addr + // CHECK-NEXT: call i16 @llvm.cttz.i16(i16 [[SI]], i1 true) + si = __builtin_elementwise_cttz(si); + + // CHECK: [[BI1:%.+]] = load i32, ptr %bi.addr + // CHECK-NEXT: [[BI2:%.+]] = trunc i32 [[BI1]] to i31 + // CHECK-NEXT: call i31 @llvm.cttz.i31(i31 [[BI2]], i1 true) + bi = __builtin_elementwise_cttz(bi); + + // CHECK: [[BI1:%.+]] = load i32, ptr %bi.addr + // CHECK-NEXT: [[BI2:%.+]] = trunc i32 [[BI1]] to i31 + // CHECK-NEXT: [[ctz:%.+]] = call i31 @llvm.cttz.i31(i31 [[BI2]], i1 true) + // CHECK-NEXT: [[ISZERO:%.+]] = icmp eq i31 [[BI2]], 0 + // CHECK-NEXT: select i1 [[ISZERO]], i31 1, i31 [[ctz]] + bi = __builtin_elementwise_cttz(bi, (_BitInt(31))1); + + // CHECK: [[I:%.+]] = load i32, ptr %i.addr + // CHECK-NEXT: call i32 @llvm.cttz.i32(i32 [[I]], i1 true) + i = __builtin_elementwise_cttz(i); + + // CHECK: [[CI:%.+]] = load i8, ptr %ci.addr + // CHECK-NEXT: call i8 @llvm.cttz.i8(i8 [[CI]], i1 true) + ci = __builtin_elementwise_cttz(ci); +} diff --git a/clang/test/CodeGen/builtins-wasm.c b/clang/test/CodeGen/builtins-wasm.c index f201dfe..375664b 100644 --- a/clang/test/CodeGen/builtins-wasm.c +++ b/clang/test/CodeGen/builtins-wasm.c @@ -751,24 +751,3 @@ void *tp (void) { return __builtin_thread_pointer (); // WEBASSEMBLY: call {{.*}} @llvm.thread.pointer.p0() } - -typedef void (*Fvoid)(void); -typedef float (*Ffloats)(float, double, int); -typedef void (*Fpointers)(Fvoid, Ffloats, void*, int*, int***, char[5]); - -void use(int); - -void test_function_pointer_signature_void(Fvoid func) { - // WEBASSEMBLY: %0 = tail call i32 (ptr, ...) @llvm.wasm.ref.test.func(ptr %func, token poison) - use(__builtin_wasm_test_function_pointer_signature(func)); -} - -void test_function_pointer_signature_floats(Ffloats func) { - // WEBASSEMBLY: tail call i32 (ptr, ...) @llvm.wasm.ref.test.func(ptr %func, float 0.000000e+00, token poison, float 0.000000e+00, double 0.000000e+00, i32 0) - use(__builtin_wasm_test_function_pointer_signature(func)); -} - -void test_function_pointer_signature_pointers(Fpointers func) { - // WEBASSEMBLY: %0 = tail call i32 (ptr, ...) @llvm.wasm.ref.test.func(ptr %func, token poison, ptr null, ptr null, ptr null, ptr null, ptr null, ptr null) - use(__builtin_wasm_test_function_pointer_signature(func)); -} diff --git a/clang/test/CodeGen/builtins-x86.c b/clang/test/CodeGen/builtins-x86.c index c42c321..31f3097 100644 --- a/clang/test/CodeGen/builtins-x86.c +++ b/clang/test/CodeGen/builtins-x86.c @@ -22,6 +22,7 @@ typedef float V2f __attribute__((vector_size(8))); // 128-bit typedef char V16c __attribute__((vector_size(16))); typedef signed short V8s __attribute__((vector_size(16))); +typedef unsigned short V8u __attribute__((vector_size(16))); typedef signed int V4i __attribute__((vector_size(16))); #ifndef OPENCL typedef signed long long V2LLi __attribute__((vector_size(16))); @@ -99,6 +100,7 @@ void f0(void) { // 128-bit V16c tmp_V16c; V8s tmp_V8s; + V8u tmp_V8u; V4i tmp_V4i; V2LLi tmp_V2LLi; V4f tmp_V4f; @@ -192,7 +194,7 @@ void f0(void) { tmp_V16c = __builtin_ia32_packsswb128(tmp_V8s, tmp_V8s); tmp_V8s = __builtin_ia32_packssdw128(tmp_V4i, tmp_V4i); tmp_V16c = __builtin_ia32_packuswb128(tmp_V8s, tmp_V8s); - tmp_V8s = __builtin_ia32_pmulhuw128(tmp_V8s, tmp_V8s); + tmp_V8u = __builtin_ia32_pmulhuw128(tmp_V8u, tmp_V8u); tmp_V4f = __builtin_ia32_addsubps(tmp_V4f, tmp_V4f); tmp_V2d = __builtin_ia32_addsubpd(tmp_V2d, tmp_V2d); tmp_V4f = __builtin_ia32_haddps(tmp_V4f, tmp_V4f); diff --git a/clang/test/CodeGen/builtins.c b/clang/test/CodeGen/builtins.c index aa9965b..738814c 100644 --- a/clang/test/CodeGen/builtins.c +++ b/clang/test/CodeGen/builtins.c @@ -1,6 +1,7 @@ // RUN: %clang_cc1 -emit-llvm -o %t %s // RUN: not grep __builtin %t // RUN: %clang_cc1 -emit-llvm -triple x86_64-darwin-apple -o - %s | FileCheck %s +// RUN: %clang_cc1 -emit-llvm -triple x86_64-darwin-apple -o - %s -fexperimental-new-constant-interpreter | FileCheck %s int printf(const char *, ...); @@ -991,247 +992,288 @@ void test_builtin_os_log_long_double(void *buf, long double ld) { void test_builtin_popcountg(unsigned char uc, unsigned short us, unsigned int ui, unsigned long ul, unsigned long long ull, unsigned __int128 ui128, - unsigned _BitInt(128) ubi128) { + unsigned _BitInt(128) ubi128, + _Bool __attribute__((ext_vector_type(8))) vb8) { volatile int pop; - pop = __builtin_popcountg(uc); - // CHECK: %1 = load i8, ptr %uc.addr, align 1 - // CHECK-NEXT: %2 = call i8 @llvm.ctpop.i8(i8 %1) - // CHECK-NEXT: %cast = zext i8 %2 to i32 + // CHECK: %2 = load i8, ptr %uc.addr, align 1 + // CHECK-NEXT: %3 = call i8 @llvm.ctpop.i8(i8 %2) + // CHECK-NEXT: %cast = zext i8 %3 to i32 // CHECK-NEXT: store volatile i32 %cast, ptr %pop, align 4 + pop = __builtin_popcountg(uc); + // CHECK: %4 = load i16, ptr %us.addr, align 2 + // CHECK-NEXT: %5 = call i16 @llvm.ctpop.i16(i16 %4) + // CHECK-NEXT: %cast2 = zext i16 %5 to i32 + // CHECK-NEXT: store volatile i32 %cast2, ptr %pop, align 4 pop = __builtin_popcountg(us); - // CHECK-NEXT: %3 = load i16, ptr %us.addr, align 2 - // CHECK-NEXT: %4 = call i16 @llvm.ctpop.i16(i16 %3) - // CHECK-NEXT: %cast1 = zext i16 %4 to i32 - // CHECK-NEXT: store volatile i32 %cast1, ptr %pop, align 4 + // CHECK: %6 = load i32, ptr %ui.addr, align 4 + // CHECK-NEXT: %7 = call i32 @llvm.ctpop.i32(i32 %6) + // CHECK-NEXT: store volatile i32 %7, ptr %pop, align 4 pop = __builtin_popcountg(ui); - // CHECK-NEXT: %5 = load i32, ptr %ui.addr, align 4 - // CHECK-NEXT: %6 = call i32 @llvm.ctpop.i32(i32 %5) - // CHECK-NEXT: store volatile i32 %6, ptr %pop, align 4 + // CHECK: %8 = load i64, ptr %ul.addr, align 8 + // CHECK-NEXT: %9 = call i64 @llvm.ctpop.i64(i64 %8) + // CHECK-NEXT: %cast3 = trunc i64 %9 to i32 + // CHECK-NEXT: store volatile i32 %cast3, ptr %pop, align 4 pop = __builtin_popcountg(ul); - // CHECK-NEXT: %7 = load i64, ptr %ul.addr, align 8 - // CHECK-NEXT: %8 = call i64 @llvm.ctpop.i64(i64 %7) - // CHECK-NEXT: %cast2 = trunc i64 %8 to i32 - // CHECK-NEXT: store volatile i32 %cast2, ptr %pop, align 4 + // CHECK: %10 = load i64, ptr %ull.addr, align 8 + // CHECK-NEXT: %11 = call i64 @llvm.ctpop.i64(i64 %10) + // CHECK-NEXT: %cast4 = trunc i64 %11 to i32 + // CHECK-NEXT: store volatile i32 %cast4, ptr %pop, align 4 pop = __builtin_popcountg(ull); - // CHECK-NEXT: %9 = load i64, ptr %ull.addr, align 8 - // CHECK-NEXT: %10 = call i64 @llvm.ctpop.i64(i64 %9) - // CHECK-NEXT: %cast3 = trunc i64 %10 to i32 - // CHECK-NEXT: store volatile i32 %cast3, ptr %pop, align 4 + // CHECK: %12 = load i128, ptr %ui128.addr, align 16 + // CHECK-NEXT: %13 = call i128 @llvm.ctpop.i128(i128 %12) + // CHECK-NEXT: %cast5 = trunc i128 %13 to i32 + // CHECK-NEXT: store volatile i32 %cast5, ptr %pop, align 4 pop = __builtin_popcountg(ui128); - // CHECK-NEXT: %11 = load i128, ptr %ui128.addr, align 16 - // CHECK-NEXT: %12 = call i128 @llvm.ctpop.i128(i128 %11) - // CHECK-NEXT: %cast4 = trunc i128 %12 to i32 - // CHECK-NEXT: store volatile i32 %cast4, ptr %pop, align 4 + // CHECK: %14 = load i128, ptr %ubi128.addr, align 8 + // CHECK-NEXT: %15 = call i128 @llvm.ctpop.i128(i128 %14) + // CHECK-NEXT: %cast6 = trunc i128 %15 to i32 + // CHECK-NEXT: store volatile i32 %cast6, ptr %pop, align 4 pop = __builtin_popcountg(ubi128); - // CHECK-NEXT: %13 = load i128, ptr %ubi128.addr, align 8 - // CHECK-NEXT: %14 = call i128 @llvm.ctpop.i128(i128 %13) - // CHECK-NEXT: %cast5 = trunc i128 %14 to i32 - // CHECK-NEXT: store volatile i32 %cast5, ptr %pop, align 4 - // CHECK-NEXT: ret void + // CHECK: %load_bits7 = load i8, ptr %vb8.addr, align 1 + // CHECK-NEXT: %16 = bitcast i8 %load_bits7 to <8 x i1> + // CHECK-NEXT: %17 = bitcast <8 x i1> %16 to i8 + // CHECK-NEXT: %18 = call i8 @llvm.ctpop.i8(i8 %17) + // CHECK-NEXT: %cast8 = zext i8 %18 to i32 + // CHECK-NEXT: store volatile i32 %cast8, ptr %pop, align 4 + pop = __builtin_popcountg(vb8); } // CHECK-LABEL: define{{.*}} void @test_builtin_clzg void test_builtin_clzg(unsigned char uc, unsigned short us, unsigned int ui, unsigned long ul, unsigned long long ull, unsigned __int128 ui128, unsigned _BitInt(128) ubi128, - signed char sc, short s, int i) { + signed char sc, short s, int i, + _Bool __attribute__((ext_vector_type(8))) vb8) { volatile int lz; + // CHECK: %2 = load i8, ptr %uc.addr, align 1 + // CHECK-NEXT: %3 = call i8 @llvm.ctlz.i8(i8 %2, i1 true) + // CHECK-NEXT: %cast = zext i8 %3 to i32 + // CHECK-NEXT: store volatile i32 %cast, ptr %lz, align 4 lz = __builtin_clzg(uc); - // CHECK: %1 = load i8, ptr %uc.addr, align 1 - // CHECK-NEXT: %2 = call i8 @llvm.ctlz.i8(i8 %1, i1 true) - // CHECK-NEXT: %cast = zext i8 %2 to i32 - // CHECK-NEXT: store volatile i32 %cast, ptr %lz, align 4 + // CHECK-NEXT: %4 = load i16, ptr %us.addr, align 2 + // CHECK-NEXT: %5 = call i16 @llvm.ctlz.i16(i16 %4, i1 true) + // CHECK-NEXT: %cast2 = zext i16 %5 to i32 + // CHECK-NEXT: store volatile i32 %cast2, ptr %lz, align 4 lz = __builtin_clzg(us); - // CHECK-NEXT: %3 = load i16, ptr %us.addr, align 2 - // CHECK-NEXT: %4 = call i16 @llvm.ctlz.i16(i16 %3, i1 true) - // CHECK-NEXT: %cast1 = zext i16 %4 to i32 - // CHECK-NEXT: store volatile i32 %cast1, ptr %lz, align 4 + // CHECK-NEXT: %6 = load i32, ptr %ui.addr, align 4 + // CHECK-NEXT: %7 = call i32 @llvm.ctlz.i32(i32 %6, i1 true) + // CHECK-NEXT: store volatile i32 %7, ptr %lz, align 4 lz = __builtin_clzg(ui); - // CHECK-NEXT: %5 = load i32, ptr %ui.addr, align 4 - // CHECK-NEXT: %6 = call i32 @llvm.ctlz.i32(i32 %5, i1 true) - // CHECK-NEXT: store volatile i32 %6, ptr %lz, align 4 + // CHECK-NEXT: %8 = load i64, ptr %ul.addr, align 8 + // CHECK-NEXT: %9 = call i64 @llvm.ctlz.i64(i64 %8, i1 true) + // CHECK-NEXT: %cast3 = trunc i64 %9 to i32 + // CHECK-NEXT: store volatile i32 %cast3, ptr %lz, align 4 lz = __builtin_clzg(ul); - // CHECK-NEXT: %7 = load i64, ptr %ul.addr, align 8 - // CHECK-NEXT: %8 = call i64 @llvm.ctlz.i64(i64 %7, i1 true) - // CHECK-NEXT: %cast2 = trunc i64 %8 to i32 - // CHECK-NEXT: store volatile i32 %cast2, ptr %lz, align 4 + // CHECK-NEXT: %10 = load i64, ptr %ull.addr, align 8 + // CHECK-NEXT: %11 = call i64 @llvm.ctlz.i64(i64 %10, i1 true) + // CHECK-NEXT: %cast4 = trunc i64 %11 to i32 + // CHECK-NEXT: store volatile i32 %cast4, ptr %lz, align 4 lz = __builtin_clzg(ull); - // CHECK-NEXT: %9 = load i64, ptr %ull.addr, align 8 - // CHECK-NEXT: %10 = call i64 @llvm.ctlz.i64(i64 %9, i1 true) - // CHECK-NEXT: %cast3 = trunc i64 %10 to i32 - // CHECK-NEXT: store volatile i32 %cast3, ptr %lz, align 4 + // CHECK-NEXT: %12 = load i128, ptr %ui128.addr, align 16 + // CHECK-NEXT: %13 = call i128 @llvm.ctlz.i128(i128 %12, i1 true) + // CHECK-NEXT: %cast5 = trunc i128 %13 to i32 + // CHECK-NEXT: store volatile i32 %cast5, ptr %lz, align 4 lz = __builtin_clzg(ui128); - // CHECK-NEXT: %11 = load i128, ptr %ui128.addr, align 16 - // CHECK-NEXT: %12 = call i128 @llvm.ctlz.i128(i128 %11, i1 true) - // CHECK-NEXT: %cast4 = trunc i128 %12 to i32 - // CHECK-NEXT: store volatile i32 %cast4, ptr %lz, align 4 + // CHECK-NEXT: %14 = load i128, ptr %ubi128.addr, align 8 + // CHECK-NEXT: %15 = call i128 @llvm.ctlz.i128(i128 %14, i1 true) + // CHECK-NEXT: %cast6 = trunc i128 %15 to i32 + // CHECK-NEXT: store volatile i32 %cast6, ptr %lz, align 4 lz = __builtin_clzg(ubi128); - // CHECK-NEXT: %13 = load i128, ptr %ubi128.addr, align 8 - // CHECK-NEXT: %14 = call i128 @llvm.ctlz.i128(i128 %13, i1 true) - // CHECK-NEXT: %cast5 = trunc i128 %14 to i32 - // CHECK-NEXT: store volatile i32 %cast5, ptr %lz, align 4 + // CHECK-NEXT: %load_bits7 = load i8, ptr %vb8.addr, align 1 + // CHECK-NEXT: %16 = bitcast i8 %load_bits7 to <8 x i1> + // CHECK-NEXT: %17 = bitcast <8 x i1> %16 to i8 + // CHECK-NEXT: %18 = call i8 @llvm.ctlz.i8(i8 %17, i1 true) + // CHECK-NEXT: %cast8 = zext i8 %18 to i32 + // CHECK-NEXT: store volatile i32 %cast8, ptr %lz, align 4 + lz = __builtin_clzg(vb8); + // CHECK-NEXT: %19 = load i8, ptr %uc.addr, align 1 + // CHECK-NEXT: %20 = call i8 @llvm.ctlz.i8(i8 %19, i1 true) + // CHECK-NEXT: %cast9 = zext i8 %20 to i32 + // CHECK-NEXT: %iszero = icmp eq i8 %19, 0 + // CHECK-NEXT: %21 = load i8, ptr %sc.addr, align 1 + // CHECK-NEXT: %conv = sext i8 %21 to i32 + // CHECK-NEXT: %clzg = select i1 %iszero, i32 %conv, i32 %cast9 + // CHECK-NEXT: store volatile i32 %clzg, ptr %lz, align 4 lz = __builtin_clzg(uc, sc); - // CHECK-NEXT: %15 = load i8, ptr %uc.addr, align 1 - // CHECK-NEXT: %16 = call i8 @llvm.ctlz.i8(i8 %15, i1 true) - // CHECK-NEXT: %cast6 = zext i8 %16 to i32 - // CHECK-NEXT: %iszero = icmp eq i8 %15, 0 - // CHECK-NEXT: %17 = load i8, ptr %sc.addr, align 1 - // CHECK-NEXT: %conv = sext i8 %17 to i32 - // CHECK-NEXT: %clzg = select i1 %iszero, i32 %conv, i32 %cast6 - // CHECK-NEXT: store volatile i32 %clzg, ptr %lz, align 4 + // CHECK-NEXT: %22 = load i16, ptr %us.addr, align 2 + // CHECK-NEXT: %23 = call i16 @llvm.ctlz.i16(i16 %22, i1 true) + // CHECK-NEXT: %cast10 = zext i16 %23 to i32 + // CHECK-NEXT: %iszero11 = icmp eq i16 %22, 0 + // CHECK-NEXT: %24 = load i8, ptr %uc.addr, align 1 + // CHECK-NEXT: %conv12 = zext i8 %24 to i32 + // CHECK-NEXT: %clzg13 = select i1 %iszero11, i32 %conv12, i32 %cast10 + // CHECK-NEXT: store volatile i32 %clzg13, ptr %lz, align 4 lz = __builtin_clzg(us, uc); - // CHECK-NEXT: %18 = load i16, ptr %us.addr, align 2 - // CHECK-NEXT: %19 = call i16 @llvm.ctlz.i16(i16 %18, i1 true) - // CHECK-NEXT: %cast7 = zext i16 %19 to i32 - // CHECK-NEXT: %iszero8 = icmp eq i16 %18, 0 - // CHECK-NEXT: %20 = load i8, ptr %uc.addr, align 1 - // CHECK-NEXT: %conv9 = zext i8 %20 to i32 - // CHECK-NEXT: %clzg10 = select i1 %iszero8, i32 %conv9, i32 %cast7 - // CHECK-NEXT: store volatile i32 %clzg10, ptr %lz, align 4 + // CHECK-NEXT: %25 = load i32, ptr %ui.addr, align 4 + // CHECK-NEXT: %26 = call i32 @llvm.ctlz.i32(i32 %25, i1 true) + // CHECK-NEXT: %iszero14 = icmp eq i32 %25, 0 + // CHECK-NEXT: %27 = load i16, ptr %s.addr, align 2 + // CHECK-NEXT: %conv15 = sext i16 %27 to i32 + // CHECK-NEXT: %clzg16 = select i1 %iszero14, i32 %conv15, i32 %26 + // CHECK-NEXT: store volatile i32 %clzg16, ptr %lz, align 4 lz = __builtin_clzg(ui, s); - // CHECK-NEXT: %21 = load i32, ptr %ui.addr, align 4 - // CHECK-NEXT: %22 = call i32 @llvm.ctlz.i32(i32 %21, i1 true) - // CHECK-NEXT: %iszero11 = icmp eq i32 %21, 0 - // CHECK-NEXT: %23 = load i16, ptr %s.addr, align 2 - // CHECK-NEXT: %conv12 = sext i16 %23 to i32 - // CHECK-NEXT: %clzg13 = select i1 %iszero11, i32 %conv12, i32 %22 - // CHECK-NEXT: store volatile i32 %clzg13, ptr %lz, align 4 + // CHECK-NEXT: %28 = load i64, ptr %ul.addr, align 8 + // CHECK-NEXT: %29 = call i64 @llvm.ctlz.i64(i64 %28, i1 true) + // CHECK-NEXT: %cast17 = trunc i64 %29 to i32 + // CHECK-NEXT: %iszero18 = icmp eq i64 %28, 0 + // CHECK-NEXT: %30 = load i16, ptr %us.addr, align 2 + // CHECK-NEXT: %conv19 = zext i16 %30 to i32 + // CHECK-NEXT: %clzg20 = select i1 %iszero18, i32 %conv19, i32 %cast17 + // CHECK-NEXT: store volatile i32 %clzg20, ptr %lz, align 4 lz = __builtin_clzg(ul, us); - // CHECK-NEXT: %24 = load i64, ptr %ul.addr, align 8 - // CHECK-NEXT: %25 = call i64 @llvm.ctlz.i64(i64 %24, i1 true) - // CHECK-NEXT: %cast14 = trunc i64 %25 to i32 - // CHECK-NEXT: %iszero15 = icmp eq i64 %24, 0 - // CHECK-NEXT: %26 = load i16, ptr %us.addr, align 2 - // CHECK-NEXT: %conv16 = zext i16 %26 to i32 - // CHECK-NEXT: %clzg17 = select i1 %iszero15, i32 %conv16, i32 %cast14 - // CHECK-NEXT: store volatile i32 %clzg17, ptr %lz, align 4 + // CHECK-NEXT: %31 = load i64, ptr %ull.addr, align 8 + // CHECK-NEXT: %32 = call i64 @llvm.ctlz.i64(i64 %31, i1 true) + // CHECK-NEXT: %cast21 = trunc i64 %32 to i32 + // CHECK-NEXT: %iszero22 = icmp eq i64 %31, 0 + // CHECK-NEXT: %33 = load i32, ptr %i.addr, align 4 + // CHECK-NEXT: %clzg23 = select i1 %iszero22, i32 %33, i32 %cast21 + // CHECK-NEXT: store volatile i32 %clzg23, ptr %lz, align 4 lz = __builtin_clzg(ull, i); - // CHECK-NEXT: %27 = load i64, ptr %ull.addr, align 8 - // CHECK-NEXT: %28 = call i64 @llvm.ctlz.i64(i64 %27, i1 true) - // CHECK-NEXT: %cast18 = trunc i64 %28 to i32 - // CHECK-NEXT: %iszero19 = icmp eq i64 %27, 0 - // CHECK-NEXT: %29 = load i32, ptr %i.addr, align 4 - // CHECK-NEXT: %clzg20 = select i1 %iszero19, i32 %29, i32 %cast18 - // CHECK-NEXT: store volatile i32 %clzg20, ptr %lz, align 4 + // CHECK-NEXT: %34 = load i128, ptr %ui128.addr, align 16 + // CHECK-NEXT: %35 = call i128 @llvm.ctlz.i128(i128 %34, i1 true) + // CHECK-NEXT: %cast24 = trunc i128 %35 to i32 + // CHECK-NEXT: %iszero25 = icmp eq i128 %34, 0 + // CHECK-NEXT: %36 = load i32, ptr %i.addr, align 4 + // CHECK-NEXT: %clzg26 = select i1 %iszero25, i32 %36, i32 %cast24 + // CHECK-NEXT: store volatile i32 %clzg26, ptr %lz, align 4 lz = __builtin_clzg(ui128, i); - // CHECK-NEXT: %30 = load i128, ptr %ui128.addr, align 16 - // CHECK-NEXT: %31 = call i128 @llvm.ctlz.i128(i128 %30, i1 true) - // CHECK-NEXT: %cast21 = trunc i128 %31 to i32 - // CHECK-NEXT: %iszero22 = icmp eq i128 %30, 0 - // CHECK-NEXT: %32 = load i32, ptr %i.addr, align 4 - // CHECK-NEXT: %clzg23 = select i1 %iszero22, i32 %32, i32 %cast21 - // CHECK-NEXT: store volatile i32 %clzg23, ptr %lz, align 4 + // CHECK-NEXT: %37 = load i128, ptr %ubi128.addr, align 8 + // CHECK-NEXT: %38 = call i128 @llvm.ctlz.i128(i128 %37, i1 true) + // CHECK-NEXT: %cast27 = trunc i128 %38 to i32 + // CHECK-NEXT: %iszero28 = icmp eq i128 %37, 0 + // CHECK-NEXT: %39 = load i32, ptr %i.addr, align 4 + // CHECK-NEXT: %clzg29 = select i1 %iszero28, i32 %39, i32 %cast27 + // CHECK-NEXT: store volatile i32 %clzg29, ptr %lz, align 4 lz = __builtin_clzg(ubi128, i); - // CHECK-NEXT: %33 = load i128, ptr %ubi128.addr, align 8 - // CHECK-NEXT: %34 = call i128 @llvm.ctlz.i128(i128 %33, i1 true) - // CHECK-NEXT: %cast24 = trunc i128 %34 to i32 - // CHECK-NEXT: %iszero25 = icmp eq i128 %33, 0 - // CHECK-NEXT: %35 = load i32, ptr %i.addr, align 4 - // CHECK-NEXT: %clzg26 = select i1 %iszero25, i32 %35, i32 %cast24 - // CHECK-NEXT: store volatile i32 %clzg26, ptr %lz, align 4 - // CHECK-NEXT: ret void + // CHECK-NEXT: %load_bits30 = load i8, ptr %vb8.addr, align 1 + // CHECK-NEXT: %40 = bitcast i8 %load_bits30 to <8 x i1> + // CHECK-NEXT: %41 = bitcast <8 x i1> %40 to i8 + // CHECK-NEXT: %42 = call i8 @llvm.ctlz.i8(i8 %41, i1 true) + // CHECK-NEXT: %cast31 = zext i8 %42 to i32 + // CHECK-NEXT: %iszero32 = icmp eq i8 %41, 0 + // CHECK-NEXT: %43 = load i32, ptr %i.addr, align 4 + // CHECK-NEXT: %clzg33 = select i1 %iszero32, i32 %43, i32 %cast31 + // CHECK-NEXT: store volatile i32 %clzg33, ptr %lz, align 4 + lz = __builtin_clzg(vb8, i); } // CHECK-LABEL: define{{.*}} void @test_builtin_ctzg void test_builtin_ctzg(unsigned char uc, unsigned short us, unsigned int ui, unsigned long ul, unsigned long long ull, unsigned __int128 ui128, unsigned _BitInt(128) ubi128, - signed char sc, short s, int i) { + signed char sc, short s, int i, + _Bool __attribute__((ext_vector_type(8))) vb8) { volatile int tz; - tz = __builtin_ctzg(uc); - // CHECK: %1 = load i8, ptr %uc.addr, align 1 - // CHECK-NEXT: %2 = call i8 @llvm.cttz.i8(i8 %1, i1 true) - // CHECK-NEXT: %cast = zext i8 %2 to i32 + // CHECK: %2 = load i8, ptr %uc.addr, align 1 + // CHECK-NEXT: %3 = call i8 @llvm.cttz.i8(i8 %2, i1 true) + // CHECK-NEXT: %cast = zext i8 %3 to i32 // CHECK-NEXT: store volatile i32 %cast, ptr %tz, align 4 + tz = __builtin_ctzg(uc); + // CHECK-NEXT: %4 = load i16, ptr %us.addr, align 2 + // CHECK-NEXT: %5 = call i16 @llvm.cttz.i16(i16 %4, i1 true) + // CHECK-NEXT: %cast2 = zext i16 %5 to i32 + // CHECK-NEXT: store volatile i32 %cast2, ptr %tz, align 4 tz = __builtin_ctzg(us); - // CHECK-NEXT: %3 = load i16, ptr %us.addr, align 2 - // CHECK-NEXT: %4 = call i16 @llvm.cttz.i16(i16 %3, i1 true) - // CHECK-NEXT: %cast1 = zext i16 %4 to i32 - // CHECK-NEXT: store volatile i32 %cast1, ptr %tz, align 4 + // CHECK-NEXT: %6 = load i32, ptr %ui.addr, align 4 + // CHECK-NEXT: %7 = call i32 @llvm.cttz.i32(i32 %6, i1 true) + // CHECK-NEXT: store volatile i32 %7, ptr %tz, align 4 tz = __builtin_ctzg(ui); - // CHECK-NEXT: %5 = load i32, ptr %ui.addr, align 4 - // CHECK-NEXT: %6 = call i32 @llvm.cttz.i32(i32 %5, i1 true) - // CHECK-NEXT: store volatile i32 %6, ptr %tz, align 4 + // CHECK-NEXT: %8 = load i64, ptr %ul.addr, align 8 + // CHECK-NEXT: %9 = call i64 @llvm.cttz.i64(i64 %8, i1 true) + // CHECK-NEXT: %cast3 = trunc i64 %9 to i32 + // CHECK-NEXT: store volatile i32 %cast3, ptr %tz, align 4 tz = __builtin_ctzg(ul); - // CHECK-NEXT: %7 = load i64, ptr %ul.addr, align 8 - // CHECK-NEXT: %8 = call i64 @llvm.cttz.i64(i64 %7, i1 true) - // CHECK-NEXT: %cast2 = trunc i64 %8 to i32 - // CHECK-NEXT: store volatile i32 %cast2, ptr %tz, align 4 + // CHECK-NEXT: %10 = load i64, ptr %ull.addr, align 8 + // CHECK-NEXT: %11 = call i64 @llvm.cttz.i64(i64 %10, i1 true) + // CHECK-NEXT: %cast4 = trunc i64 %11 to i32 + // CHECK-NEXT: store volatile i32 %cast4, ptr %tz, align 4 tz = __builtin_ctzg(ull); - // CHECK-NEXT: %9 = load i64, ptr %ull.addr, align 8 - // CHECK-NEXT: %10 = call i64 @llvm.cttz.i64(i64 %9, i1 true) - // CHECK-NEXT: %cast3 = trunc i64 %10 to i32 - // CHECK-NEXT: store volatile i32 %cast3, ptr %tz, align 4 + // CHECK-NEXT: %12 = load i128, ptr %ui128.addr, align 16 + // CHECK-NEXT: %13 = call i128 @llvm.cttz.i128(i128 %12, i1 true) + // CHECK-NEXT: %cast5 = trunc i128 %13 to i32 + // CHECK-NEXT: store volatile i32 %cast5, ptr %tz, align 4 tz = __builtin_ctzg(ui128); - // CHECK-NEXT: %11 = load i128, ptr %ui128.addr, align 16 - // CHECK-NEXT: %12 = call i128 @llvm.cttz.i128(i128 %11, i1 true) - // CHECK-NEXT: %cast4 = trunc i128 %12 to i32 - // CHECK-NEXT: store volatile i32 %cast4, ptr %tz, align 4 + // CHECK-NEXT: %14 = load i128, ptr %ubi128.addr, align 8 + // CHECK-NEXT: %15 = call i128 @llvm.cttz.i128(i128 %14, i1 true) + // CHECK-NEXT: %cast6 = trunc i128 %15 to i32 + // CHECK-NEXT: store volatile i32 %cast6, ptr %tz, align 4 tz = __builtin_ctzg(ubi128); - // CHECK-NEXT: %13 = load i128, ptr %ubi128.addr, align 8 - // CHECK-NEXT: %14 = call i128 @llvm.cttz.i128(i128 %13, i1 true) - // CHECK-NEXT: %cast5 = trunc i128 %14 to i32 - // CHECK-NEXT: store volatile i32 %cast5, ptr %tz, align 4 - tz = __builtin_ctzg(uc, sc); - // CHECK-NEXT: %15 = load i8, ptr %uc.addr, align 1 - // CHECK-NEXT: %16 = call i8 @llvm.cttz.i8(i8 %15, i1 true) - // CHECK-NEXT: %cast6 = zext i8 %16 to i32 - // CHECK-NEXT: %iszero = icmp eq i8 %15, 0 - // CHECK-NEXT: %17 = load i8, ptr %sc.addr, align 1 - // CHECK-NEXT: %conv = sext i8 %17 to i32 - // CHECK-NEXT: %ctzg = select i1 %iszero, i32 %conv, i32 %cast6 + // CHECK-NEXT: %load_bits7 = load i8, ptr %vb8.addr, align 1 + // CHECK-NEXT: %16 = bitcast i8 %load_bits7 to <8 x i1> + // CHECK-NEXT: %17 = bitcast <8 x i1> %16 to i8 + // CHECK-NEXT: %18 = call i8 @llvm.cttz.i8(i8 %17, i1 true) + // CHECK-NEXT: %cast8 = zext i8 %18 to i32 + // CHECK-NEXT: store volatile i32 %cast8, ptr %tz, align 4 + tz = __builtin_ctzg(vb8); + // CHECK-NEXT: %19 = load i8, ptr %uc.addr, align 1 + // CHECK-NEXT: %20 = call i8 @llvm.cttz.i8(i8 %19, i1 true) + // CHECK-NEXT: %cast9 = zext i8 %20 to i32 + // CHECK-NEXT: %iszero = icmp eq i8 %19, 0 + // CHECK-NEXT: %21 = load i8, ptr %sc.addr, align 1 + // CHECK-NEXT: %conv = sext i8 %21 to i32 + // CHECK-NEXT: %ctzg = select i1 %iszero, i32 %conv, i32 %cast9 // CHECK-NEXT: store volatile i32 %ctzg, ptr %tz, align 4 + tz = __builtin_ctzg(uc, sc); + // CHECK-NEXT: %22 = load i16, ptr %us.addr, align 2 + // CHECK-NEXT: %23 = call i16 @llvm.cttz.i16(i16 %22, i1 true) + // CHECK-NEXT: %cast10 = zext i16 %23 to i32 + // CHECK-NEXT: %iszero11 = icmp eq i16 %22, 0 + // CHECK-NEXT: %24 = load i8, ptr %uc.addr, align 1 + // CHECK-NEXT: %conv12 = zext i8 %24 to i32 + // CHECK-NEXT: %ctzg13 = select i1 %iszero11, i32 %conv12, i32 %cast10 + // CHECK-NEXT: store volatile i32 %ctzg13, ptr %tz, align 4 tz = __builtin_ctzg(us, uc); - // CHECK-NEXT: %18 = load i16, ptr %us.addr, align 2 - // CHECK-NEXT: %19 = call i16 @llvm.cttz.i16(i16 %18, i1 true) - // CHECK-NEXT: %cast7 = zext i16 %19 to i32 - // CHECK-NEXT: %iszero8 = icmp eq i16 %18, 0 - // CHECK-NEXT: %20 = load i8, ptr %uc.addr, align 1 - // CHECK-NEXT: %conv9 = zext i8 %20 to i32 - // CHECK-NEXT: %ctzg10 = select i1 %iszero8, i32 %conv9, i32 %cast7 - // CHECK-NEXT: store volatile i32 %ctzg10, ptr %tz, align 4 + // CHECK-NEXT: %25 = load i32, ptr %ui.addr, align 4 + // CHECK-NEXT: %26 = call i32 @llvm.cttz.i32(i32 %25, i1 true) + // CHECK-NEXT: %iszero14 = icmp eq i32 %25, 0 + // CHECK-NEXT: %27 = load i16, ptr %s.addr, align 2 + // CHECK-NEXT: %conv15 = sext i16 %27 to i32 + // CHECK-NEXT: %ctzg16 = select i1 %iszero14, i32 %conv15, i32 %26 + // CHECK-NEXT: store volatile i32 %ctzg16, ptr %tz, align 4 tz = __builtin_ctzg(ui, s); - // CHECK-NEXT: %21 = load i32, ptr %ui.addr, align 4 - // CHECK-NEXT: %22 = call i32 @llvm.cttz.i32(i32 %21, i1 true) - // CHECK-NEXT: %iszero11 = icmp eq i32 %21, 0 - // CHECK-NEXT: %23 = load i16, ptr %s.addr, align 2 - // CHECK-NEXT: %conv12 = sext i16 %23 to i32 - // CHECK-NEXT: %ctzg13 = select i1 %iszero11, i32 %conv12, i32 %22 - // CHECK-NEXT: store volatile i32 %ctzg13, ptr %tz, align 4 + // CHECK-NEXT: %28 = load i64, ptr %ul.addr, align 8 + // CHECK-NEXT: %29 = call i64 @llvm.cttz.i64(i64 %28, i1 true) + // CHECK-NEXT: %cast17 = trunc i64 %29 to i32 + // CHECK-NEXT: %iszero18 = icmp eq i64 %28, 0 + // CHECK-NEXT: %30 = load i16, ptr %us.addr, align 2 + // CHECK-NEXT: %conv19 = zext i16 %30 to i32 + // CHECK-NEXT: %ctzg20 = select i1 %iszero18, i32 %conv19, i32 %cast17 + // CHECK-NEXT: store volatile i32 %ctzg20, ptr %tz, align 4 tz = __builtin_ctzg(ul, us); - // CHECK-NEXT: %24 = load i64, ptr %ul.addr, align 8 - // CHECK-NEXT: %25 = call i64 @llvm.cttz.i64(i64 %24, i1 true) - // CHECK-NEXT: %cast14 = trunc i64 %25 to i32 - // CHECK-NEXT: %iszero15 = icmp eq i64 %24, 0 - // CHECK-NEXT: %26 = load i16, ptr %us.addr, align 2 - // CHECK-NEXT: %conv16 = zext i16 %26 to i32 - // CHECK-NEXT: %ctzg17 = select i1 %iszero15, i32 %conv16, i32 %cast14 - // CHECK-NEXT: store volatile i32 %ctzg17, ptr %tz, align 4 + // CHECK-NEXT: %31 = load i64, ptr %ull.addr, align 8 + // CHECK-NEXT: %32 = call i64 @llvm.cttz.i64(i64 %31, i1 true) + // CHECK-NEXT: %cast21 = trunc i64 %32 to i32 + // CHECK-NEXT: %iszero22 = icmp eq i64 %31, 0 + // CHECK-NEXT: %33 = load i32, ptr %i.addr, align 4 + // CHECK-NEXT: %ctzg23 = select i1 %iszero22, i32 %33, i32 %cast21 + // CHECK-NEXT: store volatile i32 %ctzg23, ptr %tz, align 4 tz = __builtin_ctzg(ull, i); - // CHECK-NEXT: %27 = load i64, ptr %ull.addr, align 8 - // CHECK-NEXT: %28 = call i64 @llvm.cttz.i64(i64 %27, i1 true) - // CHECK-NEXT: %cast18 = trunc i64 %28 to i32 - // CHECK-NEXT: %iszero19 = icmp eq i64 %27, 0 - // CHECK-NEXT: %29 = load i32, ptr %i.addr, align 4 - // CHECK-NEXT: %ctzg20 = select i1 %iszero19, i32 %29, i32 %cast18 - // CHECK-NEXT: store volatile i32 %ctzg20, ptr %tz, align 4 + // CHECK-NEXT: %34 = load i128, ptr %ui128.addr, align 16 + // CHECK-NEXT: %35 = call i128 @llvm.cttz.i128(i128 %34, i1 true) + // CHECK-NEXT: %cast24 = trunc i128 %35 to i32 + // CHECK-NEXT: %iszero25 = icmp eq i128 %34, 0 + // CHECK-NEXT: %36 = load i32, ptr %i.addr, align 4 + // CHECK-NEXT: %ctzg26 = select i1 %iszero25, i32 %36, i32 %cast24 + // CHECK-NEXT: store volatile i32 %ctzg26, ptr %tz, align 4 tz = __builtin_ctzg(ui128, i); - // CHECK-NEXT: %30 = load i128, ptr %ui128.addr, align 16 - // CHECK-NEXT: %31 = call i128 @llvm.cttz.i128(i128 %30, i1 true) - // CHECK-NEXT: %cast21 = trunc i128 %31 to i32 - // CHECK-NEXT: %iszero22 = icmp eq i128 %30, 0 - // CHECK-NEXT: %32 = load i32, ptr %i.addr, align 4 - // CHECK-NEXT: %ctzg23 = select i1 %iszero22, i32 %32, i32 %cast21 - // CHECK-NEXT: store volatile i32 %ctzg23, ptr %tz, align 4 + // CHECK-NEXT: %37 = load i128, ptr %ubi128.addr, align 8 + // CHECK-NEXT: %38 = call i128 @llvm.cttz.i128(i128 %37, i1 true) + // CHECK-NEXT: %cast27 = trunc i128 %38 to i32 + // CHECK-NEXT: %iszero28 = icmp eq i128 %37, 0 + // CHECK-NEXT: %39 = load i32, ptr %i.addr, align 4 + // CHECK-NEXT: %ctzg29 = select i1 %iszero28, i32 %39, i32 %cast27 + // CHECK-NEXT: store volatile i32 %ctzg29, ptr %tz, align 4 tz = __builtin_ctzg(ubi128, i); - // CHECK-NEXT: %33 = load i128, ptr %ubi128.addr, align 8 - // CHECK-NEXT: %34 = call i128 @llvm.cttz.i128(i128 %33, i1 true) - // CHECK-NEXT: %cast24 = trunc i128 %34 to i32 - // CHECK-NEXT: %iszero25 = icmp eq i128 %33, 0 - // CHECK-NEXT: %35 = load i32, ptr %i.addr, align 4 - // CHECK-NEXT: %ctzg26 = select i1 %iszero25, i32 %35, i32 %cast24 - // CHECK-NEXT: store volatile i32 %ctzg26, ptr %tz, align 4 - // CHECK-NEXT: ret void + // CHECK-NEXT: %load_bits30 = load i8, ptr %vb8.addr, align 1 + // CHECK-NEXT: %40 = bitcast i8 %load_bits30 to <8 x i1> + // CHECK-NEXT: %41 = bitcast <8 x i1> %40 to i8 + // CHECK-NEXT: %42 = call i8 @llvm.cttz.i8(i8 %41, i1 true) + // CHECK-NEXT: %cast31 = zext i8 %42 to i32 + // CHECK-NEXT: %iszero32 = icmp eq i8 %41, 0 + // CHECK-NEXT: %43 = load i32, ptr %i.addr, align 4 + // CHECK-NEXT: %ctzg33 = select i1 %iszero32, i32 %43, i32 %cast31 + // CHECK-NEXT: store volatile i32 %ctzg33, ptr %tz, align 4 + tz = __builtin_ctzg(vb8, i); } #endif diff --git a/clang/test/CodeGen/c-strings.c b/clang/test/CodeGen/c-strings.c index 988deee..31c438f 100644 --- a/clang/test/CodeGen/c-strings.c +++ b/clang/test/CodeGen/c-strings.c @@ -1,4 +1,3 @@ -// XFAIL: target=aarch64-pc-windows-{{.*}} // RUN: %clang_cc1 -triple %itanium_abi_triple -emit-llvm -o - %s | FileCheck %s --check-prefix=CHECK --check-prefix=ITANIUM // RUN: %clang_cc1 -triple %ms_abi_triple -emit-llvm -o - %s | FileCheck %s --check-prefix=CHECK --check-prefix=MSABI @@ -16,6 +15,11 @@ // MSABI: @f4.x = internal global %struct.s { ptr @"??_C@_05CJBACGMB@hello?$AA@" } // CHECK: @x = {{(dso_local )?}}global [3 x i8] c"ola", align [[ALIGN]] +// XFAIL: target=aarch64-{{.*}}-windows-msvc, target=arm64ec-{{.*}}-windows-msvc +// Arm64 in MSVC mode aligns arrays to either 32-bit or 64-bit boundaries, which fails +// various checks above, since ALIGN is derived from the alignment of a single +// i8, which is still 1. + // XFAIL: target=hexagon-{{.*}} // Hexagon aligns arrays of size 8+ bytes to a 64-bit boundary, which // fails the check for "@f3.x = ... align [ALIGN]", since ALIGN is derived diff --git a/clang/test/CodeGen/cfi-check-fail-debuginfo.c b/clang/test/CodeGen/cfi-check-fail-debuginfo.c deleted file mode 100644 index 74ed556..0000000 --- a/clang/test/CodeGen/cfi-check-fail-debuginfo.c +++ /dev/null @@ -1,48 +0,0 @@ -// NOTE: Assertions have been autogenerated by utils/update_cc_test_checks.py UTC_ARGS: --version 5 -// RUN: %clang_cc1 -triple x86_64-unknown-linux -O2 -fsanitize-cfi-cross-dso \ -// RUN: -fsanitize=cfi-icall,cfi-nvcall,cfi-vcall,cfi-unrelated-cast,cfi-derived-cast \ -// RUN: -fsanitize-trap=cfi-icall,cfi-nvcall -fsanitize-recover=cfi-vcall,cfi-unrelated-cast \ -// RUN: -fsanitize-annotate-debug-info=cfi-icall,cfi-nvcall,cfi-vcall,cfi-unrelated-cast,cfi-derived-cast \ -// RUN: -fdebug-prefix-map=%S/= -fno-ident -fdebug-compilation-dir=%S -debug-info-kind=limited \ -// RUN: -emit-llvm -o - %s | FileCheck %s - -// CHECK-LABEL: define dso_local void @caller( -// CHECK-SAME: ptr noundef [[F:%.*]]) local_unnamed_addr #[[ATTR0:[0-9]+]] !dbg [[DBG7:![0-9]+]] !type [[META16:![0-9]+]] !type [[META17:![0-9]+]] !type [[META18:![0-9]+]] { -// CHECK-NEXT: [[ENTRY:.*:]] -// CHECK-NEXT: #dbg_value(ptr [[F]], [[META15:![0-9]+]], !DIExpression(), [[META19:![0-9]+]]) -// CHECK-NEXT: [[TMP0:%.*]] = tail call i1 @llvm.type.test(ptr [[F]], metadata !"_ZTSFvvE"), !dbg [[DBG20:![0-9]+]], !nosanitize [[META24:![0-9]+]] -// CHECK-NEXT: br i1 [[TMP0]], label %[[CFI_CONT:.*]], label %[[CFI_SLOWPATH:.*]], !dbg [[DBG20]], !prof [[PROF25:![0-9]+]], !nosanitize [[META24]] -// CHECK: [[CFI_SLOWPATH]]: -// CHECK-NEXT: tail call void @__cfi_slowpath(i64 9080559750644022485, ptr [[F]]) #[[ATTR6:[0-9]+]], !dbg [[DBG20]], !nosanitize [[META24]] -// CHECK-NEXT: br label %[[CFI_CONT]], !dbg [[DBG20]], !nosanitize [[META24]] -// CHECK: [[CFI_CONT]]: -// CHECK-NEXT: tail call void [[F]]() #[[ATTR6]], !dbg [[DBG23:![0-9]+]] -// CHECK-NEXT: ret void, !dbg [[DBG26:![0-9]+]] -// -void caller(void (*f)(void)) { - f(); -} -//. -// CHECK: [[META0:![0-9]+]] = distinct !DICompileUnit(language: DW_LANG_C11, file: [[META1:![0-9]+]], isOptimized: true, runtimeVersion: 0, emissionKind: FullDebug, splitDebugInlining: false, nameTableKind: None) -// CHECK: [[META1]] = !DIFile(filename: "{{.*}}<stdin>", directory: {{.*}}) -// CHECK: [[DBG7]] = distinct !DISubprogram(name: "caller", scope: [[META8:![0-9]+]], file: [[META8]], line: 22, type: [[META9:![0-9]+]], scopeLine: 22, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: [[META0]], retainedNodes: [[META14:![0-9]+]]) -// CHECK: [[META8]] = !DIFile(filename: "{{.*}}cfi-check-fail-debuginfo.c", directory: {{.*}}) -// CHECK: [[META9]] = !DISubroutineType(types: [[META10:![0-9]+]]) -// CHECK: [[META10]] = !{null, [[META11:![0-9]+]]} -// CHECK: [[META11]] = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: [[META12:![0-9]+]], size: 64) -// CHECK: [[META12]] = !DISubroutineType(types: [[META13:![0-9]+]]) -// CHECK: [[META13]] = !{null} -// CHECK: [[META14]] = !{[[META15]]} -// CHECK: [[META15]] = !DILocalVariable(name: "f", arg: 1, scope: [[DBG7]], file: [[META8]], line: 22, type: [[META11]]) -// CHECK: [[META16]] = !{i64 0, !"_ZTSFvPFvvEE"} -// CHECK: [[META17]] = !{i64 0, !"_ZTSFvPvE.generalized"} -// CHECK: [[META18]] = !{i64 0, i64 2451761621477796417} -// CHECK: [[META19]] = !DILocation(line: 0, scope: [[DBG7]]) -// CHECK: [[DBG20]] = !DILocation(line: 0, scope: [[META21:![0-9]+]], inlinedAt: [[DBG23]]) -// CHECK: [[META21]] = distinct !DISubprogram(name: "__ubsan_check_cfi_icall", scope: [[META8]], file: [[META8]], type: [[META22:![0-9]+]], flags: DIFlagArtificial, spFlags: DISPFlagDefinition, unit: [[META0]]) -// CHECK: [[META22]] = !DISubroutineType(types: null) -// CHECK: [[DBG23]] = !DILocation(line: 23, column: 3, scope: [[DBG7]]) -// CHECK: [[META24]] = !{} -// CHECK: [[PROF25]] = !{!"branch_weights", i32 1048575, i32 1} -// CHECK: [[DBG26]] = !DILocation(line: 24, column: 1, scope: [[DBG7]]) -//. diff --git a/clang/test/CodeGen/cfi-icall-generalize-debuginfo.c b/clang/test/CodeGen/cfi-icall-generalize-debuginfo.c deleted file mode 100644 index 0ffc2b9..0000000 --- a/clang/test/CodeGen/cfi-icall-generalize-debuginfo.c +++ /dev/null @@ -1,136 +0,0 @@ -// NOTE: Assertions have been autogenerated by utils/update_cc_test_checks.py UTC_ARGS: --version 5 -// RUN: %clang_cc1 -triple x86_64-unknown-linux -O2 -fsanitize=cfi-icall -fsanitize-trap=cfi-icall -emit-llvm -o - %s \ -// RUN: -fsanitize-annotate-debug-info=cfi-icall,cfi-nvcall,cfi-vcall,cfi-unrelated-cast,cfi-derived-cast \ -// RUN: -fdebug-prefix-map=%S/= -fno-ident -fdebug-compilation-dir=%S -debug-info-kind=limited \ -// RUN: | FileCheck --check-prefix=CHECK --check-prefix=UNGENERALIZED %s -// -// RUN: %clang_cc1 -triple x86_64-unknown-linux -O2 -fsanitize=cfi-icall -fsanitize-trap=cfi-icall -fsanitize-cfi-icall-generalize-pointers -emit-llvm -o - %s \ -// RUN: -fsanitize-annotate-debug-info=cfi-icall,cfi-nvcall,cfi-vcall,cfi-unrelated-cast,cfi-derived-cast \ -// RUN: -fdebug-prefix-map=%S/= -fno-ident -fdebug-compilation-dir=%S -debug-info-kind=limited \ -// RUN: | FileCheck --check-prefix=CHECK --check-prefix=GENERALIZED %s - -// Test that const char* is generalized to const ptr and that const char** is -// generalized to ptr - -// CHECK-LABEL: define dso_local noalias noundef ptr @f( -// CHECK-SAME: ptr noundef readnone captures(none) [[A:%.*]], ptr noundef readnone captures(none) [[B:%.*]]) local_unnamed_addr #[[ATTR0:[0-9]+]] !dbg [[DBG10:![0-9]+]] !type [[META21:![0-9]+]] !type [[META22:![0-9]+]] { -// CHECK-NEXT: [[ENTRY:.*:]] -// CHECK-NEXT: #dbg_value(ptr [[A]], [[META19:![0-9]+]], !DIExpression(), [[META23:![0-9]+]]) -// CHECK-NEXT: #dbg_value(ptr [[B]], [[META20:![0-9]+]], !DIExpression(), [[META23]]) -// CHECK-NEXT: ret ptr null, !dbg [[DBG24:![0-9]+]] -// -int** f(const char *a, const char **b) { - return (int**)0; -} - -// UNGENERALIZED-LABEL: define dso_local void @g( -// UNGENERALIZED-SAME: ptr noundef [[FP:%.*]]) local_unnamed_addr #[[ATTR1:[0-9]+]] !dbg [[DBG25:![0-9]+]] !type [[META31:![0-9]+]] !type [[META32:![0-9]+]] { -// UNGENERALIZED-NEXT: [[ENTRY:.*:]] -// UNGENERALIZED-NEXT: #dbg_value(ptr [[FP]], [[META30:![0-9]+]], !DIExpression(), [[META33:![0-9]+]]) -// UNGENERALIZED-NEXT: [[TMP0:%.*]] = tail call i1 @llvm.type.test(ptr [[FP]], metadata !"_ZTSFPPiPKcPS2_E"), !dbg [[DBG34:![0-9]+]], !nosanitize [[META38:![0-9]+]] -// UNGENERALIZED-NEXT: br i1 [[TMP0]], label %[[CONT:.*]], label %[[TRAP:.*]], !dbg [[DBG34]], !prof [[PROF39:![0-9]+]], !nosanitize [[META38]] -// UNGENERALIZED: [[TRAP]]: -// UNGENERALIZED-NEXT: tail call void @llvm.ubsantrap(i8 2) #[[ATTR4:[0-9]+]], !dbg [[DBGTRAP:![0-9]+]], !nosanitize [[META38]] -// UNGENERALIZED-NEXT: unreachable, !dbg [[DBGTRAP]], !nosanitize [[META38]] -// UNGENERALIZED: [[CONT]]: -// UNGENERALIZED-NEXT: [[CALL:%.*]] = tail call ptr [[FP]](ptr noundef null, ptr noundef null) #[[ATTR5:[0-9]+]], !dbg [[DBG37:![0-9]+]] -// UNGENERALIZED-NEXT: ret void, !dbg [[DBG42:![0-9]+]] -// -// GENERALIZED-LABEL: define dso_local void @g( -// GENERALIZED-SAME: ptr noundef [[FP:%.*]]) local_unnamed_addr #[[ATTR1:[0-9]+]] !dbg [[DBG25:![0-9]+]] !type [[META31:![0-9]+]] !type [[META32:![0-9]+]] { -// GENERALIZED-NEXT: [[ENTRY:.*:]] -// GENERALIZED-NEXT: #dbg_value(ptr [[FP]], [[META30:![0-9]+]], !DIExpression(), [[META33:![0-9]+]]) -// GENERALIZED-NEXT: [[TMP0:%.*]] = tail call i1 @llvm.type.test(ptr [[FP]], metadata !"_ZTSFPvPKvS_E.generalized"), !dbg [[DBG34:![0-9]+]], !nosanitize [[META38:![0-9]+]] -// GENERALIZED-NEXT: br i1 [[TMP0]], label %[[CONT:.*]], label %[[TRAP:.*]], !dbg [[DBG34]], !prof [[PROF39:![0-9]+]], !nosanitize [[META38]] -// GENERALIZED: [[TRAP]]: -// GENERALIZED-NEXT: tail call void @llvm.ubsantrap(i8 2) #[[ATTR4:[0-9]+]], !dbg [[DBGTRAP:![0-9]+]], !nosanitize [[META38]] -// GENERALIZED-NEXT: unreachable, !dbg [[DBGTRAP]], !nosanitize [[META38]] -// GENERALIZED: [[CONT]]: -// GENERALIZED-NEXT: [[CALL:%.*]] = tail call ptr [[FP]](ptr noundef null, ptr noundef null) #[[ATTR5:[0-9]+]], !dbg [[DBG37:![0-9]+]] -// GENERALIZED-NEXT: ret void, !dbg [[DBG42:![0-9]+]] -// -void g(int** (*fp)(const char *, const char **)) { - fp(0, 0); -} - -//. -// UNGENERALIZED: [[META0:![0-9]+]] = distinct !DICompileUnit(language: DW_LANG_C11, file: [[META1:![0-9]+]], isOptimized: true, runtimeVersion: 0, emissionKind: FullDebug, retainedTypes: [[META2:![0-9]+]], splitDebugInlining: false, nameTableKind: None) -// UNGENERALIZED: [[META1]] = !DIFile(filename: "{{.*}}<stdin>", directory: {{.*}}) -// UNGENERALIZED: [[META2]] = !{[[META3:![0-9]+]]} -// UNGENERALIZED: [[META3]] = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: [[META4:![0-9]+]], size: 64) -// UNGENERALIZED: [[META4]] = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: [[META5:![0-9]+]], size: 64) -// UNGENERALIZED: [[META5]] = !DIBasicType(name: "int", size: 32, encoding: DW_ATE_signed) -// UNGENERALIZED: [[DBG10]] = distinct !DISubprogram(name: "f", scope: [[META11:![0-9]+]], file: [[META11]], line: 22, type: [[META12:![0-9]+]], scopeLine: 22, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: [[META0]], retainedNodes: [[META18:![0-9]+]]) -// UNGENERALIZED: [[META11]] = !DIFile(filename: "{{.*}}cfi-icall-generalize-debuginfo.c", directory: {{.*}}) -// UNGENERALIZED: [[META12]] = !DISubroutineType(types: [[META13:![0-9]+]]) -// UNGENERALIZED: [[META13]] = !{[[META3]], [[META14:![0-9]+]], [[META17:![0-9]+]]} -// UNGENERALIZED: [[META14]] = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: [[META15:![0-9]+]], size: 64) -// UNGENERALIZED: [[META15]] = !DIDerivedType(tag: DW_TAG_const_type, baseType: [[META16:![0-9]+]]) -// UNGENERALIZED: [[META16]] = !DIBasicType(name: "char", size: 8, encoding: DW_ATE_signed_char) -// UNGENERALIZED: [[META17]] = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: [[META14]], size: 64) -// UNGENERALIZED: [[META18]] = !{[[META19]], [[META20]]} -// UNGENERALIZED: [[META19]] = !DILocalVariable(name: "a", arg: 1, scope: [[DBG10]], file: [[META11]], line: 22, type: [[META14]]) -// UNGENERALIZED: [[META20]] = !DILocalVariable(name: "b", arg: 2, scope: [[DBG10]], file: [[META11]], line: 22, type: [[META17]]) -// UNGENERALIZED: [[META21]] = !{i64 0, !"_ZTSFPPiPKcPS2_E"} -// UNGENERALIZED: [[META22]] = !{i64 0, !"_ZTSFPvPKvS_E.generalized"} -// UNGENERALIZED: [[META23]] = !DILocation(line: 0, scope: [[DBG10]]) -// UNGENERALIZED: [[DBG24]] = !DILocation(line: 23, column: 3, scope: [[DBG10]]) -// UNGENERALIZED: [[DBG25]] = distinct !DISubprogram(name: "g", scope: [[META11]], file: [[META11]], line: 52, type: [[META26:![0-9]+]], scopeLine: 52, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: [[META0]], retainedNodes: [[META29:![0-9]+]]) -// UNGENERALIZED: [[META26]] = !DISubroutineType(types: [[META27:![0-9]+]]) -// UNGENERALIZED: [[META27]] = !{null, [[META28:![0-9]+]]} -// UNGENERALIZED: [[META28]] = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: [[META12]], size: 64) -// UNGENERALIZED: [[META29]] = !{[[META30]]} -// UNGENERALIZED: [[META30]] = !DILocalVariable(name: "fp", arg: 1, scope: [[DBG25]], file: [[META11]], line: 52, type: [[META28]]) -// UNGENERALIZED: [[META31]] = !{i64 0, !"_ZTSFvPFPPiPKcPS2_EE"} -// UNGENERALIZED: [[META32]] = !{i64 0, !"_ZTSFvPvE.generalized"} -// UNGENERALIZED: [[META33]] = !DILocation(line: 0, scope: [[DBG25]]) -// UNGENERALIZED: [[DBG34]] = !DILocation(line: 0, scope: [[META35:![0-9]+]], inlinedAt: [[DBG37]]) -// UNGENERALIZED: [[META35]] = distinct !DISubprogram(name: "__ubsan_check_cfi_icall", scope: [[META11]], file: [[META11]], type: [[META36:![0-9]+]], flags: DIFlagArtificial, spFlags: DISPFlagDefinition, unit: [[META0]]) -// UNGENERALIZED: [[META36]] = !DISubroutineType(types: null) -// UNGENERALIZED: [[DBG37]] = !DILocation(line: 53, column: 3, scope: [[DBG25]]) -// UNGENERALIZED: [[META38]] = !{} -// UNGENERALIZED: [[PROF39]] = !{!"branch_weights", i32 1048575, i32 1} -// UNGENERALIZED: [[DBGTRAP]] = !DILocation(line: 0, scope: [[TRAPMSG:![0-9]+]], inlinedAt: [[DBG34]]) -// UNGENERALIZED: [[TRAPMSG]] = distinct !DISubprogram(name: "__clang_trap_msg$Undefined Behavior Sanitizer$Control flow integrity check failed", scope: [[META11]], file: [[META11]], type: [[META36]], flags: DIFlagArtificial, spFlags: DISPFlagDefinition, unit: [[META0]]) -// UNGENERALIZED: [[DBG42]] = !DILocation(line: 54, column: 1, scope: [[DBG25]]) -//. -// GENERALIZED: [[META0:![0-9]+]] = distinct !DICompileUnit(language: DW_LANG_C11, file: [[META1:![0-9]+]], isOptimized: true, runtimeVersion: 0, emissionKind: FullDebug, retainedTypes: [[META2:![0-9]+]], splitDebugInlining: false, nameTableKind: None) -// GENERALIZED: [[META1]] = !DIFile(filename: "{{.*}}<stdin>", directory: {{.*}}) -// GENERALIZED: [[META2]] = !{[[META3:![0-9]+]]} -// GENERALIZED: [[META3]] = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: [[META4:![0-9]+]], size: 64) -// GENERALIZED: [[META4]] = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: [[META5:![0-9]+]], size: 64) -// GENERALIZED: [[META5]] = !DIBasicType(name: "int", size: 32, encoding: DW_ATE_signed) -// GENERALIZED: [[DBG10]] = distinct !DISubprogram(name: "f", scope: [[META11:![0-9]+]], file: [[META11]], line: 22, type: [[META12:![0-9]+]], scopeLine: 22, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: [[META0]], retainedNodes: [[META18:![0-9]+]]) -// GENERALIZED: [[META11]] = !DIFile(filename: "{{.*}}cfi-icall-generalize-debuginfo.c", directory: {{.*}}) -// GENERALIZED: [[META12]] = !DISubroutineType(types: [[META13:![0-9]+]]) -// GENERALIZED: [[META13]] = !{[[META3]], [[META14:![0-9]+]], [[META17:![0-9]+]]} -// GENERALIZED: [[META14]] = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: [[META15:![0-9]+]], size: 64) -// GENERALIZED: [[META15]] = !DIDerivedType(tag: DW_TAG_const_type, baseType: [[META16:![0-9]+]]) -// GENERALIZED: [[META16]] = !DIBasicType(name: "char", size: 8, encoding: DW_ATE_signed_char) -// GENERALIZED: [[META17]] = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: [[META14]], size: 64) -// GENERALIZED: [[META18]] = !{[[META19]], [[META20]]} -// GENERALIZED: [[META19]] = !DILocalVariable(name: "a", arg: 1, scope: [[DBG10]], file: [[META11]], line: 22, type: [[META14]]) -// GENERALIZED: [[META20]] = !DILocalVariable(name: "b", arg: 2, scope: [[DBG10]], file: [[META11]], line: 22, type: [[META17]]) -// GENERALIZED: [[META21]] = !{i64 0, !"_ZTSFPPiPKcPS2_E"} -// GENERALIZED: [[META22]] = !{i64 0, !"_ZTSFPvPKvS_E.generalized"} -// GENERALIZED: [[META23]] = !DILocation(line: 0, scope: [[DBG10]]) -// GENERALIZED: [[DBG24]] = !DILocation(line: 23, column: 3, scope: [[DBG10]]) -// GENERALIZED: [[DBG25]] = distinct !DISubprogram(name: "g", scope: [[META11]], file: [[META11]], line: 52, type: [[META26:![0-9]+]], scopeLine: 52, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: [[META0]], retainedNodes: [[META29:![0-9]+]]) -// GENERALIZED: [[META26]] = !DISubroutineType(types: [[META27:![0-9]+]]) -// GENERALIZED: [[META27]] = !{null, [[META28:![0-9]+]]} -// GENERALIZED: [[META28]] = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: [[META12]], size: 64) -// GENERALIZED: [[META29]] = !{[[META30]]} -// GENERALIZED: [[META30]] = !DILocalVariable(name: "fp", arg: 1, scope: [[DBG25]], file: [[META11]], line: 52, type: [[META28]]) -// GENERALIZED: [[META31]] = !{i64 0, !"_ZTSFvPFPPiPKcPS2_EE"} -// GENERALIZED: [[META32]] = !{i64 0, !"_ZTSFvPvE.generalized"} -// GENERALIZED: [[META33]] = !DILocation(line: 0, scope: [[DBG25]]) -// GENERALIZED: [[DBG34]] = !DILocation(line: 0, scope: [[META35:![0-9]+]], inlinedAt: [[DBG37]]) -// GENERALIZED: [[META35]] = distinct !DISubprogram(name: "__ubsan_check_cfi_icall", scope: [[META11]], file: [[META11]], type: [[META36:![0-9]+]], flags: DIFlagArtificial, spFlags: DISPFlagDefinition, unit: [[META0]]) -// GENERALIZED: [[META36]] = !DISubroutineType(types: null) -// GENERALIZED: [[DBG37]] = !DILocation(line: 53, column: 3, scope: [[DBG25]]) -// GENERALIZED: [[META38]] = !{} -// GENERALIZED: [[PROF39]] = !{!"branch_weights", i32 1048575, i32 1} -// GENERALIZED: [[DBGTRAP]] = !DILocation(line: 0, scope: [[TRAPMSG:![0-9]+]], inlinedAt: [[DBG34]]) -// GENERALIZED: [[TRAPMSG]] = distinct !DISubprogram(name: "__clang_trap_msg$Undefined Behavior Sanitizer$Control flow integrity check failed", scope: [[META11]], file: [[META11]], type: [[META36]], flags: DIFlagArtificial, spFlags: DISPFlagDefinition, unit: [[META0]]) -// GENERALIZED: [[DBG42]] = !DILocation(line: 54, column: 1, scope: [[DBG25]]) -//. diff --git a/clang/test/CodeGen/cfi-icall-generalize.c b/clang/test/CodeGen/cfi-icall-generalize.c index 2011889..0af17e5 100644 --- a/clang/test/CodeGen/cfi-icall-generalize.c +++ b/clang/test/CodeGen/cfi-icall-generalize.c @@ -1,7 +1,7 @@ // RUN: %clang_cc1 -triple x86_64-unknown-linux -fsanitize=cfi-icall -fsanitize-trap=cfi-icall -emit-llvm -o - %s | FileCheck --check-prefix=CHECK --check-prefix=UNGENERALIZED %s // RUN: %clang_cc1 -triple x86_64-unknown-linux -fsanitize=cfi-icall -fsanitize-trap=cfi-icall -fsanitize-cfi-icall-generalize-pointers -emit-llvm -o - %s | FileCheck --check-prefix=CHECK --check-prefix=GENERALIZED %s -// Test that const char* is generalized to const ptr and that const char** is +// Test that const char* is generalized to const ptr and that char** is // generalized to ptr // CHECK: define{{.*}} ptr @f({{.*}} !type [[TYPE:![0-9]+]] !type [[TYPE_GENERALIZED:![0-9]+]] diff --git a/clang/test/CodeGen/cfi-icall-normalize2-debuginfo.c b/clang/test/CodeGen/cfi-icall-normalize2-debuginfo.c deleted file mode 100644 index 258c3bf..0000000 --- a/clang/test/CodeGen/cfi-icall-normalize2-debuginfo.c +++ /dev/null @@ -1,128 +0,0 @@ -// NOTE: Assertions have been autogenerated by utils/update_cc_test_checks.py UTC_ARGS: --version 5 -// RUN: %clang_cc1 -triple x86_64-unknown-linux -O2 -fsanitize=cfi-icall -fsanitize-trap=cfi-icall -fsanitize-cfi-icall-experimental-normalize-integers -emit-llvm -o - %s \ -// RUN: -fsanitize-annotate-debug-info=cfi-icall,cfi-nvcall,cfi-vcall,cfi-unrelated-cast,cfi-derived-cast \ -// RUN: -fdebug-prefix-map=%S/= -fno-ident -fdebug-compilation-dir=%S -debug-info-kind=limited \ -// RUN: | FileCheck %s - -// Test that normalized type metadata for functions are emitted for cross-language CFI support with -// other languages that can't represent and encode C/C++ integer types. - -// CHECK-LABEL: define dso_local void @foo( -// CHECK-SAME: ptr noundef [[FN:%.*]], i32 noundef [[ARG:%.*]]) local_unnamed_addr #[[ATTR0:[0-9]+]] !dbg [[DBG7:![0-9]+]] !type [[META18:![0-9]+]] !type [[META19:![0-9]+]] { -// CHECK-NEXT: [[ENTRY:.*:]] -// CHECK-NEXT: #dbg_value(ptr [[FN]], [[META16:![0-9]+]], !DIExpression(), [[META20:![0-9]+]]) -// CHECK-NEXT: #dbg_value(i32 [[ARG]], [[META17:![0-9]+]], !DIExpression(), [[META20]]) -// CHECK-NEXT: [[TMP0:%.*]] = tail call i1 @llvm.type.test(ptr [[FN]], metadata !"_ZTSFvu3i32E.normalized"), !dbg [[DBG21:![0-9]+]], !nosanitize [[META25:![0-9]+]] -// CHECK-NEXT: br i1 [[TMP0]], label %[[CONT:.*]], label %[[TRAP:.*]], !dbg [[DBG21]], !prof [[PROF26:![0-9]+]], !nosanitize [[META25]] -// CHECK: [[TRAP]]: -// CHECK-NEXT: tail call void @llvm.ubsantrap(i8 2) #[[ATTR3:[0-9]+]], !dbg [[DBGTRAP:![0-9]+]], !nosanitize [[META25]] -// CHECK-NEXT: unreachable, !dbg [[DBGTRAP]], !nosanitize [[META25]] -// CHECK: [[CONT]]: -// CHECK-NEXT: tail call void [[FN]](i32 noundef [[ARG]]) #[[ATTR4:[0-9]+]], !dbg [[DBG24:![0-9]+]] -// CHECK-NEXT: ret void, !dbg [[DBG29:![0-9]+]] -// -void foo(void (*fn)(int), int arg) { - fn(arg); -} - -// CHECK-LABEL: define dso_local void @bar( -// CHECK-SAME: ptr noundef [[FN:%.*]], i32 noundef [[ARG1:%.*]], i32 noundef [[ARG2:%.*]]) local_unnamed_addr #[[ATTR0]] !dbg [[DBG30:![0-9]+]] !type [[META40:![0-9]+]] !type [[META41:![0-9]+]] { -// CHECK-NEXT: [[ENTRY:.*:]] -// CHECK-NEXT: #dbg_value(ptr [[FN]], [[META37:![0-9]+]], !DIExpression(), [[META42:![0-9]+]]) -// CHECK-NEXT: #dbg_value(i32 [[ARG1]], [[META38:![0-9]+]], !DIExpression(), [[META42]]) -// CHECK-NEXT: #dbg_value(i32 [[ARG2]], [[META39:![0-9]+]], !DIExpression(), [[META42]]) -// CHECK-NEXT: [[TMP0:%.*]] = tail call i1 @llvm.type.test(ptr [[FN]], metadata !"_ZTSFvu3i32S_E.normalized"), !dbg [[DBG43:![0-9]+]], !nosanitize [[META25]] -// CHECK-NEXT: br i1 [[TMP0]], label %[[CONT:.*]], label %[[TRAP:.*]], !dbg [[DBG43]], !prof [[PROF26]], !nosanitize [[META25]] -// CHECK: [[TRAP]]: -// CHECK-NEXT: tail call void @llvm.ubsantrap(i8 2) #[[ATTR3]], !dbg [[DBG45:![0-9]+]], !nosanitize [[META25]] -// CHECK-NEXT: unreachable, !dbg [[DBG45]], !nosanitize [[META25]] -// CHECK: [[CONT]]: -// CHECK-NEXT: tail call void [[FN]](i32 noundef [[ARG1]], i32 noundef [[ARG2]]) #[[ATTR4]], !dbg [[DBG44:![0-9]+]] -// CHECK-NEXT: ret void, !dbg [[DBG46:![0-9]+]] -// -void bar(void (*fn)(int, int), int arg1, int arg2) { - fn(arg1, arg2); -} - -// CHECK-LABEL: define dso_local void @baz( -// CHECK-SAME: ptr noundef [[FN:%.*]], i32 noundef [[ARG1:%.*]], i32 noundef [[ARG2:%.*]], i32 noundef [[ARG3:%.*]]) local_unnamed_addr #[[ATTR0]] !dbg [[DBG47:![0-9]+]] !type [[META58:![0-9]+]] !type [[META59:![0-9]+]] { -// CHECK-NEXT: [[ENTRY:.*:]] -// CHECK-NEXT: #dbg_value(ptr [[FN]], [[META54:![0-9]+]], !DIExpression(), [[META60:![0-9]+]]) -// CHECK-NEXT: #dbg_value(i32 [[ARG1]], [[META55:![0-9]+]], !DIExpression(), [[META60]]) -// CHECK-NEXT: #dbg_value(i32 [[ARG2]], [[META56:![0-9]+]], !DIExpression(), [[META60]]) -// CHECK-NEXT: #dbg_value(i32 [[ARG3]], [[META57:![0-9]+]], !DIExpression(), [[META60]]) -// CHECK-NEXT: [[TMP0:%.*]] = tail call i1 @llvm.type.test(ptr [[FN]], metadata !"_ZTSFvu3i32S_S_E.normalized"), !dbg [[DBG61:![0-9]+]], !nosanitize [[META25]] -// CHECK-NEXT: br i1 [[TMP0]], label %[[CONT:.*]], label %[[TRAP:.*]], !dbg [[DBG61]], !prof [[PROF26]], !nosanitize [[META25]] -// CHECK: [[TRAP]]: -// CHECK-NEXT: tail call void @llvm.ubsantrap(i8 2) #[[ATTR3]], !dbg [[DBG63:![0-9]+]], !nosanitize [[META25]] -// CHECK-NEXT: unreachable, !dbg [[DBG63]], !nosanitize [[META25]] -// CHECK: [[CONT]]: -// CHECK-NEXT: tail call void [[FN]](i32 noundef [[ARG1]], i32 noundef [[ARG2]], i32 noundef [[ARG3]]) #[[ATTR4]], !dbg [[DBG62:![0-9]+]] -// CHECK-NEXT: ret void, !dbg [[DBG64:![0-9]+]] -// -void baz(void (*fn)(int, int, int), int arg1, int arg2, int arg3) { - fn(arg1, arg2, arg3); -} - -//. -// CHECK: [[META0:![0-9]+]] = distinct !DICompileUnit(language: DW_LANG_C11, file: [[META1:![0-9]+]], isOptimized: true, runtimeVersion: 0, emissionKind: FullDebug, splitDebugInlining: false, nameTableKind: None) -// CHECK: [[META1]] = !DIFile(filename: "{{.*}}<stdin>", directory: {{.*}}) -// CHECK: [[DBG7]] = distinct !DISubprogram(name: "foo", scope: [[META8:![0-9]+]], file: [[META8]], line: 24, type: [[META9:![0-9]+]], scopeLine: 24, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: [[META0]], retainedNodes: [[META15:![0-9]+]]) -// CHECK: [[META8]] = !DIFile(filename: "{{.*}}cfi-icall-normalize2-debuginfo.c", directory: {{.*}}) -// CHECK: [[META9]] = !DISubroutineType(types: [[META10:![0-9]+]]) -// CHECK: [[META10]] = !{null, [[META11:![0-9]+]], [[META14:![0-9]+]]} -// CHECK: [[META11]] = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: [[META12:![0-9]+]], size: 64) -// CHECK: [[META12]] = !DISubroutineType(types: [[META13:![0-9]+]]) -// CHECK: [[META13]] = !{null, [[META14]]} -// CHECK: [[META14]] = !DIBasicType(name: "int", size: 32, encoding: DW_ATE_signed) -// CHECK: [[META15]] = !{[[META16]], [[META17]]} -// CHECK: [[META16]] = !DILocalVariable(name: "fn", arg: 1, scope: [[DBG7]], file: [[META8]], line: 24, type: [[META11]]) -// CHECK: [[META17]] = !DILocalVariable(name: "arg", arg: 2, scope: [[DBG7]], file: [[META8]], line: 24, type: [[META14]]) -// CHECK: [[META18]] = !{i64 0, !"_ZTSFvPFvu3i32ES_E.normalized"} -// CHECK: [[META19]] = !{i64 0, !"_ZTSFvPvu3i32E.normalized.generalized"} -// CHECK: [[META20]] = !DILocation(line: 0, scope: [[DBG7]]) -// CHECK: [[DBG21]] = !DILocation(line: 0, scope: [[META22:![0-9]+]], inlinedAt: [[DBG24]]) -// CHECK: [[META22]] = distinct !DISubprogram(name: "__ubsan_check_cfi_icall", scope: [[META8]], file: [[META8]], type: [[META23:![0-9]+]], flags: DIFlagArtificial, spFlags: DISPFlagDefinition, unit: [[META0]]) -// CHECK: [[META23]] = !DISubroutineType(types: null) -// CHECK: [[DBG24]] = !DILocation(line: 25, column: 5, scope: [[DBG7]]) -// CHECK: [[META25]] = !{} -// CHECK: [[PROF26]] = !{!"branch_weights", i32 1048575, i32 1} -// CHECK: [[DBGTRAP]] = !DILocation(line: 0, scope: [[TRAPMSG:![0-9]+]], inlinedAt: [[DBG21]]) -// CHECK: [[TRAPMSG]] = distinct !DISubprogram(name: "__clang_trap_msg$Undefined Behavior Sanitizer$Control flow integrity check failed", scope: [[META8]], file: [[META8]], type: [[META23]], flags: DIFlagArtificial, spFlags: DISPFlagDefinition, unit: [[META0]]) -// CHECK: [[DBG29]] = !DILocation(line: 26, column: 1, scope: [[DBG7]]) -// CHECK: [[DBG30]] = distinct !DISubprogram(name: "bar", scope: [[META8]], file: [[META8]], line: 43, type: [[META31:![0-9]+]], scopeLine: 43, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: [[META0]], retainedNodes: [[META36:![0-9]+]]) -// CHECK: [[META31]] = !DISubroutineType(types: [[META32:![0-9]+]]) -// CHECK: [[META32]] = !{null, [[META33:![0-9]+]], [[META14]], [[META14]]} -// CHECK: [[META33]] = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: [[META34:![0-9]+]], size: 64) -// CHECK: [[META34]] = !DISubroutineType(types: [[META35:![0-9]+]]) -// CHECK: [[META35]] = !{null, [[META14]], [[META14]]} -// CHECK: [[META36]] = !{[[META37]], [[META38]], [[META39]]} -// CHECK: [[META37]] = !DILocalVariable(name: "fn", arg: 1, scope: [[DBG30]], file: [[META8]], line: 43, type: [[META33]]) -// CHECK: [[META38]] = !DILocalVariable(name: "arg1", arg: 2, scope: [[DBG30]], file: [[META8]], line: 43, type: [[META14]]) -// CHECK: [[META39]] = !DILocalVariable(name: "arg2", arg: 3, scope: [[DBG30]], file: [[META8]], line: 43, type: [[META14]]) -// CHECK: [[META40]] = !{i64 0, !"_ZTSFvPFvu3i32S_ES_S_E.normalized"} -// CHECK: [[META41]] = !{i64 0, !"_ZTSFvPvu3i32S0_E.normalized.generalized"} -// CHECK: [[META42]] = !DILocation(line: 0, scope: [[DBG30]]) -// CHECK: [[DBG43]] = !DILocation(line: 0, scope: [[META22]], inlinedAt: [[DBG44]]) -// CHECK: [[DBG44]] = !DILocation(line: 44, column: 5, scope: [[DBG30]]) -// CHECK: [[DBG45]] = !DILocation(line: 0, scope: [[TRAPMSG]], inlinedAt: [[DBG43]]) -// CHECK: [[DBG46]] = !DILocation(line: 45, column: 1, scope: [[DBG30]]) -// CHECK: [[DBG47]] = distinct !DISubprogram(name: "baz", scope: [[META8]], file: [[META8]], line: 63, type: [[META48:![0-9]+]], scopeLine: 63, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: [[META0]], retainedNodes: [[META53:![0-9]+]]) -// CHECK: [[META48]] = !DISubroutineType(types: [[META49:![0-9]+]]) -// CHECK: [[META49]] = !{null, [[META50:![0-9]+]], [[META14]], [[META14]], [[META14]]} -// CHECK: [[META50]] = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: [[META51:![0-9]+]], size: 64) -// CHECK: [[META51]] = !DISubroutineType(types: [[META52:![0-9]+]]) -// CHECK: [[META52]] = !{null, [[META14]], [[META14]], [[META14]]} -// CHECK: [[META53]] = !{[[META54]], [[META55]], [[META56]], [[META57]]} -// CHECK: [[META54]] = !DILocalVariable(name: "fn", arg: 1, scope: [[DBG47]], file: [[META8]], line: 63, type: [[META50]]) -// CHECK: [[META55]] = !DILocalVariable(name: "arg1", arg: 2, scope: [[DBG47]], file: [[META8]], line: 63, type: [[META14]]) -// CHECK: [[META56]] = !DILocalVariable(name: "arg2", arg: 3, scope: [[DBG47]], file: [[META8]], line: 63, type: [[META14]]) -// CHECK: [[META57]] = !DILocalVariable(name: "arg3", arg: 4, scope: [[DBG47]], file: [[META8]], line: 63, type: [[META14]]) -// CHECK: [[META58]] = !{i64 0, !"_ZTSFvPFvu3i32S_S_ES_S_S_E.normalized"} -// CHECK: [[META59]] = !{i64 0, !"_ZTSFvPvu3i32S0_S0_E.normalized.generalized"} -// CHECK: [[META60]] = !DILocation(line: 0, scope: [[DBG47]]) -// CHECK: [[DBG61]] = !DILocation(line: 0, scope: [[META22]], inlinedAt: [[DBG62]]) -// CHECK: [[DBG62]] = !DILocation(line: 64, column: 5, scope: [[DBG47]]) -// CHECK: [[DBG63]] = !DILocation(line: 0, scope: [[TRAPMSG]], inlinedAt: [[DBG61]]) -// CHECK: [[DBG64]] = !DILocation(line: 65, column: 1, scope: [[DBG47]]) -//. diff --git a/clang/test/CodeGen/cfi-salt.c b/clang/test/CodeGen/cfi-salt.c new file mode 100644 index 0000000..7ba1e2f --- /dev/null +++ b/clang/test/CodeGen/cfi-salt.c @@ -0,0 +1,188 @@ +// RUN: %clang_cc1 -triple x86_64-unknown-linux-gnu -emit-llvm -fsanitize=kcfi -DORIG_ATTR_SYN -o - %s | FileCheck %s +// RUN: %clang_cc1 -triple x86_64-unknown-linux-gnu -emit-llvm -fsanitize=kcfi -o - %s | FileCheck %s +// RUN: %clang_cc1 -triple x86_64-unknown-linux-gnu -emit-llvm -fsanitize=kcfi -fpatchable-function-entry-offset=3 -DORIG_ATTR_SYN -o - %s | FileCheck %s --check-prefixes=CHECK,OFFSET +// RUN: %clang_cc1 -triple x86_64-unknown-linux-gnu -emit-llvm -fsanitize=kcfi -fpatchable-function-entry-offset=3 -o - %s | FileCheck %s --check-prefixes=CHECK,OFFSET + +// Note that the interleving of functions, which normally would be in sequence, +// is due to the fact that Clang outputs them in a non-sequential order. + +#if !__has_feature(kcfi) +#error Missing kcfi? +#endif + +#ifdef ORIG_ATTR_SYN +#define __cfi_salt __attribute__((cfi_salt("pepper"))) +#define __cfi_salt_empty __attribute__((cfi_salt(""))) +#else +#define __cfi_salt [[clang::cfi_salt("pepper")]] +#define __cfi_salt_empty [[clang::cfi_salt("")]] +#endif + +typedef int (*fn_t)(void); +typedef int (* __cfi_salt fn_salt_t)(void); +typedef int (* __cfi_salt_empty fn_salt_empty_t)(void); + +typedef unsigned int (*ufn_t)(void); +typedef unsigned int (* __cfi_salt ufn_salt_t)(void); + +/// Must emit __kcfi_typeid symbols for address-taken function declarations +// CHECK: module asm ".weak __kcfi_typeid_[[F4:[a-zA-Z0-9_]+]]" +// CHECK: module asm ".set __kcfi_typeid_[[F4]], [[#%d,LOW_SODIUM_HASH:]]" +// CHECK: module asm ".weak __kcfi_typeid_[[F4_SALT:[a-zA-Z0-9_]+]]" +// CHECK: module asm ".set __kcfi_typeid_[[F4_SALT]], [[#%d,ASM_SALTY_HASH:]]" + +/// Must not __kcfi_typeid symbols for non-address-taken declarations +// CHECK-NOT: module asm ".weak __kcfi_typeid_f6" + +int f1(void); +int f1_salt(void) __cfi_salt; + +unsigned int f2(void); +unsigned int f2_salt(void) __cfi_salt; + +static int f3(void); +static int f3_salt(void) __cfi_salt; + +extern int f4(void); +extern int f4_salt(void) __cfi_salt; + +static int f5(void); +static int f5_salt(void) __cfi_salt; + +extern int f6(void); +extern int f6_salt(void) __cfi_salt; + +int f8(void); +int f8_salt_empty(void) __cfi_salt_empty; + +struct cfi_struct { + fn_t __cfi_salt fptr; + fn_salt_t td_fptr; + fn_salt_empty_t td_empty_fptr; +}; + +int f7_salt(struct cfi_struct *ptr); +int f7_typedef_salt(struct cfi_struct *ptr); + +// CHECK-LABEL: @__call +// CHECK: call{{.*}} i32 +// CHECK-NOT: "kcfi" +// CHECK-SAME: () +__attribute__((__no_sanitize__("kcfi"))) +int __call(fn_t f) { + return f(); +} + +// CHECK-LABEL: @call +// CHECK: call{{.*}} i32 %{{.}}(){{.*}} [ "kcfi"(i32 [[#LOW_SODIUM_HASH]]) ] +// CHECK-LABEL: @call_salt +// CHECK: call{{.*}} i32 %{{.}}(){{.*}} [ "kcfi"(i32 [[#%d,SALTY_HASH:]]) ] +// CHECK-LABEL: @call_salt_ty +// CHECK: call{{.*}} i32 %{{.}}(){{.*}} [ "kcfi"(i32 [[#SALTY_HASH]]) ] +int call(fn_t f) { return f(); } +int call_salt(fn_t __cfi_salt f) { return f(); } +int call_salt_ty(fn_salt_t f) { return f(); } +int call_salt_empty_ty(fn_salt_empty_t f) { return f(); } + +// CHECK-LABEL: @ucall +// CHECK: call{{.*}} i32 %{{.}}(){{.*}} [ "kcfi"(i32 [[#%d,LOW_SODIUM_UHASH:]]) ] +// CHECK-LABEL: @ucall_salt +// CHECK: call{{.*}} i32 %{{.}}(){{.*}} [ "kcfi"(i32 [[#%d,SALTY_UHASH:]]) ] +// CHECK-LABEL: @ucall_salt_ty +// CHECK: call{{.*}} i32 %{{.}}(){{.*}} [ "kcfi"(i32 [[#SALTY_UHASH]]) ] +unsigned int ucall(ufn_t f) { return f(); } +unsigned int ucall_salt(ufn_t __cfi_salt f) { return f(); } +unsigned int ucall_salt_ty(ufn_salt_t f) { return f(); } + +int test1(struct cfi_struct *ptr) { + return call(f1) + + call_salt(f1_salt) + + call_salt_ty(f1_salt) + + + __call((fn_t)f2) + + __call((fn_t)f2_salt) + + + ucall(f2) + + ucall_salt(f2_salt) + + ucall_salt_ty(f2_salt) + + + call(f3) + + call_salt(f3_salt) + + call_salt_ty(f3_salt) + + + call(f4) + + call_salt(f4_salt) + + call_salt_ty(f4_salt) + + + f5() + + f5_salt() + + + f6() + + f6_salt() + + + f7_salt(ptr) + + f7_typedef_salt(ptr) + + + f8() + + f8_salt_empty(); +} + +// CHECK-LABEL: define dso_local{{.*}} i32 @f1(){{.*}} !kcfi_type +// CHECK-SAME: ![[#LOW_SODIUM_TYPE:]] +// CHECK-LABEL: define dso_local{{.*}} i32 @f1_salt(){{.*}} !kcfi_type +// CHECK-SAME: ![[#SALTY_TYPE:]] +int f1(void) { return 0; } +int f1_salt(void) __cfi_salt { return 0; } + +// CHECK-LABEL: define dso_local{{.*}} i32 @f2(){{.*}} !kcfi_type +// CHECK-SAME: ![[#LOW_SODIUM_UTYPE:]] +// CHECK: define dso_local{{.*}} i32 @f2_salt(){{.*}} !kcfi_type +// CHECK-SAME: ![[#SALTY_UTYPE:]] +unsigned int f2(void) { return 2; } +unsigned int f2_salt(void) __cfi_salt { return 2; } + +// CHECK-LABEL: define internal{{.*}} i32 @f3(){{.*}} !kcfi_type +// CHECK-SAME: ![[#LOW_SODIUM_TYPE]] +// CHECK-LABEL: define internal{{.*}} i32 @f3_salt(){{.*}} !kcfi_type +// CHECK-SAME: ![[#SALTY_TYPE]] +static int f3(void) { return 1; } +static int f3_salt(void) __cfi_salt { return 1; } + +// CHECK: declare !kcfi_type ![[#LOW_SODIUM_TYPE]]{{.*}} i32 @[[F4]]() +// CHECK: declare !kcfi_type ![[#SALTY_TYPE]]{{.*}} i32 @[[F4_SALT]]() + +/// Must not emit !kcfi_type for non-address-taken local functions +// CHECK-LABEL: define internal{{.*}} i32 @f5() +// CHECK-NOT: !kcfi_type +// CHECK-SAME: { +// CHECK-LABEL: define internal{{.*}} i32 @f5_salt() +// CHECK-NOT: !kcfi_type +// CHECK-SAME: { +static int f5(void) { return 2; } +static int f5_salt(void) __cfi_salt { return 2; } + +// CHECK: declare !kcfi_type ![[#LOW_SODIUM_TYPE]]{{.*}} i32 @f6() +// CHECK: declare !kcfi_type ![[#SALTY_TYPE]]{{.*}} i32 @f6_salt() + +// CHECK-LABEL: @f7_salt +// CHECK: call{{.*}} i32 %{{.*}}() [ "kcfi"(i32 [[#SALTY_HASH]]) ] +// CHECK-LABEL: @f7_typedef_salt +// CHECK: call{{.*}} i32 %{{.*}}() [ "kcfi"(i32 [[#SALTY_HASH]]) ] +int f7_salt(struct cfi_struct *ptr) { return ptr->fptr(); } +int f7_typedef_salt(struct cfi_struct *ptr) { return ptr->td_fptr(); } + +// CHECK-LABEL: define dso_local{{.*}} i32 @f8(){{.*}} !kcfi_type +// CHECK-SAME: ![[#LOW_SODIUM_TYPE:]] +// CHECK-LABEL: define dso_local{{.*}} i32 @f8_salt_empty(){{.*}} !kcfi_type +// CHECK-SAME: ![[#LOW_SODIUM_TYPE:]] +int f8(void) { return 0; } +int f8_salt_empty(void) __cfi_salt_empty { return 0; } + +// CHECK: ![[#]] = !{i32 4, !"kcfi", i32 1} +// OFFSET: ![[#]] = !{i32 4, !"kcfi-offset", i32 3} +// +// CHECK: ![[#LOW_SODIUM_TYPE]] = !{i32 [[#LOW_SODIUM_HASH]]} +// CHECK: ![[#SALTY_TYPE]] = !{i32 [[#SALTY_HASH]]} +// +// CHECK: ![[#LOW_SODIUM_UTYPE]] = !{i32 [[#LOW_SODIUM_UHASH]]} +// CHECK: ![[#SALTY_UTYPE]] = !{i32 [[#SALTY_UHASH]]} diff --git a/clang/test/CodeGen/cleanup-destslot-simple.c b/clang/test/CodeGen/cleanup-destslot-simple.c index a02841a..8ace332 100644 --- a/clang/test/CodeGen/cleanup-destslot-simple.c +++ b/clang/test/CodeGen/cleanup-destslot-simple.c @@ -13,14 +13,14 @@ // CHECK-LIFETIME-NEXT: entry: // CHECK-LIFETIME-NEXT: [[X:%.*]] = alloca i32, align 4 // CHECK-LIFETIME-NEXT: [[P:%.*]] = alloca ptr, align 8 -// CHECK-LIFETIME-NEXT: call void @llvm.lifetime.start.p0(i64 4, ptr nonnull [[X]]) #[[ATTR2:[0-9]+]], !dbg [[DBG9:![0-9]+]] +// CHECK-LIFETIME-NEXT: call void @llvm.lifetime.start.p0(ptr nonnull [[X]]) #[[ATTR2:[0-9]+]], !dbg [[DBG9:![0-9]+]] // CHECK-LIFETIME-NEXT: store i32 3, ptr [[X]], align 4, !dbg [[DBG10:![0-9]+]], !tbaa [[TBAA11:![0-9]+]] -// CHECK-LIFETIME-NEXT: call void @llvm.lifetime.start.p0(i64 8, ptr nonnull [[P]]), !dbg [[DBG15:![0-9]+]] +// CHECK-LIFETIME-NEXT: call void @llvm.lifetime.start.p0(ptr nonnull [[P]]), !dbg [[DBG15:![0-9]+]] // CHECK-LIFETIME-NEXT: store volatile ptr [[X]], ptr [[P]], align 8, !dbg [[DBG16:![0-9]+]], !tbaa [[TBAA17:![0-9]+]] // CHECK-LIFETIME-NEXT: [[P_0_P_0_P_0_P_0_:%.*]] = load volatile ptr, ptr [[P]], align 8, !dbg [[DBG19:![0-9]+]], !tbaa [[TBAA17]] // CHECK-LIFETIME-NEXT: [[TMP0:%.*]] = load i32, ptr [[P_0_P_0_P_0_P_0_]], align 4, !dbg [[DBG20:![0-9]+]], !tbaa [[TBAA11]] -// CHECK-LIFETIME-NEXT: call void @llvm.lifetime.end.p0(i64 8, ptr nonnull [[P]]), !dbg [[DBG21:![0-9]+]] -// CHECK-LIFETIME-NEXT: call void @llvm.lifetime.end.p0(i64 4, ptr nonnull [[X]]) #[[ATTR2]], !dbg [[DBG21]] +// CHECK-LIFETIME-NEXT: call void @llvm.lifetime.end.p0(ptr nonnull [[P]]), !dbg [[DBG21:![0-9]+]] +// CHECK-LIFETIME-NEXT: call void @llvm.lifetime.end.p0(ptr nonnull [[X]]) #[[ATTR2]], !dbg [[DBG21]] // CHECK-LIFETIME-NEXT: ret i32 [[TMP0]], !dbg [[DBG22:![0-9]+]] // // CHECK-OPTNONE-LABEL: @test( @@ -37,13 +37,13 @@ // CHECK-MSAN-NEXT: entry: // CHECK-MSAN-NEXT: [[X:%.*]] = alloca i32, align 4 // CHECK-MSAN-NEXT: [[P:%.*]] = alloca ptr, align 8 -// CHECK-MSAN-NEXT: call void @llvm.lifetime.start.p0(i64 4, ptr nonnull [[X]]) #[[ATTR2:[0-9]+]], !dbg [[DBG9:![0-9]+]] +// CHECK-MSAN-NEXT: call void @llvm.lifetime.start.p0(ptr nonnull [[X]]) #[[ATTR2:[0-9]+]], !dbg [[DBG9:![0-9]+]] // CHECK-MSAN-NEXT: [[TMP0:%.*]] = ptrtoint ptr [[X]] to i64, !dbg [[DBG9]] // CHECK-MSAN-NEXT: [[TMP1:%.*]] = xor i64 [[TMP0]], 87960930222080, !dbg [[DBG9]] // CHECK-MSAN-NEXT: [[TMP2:%.*]] = inttoptr i64 [[TMP1]] to ptr, !dbg [[DBG9]] // CHECK-MSAN-NEXT: store i32 0, ptr [[TMP2]], align 4, !dbg [[DBG10:![0-9]+]] // CHECK-MSAN-NEXT: store i32 3, ptr [[X]], align 4, !dbg [[DBG10]], !tbaa [[TBAA11:![0-9]+]] -// CHECK-MSAN-NEXT: call void @llvm.lifetime.start.p0(i64 8, ptr nonnull [[P]]), !dbg [[DBG15:![0-9]+]] +// CHECK-MSAN-NEXT: call void @llvm.lifetime.start.p0(ptr nonnull [[P]]), !dbg [[DBG15:![0-9]+]] // CHECK-MSAN-NEXT: [[TMP3:%.*]] = ptrtoint ptr [[P]] to i64, !dbg [[DBG15]] // CHECK-MSAN-NEXT: [[TMP4:%.*]] = xor i64 [[TMP3]], 87960930222080, !dbg [[DBG15]] // CHECK-MSAN-NEXT: [[TMP5:%.*]] = inttoptr i64 [[TMP4]] to ptr, !dbg [[DBG15]] @@ -62,8 +62,8 @@ // CHECK-MSAN-NEXT: [[TMP10:%.*]] = xor i64 [[TMP9]], 87960930222080, !dbg [[DBG20]] // CHECK-MSAN-NEXT: [[TMP11:%.*]] = inttoptr i64 [[TMP10]] to ptr, !dbg [[DBG20]] // CHECK-MSAN-NEXT: [[_MSLD1:%.*]] = load i32, ptr [[TMP11]], align 4, !dbg [[DBG20]] -// CHECK-MSAN-NEXT: call void @llvm.lifetime.end.p0(i64 8, ptr nonnull [[P]]), !dbg [[DBG22:![0-9]+]] -// CHECK-MSAN-NEXT: call void @llvm.lifetime.end.p0(i64 4, ptr nonnull [[X]]) #[[ATTR2]], !dbg [[DBG22]] +// CHECK-MSAN-NEXT: call void @llvm.lifetime.end.p0(ptr nonnull [[P]]), !dbg [[DBG22:![0-9]+]] +// CHECK-MSAN-NEXT: call void @llvm.lifetime.end.p0(ptr nonnull [[X]]) #[[ATTR2]], !dbg [[DBG22]] // CHECK-MSAN-NEXT: [[_MSCMP2_NOT:%.*]] = icmp eq i32 [[_MSLD1]], 0, !dbg [[DBG23:![0-9]+]] // CHECK-MSAN-NEXT: br i1 [[_MSCMP2_NOT]], label [[TMP13:%.*]], label [[TMP12:%.*]], !dbg [[DBG23]], !prof [[PROF21]] // CHECK-MSAN: 12: @@ -77,13 +77,13 @@ // CHECK-KMSAN-NEXT: [[TMP0:%.*]] = call ptr @__msan_get_context_state() #[[ATTR2:[0-9]+]] // CHECK-KMSAN-NEXT: [[X:%.*]] = alloca i32, align 4 // CHECK-KMSAN-NEXT: [[P:%.*]] = alloca ptr, align 8 -// CHECK-KMSAN-NEXT: call void @llvm.lifetime.start.p0(i64 4, ptr nonnull [[X]]) #[[ATTR2]], !dbg [[DBG9:![0-9]+]] +// CHECK-KMSAN-NEXT: call void @llvm.lifetime.start.p0(ptr nonnull [[X]]) #[[ATTR2]], !dbg [[DBG9:![0-9]+]] // CHECK-KMSAN-NEXT: call void @__msan_poison_alloca(ptr nonnull [[X]], i64 4, ptr nonnull @[[GLOB0:[0-9]+]]) #[[ATTR2]], !dbg [[DBG9]] // CHECK-KMSAN-NEXT: [[TMP1:%.*]] = call { ptr, ptr } @__msan_metadata_ptr_for_store_4(ptr nonnull [[X]]) #[[ATTR2]], !dbg [[DBG10:![0-9]+]] // CHECK-KMSAN-NEXT: [[TMP2:%.*]] = extractvalue { ptr, ptr } [[TMP1]], 0, !dbg [[DBG10]] // CHECK-KMSAN-NEXT: store i32 0, ptr [[TMP2]], align 4, !dbg [[DBG10]] // CHECK-KMSAN-NEXT: store i32 3, ptr [[X]], align 4, !dbg [[DBG10]], !tbaa [[TBAA11:![0-9]+]] -// CHECK-KMSAN-NEXT: call void @llvm.lifetime.start.p0(i64 8, ptr nonnull [[P]]), !dbg [[DBG15:![0-9]+]] +// CHECK-KMSAN-NEXT: call void @llvm.lifetime.start.p0(ptr nonnull [[P]]), !dbg [[DBG15:![0-9]+]] // CHECK-KMSAN-NEXT: call void @__msan_poison_alloca(ptr nonnull [[P]], i64 8, ptr nonnull @[[GLOB1:[0-9]+]]) #[[ATTR2]], !dbg [[DBG15]] // CHECK-KMSAN-NEXT: [[TMP3:%.*]] = call { ptr, ptr } @__msan_metadata_ptr_for_store_8(ptr nonnull [[P]]) #[[ATTR2]], !dbg [[DBG16:![0-9]+]] // CHECK-KMSAN-NEXT: [[TMP4:%.*]] = extractvalue { ptr, ptr } [[TMP3]], 0, !dbg [[DBG16]] @@ -109,8 +109,8 @@ // CHECK-KMSAN-NEXT: [[TMP14:%.*]] = extractvalue { ptr, ptr } [[TMP12]], 1, !dbg [[DBG20]] // CHECK-KMSAN-NEXT: [[_MSLD1:%.*]] = load i32, ptr [[TMP13]], align 4, !dbg [[DBG20]] // CHECK-KMSAN-NEXT: [[TMP15:%.*]] = load i32, ptr [[TMP14]], align 4, !dbg [[DBG20]] -// CHECK-KMSAN-NEXT: call void @llvm.lifetime.end.p0(i64 8, ptr nonnull [[P]]), !dbg [[DBG22:![0-9]+]] -// CHECK-KMSAN-NEXT: call void @llvm.lifetime.end.p0(i64 4, ptr nonnull [[X]]) #[[ATTR2]], !dbg [[DBG22]] +// CHECK-KMSAN-NEXT: call void @llvm.lifetime.end.p0(ptr nonnull [[P]]), !dbg [[DBG22:![0-9]+]] +// CHECK-KMSAN-NEXT: call void @llvm.lifetime.end.p0(ptr nonnull [[X]]) #[[ATTR2]], !dbg [[DBG22]] // CHECK-KMSAN-NEXT: store i32 [[_MSLD1]], ptr [[RETVAL_SHADOW]], align 8, !dbg [[DBG23:![0-9]+]] // CHECK-KMSAN-NEXT: store i32 [[TMP15]], ptr [[RETVAL_ORIGIN]], align 4, !dbg [[DBG23]] // CHECK-KMSAN-NEXT: ret i32 [[TMP11]], !dbg [[DBG23]] diff --git a/clang/test/CodeGen/dbg-const-int128.c b/clang/test/CodeGen/dbg-const-int128.c deleted file mode 100644 index 7f8aaef..0000000 --- a/clang/test/CodeGen/dbg-const-int128.c +++ /dev/null @@ -1,9 +0,0 @@ -// RUN: %clang_cc1 -triple x86_64-unknown-linux -emit-llvm -debug-info-kind=limited %s -o - | FileCheck %s -// RUN: %clang_cc1 -triple powerpc64-ibm-aix-xcoff -emit-llvm -debug-info-kind=limited %s -o - | FileCheck %s -// CHECK: !DIGlobalVariable({{.*}} -// CHECK-NOT: expr: - -static const __uint128_t ro = 18446744073709551615; - -void bar(__uint128_t); -void foo(void) { bar(ro); } diff --git a/clang/test/CodeGen/dbg-info-all-calls-described.c b/clang/test/CodeGen/dbg-info-all-calls-described.c deleted file mode 100644 index 3ca3aaa..0000000 --- a/clang/test/CodeGen/dbg-info-all-calls-described.c +++ /dev/null @@ -1,88 +0,0 @@ -// Test that call site debug info is (un)supported in various configurations. - -// Supported: DWARF5, -O1, standalone DI -// RUN: %clang_cc1 -emit-llvm -triple %itanium_abi_triple %s -o - \ -// RUN: -O1 -disable-llvm-passes \ -// RUN: -debug-info-kind=standalone -dwarf-version=5 \ -// RUN: | FileCheck %s -check-prefix=HAS-ATTR \ -// RUN: -implicit-check-not=DISubprogram -implicit-check-not=DIFlagAllCallsDescribed - -// Supported: DWARF4 + LLDB tuning, -O1, limited DI -// RUN: %clang_cc1 -emit-llvm -triple %itanium_abi_triple %s -o - \ -// RUN: -O1 -disable-llvm-passes \ -// RUN: -debugger-tuning=lldb \ -// RUN: -debug-info-kind=standalone -dwarf-version=4 \ -// RUN: | FileCheck %s -check-prefix=HAS-ATTR \ -// RUN: -implicit-check-not=DISubprogram -implicit-check-not=DIFlagAllCallsDescribed - -// Note: DIFlagAllCallsDescribed may have been enabled prematurely when tuning -// for GDB under -gdwarf-4 in https://reviews.llvm.org/D69743. It's possible -// this should have been 'Unsupported' until entry values emission was enabled -// by default. -// -// Supported: DWARF4 + GDB tuning -// RUN: %clang_cc1 -emit-llvm -triple x86_64-linux-gnu \ -// RUN: %s -o - -O1 -disable-llvm-passes -debugger-tuning=gdb \ -// RUN: -debug-info-kind=standalone -dwarf-version=4 \ -// RUN: | FileCheck %s -check-prefix=HAS-ATTR \ -// RUN: -implicit-check-not=DIFlagAllCallsDescribed - -// Supported: DWARF4 + LLDB, -O1 -// RUN: %clang_cc1 -emit-llvm -triple x86_64-linux-gnu \ -// RUN: %s -o - -O1 -disable-llvm-passes -debugger-tuning=lldb \ -// RUN: -debug-info-kind=standalone -dwarf-version=4 \ -// RUN: | FileCheck %s -check-prefix=HAS-ATTR \ -// RUN: -implicit-check-not=DIFlagAllCallsDescribed - -// Unsupported: -O0 -// RUN: %clang_cc1 -emit-llvm -triple x86_64-linux-gnu \ -// RUN: %s -o - -O0 -disable-llvm-passes -debugger-tuning=gdb \ -// RUN: -debug-info-kind=standalone -dwarf-version=4 \ -// RUN: | FileCheck %s -check-prefix=NO-ATTR - -// Supported: DWARF4 + LLDB tuning, -O1, line-tables only DI -// RUN: %clang_cc1 -emit-llvm -triple %itanium_abi_triple %s -o - \ -// RUN: -O1 -disable-llvm-passes \ -// RUN: -debugger-tuning=lldb \ -// RUN: -debug-info-kind=line-tables-only -dwarf-version=4 \ -// RUN: | FileCheck %s -check-prefix=LINE-TABLES-ONLY - -// Unsupported: -O0 -// RUN: %clang_cc1 -emit-llvm -triple %itanium_abi_triple %s -o - \ -// RUN: -O0 \ -// RUN: -debug-info-kind=standalone -dwarf-version=5 \ -// RUN: | FileCheck %s -check-prefix=NO-ATTR - -// Unsupported: DWARF4 -// RUN: %clang_cc1 -emit-llvm -triple %itanium_abi_triple %s -o - \ -// RUN: -O1 -disable-llvm-passes \ -// RUN: -debug-info-kind=standalone -dwarf-version=4 \ -// RUN: | FileCheck %s -check-prefix=NO-ATTR - -// NO-ATTR-NOT: FlagAllCallsDescribed - -// HAS-ATTR-DAG: DISubprogram(name: "declaration1", {{.*}}, spFlags: DISPFlagOptimized) -// HAS-ATTR-DAG: DISubprogram(name: "declaration2", {{.*}}, flags: DIFlagAllCallsDescribed, spFlags: DISPFlagDefinition | DISPFlagOptimized -// HAS-ATTR-DAG: DISubprogram(name: "declaration3", {{.*}}, flags: DIFlagPrototyped, spFlags: DISPFlagOptimized) -// HAS-ATTR-DAG: DISubprogram(name: "declaration4", {{.*}}, flags: DIFlagPrototyped | DIFlagAllCallsDescribed, spFlags: DISPFlagDefinition | DISPFlagOptimized - -// HAS-ATTR-DAG: DISubprogram(name: "force_irgen", {{.*}}, flags: DIFlagPrototyped | DIFlagAllCallsDescribed, spFlags: DISPFlagDefinition - -// LINE-TABLES-ONLY: DISubprogram(name: "force_irgen", {{.*}}, flags: DIFlagPrototyped | DIFlagAllCallsDescribed, spFlags: DISPFlagDefinition - -void declaration1(); - -void declaration2(); - -void declaration2() {} - -void declaration3(void); - -void declaration4(void); - -void declaration4(void) {} - -void __attribute__((optnone)) force_irgen(void) { - declaration1(); - declaration3(); -} diff --git a/clang/test/CodeGen/debug-info-257-args.c b/clang/test/CodeGen/debug-info-257-args.c deleted file mode 100644 index ce8d093..0000000 --- a/clang/test/CodeGen/debug-info-257-args.c +++ /dev/null @@ -1,25 +0,0 @@ -// RUN: %clang_cc1 -x c++ -debug-info-kind=limited -emit-llvm -triple x86_64-linux-gnu -o - %s | FileCheck %s -// PR23332 - -// CHECK: DILocalVariable(arg: 255 -// CHECK: DILocalVariable(arg: 256 -// CHECK: DILocalVariable(arg: 257 -void fn1(int, int, int, int, int, int, int, int, int, int, int, int, int, int, - int, int, int, int, int, int, int, int, int, int, int, int, int, int, - int, int, int, int, int, int, int, int, int, int, int, int, int, int, - int, int, int, int, int, int, int, int, int, int, int, int, int, int, - int, int, int, int, int, int, int, int, int, int, int, int, int, int, - int, int, int, int, int, int, int, int, int, int, int, int, int, int, - int, int, int, int, int, int, int, int, int, int, int, int, int, int, - int, int, int, int, int, int, int, int, int, int, int, int, int, int, - int, int, int, int, int, int, int, int, int, int, int, int, int, int, - int, int, int, int, int, int, int, int, int, int, int, int, int, int, - int, int, int, int, int, int, int, int, int, int, int, int, int, int, - int, int, int, int, int, int, int, int, int, int, int, int, int, int, - int, int, int, int, int, int, int, int, int, int, int, int, int, int, - int, int, int, int, int, int, int, int, int, int, int, int, int, int, - int, int, int, int, int, int, int, int, int, int, int, int, int, int, - int, int, int, int, int, int, int, int, int, int, int, int, int, int, - int, int, int, int, int, int, int, int, int, int, int, int, int, int, - int, int, int, int, int, int, int, int, int, int, int, int, int, int, - int, int, int, int, int) {} diff --git a/clang/test/CodeGen/debug-info-abspath.c b/clang/test/CodeGen/debug-info-abspath.c deleted file mode 100644 index 193a72c..0000000 --- a/clang/test/CodeGen/debug-info-abspath.c +++ /dev/null @@ -1,25 +0,0 @@ -// RUN: mkdir -p %t/UNIQUEISH_SENTINEL -// RUN: cp %s %t/UNIQUEISH_SENTINEL/debug-info-abspath.c - -// RUN: %clang_cc1 -debug-info-kind=limited -triple %itanium_abi_triple \ -// RUN: -fdebug-compilation-dir=%t/UNIQUEISH_SENTINEL/debug-info-abspath.c \ -// RUN: %t/UNIQUEISH_SENTINEL/debug-info-abspath.c -emit-llvm -o - \ -// RUN: | FileCheck %s - -// RUN: cp %s %t.c -// RUN: %clang_cc1 -debug-info-kind=limited -triple %itanium_abi_triple \ -// RUN: -fdebug-compilation-dir=%t \ -// RUN: %t.c -emit-llvm -o - | FileCheck %s --check-prefix=INTREE - -void foo(void) {} - -// Since %s is an absolute path, directory should be the common -// prefix, but the directory part should be part of the filename. - -// CHECK: = distinct !DISubprogram({{.*}}file: ![[SPFILE:[0-9]+]] -// CHECK: ![[SPFILE]] = !DIFile(filename: "{{.*}}UNIQUEISH_SENTINEL -// CHECK-SAME: debug-info-abspath.c" -// CHECK-NOT: directory: "{{.*}}UNIQUEISH_SENTINEL - -// INTREE: = distinct !DISubprogram({{.*}}![[SPFILE:[0-9]+]] -// INTREE: DIFile({{.*}}directory: "{{.+}}CodeGen{{.*}}") diff --git a/clang/test/CodeGen/debug-info-alias-pointer.c b/clang/test/CodeGen/debug-info-alias-pointer.c deleted file mode 100644 index 507a101f..0000000 --- a/clang/test/CodeGen/debug-info-alias-pointer.c +++ /dev/null @@ -1,14 +0,0 @@ -// RUN: %clang_cc1 -triple x86_64-unknown-windows-msvc -emit-llvm -debug-info-kind=limited %s -o - | FileCheck %s -// REQUIRES: asserts - -struct S { - void *p; -}; - -struct S s[] = { - { .p = (void *)0, }, -}; - -extern struct S t __attribute__((__alias__("s"))); - -// CHECK: !DIImportedEntity(tag: DW_TAG_imported_declaration, name: "t", scope: {{.*}}, entity: {{.*}}, file: {{.*}}, line: 12) diff --git a/clang/test/CodeGen/debug-info-alias.c b/clang/test/CodeGen/debug-info-alias.c deleted file mode 100644 index 1f5e477..0000000 --- a/clang/test/CodeGen/debug-info-alias.c +++ /dev/null @@ -1,15 +0,0 @@ -// RUN: %clang_cc1 -emit-llvm -debug-info-kind=limited %s -triple x86_64-unknown-linux-gnu -o - | FileCheck %s - -// CHECK-DAG: [[ENTITY1:![0-9]+]] = distinct !DIGlobalVariable(name: "aliased_global" -// CHECK-DAG: [[ENTITY2:![0-9]+]] = distinct !DIGlobalVariable(name: "aliased_global_2" -// CHECK-DAG: !DIImportedEntity(tag: DW_TAG_imported_declaration, name: "__global_alias", scope: !2, entity: [[ENTITY1]] -// CHECK-DAG: [[ENTITY3:![0-9]+]] = !DIImportedEntity(tag: DW_TAG_imported_declaration, name: "global_alias_2", scope: !2, entity: [[ENTITY2]] -// CHECK-DAG: !DIImportedEntity(tag: DW_TAG_imported_declaration, name: "__global_alias_2_alias", scope: !2, entity: [[ENTITY3]] - -int aliased_global = 1; -extern int __attribute__((alias("aliased_global"))) __global_alias; - -// Recursive alias: -int aliased_global_2 = 2; -extern int __attribute__((alias("aliased_global_2"))) global_alias_2; -extern int __attribute__((alias("global_alias_2"))) __global_alias_2_alias; diff --git a/clang/test/CodeGen/debug-info-args.c b/clang/test/CodeGen/debug-info-args.c deleted file mode 100644 index ce21e7c..0000000 --- a/clang/test/CodeGen/debug-info-args.c +++ /dev/null @@ -1,9 +0,0 @@ -// RUN: %clang_cc1 -triple x86_64-unk-unk -o - -emit-llvm -debug-info-kind=limited %s | FileCheck %s - -int somefunc(char *x, int y, double z) { - - // CHECK: !DISubroutineType(types: ![[NUM:[0-9]+]]) - // CHECK: ![[NUM]] = {{!{![^,]*, ![^,]*, ![^,]*, ![^,]*}}} - - return y; -} diff --git a/clang/test/CodeGen/debug-info-atomic.c b/clang/test/CodeGen/debug-info-atomic.c deleted file mode 100644 index 3de0d35..0000000 --- a/clang/test/CodeGen/debug-info-atomic.c +++ /dev/null @@ -1,8 +0,0 @@ -// RUN: %clang -g -c -std=c11 -S -emit-llvm -o - %s | FileCheck %s - -// CHECK: !DIGlobalVariable(name: "i" -// CHECK-SAME: type: ![[T:.*]], isLocal: false, isDefinition: true) -// CHECK: ![[T]] = !DIDerivedType(tag: DW_TAG_const_type, baseType: ![[BT:.*]]) -// CHECK: ![[BT]] = !DIDerivedType(tag: DW_TAG_atomic_type, baseType: ![[BTT:.*]]) -// CHECK: ![[BTT]] = !DIBasicType(name: "int", size: 32, encoding: DW_ATE_signed) -_Atomic const int i; diff --git a/clang/test/CodeGen/debug-info-attributed-stmt.c b/clang/test/CodeGen/debug-info-attributed-stmt.c deleted file mode 100644 index b60aaf6..0000000 --- a/clang/test/CodeGen/debug-info-attributed-stmt.c +++ /dev/null @@ -1,12 +0,0 @@ -// RUN: %clang_cc1 -triple x86_64-unk-unk -debug-info-kind=limited -emit-llvm %s -o - | FileCheck %s - -void f(_Bool b) -{ -#pragma nounroll - while (b); -} - -// CHECK: br label {{.*}}, !dbg ![[NUM:[0-9]+]] -// CHECK: br i1 {{.*}}, label {{.*}}, label {{.*}}, !dbg ![[NUM]] -// CHECK: br label {{.*}}, !dbg ![[NUM]], !llvm.loop -// CHECK: ![[NUM]] = !DILocation(line: 6, diff --git a/clang/test/CodeGen/debug-info-bitfield-0-struct.c b/clang/test/CodeGen/debug-info-bitfield-0-struct.c deleted file mode 100644 index 9fadf89..0000000 --- a/clang/test/CodeGen/debug-info-bitfield-0-struct.c +++ /dev/null @@ -1,121 +0,0 @@ -// RUN: %clang_cc1 -triple x86_64-unk-unk -o - -emit-llvm -debug-info-kind=limited %s | FileCheck --check-prefixes NOSEPARATOR,BOTH %s -// RUN: %clang_cc1 -triple amdgcn-unk-unk -o - -emit-llvm -debug-info-kind=limited %s | FileCheck --check-prefixes SEPARATOR,BOTH %s - -struct First { - // BOTH-DAG: ![[FIRST:[0-9]+]] = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "First", file: !{{[0-9]+}}, line: {{[0-9]+}}, size: 32, elements: ![[FIRST_ELEMENTS:[0-9]+]]) - // BOTH-DAG: ![[FIRST_ELEMENTS]] = !{![[FIRST_X:[0-9]+]], ![[FIRST_Y:[0-9]+]]} - // BOTH-DAG: ![[FIRST_X]] = !DIDerivedType(tag: DW_TAG_member, name: "x", scope: ![[FIRST]], file: !{{[0-9]+}}, line: {{[0-9]+}}, baseType: !{{[0-9]+}}, size: 4, flags: DIFlagBitField, extraData: i64 0) - // BOTH-DAG: ![[FIRST_Y]] = !DIDerivedType(tag: DW_TAG_member, name: "y", scope: ![[FIRST]], file: !{{[0-9]+}}, line: {{[0-9]+}}, baseType: !{{[0-9]+}}, size: 4, offset: 4, flags: DIFlagBitField, extraData: i64 0) - int : 0; - int x : 4; - int y : 4; -}; - -struct FirstDuplicate { - // BOTH-DAG: ![[FIRSTDUP:[0-9]+]] = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "FirstDuplicate", file: !{{[0-9]+}}, line: {{[0-9]+}}, size: 32, elements: ![[FIRSTDUP_ELEMENTS:[0-9]+]]) - // BOTH-DAG: ![[FIRSTDUP_ELEMENTS]] = !{![[FIRSTDUP_X:[0-9]+]], ![[FIRSTDUP_Y:[0-9]+]]} - // BOTH-DAG: ![[FIRSTDUP_X]] = !DIDerivedType(tag: DW_TAG_member, name: "x", scope: ![[FIRSTDUP]], file: !{{[0-9]+}}, line: {{[0-9]+}}, baseType: !{{[0-9]+}}, size: 4, flags: DIFlagBitField, extraData: i64 0) - // BOTH-DAG: ![[FIRSTDUP_Y]] = !DIDerivedType(tag: DW_TAG_member, name: "y", scope: ![[FIRSTDUP]], file: !{{[0-9]+}}, line: {{[0-9]+}}, baseType: !{{[0-9]+}}, size: 4, offset: 4, flags: DIFlagBitField, extraData: i64 0) - int : 0; - int : 0; - int x : 4; - int y : 4; -}; - -struct Second { - // BOTH-DAG: ![[SECOND:[0-9]+]] = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "Second", file: !{{[0-9]+}}, line: {{[0-9]+}}, size: 64, elements: ![[SECOND_ELEMENTS:[0-9]+]]) - - // NOSEPARATOR-DAG: ![[SECOND_ELEMENTS]] = !{![[SECOND_X:[0-9]+]], ![[SECOND_Y:[0-9]+]]} - // SEPARATOR-DAG: ![[SECOND_ELEMENTS]] = !{![[SECOND_X:[0-9]+]], ![[SECOND_ZERO:[0-9]+]], ![[SECOND_Y:[0-9]+]]} - - // BOTH-DAG: ![[SECOND_X]] = !DIDerivedType(tag: DW_TAG_member, name: "x", scope: ![[SECOND]], file: !{{[0-9]+}}, line: {{[0-9]+}}, baseType: !{{[0-9]+}}, size: 4, flags: DIFlagBitField, extraData: i64 0) - // SEPARATOR-DAG: ![[SECOND_ZERO]] = !DIDerivedType(tag: DW_TAG_member, scope: ![[SECOND]], file: !{{[0-9]+}}, line: {{[0-9]+}}, baseType: !{{[0-9]+}}, offset: 32, flags: DIFlagBitField, extraData: i64 32) - // BOTH-DAG: ![[SECOND_Y]] = !DIDerivedType(tag: DW_TAG_member, name: "y", scope: ![[SECOND]], file: !{{[0-9]+}}, line: {{[0-9]+}}, baseType: !{{[0-9]+}}, size: 4, offset: 32, flags: DIFlagBitField, extraData: i64 32) - int x : 4; - int : 0; - int y : 4; -}; - -struct SecondDuplicate { - // BOTH-DAG: ![[SECONDDUP:[0-9]+]] = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "SecondDuplicate", file: !{{[0-9]+}}, line: {{[0-9]+}}, size: 64, elements: ![[SECONDDUP_ELEMENTS:[0-9]+]]) - - // NOSEPARATOR-DAG: ![[SECONDDUP_ELEMENTS]] = !{![[SECONDDUP_X:[0-9]+]], ![[SECONDDUP_Y:[0-9]+]]} - // SEPARATOR-DAG: ![[SECONDDUP_ELEMENTS]] = !{![[SECONDDUP_X:[0-9]+]], ![[SECONDDUP_ZERO:[0-9]+]], ![[SECONDDUP_Y:[0-9]+]]} - - // BOTH-DAG: ![[SECONDDUP_X]] = !DIDerivedType(tag: DW_TAG_member, name: "x", scope: ![[SECONDDUP]], file: !{{[0-9]+}}, line: {{[0-9]+}}, baseType: !{{[0-9]+}}, size: 4, flags: DIFlagBitField, extraData: i64 0) - // SEPARATOR-DAG: ![[SECONDDUP_ZERO]] = !DIDerivedType(tag: DW_TAG_member, scope: ![[SECONDDUP]], file: !{{[0-9]+}}, line: {{[0-9]+}}, baseType: !{{[0-9]+}}, offset: 32, flags: DIFlagBitField, extraData: i64 32) - // BOTH-DAG: ![[SECONDDUP_Y]] = !DIDerivedType(tag: DW_TAG_member, name: "y", scope: ![[SECONDDUP]], file: !{{[0-9]+}}, line: {{[0-9]+}}, baseType: !{{[0-9]+}}, size: 4, offset: 32, flags: DIFlagBitField, extraData: i64 32) - int x : 4; - int : 0; - int : 0; - int y : 4; -}; - -struct Last { - // BOTH-DAG: ![[LAST:[0-9]+]] = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "Last", file: !{{[0-9]+}}, line: {{[0-9]+}}, size: 32, elements: ![[LAST_ELEMENTS:[0-9]+]]) - // BOTH-DAG: ![[LAST_ELEMENTS]] = !{![[LAST_X:[0-9]+]], ![[LAST_Y:[0-9]+]]} - // BOTH-DAG: ![[LAST_X]] = !DIDerivedType(tag: DW_TAG_member, name: "x", scope: ![[LAST]], file: !{{[0-9]+}}, line: {{[0-9]+}}, baseType: !{{[0-9]+}}, size: 4, flags: DIFlagBitField, extraData: i64 0) - // BOTH-DAG: ![[LAST_Y]] = !DIDerivedType(tag: DW_TAG_member, name: "y", scope: ![[LAST]], file: !{{[0-9]+}}, line: {{[0-9]+}}, baseType: !{{[0-9]+}}, size: 4, offset: 4, flags: DIFlagBitField, extraData: i64 0) - int x : 4; - int y : 4; - int : 0; -}; - -struct Several { - // BOTH-DAG: ![[SEVERAL:[0-9]+]] = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "Several", file: !{{[0-9]+}}, line: {{[0-9]+}}, size: 96, elements: ![[SEVERAL_ELEMENTS:[0-9]+]]) - - // SEPARATOR-DAG: ![[SEVERAL_ELEMENTS]] = !{![[SEVERAL_X:[0-9]+]], ![[SEVERAL_FIRST_ZERO:[0-9]+]], ![[SEVERAL_Y:[0-9]+]], ![[SEVERAL_SECOND_ZERO:[0-9]+]], ![[SEVERAL_Z:[0-9]+]]} - // NOSEPARATOR-DAG: ![[SEVERAL_ELEMENTS]] = !{![[SEVERAL_X:[0-9]+]], ![[SEVERAL_Y:[0-9]+]], ![[SEVERAL_Z:[0-9]+]]} - - // BOTH-DAG: ![[SEVERAL_X]] = !DIDerivedType(tag: DW_TAG_member, name: "x", scope: ![[SEVERAL]], file: !{{[0-9]+}}, line: {{[0-9]+}}, baseType: !{{[0-9]+}}, size: 4, flags: DIFlagBitField, extraData: i64 0) - // SEPARATOR-DAG: ![[SEVERAL_FIRST_ZERO]] = !DIDerivedType(tag: DW_TAG_member, scope: ![[SEVERAL]], file: !{{[0-9]+}}, line: {{[0-9]+}}, baseType: !{{[0-9]+}}, offset: 32, flags: DIFlagBitField, extraData: i64 32) - // BOTH-DAG: ![[SEVERAL_Y]] = !DIDerivedType(tag: DW_TAG_member, name: "y", scope: ![[SEVERAL]], file: !{{[0-9]+}}, line: {{[0-9]+}}, baseType: !{{[0-9]+}}, size: 4, offset: 32, flags: DIFlagBitField, extraData: i64 32) - // SEPARATOR-DAG: ![[SEVERAL_SECOND_ZERO]] = !DIDerivedType(tag: DW_TAG_member, scope: ![[SEVERAL]], file: !{{[0-9]+}}, line: {{[0-9]+}}, baseType: !{{[0-9]+}}, offset: 64, flags: DIFlagBitField, extraData: i64 64) - // BOTH-DAG: ![[SEVERAL_Z]] = !DIDerivedType(tag: DW_TAG_member, name: "z", scope: ![[SEVERAL]], file: !{{[0-9]+}}, line: {{[0-9]+}}, baseType: !{{[0-9]+}}, size: 4, offset: 64, flags: DIFlagBitField, extraData: i64 64) - int x : 4; - int : 0; - int y : 4; - int : 0; - int z : 4; -}; - -struct None_A { - // BOTH-DAG: ![[NONE_A:[0-9]+]] = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "None_A", file: !{{[0-9]+}}, line: {{[0-9]+}}, size: 64, elements: ![[NONE_A_ELEMENTS:[0-9]+]]) - // BOTH-DAG: ![[NONE_A_ELEMENTS]] = !{![[NONE_A_FIELD:[0-9]+]], ![[NONE_A_X:[0-9]+]]} - // BOTH-DAG: ![[NONE_A_FIELD]] = !DIDerivedType(tag: DW_TAG_member, name: "field", scope: ![[NONE_A]], file: !{{[0-9]+}}, line: {{[0-9]+}}, baseType: !{{[0-9]+}}, size: 32) - // BOTH-DAG: ![[NONE_A_X]] = !DIDerivedType(tag: DW_TAG_member, name: "x", scope: ![[NONE_A]], file: !{{[0-9]+}}, line: {{[0-9]+}}, baseType: !{{[0-9]+}}, size: 4, offset: 32, flags: DIFlagBitField, extraData: i64 32) - int : 0; - int field; - int x : 4; -}; - -struct None_B { - // BOTH-DAG: ![[NONE_B:[0-9]+]] = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "None_B", file: !{{[0-9]+}}, line: {{[0-9]+}}, size: 64, elements: ![[NONE_B_ELEMENTS:[0-9]+]]) - // BOTH-DAG: ![[NONE_B_ELEMENTS]] = !{![[NONE_B_FIELD:[0-9]+]], ![[NONE_B_X:[0-9]+]], ![[NONE_B_Y:[0-9]+]]} - // BOTH-DAG: ![[NONE_B_FIELD]] = !DIDerivedType(tag: DW_TAG_member, name: "field", scope: ![[NONE_B]], file: !{{[0-9]+}}, line: {{[0-9]+}}, baseType: !{{[0-9]+}}, size: 32) - // BOTH-DAG: ![[NONE_B_X]] = !DIDerivedType(tag: DW_TAG_member, name: "x", scope: ![[NONE_B]], file: !{{[0-9]+}}, line: {{[0-9]+}}, baseType: !{{[0-9]+}}, size: 4, offset: 32, flags: DIFlagBitField, extraData: i64 32) - // BOTH-DAG: ![[NONE_B_Y]] = !DIDerivedType(tag: DW_TAG_member, name: "y", scope: ![[NONE_B]], file: !{{[0-9]+}}, line: {{[0-9]+}}, baseType: !{{[0-9]+}}, size: 4, offset: 36, flags: DIFlagBitField, extraData: i64 32) - int field; - int : 0; - int x : 4; - int y : 4; -}; - -// AMDGCN does not do unaligned access cheaply, so the bitfield access units -// would remain single bytes, without the aligned attribure -struct __attribute__((aligned(4))) None_C { - // BOTH-DAG: ![[NONE_C:[0-9]+]] = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "None_C", file: !{{[0-9]+}}, line: {{[0-9]+}}, size: 32, align: 32, elements: ![[NONE_C_ELEMENTS:[0-9]+]]) - // BOTH-DAG: ![[NONE_C_ELEMENTS]] = !{![[NONE_C_X:[0-9]+]], ![[NONE_C_Y:[0-9]+]], ![[NONE_C_A:[0-9]+]], ![[NONE_C_B:[0-9]+]]} - // BOTH-DAG: ![[NONE_C_X]] = !DIDerivedType(tag: DW_TAG_member, name: "x", scope: ![[NONE_C]], file: !{{[0-9]+}}, line: {{[0-9]+}}, baseType: !{{[0-9]+}}, size: 8, flags: DIFlagBitField, extraData: i64 0) - // BOTH-DAG: ![[NONE_C_Y]] = !DIDerivedType(tag: DW_TAG_member, name: "y", scope: ![[NONE_C]], file: !{{[0-9]+}}, line: {{[0-9]+}}, baseType: !{{[0-9]+}}, size: 8, offset: 8, flags: DIFlagBitField, extraData: i64 0) - // BOTH-DAG: ![[NONE_C_A]] = !DIDerivedType(tag: DW_TAG_member, name: "a", scope: ![[NONE_C]], file: !{{[0-9]+}}, line: {{[0-9]+}}, baseType: !{{[0-9]+}}, size: 8, offset: 16, flags: DIFlagBitField, extraData: i64 0) - // BOTH-DAG: ![[NONE_C_B]] = !DIDerivedType(tag: DW_TAG_member, name: "b", scope: ![[NONE_C]], file: !{{[0-9]+}}, line: {{[0-9]+}}, baseType: !{{[0-9]+}}, size: 8, offset: 24, flags: DIFlagBitField, extraData: i64 0) - char x : 8; - char y : 8; - char a : 8; - char b : 8; -}; - -void foo(struct First f, struct FirstDuplicate fs, struct Second s, struct SecondDuplicate sd, struct Last l, struct Several ss, struct None_A na, struct None_B nb, struct None_C nc) { - return; -} diff --git a/clang/test/CodeGen/debug-info-block-decl.c b/clang/test/CodeGen/debug-info-block-decl.c deleted file mode 100644 index 6e95ecc..0000000 --- a/clang/test/CodeGen/debug-info-block-decl.c +++ /dev/null @@ -1,18 +0,0 @@ -// RUN: %clang_cc1 -triple x86_64-apple-darwin10 -debug-info-kind=limited -fblocks -emit-llvm -o - %s | FileCheck %s -// Assignment and block entry should point to the same line. - -// CHECK: define{{.*}}@main() -// CHECK: store {{.*}}, !dbg ![[ASSIGNMENT:[0-9]+]] -// CHECK: define {{.*}} @__main_block_invoke -// CHECK: , ![[BLOCK_ENTRY:[0-9]+]]) - -int main(void) -{ -// CHECK: [[ASSIGNMENT]] = !DILocation(line: [[@LINE+2]], -// CHECK: [[BLOCK_ENTRY]] = !DILocation(line: [[@LINE+1]], - int (^blockptr)(void) = ^(void) { - return 0; - }; - return blockptr(); -} - diff --git a/clang/test/CodeGen/debug-info-block-expr.c b/clang/test/CodeGen/debug-info-block-expr.c deleted file mode 100644 index 712158f..0000000 --- a/clang/test/CodeGen/debug-info-block-expr.c +++ /dev/null @@ -1,55 +0,0 @@ -// RUN: %clang_cc1 -fblocks -debug-info-kind=limited -emit-llvm -o - %s | FileCheck %s -// RUN: %clang_cc1 -DDEAD_CODE -fblocks -debug-info-kind=limited -emit-llvm -o - %s | FileCheck %s - -typedef void (^BlockTy)(void); -void escapeFunc(BlockTy); -typedef void (^BlockTy)(void); -void noEscapeFunc(__attribute__((noescape)) BlockTy); - -// Verify that the desired DIExpression are generated for escaping (i.e, not -// 'noescape') blocks. -void test_escape_func(void) { -// CHECK-LABEL: void @test_escape_func -// CHECK: #dbg_declare({{.*}}![[ESCAPE_VAR:[0-9]+]], !DIExpression(DW_OP_plus_uconst, {{[0-9]+}}, DW_OP_deref, DW_OP_plus_uconst, {{[0-9]+}}){{.*}}) - __block int escape_var; -// Blocks in dead code branches still capture __block variables. -#ifdef DEAD_CODE - if (0) -#endif - escapeFunc(^{ (void)escape_var; }); -} - -// Verify that the desired DIExpression are generated for noescape blocks. -void test_noescape_func(void) { -// CHECK-LABEL: void @test_noescape_func -// CHECK: #dbg_declare({{.*}}![[NOESCAPE_VAR:[0-9]+]], !DIExpression(), - __block int noescape_var; - noEscapeFunc(^{ (void)noescape_var; }); -} - -// Verify that the desired DIExpression are generated for blocks. -void test_local_block(void) { -// CHECK-LABEL: void @test_local_block -// CHECK: #dbg_declare({{.*}}![[BLOCK_VAR:[0-9]+]], !DIExpression(DW_OP_plus_uconst, {{[0-9]+}}, DW_OP_deref, DW_OP_plus_uconst, {{[0-9]+}}){{.*}}) - __block int block_var; - -// CHECK-LABEL: @__test_local_block_block_invoke -// CHECK: #dbg_declare({{.*}}!DIExpression(DW_OP_deref, DW_OP_plus_uconst, {{[0-9]+}}, DW_OP_deref, DW_OP_plus_uconst, {{[0-9]+}}, DW_OP_deref, DW_OP_plus_uconst, {{[0-9]+}}){{.*}}) - ^ { block_var = 1; }(); -} - -// Verify that the desired DIExpression are generated for __block vars not used -// in any block. -void test_unused(void) { -// CHECK-LABEL: void @test_unused -// CHECK: #dbg_declare({{.*}}![[UNUSED_VAR:[0-9]+]], !DIExpression(), - __block int unused_var; -// Use i (not inside a block). - ++unused_var; -} - -// CHECK: ![[ESCAPE_VAR]] = !DILocalVariable(name: "escape_var" -// CHECK: ![[NOESCAPE_VAR]] = !DILocalVariable(name: "noescape_var" -// CHECK: ![[BLOCK_VAR]] = !DILocalVariable(name: "block_var" -// CHECK: ![[UNUSED_VAR]] = !DILocalVariable(name: "unused_var" - diff --git a/clang/test/CodeGen/debug-info-block-out-return.c b/clang/test/CodeGen/debug-info-block-out-return.c deleted file mode 100644 index cae1688..0000000 --- a/clang/test/CodeGen/debug-info-block-out-return.c +++ /dev/null @@ -1,25 +0,0 @@ -// RUN: %clang_cc1 -triple x86_64-apple-darwin10 -debug-info-kind=limited -fblocks -emit-llvm -o - %s | FileCheck %s - -// Check that arg numbering is not affected by LLVM IR argument numbering - -// since the latter is affected by return-by-out-parameter ABI requirements - -// 1 for the argument number (1 indexed), 2 for the line number -// 16777218 == 1 << 24 | 2 -// 33554434 == 2 << 24 | 2 -// This explains the two magic numbers below, testing that these two arguments -// are numbered correctly. If they are not numbered correctly they may appear -// out of order or not at all (the latter would occur if they were both assigned -// the same argument number by mistake). - -// CHECK: !DILocalVariable(name: ".block_descriptor", arg: 1,{{.*}}line: 2, -// CHECK: !DILocalVariable(name: "param", arg: 2,{{.*}}line: 2, - -// Line directive so we don't have to worry about how many lines precede the -// test code (as the line number is mangled in with the argument number as shown -// above) -#line 1 -typedef struct { int array[12]; } BigStruct_t; -BigStruct_t (^a)(int) = ^(int param) { - BigStruct_t b; - return b; -}; diff --git a/clang/test/CodeGen/debug-info-block-vars.c b/clang/test/CodeGen/debug-info-block-vars.c deleted file mode 100644 index 90d1d4b..0000000 --- a/clang/test/CodeGen/debug-info-block-vars.c +++ /dev/null @@ -1,23 +0,0 @@ -// RUN: %clang_cc1 -x c -std=c89 -fblocks -debug-info-kind=standalone -emit-llvm -O0 \ -// RUN: -triple x86_64-apple-darwin -o - %s | FileCheck %s -// RUN: %clang_cc1 -x c -std=c89 -fblocks -debug-info-kind=standalone -emit-llvm -O1 \ -// RUN: -triple x86_64-apple-darwin -o - %s \ -// RUN: | FileCheck --check-prefix=CHECK-OPT %s - -// CHECK: define internal void @__f_block_invoke(ptr noundef %.block_descriptor) -// CHECK: %.block_descriptor.addr = alloca ptr, align 8 -// CHECK: %block.addr = alloca ptr, align 8 -// CHECK: store ptr %.block_descriptor, ptr %.block_descriptor.addr, align 8 -// CHECK: #dbg_declare(ptr %.block_descriptor.addr, -// CHECK-SAME: !DIExpression(), -// CHECK-OPT-NOT: alloca -// Since the block address is not used anywhere in this function, -// the optimizer (DeadArgElim) has replaced all the false uses -// (i.e., metadata users) with poison. -// CHECK-OPT: #dbg_value(ptr poison, -// CHECK-OPT-SAME: !DIExpression(), -void f(void) { - a(^{ - b(); - }); -} diff --git a/clang/test/CodeGen/debug-info-block.c b/clang/test/CodeGen/debug-info-block.c deleted file mode 100644 index a4b8fde..0000000 --- a/clang/test/CodeGen/debug-info-block.c +++ /dev/null @@ -1,29 +0,0 @@ -// RUN: %clang_cc1 -fblocks -debug-info-kind=limited -emit-llvm -o - %s | FileCheck %s -// Verify that the desired debugging type is generated for a structure -// member that is a pointer to a block. - -// CHECK: !DICompositeType(tag: DW_TAG_structure_type, scope -// CHECK-NOT: line -// CHECK-SAME: elements: ![[ELEMS1:.*]]) -// CHECK: ![[ELEMS1]] = {{.*, .*, .*,}} ![[FPEL1:.*]], {{.*}} -// CHECK: ![[INT:.*]] = !DIBasicType(name: "int" -// CHECK: ![[FPEL1]] = {{.*}}"__FuncPtr", {{.*}}, baseType: ![[FPTY1:[0-9]+]] -// CHECK: ![[FPTY1]] = {{.*}}baseType: ![[FNTY1:[0-9]+]] -// CHECK: ![[FNTY1]] = !DISubroutineType(types: ![[VOIDVOID:[0-9]+]]) -// CHECK: ![[VOIDVOID]] = !{null} -// CHECK: !DICompositeType(tag: DW_TAG_structure_type, name: "__block_descriptor" -// CHECK-NOT: line -// CHECK-SAME: ) - -// CHECK: !DICompositeType(tag: DW_TAG_structure_type, scope -// CHECK-NOT: line -// CHECK-SAME: elements: ![[ELEMS2:.*]]) -// CHECK: ![[ELEMS2]] = {{.*,.*,.*}}, ![[FPEL2:.*]], {{.*}} -// CHECK: ![[FPEL2]] = {{.*}}"__FuncPtr", {{.*}}, baseType: ![[FPTY2:[0-9]+]] -// CHECK: ![[FPTY2]] = {{.*}}baseType: ![[FNTY2:[0-9]+]] -// CHECK: ![[FNTY2]] = !DISubroutineType(types: ![[INTINT:[0-9]+]]) -// CHECK: ![[INTINT]] = !{![[INT]], ![[INT]]} -struct inStruct { - void (^voidBlockPtr)(void); - int (^intBlockPtr)(int); -} is; diff --git a/clang/test/CodeGen/debug-info-cc.c b/clang/test/CodeGen/debug-info-cc.c deleted file mode 100644 index 2bfb1c2..0000000 --- a/clang/test/CodeGen/debug-info-cc.c +++ /dev/null @@ -1,134 +0,0 @@ -// RUN: %clang_cc1 -triple x86_64-pc-linux-gnu -o - -emit-llvm -debug-info-kind=limited %s | FileCheck %s --check-prefix=LINUX -// RUN: %clang_cc1 -triple x86_64-unknown-windows-msvc -o - -emit-llvm -debug-info-kind=limited %s | FileCheck %s --check-prefix=WINDOWS -// RUN: %clang_cc1 -triple i386-pc-linux-gnu -o - -emit-llvm -debug-info-kind=limited %s | FileCheck %s --check-prefix=LINUX32 -// RUN: %clang_cc1 -triple armv7--linux-gnueabihf -o - -emit-llvm -debug-info-kind=limited %s | FileCheck %s --check-prefix=ARM - -// enum CallingConv { -// CC_C, // __attribute__((cdecl)) -// CC_X86StdCall, // __attribute__((stdcall)) -// CC_X86FastCall, // __attribute__((fastcall)) -// CC_X86ThisCall, // __attribute__((thiscall)) -// CC_X86VectorCall, // __attribute__((vectorcall)) -// CC_X86Pascal, // __attribute__((pascal)) -// CC_Win64, // __attribute__((ms_abi)) -// CC_X86_64SysV, // __attribute__((sysv_abi)) -// CC_X86RegCall, // __attribute__((regcall)) -// CC_AAPCS, // __attribute__((pcs("aapcs"))) -// CC_AAPCS_VFP, // __attribute__((pcs("aapcs-vfp"))) -// CC_IntelOclBicc, // __attribute__((intel_ocl_bicc)) -// CC_SpirFunction, // default for OpenCL functions on SPIR target -// CC_OpenCLKernel, // inferred for OpenCL kernels -// CC_Swift, // __attribute__((swiftcall)) -// CC_SwiftAsync, // __attribute__((swiftasynccall)) -// CC_PreserveMost, // __attribute__((preserve_most)) -// CC_PreserveAll, // __attribute__((preserve_all)) -// CC_PreserveNone, // __attribute__((preserve_none)) -// }; - -#ifdef __x86_64__ - -#ifdef __linux__ -// LINUX: !DISubprogram({{.*}}"add_msabi", {{.*}}type: ![[FTY:[0-9]+]] -// LINUX: ![[FTY]] = !DISubroutineType({{.*}}cc: DW_CC_LLVM_Win64, -__attribute__((ms_abi)) int add_msabi(int a, int b) { - return a+b; -} - -// LINUX: !DISubprogram({{.*}}"add_regcall", {{.*}}type: ![[FTY:[0-9]+]] -// LINUX: ![[FTY]] = !DISubroutineType({{.*}}cc: DW_CC_LLVM_X86RegCall, -__attribute__((regcall)) int add_regcall(int a, int b) { - return a+b; -} - -// LINUX: !DISubprogram({{.*}}"add_preserve_most", {{.*}}type: ![[FTY:[0-9]+]] -// LINUX: ![[FTY]] = !DISubroutineType({{.*}}cc: DW_CC_LLVM_PreserveMost, -__attribute__((preserve_most)) int add_preserve_most(int a, int b) { - return a+b; -} - -// LINUX: !DISubprogram({{.*}}"add_preserve_all", {{.*}}type: ![[FTY:[0-9]+]] -// LINUX: ![[FTY]] = !DISubroutineType({{.*}}cc: DW_CC_LLVM_PreserveAll, -__attribute__((preserve_all)) int add_preserve_all(int a, int b) { - return a+b; -} - -// LINUX: !DISubprogram({{.*}}"add_preserve_none", {{.*}}type: ![[FTY:[0-9]+]] -// LINUX: ![[FTY]] = !DISubroutineType({{.*}}cc: DW_CC_LLVM_PreserveNone, -__attribute__((preserve_none)) int add_preserve_none(int a, int b) { - return a+b; -} - -// LINUX: !DISubprogram({{.*}}"add_swiftcall", {{.*}}type: ![[FTY:[0-9]+]] -// LINUX: ![[FTY]] = !DISubroutineType({{.*}}cc: DW_CC_LLVM_Swift, -__attribute__((swiftcall)) int add_swiftcall(int a, int b) { - return a+b; -} - -// LINUX: !DISubprogram({{.*}}"add_swiftasynccall", {{.*}}type: ![[FTY:[0-9]+]] -// LINUX: ![[FTY]] = !DISubroutineType({{.*}}cc: DW_CC_LLVM_SwiftTail, -__attribute__((swiftasynccall)) int add_swiftasynccall(int a, int b) { - return a+b; -} - -// LINUX: !DISubprogram({{.*}}"add_inteloclbicc", {{.*}}type: ![[FTY:[0-9]+]] -// LINUX: ![[FTY]] = !DISubroutineType({{.*}}cc: DW_CC_LLVM_IntelOclBicc, -__attribute__((intel_ocl_bicc)) int add_inteloclbicc(int a, int b) { - return a+b; -} -#endif - -#ifdef _WIN64 -// WINDOWS: !DISubprogram({{.*}}"add_sysvabi", {{.*}}type: ![[FTY:[0-9]+]] -// WINDOWS: ![[FTY]] = !DISubroutineType({{.*}}cc: DW_CC_LLVM_X86_64SysV, -__attribute__((sysv_abi)) int add_sysvabi(int a, int b) { - return a+b; -} -#endif - -#endif - -#ifdef __i386__ -// LINUX32: !DISubprogram({{.*}}"add_stdcall", {{.*}}type: ![[FTY:[0-9]+]] -// LINUX32: ![[FTY]] = !DISubroutineType({{.*}}cc: DW_CC_BORLAND_stdcall, -__attribute__((stdcall)) int add_stdcall(int a, int b) { - return a+b; -} - -// LINUX32: !DISubprogram({{.*}}"add_fastcall", {{.*}}type: ![[FTY:[0-9]+]] -// LINUX32: ![[FTY]] = !DISubroutineType({{.*}}cc: DW_CC_BORLAND_msfastcall, -__attribute__((fastcall)) int add_fastcall(int a, int b) { - return a+b; -} - -// LINUX32: !DISubprogram({{.*}}"add_thiscall", {{.*}}type: ![[FTY:[0-9]+]] -// LINUX32: ![[FTY]] = !DISubroutineType({{.*}}cc: DW_CC_BORLAND_thiscall, -__attribute__((thiscall)) int add_thiscall(int a, int b) { - return a+b; -} - -// LINUX32: !DISubprogram({{.*}}"add_vectorcall", {{.*}}type: ![[FTY:[0-9]+]] -// LINUX32: ![[FTY]] = !DISubroutineType({{.*}}cc: DW_CC_LLVM_vectorcall, -__attribute__((vectorcall)) int add_vectorcall(int a, int b) { - return a+b; -} - -// LINUX32: !DISubprogram({{.*}}"add_pascal", {{.*}}type: ![[FTY:[0-9]+]] -// LINUX32: ![[FTY]] = !DISubroutineType({{.*}}cc: DW_CC_BORLAND_pascal, -__attribute__((pascal)) int add_pascal(int a, int b) { - return a+b; -} -#endif - -#ifdef __arm__ -// ARM: !DISubprogram({{.*}}"add_aapcs", {{.*}}type: ![[FTY:[0-9]+]] -// ARM: ![[FTY]] = !DISubroutineType({{.*}}cc: DW_CC_LLVM_AAPCS, -__attribute__((pcs("aapcs"))) int add_aapcs(int a, int b) { - return a+b; -} - -// ARM: !DISubprogram({{.*}}"add_aapcs_vfp", {{.*}}type: ![[FTY:[0-9]+]] -// ARM: ![[FTY]] = !DISubroutineType({{.*}}cc: DW_CC_LLVM_AAPCS_VFP, -__attribute__((pcs("aapcs-vfp"))) int add_aapcs_vfp(int a, int b) { - return a+b; -} -#endif diff --git a/clang/test/CodeGen/debug-info-codeview-buildinfo.c b/clang/test/CodeGen/debug-info-codeview-buildinfo.c deleted file mode 100644 index 98d249b..0000000 --- a/clang/test/CodeGen/debug-info-codeview-buildinfo.c +++ /dev/null @@ -1,47 +0,0 @@ -// REQUIRES: x86-registered-target -// RUN: %clang_cl --target=i686-windows-msvc /c /Z7 /Fo%t.obj -- %s -// RUN: llvm-pdbutil dump --types %t.obj | FileCheck %s -// RUN: %clang_cl -gcodeview-command-line --target=i686-windows-msvc /c /Z7 /Fo%t.obj -- %s -// RUN: llvm-pdbutil dump --types %t.obj | FileCheck %s -// RUN: %clang_cl --target=i686-windows-msvc /c /Z7 /Fo%t.obj -fdebug-compilation-dir=. -- %s -// RUN: llvm-pdbutil dump --types %t.obj | FileCheck %s --check-prefix RELATIVE -// RUN: %clang_cl -gno-codeview-command-line --target=i686-windows-msvc /c /Z7 /Fo%t.obj -- %s -// RUN: llvm-pdbutil dump --types %t.obj | FileCheck %s --check-prefix DISABLE - -// -fmessage-length shouldn't be included in the command line since it breaks reproducibility -// RUN: %clang_cl -gcodeview-command-line --target=i686-windows-msvc -Xclang -fmessage-length=100 /c /Z7 /Fo%t.obj -- %s -// RUN: llvm-pdbutil dump --types %t.obj | FileCheck %s --check-prefix MESSAGELEN - -int main(void) { return 42; } - -// CHECK: Types (.debug$T) -// CHECK: ============================================================ -// CHECK: 0x[[PWD:.+]] | LF_STRING_ID [size = {{.+}}] ID: <no type>, String: [[PWDVAL:.+]] -// CHECK: 0x[[FILEPATH:.+]] | LF_STRING_ID [size = {{.+}}] ID: <no type>, String: [[FILEPATHVAL:.+[\\/]debug-info-codeview-buildinfo.c]] -// CHECK: 0x[[ZIPDB:.+]] | LF_STRING_ID [size = {{.+}}] ID: <no type>, String: -// CHECK: 0x[[TOOL:.+]] | LF_STRING_ID [size = {{.+}}] ID: <no type>, String: [[TOOLVAL:.+[\\/][clang|llvm].*]] -// CHECK: 0x[[CMDLINE:.+]] | LF_STRING_ID [size = {{.+}}] ID: <no type>, String: "-cc1 -// CHECK: 0x{{.+}} | LF_BUILDINFO [size = {{.+}}] -// CHECK-NEXT: 0x[[PWD]]: `[[PWDVAL]]` -// CHECK-NEXT: 0x[[TOOL]]: `[[TOOLVAL]]` -// CHECK-NEXT: 0x[[FILEPATH]]: `[[FILEPATHVAL]]` -// CHECK-NEXT: 0x[[ZIPDB]]: `` -// CHECK-NEXT: 0x[[CMDLINE]]: `"-cc1 - -// RELATIVE: Types (.debug$T) -// RELATIVE: ============================================================ -// RELATIVE: 0x{{.+}} | LF_BUILDINFO [size = {{.+}}] -// RELATIVE: 0x{{.+}}: `.` - -// DISABLE-NOT: "-cc1" -// DISABLE: 0x{{.+}} | LF_BUILDINFO [size = {{.+}}] -// DISABLE-NEXT: 0x{{.+}}: `{{.*}}` -// DISABLE-NEXT: 0x{{.+}}: `{{.*}}` -// DISABLE-NEXT: 0x{{.+}}: `{{.*}}` -// DISABLE-NEXT: 0x{{.+}}: `` -// DISABLE-NEXT: 0x{{.+}}: `{{.*}}` - -// MESSAGELEN: Types (.debug$T) -// MESSAGELEN: ============================================================ -// MESSAGELEN: 0x{{.+}} | LF_BUILDINFO [size = {{.+}}] -// MESSAGELEN-NOT: -fmessage-length diff --git a/clang/test/CodeGen/debug-info-codeview-heapallocsite.c b/clang/test/CodeGen/debug-info-codeview-heapallocsite.c deleted file mode 100644 index 95d4cc9..0000000 --- a/clang/test/CodeGen/debug-info-codeview-heapallocsite.c +++ /dev/null @@ -1,26 +0,0 @@ -// RUN: %clang_cc1 -triple x86_64-windows-msvc -debug-info-kind=limited -gcodeview -fdeclspec -emit-llvm %s -o - | FileCheck %s - -struct Foo; -struct Bar; - -__declspec(allocator) void *alloc_void(void); -__declspec(allocator) struct Foo *alloc_foo(void); - -void call_alloc(void) { - struct Foo *p = alloc_void(); - struct Foo *w = alloc_foo(); - struct Foo *q = (struct Foo*)alloc_void(); - struct Foo *r = (struct Foo*)(struct Bar*)alloc_void(); -} - -// CHECK-LABEL: define {{.*}}void @call_alloc -// CHECK: call ptr {{.*}}@alloc_void{{.*}} !heapallocsite [[DBG1:!.*]] -// CHECK: call ptr {{.*}}@alloc_foo{{.*}} !heapallocsite [[DBG2:!.*]] -// CHECK: call ptr {{.*}}@alloc_void{{.*}} !heapallocsite [[DBG2]] -// CHECK: call ptr {{.*}}@alloc_void{{.*}} !heapallocsite [[DBG3:!.*]] - -// CHECK: [[DBG2]] = !DICompositeType(tag: DW_TAG_structure_type, -// CHECK-SAME: name: "Foo" -// CHECK: [[DBG3]] = !DICompositeType(tag: DW_TAG_structure_type, -// CHECK-SAME: name: "Bar" -// CHECK: [[DBG1]] = !{} diff --git a/clang/test/CodeGen/debug-info-codeview-unnamed.c b/clang/test/CodeGen/debug-info-codeview-unnamed.c deleted file mode 100644 index 0df6e1a..0000000 --- a/clang/test/CodeGen/debug-info-codeview-unnamed.c +++ /dev/null @@ -1,30 +0,0 @@ -// RUN: %clang_cc1 -triple x86_64-unknown-linux-gnu -debug-info-kind=limited -emit-llvm -o - %s | FileCheck --check-prefix LINUX %s -// RUN: %clang_cc1 -triple x86_64-windows-msvc -debug-info-kind=limited -gcodeview -emit-llvm -o - %s | FileCheck --check-prefix MSVC %s - -int main(int argc, char* argv[], char* arge[]) { - - // In both DWARF and CodeView, an unnamed C structure type will generate a - // DICompositeType without a name or identifier attribute; - // - struct { int bar; } one = {42}; - // - // LINUX: !{{[0-9]+}} = !DILocalVariable(name: "one" - // LINUX-SAME: type: [[TYPE_OF_ONE:![0-9]+]] - // LINUX-SAME: ) - // LINUX: [[TYPE_OF_ONE]] = distinct !DICompositeType( - // LINUX-SAME: tag: DW_TAG_structure_type - // LINUX-NOT: name: - // LINUX-NOT: identifier: - // LINUX-SAME: ) - // - // MSVC: !{{[0-9]+}} = !DILocalVariable(name: "one" - // MSVC-SAME: type: [[TYPE_OF_ONE:![0-9]+]] - // MSVC-SAME: ) - // MSVC: [[TYPE_OF_ONE]] = distinct !DICompositeType - // MSVC-SAME: tag: DW_TAG_structure_type - // MSVC-NOT: name: - // MSVC-NOT: identifier: - // MSVC-SAME: ) - - return 0; -} diff --git a/clang/test/CodeGen/debug-info-compilation-dir.c b/clang/test/CodeGen/debug-info-compilation-dir.c deleted file mode 100644 index 5f5542c..0000000 --- a/clang/test/CodeGen/debug-info-compilation-dir.c +++ /dev/null @@ -1,16 +0,0 @@ -// RUN: mkdir -p %t.dir && cd %t.dir -// RUN: cp %s rel.c -// RUN: %clang_cc1 -fdebug-compilation-dir /nonsense -emit-llvm -debug-info-kind=limited rel.c -o - | FileCheck -check-prefix=CHECK-NONSENSE %s -// RUN: %clang_cc1 -fdebug-compilation-dir=/nonsense -emit-llvm -debug-info-kind=limited rel.c -o - | FileCheck -check-prefix=CHECK-NONSENSE %s -// CHECK-NONSENSE: nonsense - -// RUN: %clang_cc1 -emit-llvm -debug-info-kind=limited %s -o - | FileCheck -check-prefix=CHECK-DIR %s -// CHECK-DIR: CodeGen - -/// Test path remapping. -// RUN: %clang_cc1 -fdebug-compilation-dir=%S -main-file-name %s -emit-llvm -debug-info-kind=limited %s -o - | FileCheck -check-prefix=CHECK-ABS %s -// CHECK-ABS: DIFile(filename: "{{.*}}debug-info-compilation-dir.c", directory: "{{.*}}CodeGen") - -// RUN: %clang_cc1 -main-file-name %s -emit-llvm -debug-info-kind=limited %s -o - | FileCheck -check-prefix=CHECK-NOMAP %s -// CHECK-NOMAP: DIFile(filename: "{{.*}}debug-info-compilation-dir.c", directory: "") - diff --git a/clang/test/CodeGen/debug-info-crash.c b/clang/test/CodeGen/debug-info-crash.c deleted file mode 100644 index e3a8f81..0000000 --- a/clang/test/CodeGen/debug-info-crash.c +++ /dev/null @@ -1,29 +0,0 @@ -// REQUIRES: x86-registered-target -// RUN: %clang_cc1 -std=c89 -triple i386-apple-darwin10 -fblocks -debug-info-kind=limited -S %s -o - - -typedef struct dispatch_queue_s *dispatch_queue_t; -__attribute__((visibility("default"))) -extern struct dispatch_queue_s _dispatch_main_q; -typedef struct dispatch_item_s *dispatch_item_t; -typedef void (^dispatch_legacy_block_t)(dispatch_item_t); -void LEGACY_dispatch_call(dispatch_queue_t dq, - dispatch_legacy_block_t dispatch_block, - dispatch_legacy_block_t callback_block) { - dispatch_queue_t lq = _dispatch_queue_get_current() ?: (&_dispatch_main_q); - dispatch_async(dq, ^{ - if (callback_block) { - dispatch_async(lq, ^{ - } - ); - } - } - ); -} - -typedef struct P { - int x; -} PS; -# 1 "" -void foo(void) { - PS p2; -} diff --git a/clang/test/CodeGen/debug-info-embed-source.c b/clang/test/CodeGen/debug-info-embed-source.c deleted file mode 100644 index daa6a6c..0000000 --- a/clang/test/CodeGen/debug-info-embed-source.c +++ /dev/null @@ -1,5 +0,0 @@ -// RUN: %clang_cc1 -debug-info-kind=limited -emit-llvm %p/Inputs/debug-info-embed-source.c -o - | FileCheck %s --check-prefix=NOEMBED -// RUN: %clang_cc1 -gembed-source -debug-info-kind=limited -emit-llvm %p/Inputs/debug-info-embed-source.c -o - | FileCheck %s --check-prefix=EMBED - -// NOEMBED-NOT: !DIFile({{.*}}source: -// EMBED: !DIFile({{.*}}source: "void foo(void) { }\0A" diff --git a/clang/test/CodeGen/debug-info-enum-case-val.c b/clang/test/CodeGen/debug-info-enum-case-val.c deleted file mode 100644 index f39de0d..0000000 --- a/clang/test/CodeGen/debug-info-enum-case-val.c +++ /dev/null @@ -1,30 +0,0 @@ -// RUN: %clang_cc1 -emit-llvm -debug-info-kind=limited %s -o - | FileCheck %s - -enum { A = 1 }; -int func1(int a) { - switch(a) { - case A: return 10; - default: break; - } - return 0; -} -// CHECK: !DICompositeType(tag: DW_TAG_enumeration_type -// CHECK-SAME: elements: [[TEST1_ENUMS:![0-9]*]] -// CHECK: [[TEST1_ENUMS]] = !{[[TEST1_E:![0-9]*]]} -// CHECK: [[TEST1_E]] = !DIEnumerator(name: "A", value: 1) - -// Test ImplicitCast of switch case enum value -enum { B = 2 }; -typedef unsigned long long __t1; -typedef __t1 __t2; -int func2(__t2 a) { - switch(a) { - case B: return 10; - default: break; - } - return 0; -} -// CHECK: !DICompositeType(tag: DW_TAG_enumeration_type -// CHECK-SAME: elements: [[TEST2_ENUMS:![0-9]*]] -// CHECK: [[TEST2_ENUMS]] = !{[[TEST2_E:![0-9]*]]} -// CHECK: [[TEST2_E]] = !DIEnumerator(name: "B", value: 2) diff --git a/clang/test/CodeGen/debug-info-enum-extensibility.c b/clang/test/CodeGen/debug-info-enum-extensibility.c deleted file mode 100644 index 4f8a42b..0000000 --- a/clang/test/CodeGen/debug-info-enum-extensibility.c +++ /dev/null @@ -1,49 +0,0 @@ -// RUN: %clang_cc1 -emit-llvm -debug-info-kind=limited %s -o - | FileCheck %s - -// CHECK-NOT: enumKind -// CHECK: !DICompositeType(tag: DW_TAG_enumeration_type, name: "ClosedEnum" -// CHECK-SAME: enumKind: DW_APPLE_ENUM_KIND_Closed) -// CHECK: !DICompositeType(tag: DW_TAG_enumeration_type, name: "OpenEnum" -// CHECK-SAME: enumKind: DW_APPLE_ENUM_KIND_Open) -// CHECK: !DICompositeType(tag: DW_TAG_enumeration_type, name: "ClosedFlagEnum" -// CHECK-SAME: enumKind: DW_APPLE_ENUM_KIND_Closed) -// CHECK: !DICompositeType(tag: DW_TAG_enumeration_type, name: "OpenFlagEnum" -// CHECK-SAME: enumKind: DW_APPLE_ENUM_KIND_Open) -// CHECK: !DICompositeType(tag: DW_TAG_enumeration_type, name: "MixedEnum" -// CHECK-SAME: enumKind: DW_APPLE_ENUM_KIND_Open) - -enum Enum { - E0, E1 -}; - -enum FlagEnum { - FE0 = 1 << 0, FE1 = 1 << 1 -}; - -enum __attribute__((enum_extensibility(closed))) ClosedEnum { - A0, A1 -}; - -enum __attribute__((enum_extensibility(open))) OpenEnum { - B0, B1 -}; - -enum __attribute__((enum_extensibility(closed),flag_enum)) ClosedFlagEnum { - C0 = 1 << 0, C1 = 1 << 1 -}; - -enum __attribute__((enum_extensibility(open),flag_enum)) OpenFlagEnum { - D0 = 1 << 0, D1 = 1 << 1 -}; - -enum __attribute__((enum_extensibility(open), enum_extensibility(closed))) MixedEnum { - M0, M1 -}; - -enum Enum e; -enum FlagEnum fe; -enum ClosedEnum ce; -enum OpenEnum oe; -enum ClosedFlagEnum cfe; -enum OpenFlagEnum ofe; -enum MixedEnum me; diff --git a/clang/test/CodeGen/debug-info-enum.c b/clang/test/CodeGen/debug-info-enum.c deleted file mode 100644 index 5454eb5..0000000 --- a/clang/test/CodeGen/debug-info-enum.c +++ /dev/null @@ -1,11 +0,0 @@ -// RUN: %clang_cc1 -emit-llvm -debug-info-kind=limited %s -o - | FileCheck %s - -// CHECK: !DICompositeType(tag: DW_TAG_enumeration_type, name: "e" -// CHECK-SAME: elements: [[TEST3_ENUMS:![0-9]*]] -// CHECK: [[TEST3_ENUMS]] = !{[[TEST3_E:![0-9]*]]} -// CHECK: [[TEST3_E]] = !DIEnumerator(name: "E", value: -1) - -enum e; -void func(enum e *p) { -} -enum e { E = -1 }; diff --git a/clang/test/CodeGen/debug-info-enum.cpp b/clang/test/CodeGen/debug-info-enum.cpp deleted file mode 100644 index 4d83fdc..0000000 --- a/clang/test/CodeGen/debug-info-enum.cpp +++ /dev/null @@ -1,100 +0,0 @@ -// Test enumeration representation in debuig info metadata: -// * test value representation for each possible underlying integer type -// * test the integer type is as expected -// * test the DW_AT_enum_class attribute is present (resp. absent) as expected. - -// RUN: %clang -target x86_64-linux -g -S -emit-llvm -o - %s | FileCheck %s - - -enum class E0 : signed char { - A0 = -128, - B0 = 127, -} x0; -// CHECK: !DICompositeType(tag: DW_TAG_enumeration_type, name: "E0" -// CHECK-SAME: baseType: ![[SCHAR:[0-9]+]] -// CHECK-SAME: DIFlagEnumClass -// CHECK-SAME: elements: ![[ELTS0:[0-9]+]] -// CHECK: ![[SCHAR]] = !DIBasicType(name: "signed char", size: 8, encoding: DW_ATE_signed_char) -// CHECK: ![[ELTS0]] = !{![[A0:[0-9]+]], ![[B0:[0-9]+]]} -// CHECK: ![[A0]] = !DIEnumerator(name: "A0", value: -128) -// CHECK: ![[B0]] = !DIEnumerator(name: "B0", value: 127) - -enum class E1 : unsigned char { A1 = 255 } x1; -// CHECK: !DICompositeType(tag: DW_TAG_enumeration_type, name: "E1" -// CHECK-SAME: baseType: ![[UCHAR:[0-9]+]] -// CHECK-SAME: DIFlagEnumClass -// CHECK-SAME: elements: ![[ELTS1:[0-9]+]] -// CHECK: ![[UCHAR]] = !DIBasicType(name: "unsigned char", size: 8, encoding: DW_ATE_unsigned_char) -// CHECK: ![[ELTS1]] = !{![[A1:[0-9]+]]} -// CHECK: ![[A1]] = !DIEnumerator(name: "A1", value: 255, isUnsigned: true) - -enum class E2 : signed short { - A2 = -32768, - B2 = 32767, -} x2; -// CHECK: !DICompositeType(tag: DW_TAG_enumeration_type, name: "E2" -// CHECK-SAME: baseType: ![[SHORT:[0-9]+]] -// CHECK-SAME: DIFlagEnumClass -// CHECK-SAME: elements: ![[ELTS2:[0-9]+]] -// CHECK: ![[SHORT]] = !DIBasicType(name: "short", size: 16, encoding: DW_ATE_signed) -// CHECK: ![[ELTS2]] = !{![[A2:[0-9]+]], ![[B2:[0-9]+]]} -// CHECK: ![[A2]] = !DIEnumerator(name: "A2", value: -32768) -// CHECK: ![[B2]] = !DIEnumerator(name: "B2", value: 32767) - -enum class E3 : unsigned short { A3 = 65535 } x3; -// CHECK: !DICompositeType(tag: DW_TAG_enumeration_type, name: "E3" -// CHECK-SAME: baseType: ![[USHORT:[0-9]+]] -// CHECK-SAME: DIFlagEnumClass -// CHECK-SAME: elements: ![[ELTS3:[0-9]+]] -// CHECK: ![[USHORT]] = !DIBasicType(name: "unsigned short", size: 16, encoding: DW_ATE_unsigned) -// CHECK: ![[ELTS3]] = !{![[A3:[0-9]+]]} -// CHECK: ![[A3]] = !DIEnumerator(name: "A3", value: 65535, isUnsigned: true) - -enum class E4 : signed int { A4 = -2147483648, B4 = 2147483647 } x4; -// CHECK: !DICompositeType(tag: DW_TAG_enumeration_type, name: "E4" -// CHECK-SAME: baseType: ![[INT:[0-9]+]] -// CHECK-SAME: DIFlagEnumClass -// CHECK-SAME: elements: ![[ELTS4:[0-9]+]] -// CHECK: ![[INT]] = !DIBasicType(name: "int", size: 32, encoding: DW_ATE_signed) -// CHECK: ![[ELTS4]] = !{![[A4:[0-9]+]], ![[B4:[0-9]+]]} -// CHECK: ![[A4]] = !DIEnumerator(name: "A4", value: -2147483648) -// CHECK: ![[B4]] = !DIEnumerator(name: "B4", value: 2147483647) - -enum class E5 : unsigned int { A5 = 4294967295 } x5; -// CHECK: !DICompositeType(tag: DW_TAG_enumeration_type, name: "E5" -// CHECK-SAME: baseType: ![[UINT:[0-9]+]] -// CHECK-SAME: DIFlagEnumClass -// CHECK-SAME: elements: ![[ELTS5:[0-9]+]] -// CHECK: ![[UINT]] = !DIBasicType(name: "unsigned int", size: 32, encoding: DW_ATE_unsigned) -// CHECK: ![[ELTS5]] = !{![[A5:[0-9]+]]} -// CHECK: ![[A5]] = !DIEnumerator(name: "A5", value: 4294967295, isUnsigned: true) - -enum class E6 : signed long long { - A6 = -9223372036854775807LL - 1, - B6 = 9223372036854775807LL -} x6; -// CHECK: !DICompositeType(tag: DW_TAG_enumeration_type, name: "E6" -// CHECK-SAME: baseType: ![[LONG:[0-9]+]] -// CHECK-SAME: DIFlagEnumClass -// CHECK-SAME: elements: ![[ELTS6:[0-9]+]] -// CHECK: ![[LONG]] = !DIBasicType(name: "long long", size: 64, encoding: DW_ATE_signed) -// CHECK: ![[ELTS6]] = !{![[A6:[0-9]+]], ![[B6:[0-9]+]]} -// CHECK: ![[A6]] = !DIEnumerator(name: "A6", value: -9223372036854775808) -// CHECK: ![[B6]] = !DIEnumerator(name: "B6", value: 9223372036854775807) - -enum class E7 : unsigned long long { A7 = 18446744073709551615ULL } x7; -// CHECK: !DICompositeType(tag: DW_TAG_enumeration_type, name: "E7" -// CHECK-SAME: baseType: ![[ULONG:[0-9]+]] -// CHECK-SAME: DIFlagEnumClass -// CHECK-SAME: elements: ![[ELTS7:[0-9]+]] -// CHECK: ![[ULONG]] = !DIBasicType(name: "unsigned long long", size: 64, encoding: DW_ATE_unsigned) -// CHECK: ![[ELTS7]] = !{![[A7:[0-9]+]]} -// CHECK: ![[A7]] = !DIEnumerator(name: "A7", value: 18446744073709551615, isUnsigned: true) - -// Also test the FixedEnum flag is not present for old-style enumerations. -enum E8 { A8 = -128, B8 = 127 } x8; -// CHECK: !DICompositeType(tag: DW_TAG_enumeration_type, name: "E8" -// CHECK-SAME: baseType: ![[INT]] -// CHECK-NOT: DIFlagEnumClass -// CHECK: !DIEnumerator(name: "A8", value: -128) - diff --git a/clang/test/CodeGen/debug-info-extern-basic.c b/clang/test/CodeGen/debug-info-extern-basic.c deleted file mode 100644 index 13b8811..0000000 --- a/clang/test/CodeGen/debug-info-extern-basic.c +++ /dev/null @@ -1,26 +0,0 @@ -// RUN: %clang_cc1 -x c -debug-info-kind=limited -triple bpf-linux-gnu -emit-llvm %s -o - | FileCheck %s - -extern char ch; -int test(void) { - return ch; -} - -int test2(void) { - extern char ch2; - return ch2; -} - -extern int (*foo)(int); -int test3(void) { - return foo(0); -} - -// CHECK: distinct !DIGlobalVariable(name: "ch",{{.*}} type: ![[CHART:[0-9]+]], isLocal: false, isDefinition: false -// CHECK: distinct !DIGlobalVariable(name: "ch2",{{.*}} type: ![[CHART]], isLocal: false, isDefinition: false -// CHECK: ![[CHART]] = !DIBasicType(name: "char", size: 8, encoding: DW_ATE_signed_char) - -// CHECK: distinct !DIGlobalVariable(name: "foo",{{.*}} type: ![[FUNC:[0-9]+]], isLocal: false, isDefinition: false) -// CHECK: ![[FUNC]] = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: ![[SUB:[0-9]+]], size: 64) -// CHECK: ![[SUB]] = !DISubroutineType(types: ![[TYPES:[0-9]+]]) -// CHECK: ![[TYPES]] = !{![[BASET:[0-9]+]], ![[BASET]]} -// CHECK: ![[BASET]] = !DIBasicType(name: "int", size: 32, encoding: DW_ATE_signed) diff --git a/clang/test/CodeGen/debug-info-extern-basic.cpp b/clang/test/CodeGen/debug-info-extern-basic.cpp deleted file mode 100644 index 1756690..0000000 --- a/clang/test/CodeGen/debug-info-extern-basic.cpp +++ /dev/null @@ -1,25 +0,0 @@ -// RUN: %clang_cc1 -x c++ -debug-info-kind=limited -triple bpf-linux-gnu -emit-llvm %s -o - | FileCheck %s - -namespace foo { - -template <typename T> -struct S { - T x; -}; - -extern S<char> s; - -int test(void) { - return s.x; -} - -} // namespace foo - -// CHECK: distinct !DIGlobalVariable(name: "s", scope: ![[NAMESPACE:[0-9]+]],{{.*}} type: ![[STRUCT_TYPE:[0-9]+]], isLocal: false, isDefinition: false) -// CHECK: ![[NAMESPACE]] = !DINamespace(name: "foo", scope: null) -// CHECK: ![[STRUCT_TYPE]] = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "S<char>",{{.*}}size: 8, flags: DIFlagTypePassByValue, elements: ![[ELEMENT_TYPE:[0-9]+]], templateParams: ![[TEMPLATE_TYPE:[0-9]+]], identifier: "_ZTSN3foo1SIcEE") -// CHECK: ![[ELEMENT_TYPE]] = !{![[ELEMENT_TYPE:[0-9]+]]} -// CHECK: ![[ELEMENT_TYPE]] = !DIDerivedType(tag: DW_TAG_member, name: "x",{{.*}} baseType: ![[BASE_TYPE:[0-9]+]], size: 8) -// CHECK: ![[BASE_TYPE]] = !DIBasicType(name: "char", size: 8, encoding: DW_ATE_signed_char) -// CHECK: ![[TEMPLATE_TYPE]] = !{![[TEMPLATE_TYPE:[0-9]+]]} -// CHECK: ![[TEMPLATE_TYPE]] = !DITemplateTypeParameter(name: "T", type: ![[BASE_TYPE]]) diff --git a/clang/test/CodeGen/debug-info-extern-call.c b/clang/test/CodeGen/debug-info-extern-call.c deleted file mode 100644 index 0d18dc4..0000000 --- a/clang/test/CodeGen/debug-info-extern-call.c +++ /dev/null @@ -1,51 +0,0 @@ -// When entry values are emitted, expect a subprogram for extern decls so that -// the dwarf generator can describe call site parameters at extern call sites. -// -// Initial implementation relied on the 'retainedTypes:' from the corresponding -// DICompileUnit, so we also ensure that we do not store the extern declaration -// subprogram into the 'retainedTypes:'. -// -// RUN: %clang -g -O2 -target x86_64-none-linux-gnu -S -emit-llvm %s -o - \ -// RUN: | FileCheck %s -check-prefix=DECLS-FOR-EXTERN - -// Similarly, when the debugger tuning is gdb, expect a subprogram for extern -// decls so that the dwarf generator can describe information needed for tail -// call frame reconstrution. -// -// RUN: %clang -gdwarf-4 -O2 -target x86_64-none-linux-gnu -ggdb -S -emit-llvm %s -o - \ -// RUN: | FileCheck %s -check-prefix=DECLS-FOR-EXTERN -// -// Do not emit a subprogram for extern decls when entry values are disabled and -// the tuning is not set to gdb. -// -// RUN: %clang -gdwarf-4 -O2 -target x86_64-none-linux-gnu -gsce -S -emit-llvm %s -o - \ -// RUN: | FileCheck %s -check-prefix=NO-DECLS-FOR-EXTERN - -// DECLS-FOR-EXTERN-NOT: !DICompileUnit({{.*}}retainedTypes: !{{[0-9]+}} -// DECLS-FOR-EXTERN: [[INT_TYPE:![0-9]+]] = !DIBasicType(name: "int", -// DECLS-FOR-EXTERN: !DISubprogram(name: "fn1" -// DECLS-FOR-EXTERN-SAME: type: [[FN1_TYPE:![0-9]+]], -// DECLS-FOR-EXTERN: [[FN1_TYPE]] = !DISubroutineType(types: [[FN1_TYPES:![0-9]+]]) -// DECLS-FOR-EXTERN: [[FN1_TYPES]] = !{[[X_TYPE:![0-9]+]], -// DECLS-FOR-EXTERN: [[X_TYPE]] = !DIDerivedType(tag: DW_TAG_typedef, name: "x", -// DECLS-FOR-EXTERN-SAME: baseType: [[INT_TYPE]]) -// DECLS-FOR-EXTERN: !DISubprogram(name: "memcmp" -// DECLS-FOR-EXTERN: !DISubprogram(name: "__some_reserved_name" - -// NO-DECLS-FOR-EXTERN-NOT: !DISubprogram(name: "fn1" -// NO-DECLS-FOR-EXTERN-NOT: !DISubprogram(name: "memcmp" -// NO-DECLS-FOR-EXTERN-NOT: !DISubprogram(name: "__some_reserved_name" - -typedef int x; -extern x fn1(int a, int b); -extern int memcmp(const void *s1, const void *s2, unsigned long n); -extern void __some_reserved_name(void); - -int fn2 (int *src, int *dst) { - int x = 4, y = 5; - int res = fn1(x, y); - int res2 = memcmp(dst, src, res); - __some_reserved_name(); - return res + res2; -} - diff --git a/clang/test/CodeGen/debug-info-extern-callback.c b/clang/test/CodeGen/debug-info-extern-callback.c deleted file mode 100644 index a9f210c..0000000 --- a/clang/test/CodeGen/debug-info-extern-callback.c +++ /dev/null @@ -1,22 +0,0 @@ -// RUN: %clang_cc1 -x c -debug-info-kind=limited -triple bpf-linux-gnu -emit-llvm %s -o - | FileCheck %s - -extern int do_work1(int); -long bpf_helper1(void *callback_fn); -long prog1(void) { - return bpf_helper1(&do_work1); -} - -extern int do_work2(void); -long prog2_1(void) { - return (long)&do_work2; -} -int do_work2(void) { return 0; } -long prog2_2(void) { - return (long)&do_work2; -} - -// CHECK: declare !dbg ![[FUNC1:[0-9]+]] i32 @do_work1 -// CHECK: define dso_local i32 @do_work2() #{{[0-9]+}} !dbg ![[FUNC2:[0-9]+]] - -// CHECK: ![[FUNC1]] = !DISubprogram(name: "do_work1" -// CHECK: ![[FUNC2]] = distinct !DISubprogram(name: "do_work2" diff --git a/clang/test/CodeGen/debug-info-extern-duplicate.c b/clang/test/CodeGen/debug-info-extern-duplicate.c deleted file mode 100644 index 597865c..0000000 --- a/clang/test/CodeGen/debug-info-extern-duplicate.c +++ /dev/null @@ -1,10 +0,0 @@ -// RUN: %clang_cc1 -x c -debug-info-kind=limited -triple bpf-linux-gnu -emit-llvm %s -o - | FileCheck %s - -extern char ch; -extern char ch; -int test(void) { - return ch; -} - -// CHECK: distinct !DIGlobalVariable(name: "ch",{{.*}} type: ![[T:[0-9]+]], isLocal: false, isDefinition: false -// CHECK-NOT: distinct !DIGlobalVariable(name: "ch" diff --git a/clang/test/CodeGen/debug-info-extern-multi.c b/clang/test/CodeGen/debug-info-extern-multi.c deleted file mode 100644 index c8a355b..0000000 --- a/clang/test/CodeGen/debug-info-extern-multi.c +++ /dev/null @@ -1,22 +0,0 @@ -// RUN: %clang_cc1 -x c -debug-info-kind=limited -triple bpf-linux-gnu -emit-llvm %s -o - | FileCheck %s - -extern char ch; -int test(void) { - extern short sh; - return ch + sh; -} - -extern char (*foo)(char); -int test2(void) { - return foo(0) + ch; -} - -// CHECK: distinct !DIGlobalVariable(name: "ch",{{.*}} type: ![[Tch:[0-9]+]], isLocal: false, isDefinition: false -// CHECK: distinct !DIGlobalVariable(name: "sh",{{.*}} type: ![[Tsh:[0-9]+]], isLocal: false, isDefinition: false -// CHECK: ![[Tsh]] = !DIBasicType(name: "short", size: 16, encoding: DW_ATE_signed) - -// CHECK: distinct !DIGlobalVariable(name: "foo",{{.*}} type: ![[Tptr:[0-9]+]], isLocal: false, isDefinition: false -// ![[Tptr]] = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: ![[Tsub:[0-9]+]], size: 64) -// ![[Tsub]] = !DISubroutineType(types: ![[Tproto:[0-9]+]]) -// ![[Tproto]] = !{![[Tch]], ![[Tch]]} -// CHECK: ![[Tch]] = !DIBasicType(name: "char", size: 8, encoding: DW_ATE_signed_char) diff --git a/clang/test/CodeGen/debug-info-extern-unused.c b/clang/test/CodeGen/debug-info-extern-unused.c deleted file mode 100644 index 52b3b1b..0000000 --- a/clang/test/CodeGen/debug-info-extern-unused.c +++ /dev/null @@ -1,26 +0,0 @@ -// RUN: %clang_cc1 -x c -debug-info-kind=limited -triple bpf-linux-gnu -emit-llvm %s -o - | FileCheck %s - -extern char ch; -int test(void) { - return 0; -} - -int test2(void) { - extern char ch2; - return 0; -} - -extern int (*foo)(int); -int test3(void) { - return 0; -} - -int test4(void) { - extern int (*foo2)(int); - return 0; -} - -// CHECK-NOT: distinct !DIGlobalVariable(name: "ch" -// CHECK-NOT: distinct !DIGlobalVariable(name: "ch2" -// CHECK-NOT: distinct !DIGlobalVariable(name: "foo" -// CHECK-NOT: distinct !DIGlobalVariable(name: "foo2" diff --git a/clang/test/CodeGen/debug-info-file-change.c b/clang/test/CodeGen/debug-info-file-change.c deleted file mode 100644 index 94e3c9d..0000000 --- a/clang/test/CodeGen/debug-info-file-change.c +++ /dev/null @@ -1,21 +0,0 @@ -// RUN: %clang -emit-llvm -S -g %s -o - | FileCheck %s - -// There are no lexical blocks, but we need two DILexicalBlockFiles to -// correctly represent file info. - -int foo(void) { - int i = 1; -# 4 "m.c" -# 1 "m.h" 1 - int j = 2; -# 2 "m.h" -# 5 "m.c" 2 - return i + j; -} - -// CHECK-NOT: !DILexicalBlock -// CHECK: !DILexicalBlockFile({{.*}}file: ![[MH:[0-9]+]] -// CHECK: !DIFile(filename: "m.h" -// CHECK: !DILexicalBlockFile({{.*}}file: ![[MC:[0-9]+]] -// CHECK: !DIFile(filename: "m.c" -// CHECK-NOT: !DILexicalBlock diff --git a/clang/test/CodeGen/debug-info-file-checksum.c b/clang/test/CodeGen/debug-info-file-checksum.c deleted file mode 100644 index 30138e7..0000000 --- a/clang/test/CodeGen/debug-info-file-checksum.c +++ /dev/null @@ -1,36 +0,0 @@ -// AIX does not support -gdwarf-5. -// UNSUPPORTED: target={{.*}}-aix{{.*}} - -// RUN: %clang -emit-llvm -S -g -gcodeview -x c \ -// RUN: %S/Inputs/debug-info-file-checksum.c -o - | FileCheck %s -// RUN: %clang -emit-llvm -S -g -gcodeview -Xclang -gsrc-hash=md5 \ -// RUN: -x c %S/Inputs/debug-info-file-checksum.c -o - | FileCheck %s -// RUN: %clang -emit-llvm -S -g -gcodeview -Xclang -gsrc-hash=sha1 \ -// RUN: -x c %S/Inputs/debug-info-file-checksum.c -o - \ -// RUN: | FileCheck --check-prefix=SHA1 %s -// RUN: %clang -emit-llvm -S -g -gcodeview -Xclang -gsrc-hash=sha256 \ -// RUN: -x c %S/Inputs/debug-info-file-checksum.c -o - \ -// RUN: | FileCheck --check-prefix=SHA256 %s -// RUN: %clang -emit-llvm -S -g -gcodeview -x c %S/Inputs/debug-info-file-checksum.c -o - | FileCheck %s -// RUN: %clang -emit-llvm -S -gdwarf-5 -x c %S/Inputs/debug-info-file-checksum.c -o - | FileCheck %s -// RUN: %clang -emit-llvm -S -gdwarf-5 -Xclang -gsrc-hash=md5 -x c %S/Inputs/debug-info-file-checksum.c -o - | FileCheck %s -// RUN: %clang -emit-llvm -S -gdwarf-5 -Xclang -gsrc-hash=none -x c %S/Inputs/debug-info-file-checksum.c -o - | FileCheck %s --check-prefix=NONE - -// Check that "checksum" is created correctly for the compiled file. - -// CHECK: !DIFile(filename:{{.*}}, directory:{{.*}}, checksumkind: CSK_MD5, checksum: "a3b7d27af071accdeccaa933fc603608") -// SHA1: !DIFile(filename:{{.*}}, directory:{{.*}}, checksumkind: CSK_SHA1, checksum: "6f6eeaba705ad6db6fbb05c2cbcf3cbb3e374bcd") -// SHA256: !DIFile(filename:{{.*}}, directory:{{.*}}, checksumkind: CSK_SHA256, checksum: "2d49b53859e57898a0f8c16ff1fa4d99306b8ec28d65cf7577109761f0d56197") -// NONE: !DIFile(filename:{{.*}}, directory:{{.*}}) - -// Ensure #line directives (in already pre-processed files) do not emit checksums -// RUN: %clang -emit-llvm -S -g -gcodeview -x c %S/Inputs/debug-info-file-checksum-pre.cpp -o - | FileCheck %s --check-prefix NOCHECKSUM - -// NOCHECKSUM: !DIFile(filename: "{{.*}}code-coverage-filter1.h", directory: "{{[^"]*}}") -// NOCHECKSUM: !DIFile(filename: "{{.*}}code-coverage-filter2.h", directory: "{{[^"]*}}") -// NOCHECKSUM: !DIFile(filename: "{{.*}}debug-info-file-checksum.c", directory: "{{[^"]*}}") - -// Ensure #line directives without name do emit checksums -// RUN: %clang -emit-llvm -S -g -gcodeview -x c %S/Inputs/debug-info-file-checksum-line.cpp -o - | FileCheck %s --check-prefix CHECKSUM - -// CHECKSUM: !DIFile(filename: "{{.*}}debug-info-file-checksum-line.cpp", directory:{{.*}}, checksumkind: CSK_MD5, checksum: "e13bca9b34ed822d596a519c9ce60995") diff --git a/clang/test/CodeGen/debug-info-gline-tables-only.c b/clang/test/CodeGen/debug-info-gline-tables-only.c deleted file mode 100644 index 6321edd..0000000 --- a/clang/test/CodeGen/debug-info-gline-tables-only.c +++ /dev/null @@ -1,33 +0,0 @@ -// RUN: %clang_cc1 %s -debug-info-kind=line-tables-only -emit-llvm -o - | FileCheck %s -// RUN: %clang_cc1 %s -debug-info-kind=line-directives-only -emit-llvm -o - | FileCheck %s -// Checks that clang with "-gline-tables-only" or "-gline-directives-only" doesn't emit debug info -// for variables and types. - -// CHECK-NOT: DW_TAG_variable -int global = 42; - -// CHECK-NOT: DW_TAG_typedef -// CHECK-NOT: DW_TAG_const_type -// CHECK-NOT: DW_TAG_pointer_type -// CHECK-NOT: DW_TAG_array_type -typedef const char* constCharPtrArray[10]; - -// CHECK-NOT: DW_TAG_structure_type -struct S { - // CHECK-NOT: DW_TAG_member - char a; - double b; - constCharPtrArray c; -}; - -// CHECK-NOT: DW_TAG_enumerator -// CHECK-NOT: DW_TAG_enumeration_type -enum E { ZERO = 0, ONE = 1 }; - -// CHECK-NOT: DILocalVariable -int sum(int p, int q) { - int r = p + q; - struct S s; - enum E e; - return r; -} diff --git a/clang/test/CodeGen/debug-info-gline-tables-only2.c b/clang/test/CodeGen/debug-info-gline-tables-only2.c deleted file mode 100644 index 204fd6d..0000000 --- a/clang/test/CodeGen/debug-info-gline-tables-only2.c +++ /dev/null @@ -1,14 +0,0 @@ -// RUN: %clang_cc1 %s -debug-info-kind=line-tables-only -emit-llvm -o - | FileCheck %s -// RUN: %clang_cc1 %s -debug-info-kind=line-directives-only -emit-llvm -o - | FileCheck %s -// Checks that clang with "-gline-tables-only" or "-gline-directives-only" emits metadata for -// compile unit, subprogram and file. - -int main(void) { - // CHECK: ret i32 0, !dbg - return 0; -} - -// CHECK: !llvm.dbg.cu = !{!0} -// CHECK: !DICompileUnit( -// CHECK: !DISubprogram( -// CHECK: !DIFile( diff --git a/clang/test/CodeGen/debug-info-global-constant.c b/clang/test/CodeGen/debug-info-global-constant.c deleted file mode 100644 index 80e4651..0000000 --- a/clang/test/CodeGen/debug-info-global-constant.c +++ /dev/null @@ -1,17 +0,0 @@ -// RUN: %clang_cc1 -emit-llvm -debug-info-kind=standalone \ -// RUN: -triple %itanium_abi_triple %s -o - | FileCheck %s - -// Debug info for a global constant whose address is taken should be emitted -// exactly once. - -// CHECK: @i = internal constant i32 1, align 4, !dbg ![[I:[0-9]+]] -// CHECK: ![[I]] = !DIGlobalVariableExpression(var: ![[VAR:.*]], expr: !DIExpression(DW_OP_constu, 1, DW_OP_stack_value)) -// CHECK: ![[VAR]] = distinct !DIGlobalVariable(name: "i", -// CHECK: !DICompileUnit({{.*}}globals: ![[GLOBALS:[0-9]+]] -// CHECK: ![[GLOBALS]] = !{![[I]]} -static const int i = 1; - -void g(const int *, int); -void f(void) { - g(&i, i); -} diff --git a/clang/test/CodeGen/debug-info-imported-entity.cpp b/clang/test/CodeGen/debug-info-imported-entity.cpp deleted file mode 100644 index 398536e..0000000 --- a/clang/test/CodeGen/debug-info-imported-entity.cpp +++ /dev/null @@ -1,10 +0,0 @@ -// RUN: %clang_cc1 -triple x86_64-unk-unk -o - -emit-llvm -debug-info-kind=limited %s | FileCheck %s - -namespace std { class A; } -using std::A; using ::A; - -// CHECK: [[CompileUnit:![0-9]+]] = distinct !DICompileUnit({{.+}} imports: [[Imports:![0-9]+]] -// CHECK: [[Imports]] = !{[[ImportedEntity:![0-9]+]]} -// CHECK: [[ImportedEntity]] = !DIImportedEntity(tag: DW_TAG_imported_declaration, scope: [[CompileUnit]], entity: [[STDA:![0-9]+]], file: [[FILE:![0-9]+]], line: 4) -// CHECK: [[STDA]] = !DICompositeType(tag: DW_TAG_class_type, name: "A", -// CHECK: [[FILE]] = !DIFile(filename: {{.*}}debug-info-imported-entity.cpp diff --git a/clang/test/CodeGen/debug-info-inline-for.c b/clang/test/CodeGen/debug-info-inline-for.c deleted file mode 100644 index 55066b2..0000000 --- a/clang/test/CodeGen/debug-info-inline-for.c +++ /dev/null @@ -1,13 +0,0 @@ -// RUN: %clang_cc1 -debug-info-kind=limited -emit-llvm -o - %s | FileCheck %s -// Check that clang emits Debug location in the phi instruction - -int func(int n) { - int a; - for(a = 10; a>0 && n++; a--); - return n; -} - -// CHECK: land.end: -// CHECK-NEXT: {{.*}} = phi i1 {{.*}} !dbg ![[DbgLoc:[0-9]+]] - -// CHECK: ![[DbgLoc]] = !DILocation(line: 0 diff --git a/clang/test/CodeGen/debug-info-limited.c b/clang/test/CodeGen/debug-info-limited.c deleted file mode 100644 index 7c20ca4..0000000 --- a/clang/test/CodeGen/debug-info-limited.c +++ /dev/null @@ -1,13 +0,0 @@ -// RUN: %clang -flimit-debug-info -emit-llvm -g -S %s -o - | FileCheck %s - -// Ensure we emit the full definition of 'foo' even though only its declaration -// is needed, since C has no ODR to ensure that the definition will be the same -// in whatever TU actually uses/requires the definition of 'foo'. -// CHECK: !DICompositeType(tag: DW_TAG_structure_type, name: "foo", -// CHECK-NOT: DIFlagFwdDecl -// CHECK-SAME: ){{$}} - -struct foo { -}; - -struct foo *f; diff --git a/clang/test/CodeGen/debug-info-line.c b/clang/test/CodeGen/debug-info-line.c deleted file mode 100644 index 13cab2e..0000000 --- a/clang/test/CodeGen/debug-info-line.c +++ /dev/null @@ -1,12 +0,0 @@ -// RUN: %clang_cc1 -w -debug-info-kind=line-tables-only -fexceptions -fcxx-exceptions -emit-llvm %s -o - | FileCheck %s -// RUN: %clang_cc1 -w -debug-info-kind=line-directives-only -fexceptions -fcxx-exceptions -emit-llvm %s -o - | FileCheck %s - -int f1(int a, int b) { - // CHECK: icmp {{.*}}, !dbg [[DBG_F1:!.*]] -#line 100 - return a // - && // - b; -} - -// CHECK: [[DBG_F1]] = !DILocation(line: 100, diff --git a/clang/test/CodeGen/debug-info-line2.c b/clang/test/CodeGen/debug-info-line2.c deleted file mode 100644 index 085fd97..0000000 --- a/clang/test/CodeGen/debug-info-line2.c +++ /dev/null @@ -1,17 +0,0 @@ -// RUN: %clang_cc1 -triple x86_64-darwin-apple -debug-info-kind=limited -emit-llvm -o - %s | FileCheck %s - -int bar(void); -int foo(int i) { - int j = 0; - if (i) { - j = bar(); - } - else - { - // CHECK: add nsw - // CHECK-NEXT: store i32 %{{[a-zA-Z0-9]+}} - // CHECK-NOT: br label %{{[a-zA-Z0-9\.]+}}, !dbg - j = bar() + 2; - } - return j; -} diff --git a/clang/test/CodeGen/debug-info-line3.c b/clang/test/CodeGen/debug-info-line3.c deleted file mode 100644 index b2da4ef..0000000 --- a/clang/test/CodeGen/debug-info-line3.c +++ /dev/null @@ -1,16 +0,0 @@ -// RUN: %clang_cc1 -debug-info-kind=limited -emit-llvm %s -o - | FileCheck %s - -void func(char c, char* d) -{ - *d = c + 1; - return; - - - - - - -} - -// CHECK: ret void, !dbg [[LINE:.*]] -// CHECK: [[LINE]] = !DILocation(line: 6, diff --git a/clang/test/CodeGen/debug-info-line4.c b/clang/test/CodeGen/debug-info-line4.c deleted file mode 100644 index 3c99fc5..0000000 --- a/clang/test/CodeGen/debug-info-line4.c +++ /dev/null @@ -1,11 +0,0 @@ -// RUN: %clang %s -g -gcolumn-info -S -emit-llvm -o - | FileCheck %s -// Checks that clang emits column information when -gcolumn-info is passed. - -int foo(int a, int b) { int c = a + b; - - - return c; -} - -// Without column information we wouldn't change locations for b. -// CHECK: !DILocation(line: 4, column: 20, diff --git a/clang/test/CodeGen/debug-info-lto.c b/clang/test/CodeGen/debug-info-lto.c deleted file mode 100644 index 5dab0a1..0000000 --- a/clang/test/CodeGen/debug-info-lto.c +++ /dev/null @@ -1,4 +0,0 @@ -// RUN: %clang_cc1 -flto -emit-llvm -debug-info-kind=standalone %s -o - | FileCheck %s -// RUN: %clang_cc1 -flto=thin -emit-llvm -debug-info-kind=standalone %s -o - | FileCheck %s -// The "o" in LTO stands for optimization! -// CHECK: !DICompileUnit({{.*}} isOptimized: true diff --git a/clang/test/CodeGen/debug-info-macro.c b/clang/test/CodeGen/debug-info-macro.c deleted file mode 100644 index 23fd675..0000000 --- a/clang/test/CodeGen/debug-info-macro.c +++ /dev/null @@ -1,57 +0,0 @@ -// RUN: %clang_cc1 -emit-llvm -debug-info-kind=line-tables-only -debug-info-macro %s -o - "-DC1(x)=( x + 5 )" -DA -include %S/Inputs/debug-info-macro.h -UC1 | FileCheck -check-prefixes=CHECK,NO_PCH %s -// RUN: %clang_cc1 -emit-llvm -debug-info-kind=line-directives-only -debug-info-macro %s -o - "-DC1(x)=( x + 5 )" -DA -include %S/Inputs/debug-info-macro.h -UC1 | FileCheck -check-prefixes=CHECK,NO_PCH %s -// RUN: %clang_cc1 -emit-llvm -debug-info-kind=limited -debug-info-macro %s -o - "-DC1(x)=( x + 5 )" -DA -include %S/Inputs/debug-info-macro.h -UC1 | FileCheck -check-prefixes=CHECK,NO_PCH %s -// RUN: %clang_cc1 -emit-llvm -debug-info-kind=standalone -debug-info-macro %s -o - "-DC1(x)=( x + 5 )" -DA -include %S/Inputs/debug-info-macro.h -UC1 | FileCheck -check-prefixes=CHECK,NO_PCH %s -// RUN: %clang_cc1 -emit-llvm -debug-info-macro %s -o - "-DC1(x)=( x + 5 )" -DA -include %S/Inputs/debug-info-macro.h -UC1 | FileCheck -check-prefixes=NO_MACRO %s - -// RUN: %clang_cc1 -debug-info-kind=limited -debug-info-macro %S/Inputs/debug-info-macro.h -emit-pch -o %t.pch -DC3 -// RUN: %clang_cc1 -emit-llvm -debug-info-kind=limited -debug-info-macro %s -o - -include-pch %t.pch "-DC1(x)=( x + 5 )" -DA -include %S/Inputs/debug-info-macro.h -UC1 | FileCheck -check-prefixes=CHECK,PCH %s - -// This test checks that macro Debug info is correctly generated. - -// TODO: Check for an following entry once support macros defined in pch files. -// -PCH: !DIMacro(type: DW_MACINFO_define, name: "C3", value: "1")> - -#line 15 -/*Line 15*/ #define D1 1 -/*Line 16*/ #include "Inputs/debug-info-macro.h" -/*Line 17*/ #undef D1 -/*Line 18*/ #define D2 2 -/*Line 19*/ #include "Inputs/debug-info-macro.h" -/*Line 20*/ #undef D2 - -// NO_MACRO-NOT: macros -// NO_MACRO-NOT: DIMacro -// NO_MACRO-NOT: DIMacroFile - -// CHECK: !DICompileUnit({{.*}} macros: [[Macros:![0-9]+]] - -// NO_PCH: [[Macros]] = !{[[MainMacroFile:![0-9]+]], [[BuiltinMacro:![0-9]+]], {{.*}}, [[DefineC1:![0-9]+]], [[DefineA:![0-9]+]], [[UndefC1:![0-9]+]]} -// PCH: [[Macros]] = !{[[MainMacroFile:![0-9]+]], [[DefineC1:![0-9]+]], [[DefineA:![0-9]+]], [[UndefC1:![0-9]+]]} - -// CHECK: [[MainMacroFile]] = !DIMacroFile(file: [[MainFile:![0-9]+]], nodes: [[N1:![0-9]+]]) -// CHECK: [[MainFile]] = !DIFile(filename: "{{.*}}debug-info-macro.c" -// CHECK: [[N1]] = !{[[CommandLineInclude:![0-9]+]], [[DefineD1:![0-9]+]], [[FileInclude1:![0-9]+]], [[UndefD1:![0-9]+]], [[DefineD2:![0-9]+]], [[FileInclude2:![0-9]+]], [[UndefD2:![0-9]+]]} - -// CHECK: [[CommandLineInclude]] = !DIMacroFile(file: [[HeaderFile:![0-9]+]], nodes: [[N2:![0-9]+]]) -// CHECK: [[HeaderFile]] = !DIFile(filename: "{{.*}}debug-info-macro.h" -// CHECK: [[N2]] = !{[[UndefA:![0-9]+]]} -// CHECK: [[UndefA]] = !DIMacro(type: DW_MACINFO_undef, line: 11, name: "A") - -// CHECK: [[DefineD1]] = !DIMacro(type: DW_MACINFO_define, line: 15, name: "D1", value: "1") -// CHECK: [[FileInclude1]] = !DIMacroFile(line: 16, file: [[HeaderFile]], nodes: [[N3:![0-9]+]]) -// CHECK: [[N3]] = !{[[DefineAx:![0-9]+]], [[UndefA]]} -// CHECK: [[DefineAx]] = !DIMacro(type: DW_MACINFO_define, line: 3, name: "A(x,y,z)", value: "(x)") -// CHECK: [[UndefD1]] = !DIMacro(type: DW_MACINFO_undef, line: 17, name: "D1") - -// CHECK: [[DefineD2]] = !DIMacro(type: DW_MACINFO_define, line: 18, name: "D2", value: "2") -// CHECK: [[FileInclude2]] = !DIMacroFile(line: 19, file: [[HeaderFile]], nodes: [[N4:![0-9]+]]) -// CHECK: [[N4]] = !{[[DefineAy:![0-9]+]], [[UndefA]]} -// CHECK: [[DefineAy]] = !DIMacro(type: DW_MACINFO_define, line: 7, name: "A(x,y,z)", value: "(y)") -// CHECK: [[UndefD2]] = !DIMacro(type: DW_MACINFO_undef, line: 20, name: "D2") - -// NO_PCH: [[BuiltinMacro]] = !DIMacro(type: DW_MACINFO_define, name: "__llvm__", value: "1") - -// CHECK: [[DefineC1]] = !DIMacro(type: DW_MACINFO_define, name: "C1(x)", value: "( x + 5 )") -// CHECK: [[DefineA]] = !DIMacro(type: DW_MACINFO_define, name: "A", value: "1") -// CHECK: [[UndefC1]] = !DIMacro(type: DW_MACINFO_undef, name: "C1") diff --git a/clang/test/CodeGen/debug-info-matrix-types.c b/clang/test/CodeGen/debug-info-matrix-types.c deleted file mode 100644 index c16e35e..0000000 --- a/clang/test/CodeGen/debug-info-matrix-types.c +++ /dev/null @@ -1,19 +0,0 @@ -// RUN: %clang_cc1 -fenable-matrix -triple x86_64-apple-darwin %s -debug-info-kind=limited -emit-llvm -disable-llvm-passes -o - | FileCheck %s - -typedef double dx2x3_t __attribute__((matrix_type(2, 3))); - -void load_store_double(dx2x3_t *a, dx2x3_t *b) { - // CHECK-DAG: #dbg_declare(ptr %a.addr, [[EXPR_A:![0-9]+]] - // CHECK-DAG: #dbg_declare(ptr %b.addr, [[EXPR_B:![0-9]+]] - // CHECK: [[PTR_TY:![0-9]+]] = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: [[TYPEDEF:![0-9]+]], size: 64) - // CHECK: [[TYPEDEF]] = !DIDerivedType(tag: DW_TAG_typedef, name: "dx2x3_t", {{.+}} baseType: [[MATRIX_TY:![0-9]+]]) - // CHECK: [[MATRIX_TY]] = !DICompositeType(tag: DW_TAG_array_type, baseType: [[ELT_TY:![0-9]+]], size: 384, elements: [[ELEMENTS:![0-9]+]]) - // CHECK: [[ELT_TY]] = !DIBasicType(name: "double", size: 64, encoding: DW_ATE_float) - // CHECK: [[ELEMENTS]] = !{[[COLS:![0-9]+]], [[ROWS:![0-9]+]]} - // CHECK: [[COLS]] = !DISubrange(count: 3) - // CHECK: [[ROWS]] = !DISubrange(count: 2) - // CHECK: [[EXPR_A]] = !DILocalVariable(name: "a", arg: 1, {{.+}} type: [[PTR_TY]]) - // CHECK: [[EXPR_B]] = !DILocalVariable(name: "b", arg: 2, {{.+}} type: [[PTR_TY]]) - - *a = *b; -} diff --git a/clang/test/CodeGen/debug-info-member.c b/clang/test/CodeGen/debug-info-member.c deleted file mode 100644 index 87d4a74..0000000 --- a/clang/test/CodeGen/debug-info-member.c +++ /dev/null @@ -1,3 +0,0 @@ -// RUN: %clang_cc1 -emit-llvm -debug-info-kind=limited < %s | grep DW_TAG_member - -struct A { int x; } a; diff --git a/clang/test/CodeGen/debug-info-names.c b/clang/test/CodeGen/debug-info-names.c deleted file mode 100644 index a807fb8..0000000 --- a/clang/test/CodeGen/debug-info-names.c +++ /dev/null @@ -1,12 +0,0 @@ -// RUN: %clang_cc1 -triple x86_64-unknown-linux -emit-llvm -debug-info-kind=limited %s -o - | FileCheck %s -// RUN: %clang_cc1 -triple x86_64-apple-macosx10.10.0 -emit-llvm -debug-info-kind=limited %s -o - | FileCheck --check-prefix=APPLE %s -// RUN: %clang_cc1 -triple x86_64-unknown-linux -emit-llvm -debug-info-kind=limited %s -o - -gpubnames | FileCheck --check-prefix=DEFAULT %s -// RUN: %clang_cc1 -triple x86_64-unknown-linux -emit-llvm -debug-info-kind=limited %s -o - -ggnu-pubnames | FileCheck --check-prefix=GNU %s - -// CHECK: !DICompileUnit({{.*}}, nameTableKind: None -// DEFAULT-NOT: !DICompileUnit({{.*}}, nameTableKind: -// GNU: !DICompileUnit({{.*}}, nameTableKind: GNU -// APPLE: !DICompileUnit({{.*}}, nameTableKind: Apple - -void f1(void) { -} diff --git a/clang/test/CodeGen/debug-info-no-inline-line-tables.c b/clang/test/CodeGen/debug-info-no-inline-line-tables.c deleted file mode 100644 index f6c19fd..0000000 --- a/clang/test/CodeGen/debug-info-no-inline-line-tables.c +++ /dev/null @@ -1,31 +0,0 @@ -// RUN: %clang_cc1 -triple x86_64-windows-msvc -debug-info-kind=limited \ -// RUN: -gno-inline-line-tables -emit-llvm -o - %s | FileCheck %s -// RUN: %clang -gno-inline-line-tables -S -emit-llvm -o - %s | FileCheck %s \ -// RUN: -check-prefix=INLINE-FLAG -// RUN: %clang -S -emit-llvm -o - %s | FileCheck %s -check-prefix=NO-FLAG - -int x; -__attribute((always_inline)) void f(void) { - x += 1; -} -int main(void) { - f(); - x += 2; - return x; -} - -// Check that clang emits the location of the call site and not the inlined -// function in the debug info. -// CHECK: define dso_local i32 @main() -// CHECK: %{{.+}} = load i32, ptr @x, align 4, !dbg [[DbgLoc:![0-9]+]] - -// Check that the no-inline-line-tables attribute is added. -// CHECK: attributes #0 = {{.*}}"no-inline-line-tables"{{.*}} -// CHECK: attributes #1 = {{.*}}"no-inline-line-tables"{{.*}} - -// CHECK: [[DbgLoc]] = !DILocation(line: 12, -// CHECK-NOT: inlinedAt: - -// INLINE-FLAG: attributes #0 = {{.*}}"no-inline-line-tables"{{.*}} -// INLINE-FLAG: attributes #1 = {{.*}}"no-inline-line-tables"{{.*}} -// NO-FLAG-NOT: "no-inline-line-tables" diff --git a/clang/test/CodeGen/debug-info-oslog.c b/clang/test/CodeGen/debug-info-oslog.c deleted file mode 100644 index 49c361a..0000000 --- a/clang/test/CodeGen/debug-info-oslog.c +++ /dev/null @@ -1,15 +0,0 @@ -// RUN: %clang_cc1 -triple x86_64-darwin-apple -debug-info-kind=limited \ -// RUN: %s -emit-llvm -o - | FileCheck %s -void test_builtin_os_log(void *buf, int i, const char *data) { - __builtin_os_log_format(buf, "%d", i); -} - -// CHECK: define linkonce_odr {{.*}}@__os_log_helper_1_0_1_4_0( -// CHECK-SAME: !dbg ![[OS_LOG_HELPER:[0-9]+]] - -// This helper is going to be uniqued, so it should not have a line -// number between file and type. - -// CHECK: distinct !DISubprogram(linkageName: "__os_log_helper_1_0_1_4_0", -// CHECK-SAME: file: !{{.*}}, type -// CHECK-SAME: flags: DIFlagArtificial diff --git a/clang/test/CodeGen/debug-info-packed-struct.c b/clang/test/CodeGen/debug-info-packed-struct.c deleted file mode 100644 index 676cdb3..0000000 --- a/clang/test/CodeGen/debug-info-packed-struct.c +++ /dev/null @@ -1,91 +0,0 @@ -// RUN: %clang_cc1 -x c -debug-info-kind=limited -emit-llvm -triple x86_64-apple-darwin -o - %s | FileCheck %s - -// CHECK: %struct.layout3 = type <{ i8, [3 x i8], %struct.size8_pack4, i8, [3 x i8] }> -// CHECK: %struct.layout0 = type { i8, %struct.size8, i8 } -// CHECK: %struct.layout1 = type <{ i8, %struct.size8_anon, i8, [2 x i8] }> -// CHECK: %struct.layout2 = type <{ i8, %struct.size8_pack1, i8 }> - -// --------------------------------------------------------------------- -// Not packed. -// --------------------------------------------------------------------- -struct size8 { - int i : 4; - long long l : 60; -}; -struct layout0 { - char l0_ofs0; - struct size8 l0_ofs8; - int l0_ofs16 : 1; -}; -// CHECK: l0_ofs0 -// CHECK: !DIDerivedType(tag: DW_TAG_member, name: "l0_ofs8", -// CHECK-SAME: {{.*}}size: 64, offset: 64) -// CHECK: !DIDerivedType(tag: DW_TAG_member, name: "l0_ofs16", -// CHECK-SAME: {{.*}}size: 1, offset: 128, flags: DIFlagBitField, extraData: i64 128) - - -// --------------------------------------------------------------------- -// Implicitly packed. -// --------------------------------------------------------------------- -struct size8_anon { - int : 4; - long long : 60; -}; -struct layout1 { - char l1_ofs0; - struct size8_anon l1_ofs1; - int l1_ofs9 : 1; -}; -// CHECK: l1_ofs0 -// CHECK: !DIDerivedType(tag: DW_TAG_member, name: "l1_ofs1", -// CHECK-SAME: {{.*}}size: 64, offset: 8) -// CHECK: !DIDerivedType(tag: DW_TAG_member, name: "l1_ofs9", -// CHECK-SAME: {{.*}}size: 1, offset: 72, flags: DIFlagBitField, extraData: i64 72) - - -// --------------------------------------------------------------------- -// Explicitly packed. -// --------------------------------------------------------------------- -#pragma pack(1) -struct size8_pack1 { - int i : 4; - long long l : 60; -}; -struct layout2 { - char l2_ofs0; - struct size8_pack1 l2_ofs1; - int l2_ofs9 : 1; -}; -#pragma pack() -// CHECK: l2_ofs0 -// CHECK: !DIDerivedType(tag: DW_TAG_member, name: "l2_ofs1", -// CHECK-SAME: {{.*}}size: 64, align: 8, offset: 8) -// CHECK: !DIDerivedType(tag: DW_TAG_member, name: "l2_ofs9", -// CHECK-SAME: {{.*}}size: 1, offset: 72, flags: DIFlagBitField, extraData: i64 72) - - - -// --------------------------------------------------------------------- -// Explicitly packed with different alignment. -// --------------------------------------------------------------------- -#pragma pack(4) -struct size8_pack4 { - int i : 4; - long long l : 60; -}; -struct layout3 { - char l3_ofs0; - struct size8_pack4 l3_ofs4; - int l3_ofs12 : 1; -}; -#pragma pack() -// CHECK: l3_ofs0 -// CHECK: !DIDerivedType(tag: DW_TAG_member, name: "l3_ofs4", -// CHECK-SAME: {{.*}}size: 64, align: 32, offset: 32) -// CHECK: !DIDerivedType(tag: DW_TAG_member, name: "l3_ofs12", -// CHECK-SAME: {{.*}}size: 1, offset: 96, flags: DIFlagBitField, extraData: i64 96) - -struct layout3 l3; -struct layout0 l0; -struct layout1 l1; -struct layout2 l2; diff --git a/clang/test/CodeGen/debug-info-preferred-type.cpp b/clang/test/CodeGen/debug-info-preferred-type.cpp deleted file mode 100644 index 6406657..0000000 --- a/clang/test/CodeGen/debug-info-preferred-type.cpp +++ /dev/null @@ -1,9 +0,0 @@ -// RUN: %clang -target x86_64-linux -g -S -emit-llvm -o - %s | FileCheck %s - -struct A { - enum E : unsigned {}; - [[clang::preferred_type(E)]] unsigned b : 2; -} a; - -// CHECK-DAG: [[ENUM:![0-9]+]] = !DICompositeType(tag: DW_TAG_enumeration_type, name: "E"{{.*}} -// CHECK-DAG: !DIDerivedType(tag: DW_TAG_member, name: "b",{{.*}} baseType: [[ENUM]] diff --git a/clang/test/CodeGen/debug-info-preprocessed-file.i b/clang/test/CodeGen/debug-info-preprocessed-file.i deleted file mode 100644 index c8a2307..0000000 --- a/clang/test/CodeGen/debug-info-preprocessed-file.i +++ /dev/null @@ -1,15 +0,0 @@ -# 1 "/foo/bar/preprocessed-input.c" -# 1 "<built-in>" 1 -# 1 "<built-in>" 3 -# 318 "<built-in>" 3 -# 1 "<command line>" 1 -# 1 "<built-in>" 2 -# 1 "preprocessed-input.c" 2 - -/// The main file is preprocessed. We change it to preprocessed-input.c. Since -/// the content is not available, we don't compute a checksum. -// RUN: %clang -g -c -S -emit-llvm -o - %s | FileCheck %s -// CHECK: !DICompileUnit(language: DW_LANG_C{{.*}}, file: ![[FILE:[0-9]+]] -// CHECK: ![[FILE]] = !DIFile(filename: "/foo/bar/preprocessed-input.c" -// CHECK-NOT: checksumkind: -// CHECK-NOT: !DIFile( diff --git a/clang/test/CodeGen/debug-info-programming-language.c b/clang/test/CodeGen/debug-info-programming-language.c deleted file mode 100644 index 02e45d8..0000000 --- a/clang/test/CodeGen/debug-info-programming-language.c +++ /dev/null @@ -1,22 +0,0 @@ -// RUN: %clang_cc1 -dwarf-version=3 -emit-llvm -triple %itanium_abi_triple %s -o - \ -// RUN: -x c -std=c11 -O0 -disable-llvm-passes -debug-info-kind=limited \ -// RUN: | FileCheck --check-prefix=CHECK-C11 %s -// RUN: %clang_cc1 -dwarf-version=3 -emit-llvm -triple %itanium_abi_triple %s -o - \ -// RUN: -x c -std=c17 -O0 -disable-llvm-passes -debug-info-kind=limited \ -// RUN: | FileCheck --check-prefix=CHECK-C17 %s -// RUN: %clang_cc1 -dwarf-version=3 -emit-llvm -triple %itanium_abi_triple %s -o - \ -// RUN: -x c -std=c11 -O0 -disable-llvm-passes -debug-info-kind=limited \ -// RUN: -gstrict-dwarf | FileCheck --check-prefix=CHECK-STRICT %s -// RUN: %clang_cc1 -dwarf-version=5 -emit-llvm -triple %itanium_abi_triple %s -o - \ -// RUN: -x c -std=c11 -O0 -disable-llvm-passes -debug-info-kind=limited \ -// RUN: -gstrict-dwarf | FileCheck --check-prefix=CHECK-C11 %s - -// CHECK-STRICT: !DICompileUnit(language: DW_LANG_C99 -// CHECK-C11: !DICompileUnit(language: DW_LANG_C11 -// Update this check once support for DW_LANG_C17 is broadly supported/known in -// consumers. Maybe we'll skip this and go to the DWARFv6 language+version -// encoding that avoids the risk of regression when describing a language -// version newer than what the consumer is aware of. -// CHECK-C17: !DICompileUnit(language: DW_LANG_C11 - -void f1(void) { } diff --git a/clang/test/CodeGen/debug-info-pseudo-probe.cpp b/clang/test/CodeGen/debug-info-pseudo-probe.cpp deleted file mode 100644 index 75c1084..0000000 --- a/clang/test/CodeGen/debug-info-pseudo-probe.cpp +++ /dev/null @@ -1,12 +0,0 @@ -// This test checks if a symbol gets mangled dwarf names with -fpseudo-probe-for-profiling option. -// RUN: %clang_cc1 -triple x86_64 -x c++ -emit-llvm -debug-info-kind=line-tables-only -o - < %s | FileCheck %s --check-prefix=PLAIN -// RUN: %clang_cc1 -triple x86_64 -x c++ -emit-llvm -debug-info-kind=line-tables-only -fpseudo-probe-for-profiling -o - < %s | FileCheck %s --check-prefix=MANGLE - -int foo() { - return 0; -} - -// PLAIN: define dso_local noundef i32 @_Z3foov() -// PLAIN: distinct !DISubprogram(name: "foo", scope: -// MANGLE: define dso_local noundef i32 @_Z3foov() -// MANGLE: distinct !DISubprogram(name: "foo", linkageName: "_Z3foov" diff --git a/clang/test/CodeGen/debug-info-ranges-base-address.c b/clang/test/CodeGen/debug-info-ranges-base-address.c deleted file mode 100644 index 9f6ffa0..0000000 --- a/clang/test/CodeGen/debug-info-ranges-base-address.c +++ /dev/null @@ -1,9 +0,0 @@ -// RUN: %clang_cc1 -emit-llvm -debug-info-kind=limited %s -o - | FileCheck --check-prefix=NORNGBSE %s -// RUN: %clang_cc1 -emit-llvm -debug-info-kind=limited %s -o - -fdebug-ranges-base-address | FileCheck --check-prefix=RNGBSE %s - -// NORNGBSE-NOT: rangesBaseAddress -// RNGBSE: !DICompileUnit({{.*}}, rangesBaseAddress: true - -void f1(void) { -} - diff --git a/clang/test/CodeGen/debug-info-same-line.c b/clang/test/CodeGen/debug-info-same-line.c deleted file mode 100644 index a791222..0000000 --- a/clang/test/CodeGen/debug-info-same-line.c +++ /dev/null @@ -1,7 +0,0 @@ -// RUN: %clang_cc1 -triple x86_64-apple-darwin -emit-llvm %s -debug-info-kind=limited -o - | FileCheck %s -// Here two temporary nodes are identical (but should not get uniqued) while -// building the full debug type. -typedef struct { long x; } foo; typedef struct { foo *x; } bar; -// CHECK: !DICompositeType(tag: DW_TAG_structure_type,{{.*}} line: 4, size: 64, -// CHECK: !DICompositeType(tag: DW_TAG_structure_type,{{.*}} line: 4, size: 64, -bar b; diff --git a/clang/test/CodeGen/debug-info-scope-file.c b/clang/test/CodeGen/debug-info-scope-file.c deleted file mode 100644 index 9ba8a65..0000000 --- a/clang/test/CodeGen/debug-info-scope-file.c +++ /dev/null @@ -1,20 +0,0 @@ -// RUN: %clang_cc1 -debug-info-kind=limited -emit-llvm < %s | FileCheck %s - -// Check that, just because we emitted a function from a different file doesn't -// mean we insert a file-change inside the next function. - -// CHECK: ret void, !dbg [[F1_LINE:![0-9]*]] -// CHECK: ret void, !dbg [[F2_LINE:![0-9]*]] -// CHECK: [[F1:![0-9]*]] = distinct !DISubprogram(name: "f1",{{.*}} DISPFlagDefinition -// CHECK: [[F1_LINE]] = !DILocation({{.*}}, scope: [[F1]]) -// CHECK: [[F2:![0-9]*]] = distinct !DISubprogram(name: "f2",{{.*}} DISPFlagDefinition -// CHECK: [[F2_LINE]] = !DILocation({{.*}}, scope: [[F2]]) - -void f1(void) { -} - -# 2 "foo.c" - -void f2(void) { -} - diff --git a/clang/test/CodeGen/debug-info-scope.c b/clang/test/CodeGen/debug-info-scope.c deleted file mode 100644 index 26d98d0..0000000 --- a/clang/test/CodeGen/debug-info-scope.c +++ /dev/null @@ -1,22 +0,0 @@ -// RUN: %clang_cc1 -dwarf-version=4 -debug-info-kind=limited -disable-llvm-passes -emit-llvm < %s | FileCheck %s -// RUN: %clang_cc1 -dwarf-version=4 -debug-info-kind=line-tables-only -disable-llvm-passes -emit-llvm < %s | FileCheck --check-prefix=GMLT %s -// RUN: %clang_cc1 -dwarf-version=4 -debug-info-kind=line-directives-only -disable-llvm-passes -emit-llvm < %s | FileCheck --check-prefix=GMLT %s -// Two variables with same name in separate scope. -int main(void) { - int j = 0; - int k = 0; -// CHECK: !DILocalVariable(name: "i" -// CHECK-NEXT: !DILexicalBlock( - -// Make sure we don't have any more lexical blocks because we don't need them in -// -gmlt. -// GMLT-NOT: !DILexicalBlock - for (int i = 0; i < 10; i++) - j++; -// CHECK: !DILocalVariable(name: "i" -// CHECK-NEXT: !DILexicalBlock( -// GMLT-NOT: !DILexicalBlock - for (int i = 0; i < 10; i++) - k++; - return 0; -} diff --git a/clang/test/CodeGen/debug-info-slash.c b/clang/test/CodeGen/debug-info-slash.c deleted file mode 100644 index 56e51c0..0000000 --- a/clang/test/CodeGen/debug-info-slash.c +++ /dev/null @@ -1,6 +0,0 @@ -// RUN: %clang -target x86_64-pc-win32 -ffile-reproducible -emit-llvm -S -g %s -o - | FileCheck --check-prefix=WIN %s -// RUN: %clang -target x86_64-linux-gnu -ffile-reproducible -emit-llvm -S -g %s -o - | FileCheck --check-prefix=LINUX %s -int main() { return 0; } - -// WIN: !DIFile(filename: "{{.*}}\\debug-info-slash.c" -// LINUX: !DIFile(filename: "{{.*}}/debug-info-slash.c" diff --git a/clang/test/CodeGen/debug-info-slash.test b/clang/test/CodeGen/debug-info-slash.test deleted file mode 100644 index 0e42912..0000000 --- a/clang/test/CodeGen/debug-info-slash.test +++ /dev/null @@ -1,10 +0,0 @@ -RUN: rm -rf %t-dir -RUN: mkdir -p %t-dir/header/Inputs -RUN: cp %S/Inputs/debug-info-slash.cpp %t-dir/ -RUN: cp %S/Inputs/debug-info-slash.h %t-dir/header/Inputs -RUN: cd %t-dir -RUN: %clang -target x86_64-pc-win32 -emit-llvm -S -g %t-dir/debug-info-slash.cpp -Iheader -o - | FileCheck --check-prefix=WIN %s -RUN: %clang -target x86_64-linux-gnu -emit-llvm -S -g %t-dir/debug-info-slash.cpp -Iheader -o - | FileCheck --check-prefix=LINUX %s - -WIN: lambda at header\\Inputs\\debug-info-slash.h -LINUX: lambda at header/Inputs/debug-info-slash.h diff --git a/clang/test/CodeGen/debug-info-static-const-fp.c b/clang/test/CodeGen/debug-info-static-const-fp.c deleted file mode 100644 index be4b51d..0000000 --- a/clang/test/CodeGen/debug-info-static-const-fp.c +++ /dev/null @@ -1,51 +0,0 @@ -// RUN: %clang_cc1 -emit-llvm -O0 -debug-info-kind=limited %s -o - | \ -// RUN: FileCheck --check-prefixes CHECK %s - -// RUN: %clang_cc1 -triple hexagon-unknown--elf -emit-llvm -O0 -debug-info-kind=limited %s -o - | \ -// RUN: FileCheck --check-prefixes CHECK,CHECK-LDsm %s - -// RUN: %clang_cc1 -triple x86_64-unknown-linux-gnu -emit-llvm -O0 -debug-info-kind=limited %s -o - | \ -// RUN: FileCheck --check-prefixes CHECK,CHECK-LDlg %s - -// Per PR26619, check that for referenced static const of floating-point type, -// we emit its constant value in debug info. -// -// NOTE that __fp16 is assumed to be 16 bits, float is assumed to be -// 32 bits, and double is assumed to be 64 bits. Size of long double -// is not known (for example, it is 64 bits for hexagon-unknown--elf, -// but 128 bits for x86_64-unknown-linux-gnu). Therefore, we specify -// target triples where it has a known size, and check accordingly: -// for the absence of a constant (CHECK-LDlg) when the size exceeds 64 -// bits, and for the presence of a constant (CHECK-LDsm) but not its -// value when the size does not exceed 64 bits. -// -// NOTE that PR26619 is not yet fixed for types greater than 64 bits. - -static const __fp16 hVal = 29/13.0f; // 2.2307692307692307692 (2.23046875) - -static const float fVal = -147/17.0f; // -8.6470588235294117647 (-8.64705849) - -static const double dVal = 19637/7.0; // 2805.2857142857142857 (2805.2857142857142) - -static const long double ldVal = 3/1234567.0L; // 2.4300017739012949479e-06 (<depends on size of long double>) - -int main(void) { - return hVal + fVal + dVal + ldVal; -} - -// CHECK: !DIGlobalVariableExpression(var: [[HVAL:.*]], expr: !DIExpression(DW_OP_constu, 16502, DW_OP_stack_value)) -// CHECK: [[HVAL]] = distinct !DIGlobalVariable(name: "hVal", -// CHECK-SAME: isLocal: true, isDefinition: true - -// CHECK: !DIGlobalVariableExpression(var: [[FVAL:.*]], expr: !DIExpression(DW_OP_constu, 3238681178, DW_OP_stack_value)) -// CHECK: [[FVAL]] = distinct !DIGlobalVariable(name: "fVal", -// CHECK-SAME: isLocal: true, isDefinition: true - -// CHECK: !DIGlobalVariableExpression(var: [[DVAL:.*]], expr: !DIExpression(DW_OP_constu, 4658387303597904457, DW_OP_stack_value)) -// CHECK: [[DVAL]] = distinct !DIGlobalVariable(name: "dVal", -// CHECK-SAME: isLocal: true, isDefinition: true - -// CHECK-LDlg-DAG: [[LDVAL:.*]] = distinct !DIGlobalVariable(name: "ldVal", {{.*}}, isLocal: true, isDefinition: true) -// CHECK-LDlg-DAG: !DIGlobalVariableExpression(var: [[LDVAL]], expr: !DIExpression()) -// CHECK-LDsm-DAG: [[LDVAL:.*]] = distinct !DIGlobalVariable(name: "ldVal", {{.*}}, isLocal: true, isDefinition: true) -// CHECK-LDsm-DAG: !DIGlobalVariableExpression(var: [[LDVAL]], expr: diff --git a/clang/test/CodeGen/debug-info-static.c b/clang/test/CodeGen/debug-info-static.c deleted file mode 100644 index d6ade2ae..0000000 --- a/clang/test/CodeGen/debug-info-static.c +++ /dev/null @@ -1,11 +0,0 @@ -// RUN: %clang_cc1 -debug-info-kind=limited -emit-llvm -o - %s | FileCheck %s - -// CHECK: @f.xyzzy = internal global i32 0, align 4, !dbg [[XYZZY:![0-9]+]] - -// CHECK: [[XYZZY]] = !DIGlobalVariableExpression(var: [[VAR:.*]], expr: !DIExpression()) -// CHECK: [[VAR]] = distinct !DIGlobalVariable -void f(void) -{ - static int xyzzy; - xyzzy += 3; -} diff --git a/clang/test/CodeGen/debug-info-switch-fallthrough.c b/clang/test/CodeGen/debug-info-switch-fallthrough.c deleted file mode 100644 index 36ac371d..0000000 --- a/clang/test/CodeGen/debug-info-switch-fallthrough.c +++ /dev/null @@ -1,17 +0,0 @@ -// RUN: %clang_cc1 -triple x86_64-apple-macosx11.0.0 -debug-info-kind=standalone -emit-llvm %s -o - | FileCheck %s -// CHECK: ], !dbg !{{[0-9]+}} -// CHECK-EMPTY: -// CHECK-NEXT: {{.+}} -// CHECK-NEXT: br {{.+}}, !dbg !{{[0-9+]}} -// CHECK-EMPTY: -// CHECK-NEXT: {{.+}} -// CHECK-NEXT: br {{.+}}, !dbg ![[LOC:[0-9]+]] -void test(int num) { - switch (num) { - case 0: - break; - case 10: // CHECK: ![[LOC]] = !DILocation(line: [[@LINE]], column:{{.+}}, scope: {{.+}}) - default: - break; - } -} diff --git a/clang/test/CodeGen/debug-info-sysroot-sdk.c b/clang/test/CodeGen/debug-info-sysroot-sdk.c deleted file mode 100644 index b52d2e1d..0000000 --- a/clang/test/CodeGen/debug-info-sysroot-sdk.c +++ /dev/null @@ -1,16 +0,0 @@ -// RUN: %clang_cc1 -debug-info-kind=limited -triple %itanium_abi_triple \ -// RUN: %s -isysroot /CLANG_SYSROOT/MacOSX.sdk -emit-llvm -o - \ -// RUN: -debugger-tuning=lldb | FileCheck %s --check-prefix=LLDB -// RUN: %clang_cc1 -debug-info-kind=limited -triple %itanium_abi_triple \ -// RUN: %s -isysroot /CLANG_SYSROOT/MacOSX.sdk -emit-llvm -o - \ -// RUN: -debugger-tuning=gdb | FileCheck %s --check-prefix=GDB - -void foo(void) {} - -// The sysroot and sdk are LLDB-tuning-specific attributes. - -// LLDB: distinct !DICompileUnit({{.*}}sysroot: "/CLANG_SYSROOT/MacOSX.sdk" -// LLDB-SAME: sdk: "MacOSX.sdk" -// GDB: distinct !DICompileUnit( -// GDB-NOT: sysroot: "/CLANG_SYSROOT/MacOSX.sdk" -// GDB-NOT: sdk: "MacOSX.sdk" diff --git a/clang/test/CodeGen/debug-info-typedef.c b/clang/test/CodeGen/debug-info-typedef.c deleted file mode 100644 index ea3b549..0000000 --- a/clang/test/CodeGen/debug-info-typedef.c +++ /dev/null @@ -1,11 +0,0 @@ -// RUN: %clang_cc1 -emit-llvm -debug-info-kind=limited -I%p %s -o - | FileCheck %s -// Test that the location of the typedef points to the header file. -#line 1 "a.c" -#line 2 "b.h" -typedef int MyType; -#line 2 "a.c" - -MyType a; - -// CHECK: !DIDerivedType(tag: DW_TAG_typedef, name: "MyType", file: ![[HEADER:[0-9]+]], line: 2, -// CHECK: ![[HEADER]] = !DIFile(filename: "b.h", diff --git a/clang/test/CodeGen/debug-info-unused-types.c b/clang/test/CodeGen/debug-info-unused-types.c deleted file mode 100644 index 3e9f7b0..0000000 --- a/clang/test/CodeGen/debug-info-unused-types.c +++ /dev/null @@ -1,47 +0,0 @@ -// RUN: %clang_cc1 -debug-info-kind=unused-types -emit-llvm -o - %s | FileCheck %s -// RUN: %clang_cc1 -debug-info-kind=limited -emit-llvm -o - %s | FileCheck --check-prefix=NODBG %s -typedef int my_int; -struct foo {}; -enum bar { BAR }; -union baz {}; - -void quux(void) { - typedef int x; - struct y {}; - enum z { Z }; - union w {}; -} - -// Check that debug info is emitted for the typedef, struct, enum, and union -// when -fno-eliminate-unused-debug-types and -g are set. - -// CHECK: !DICompileUnit{{.+}}retainedTypes: [[RETTYPES:![0-9]+]] -// CHECK: [[TYPE0:![0-9]+]] = !DICompositeType(tag: DW_TAG_enumeration_type, name: "bar" -// CHECK: [[TYPE1:![0-9]+]] = !DIEnumerator(name: "BAR" -// CHECK: [[TYPE2:![0-9]+]] = !DICompositeType(tag: DW_TAG_enumeration_type, name: "z" -// CHECK: [[TYPE3:![0-9]+]] = !DIEnumerator(name: "Z" -// CHECK: [[RETTYPES]] = !{[[TYPE4:![0-9]+]], [[TYPE5:![0-9]+]], [[TYPE0]], [[TYPE6:![0-9]+]], {{![0-9]+}}, [[TYPE7:![0-9]+]], [[TYPE2]], [[TYPE8:![0-9]+]]} -// CHECK: [[TYPE4]] = !DIDerivedType(tag: DW_TAG_typedef, name: "my_int" -// CHECK: [[TYPE5]] = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "foo" -// CHECK: [[TYPE6]] = distinct !DICompositeType(tag: DW_TAG_union_type, name: "baz" -// CHECK: [[TYPE7]] = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "y" -// CHECK: [[TYPE8]] = distinct !DICompositeType(tag: DW_TAG_union_type, name: "w" - -// Check that debug info is not emitted for the typedef, struct, enum, and -// union when -fno-eliminate-unused-debug-types and -g are not set. These are -// the same checks as above with `NODBG-NOT` rather than `CHECK`. - -// NODBG-NOT: !DI{{CompositeType|Enumerator|DerivedType}} - -// Check that debug info is not emitted for declarations. Obnoxious -// indentifiers are to avoid collisions with the SHA emittied as debug info. -struct unused_struct; -enum unused_enum; -union unused_union; -void b0(void) { - struct unused_local_struct; - enum unused_local_enum; - union unused_local_union; -} - -// NODBG-NOT: name: "unused_ diff --git a/clang/test/CodeGen/debug-info-unused-types.cpp b/clang/test/CodeGen/debug-info-unused-types.cpp deleted file mode 100644 index 023cac1..0000000 --- a/clang/test/CodeGen/debug-info-unused-types.cpp +++ /dev/null @@ -1,28 +0,0 @@ -// RUN: %clang_cc1 -debug-info-kind=unused-types -emit-llvm -o - %s | FileCheck %s -// RUN: %clang_cc1 -debug-info-kind=limited -emit-llvm -o - %s | FileCheck --check-prefix=NODBG %s -using foo = int; -class bar {}; -enum class baz { BAZ }; - -void quux() { - using x = int; - class y {}; - enum class z { Z }; -} - -// CHECK: !DICompileUnit{{.+}}retainedTypes: [[RETTYPES:![0-9]+]] -// CHECK: [[TYPE0:![0-9]+]] = !DICompositeType(tag: DW_TAG_enumeration_type, name: "baz" -// CHECK: [[TYPE1:![0-9]+]] = !DIEnumerator(name: "BAZ" -// CHECK: [[TYPE2:![0-9]+]] = !DICompositeType(tag: DW_TAG_enumeration_type, name: "z" -// CHECK: [[TYPE3:![0-9]+]] = !DIEnumerator(name: "Z" -// CHECK: [[RETTYPES]] = !{[[TYPE4:![0-9]+]], [[TYPE5:![0-9]+]], [[TYPE0]], {{![0-9]+}}, [[TYPE6:![0-9]+]], [[TYPE2]]} -// CHECK: [[TYPE4]] = !DIDerivedType(tag: DW_TAG_typedef, name: "foo" -// CHECK: [[TYPE5]] = distinct !DICompositeType(tag: DW_TAG_class_type, name: "bar" -// CHECK: [[TYPE6]] = distinct !DICompositeType(tag: DW_TAG_class_type, name: "y" - -// NODBG-NOT: !DI{{CompositeType|Enumerator|DerivedType}} - -class unused_class; -enum class unused_enum_class; - -// NODBG-NOT: name: "unused_ diff --git a/clang/test/CodeGen/debug-info-variables.c b/clang/test/CodeGen/debug-info-variables.c deleted file mode 100644 index 9fbace7..0000000 --- a/clang/test/CodeGen/debug-info-variables.c +++ /dev/null @@ -1,20 +0,0 @@ -// RUN: %clang_cc1 %s -debug-info-kind=standalone -emit-llvm -o - | FileCheck %s - -// CHECK: DIGlobalVariable(name: "global",{{.*}} line: [[@LINE+1]] -int global = 42; - -// CHECK: DIGlobalVariable({{.*}}line: [[@LINE+4]],{{.*}} type: [[TYPEID:![0-9]+]] -// CHECK: [[TYPEID]] = !DICompositeType(tag: DW_TAG_array_type, baseType: [[BASETYPE:![0-9]+]] -// CHECK: [[BASETYPE]] = !DIBasicType(name: "char" -const char* s() { - return "1234567890"; -} - -// Note: Windows has `q -> p -> r` ordering and Linux has `p -> q -> r`. -// CHECK-DAG: DILocalVariable(name: "p" -// CHECK-DAG: DILocalVariable(name: "q" -// CHECK-DAG: DILocalVariable(name: "r" -int sum(int p, int q) { - int r = p + q; - return r; -} diff --git a/clang/test/CodeGen/debug-info-vector-bool.c b/clang/test/CodeGen/debug-info-vector-bool.c deleted file mode 100644 index e1dfd2c..0000000 --- a/clang/test/CodeGen/debug-info-vector-bool.c +++ /dev/null @@ -1,11 +0,0 @@ -// RUN: %clang_cc1 -triple x86_64-linux-pc -emit-llvm -debug-info-kind=limited %s -o - | FileCheck %s -typedef _Bool bool512 __attribute__((ext_vector_type(512))); - -bool512 b; - -// Test that we get bit-sized bool elements on x86 -// CHECK: !DICompositeType(tag: DW_TAG_array_type, -// CHECK-SAME: baseType: ![[BOOL:[0-9]+]] -// CHECK-SAME: size: 512 -// CHECK-SAME: DIFlagVector -// CHECK: ![[BOOL]] = !DIBasicType(name: "char" diff --git a/clang/test/CodeGen/debug-info-vector.c b/clang/test/CodeGen/debug-info-vector.c deleted file mode 100644 index 93e6392..0000000 --- a/clang/test/CodeGen/debug-info-vector.c +++ /dev/null @@ -1,11 +0,0 @@ -// RUN: %clang_cc1 -emit-llvm -debug-info-kind=limited %s -o - | FileCheck %s -typedef int v4si __attribute__((__vector_size__(16))); - -v4si a; - -// Test that we get an array type that's also a vector out of debug. -// CHECK: !DICompositeType(tag: DW_TAG_array_type, -// CHECK-SAME: baseType: ![[INT:[0-9]+]] -// CHECK-SAME: size: 128 -// CHECK-SAME: DIFlagVector -// CHECK: ![[INT]] = !DIBasicType(name: "int" diff --git a/clang/test/CodeGen/debug-info-version-coff.c b/clang/test/CodeGen/debug-info-version-coff.c deleted file mode 100644 index 6497a58..0000000 --- a/clang/test/CodeGen/debug-info-version-coff.c +++ /dev/null @@ -1,8 +0,0 @@ -// REQUIRES: x86-registered-target -// RUN: %clang --target=x86_64-windows -g -S -emit-llvm -o - %s | FileCheck %s -// RUN: %clang --target=x86_64-windows -S -emit-llvm -o - %s | FileCheck %s -int main (void) { - return 0; -} - -// CHECK: i32 2, !"Debug Info Version", i32 3} diff --git a/clang/test/CodeGen/debug-info-version.c b/clang/test/CodeGen/debug-info-version.c deleted file mode 100644 index c7c2bb9..0000000 --- a/clang/test/CodeGen/debug-info-version.c +++ /dev/null @@ -1,9 +0,0 @@ -// REQUIRES: !system-windows -// RUN: %clang -g -S -emit-llvm -o - %s | FileCheck %s -// RUN: %clang -S -emit-llvm -o - %s | FileCheck %s --check-prefix=NO_DEBUG -int main (void) { - return 0; -} - -// CHECK: i32 2, !"Debug Info Version", i32 3} -// NO_DEBUG-NOT: !"Debug Info Version" diff --git a/clang/test/CodeGen/debug-info-vla.c b/clang/test/CodeGen/debug-info-vla.c deleted file mode 100644 index e949411..0000000 --- a/clang/test/CodeGen/debug-info-vla.c +++ /dev/null @@ -1,15 +0,0 @@ -// RUN: %clang_cc1 -emit-llvm -debug-info-kind=limited -triple x86_64-apple-darwin %s -o - | FileCheck %s - -void testVLAwithSize(int s) -{ -// CHECK-DAG: #dbg_declare({{.*}} %__vla_expr0, ![[VLAEXPR:[0-9]+]] -// CHECK-DAG: #dbg_declare({{.*}} %vla, ![[VAR:[0-9]+]] -// CHECK-DAG: ![[VLAEXPR]] = !DILocalVariable(name: "__vla_expr0", {{.*}} flags: DIFlagArtificial -// CHECK-DAG: ![[VAR]] = !DILocalVariable(name: "vla",{{.*}} line: [[@LINE+2]] -// CHECK-DAG: !DISubrange(count: ![[VLAEXPR]]) - int vla[s]; - int i; - for (i = 0; i < s; i++) { - vla[i] = i*i; - } -} diff --git a/clang/test/CodeGen/debug-info.c b/clang/test/CodeGen/debug-info.c deleted file mode 100644 index 024e957..0000000 --- a/clang/test/CodeGen/debug-info.c +++ /dev/null @@ -1,64 +0,0 @@ -// RUN: %clang_cc1 -Wno-error=return-type -triple x86_64-unk-unk -o - -emit-llvm -debug-info-kind=limited %s | FileCheck %s -// RUN: %clang_cc1 -Wno-error=return-type -triple powerpc64-ibm-aix-xcoff -o - -emit-llvm -debug-info-kind=limited %s | FileCheck %s - -// PR3023 -void convert(void) { - struct { typeof(0) f0; } v0; -} - - -// PR2784 -struct OPAQUE; // CHECK-DAG: DW_TAG_structure_type, name: "OPAQUE" -typedef struct OPAQUE *PTR; -PTR p; - - -// PR2950 -struct s0; -struct s0 { struct s0 *p; } g0; - -struct s0 *f0(struct s0 *a0) { - return a0->p; -} - - -// PR3134 -char xpto[]; - - -// PR3427 -struct foo { - int a; - void *ptrs[]; -}; -struct foo bar; - - -// PR4143 -struct foo2 { - enum bar *bar; -}; - -struct foo2 foo2; - -// CHECK-DAG: !DIDerivedType(tag: DW_TAG_typedef, name: "barfoo" -typedef int barfoo; -barfoo foo(void) { -} - -// CHECK-DAG: __uint128_t -__uint128_t foo128 (void) -{ - __uint128_t int128 = 44; - return int128; -} - -// CHECK-DAG: uint64x2_t -typedef unsigned long long uint64_t; -typedef uint64_t uint64x2_t __attribute__((ext_vector_type(2))); -uint64x2_t extvectbar[4]; - -// CHECK-DAG: !DIBasicType(name: "long" -// CHECK-DAG: !DIBasicType(name: "unsigned long long" -void integral_types(long x, unsigned long long y) { -} diff --git a/clang/test/CodeGen/debug-label-inline.c b/clang/test/CodeGen/debug-label-inline.c deleted file mode 100644 index 9d92ffb..0000000 --- a/clang/test/CodeGen/debug-label-inline.c +++ /dev/null @@ -1,28 +0,0 @@ -// This test will test the correctness of generating DILabel and -// llvm.dbg.label when the label is in inlined functions. -// -// RUN: %clang_cc1 -O2 %s -o - -emit-llvm -debug-info-kind=limited | FileCheck %s -inline int f1(int a, int b) { - int sum; - -top: - sum = a + b; - return sum; -} - -extern int ga, gb; - -int f2(void) { - int result; - - result = f1(ga, gb); - // CHECK: #dbg_label([[LABEL_METADATA:!.*]], [[LABEL_LOCATION:![0-9]+]] - - return result; -} - -// CHECK: distinct !DISubprogram(name: "f1", {{.*}}, retainedNodes: [[ELEMENTS:!.*]]) -// CHECK: [[ELEMENTS]] = !{{{.*}}, [[LABEL_METADATA]]} -// CHECK: [[LABEL_METADATA]] = !DILabel({{.*}}, name: "top", {{.*}}, line: 8, column: 1) -// CHECK: [[INLINEDAT:!.*]] = distinct !DILocation(line: 18, -// CHECK: [[LABEL_LOCATION]] = !DILocation(line: 8, {{.*}}, inlinedAt: [[INLINEDAT]]) diff --git a/clang/test/CodeGen/debug-label.c b/clang/test/CodeGen/debug-label.c deleted file mode 100644 index 308d664..0000000 --- a/clang/test/CodeGen/debug-label.c +++ /dev/null @@ -1,16 +0,0 @@ -// This test will test the correstness of generating DILabel and -// llvm.dbg.label for labels. -// -// RUN: %clang_cc1 %s -o - -emit-llvm -debug-info-kind=limited | FileCheck %s - -int f1(int a, int b) { - int sum; - -top: - // CHECK: #dbg_label([[LABEL_METADATA:!.*]], [[LABEL_LOCATION:![0-9]+]] - sum = a + b; - return sum; -} - -// CHECK: [[LABEL_METADATA]] = !DILabel({{.*}}, name: "top", {{.*}}, line: 9, column: 1) -// CHECK: [[LABEL_LOCATION]] = !DILocation(line: 9, diff --git a/clang/test/CodeGen/debug-line-1.c b/clang/test/CodeGen/debug-line-1.c deleted file mode 100644 index 56f447e..0000000 --- a/clang/test/CodeGen/debug-line-1.c +++ /dev/null @@ -1,20 +0,0 @@ -// RUN: %clang_cc1 -triple x86_64-apple-darwin -o - -emit-llvm -debug-info-kind=limited %s | FileCheck %s -// REQUIRES: asserts -// PR9796 - -// Check to make sure that we emit the block for the break so that we can count the line. -// CHECK: sw.bb: ; preds = %entry -// CHECK: br label %sw.epilog, !dbg ! - -extern int atoi(const char *); - -int f(char* arg) { - int x = atoi(arg); - - switch(x) { - case 1: - break; - } - - return 0; -} diff --git a/clang/test/CodeGen/debug-nvptx.c b/clang/test/CodeGen/debug-nvptx.c deleted file mode 100644 index 3b6ef70..0000000 --- a/clang/test/CodeGen/debug-nvptx.c +++ /dev/null @@ -1,6 +0,0 @@ -// RUN: %clang_cc1 -triple nvptx-unknown-unknown -o - -debug-info-kind=limited %s -emit-llvm | FileCheck %s - -// CHECK: DICompileUnit({{.*}}, nameTableKind: None - -void f1(void) { -} diff --git a/clang/test/CodeGen/debug-prefix-map.c b/clang/test/CodeGen/debug-prefix-map.c deleted file mode 100644 index e58909f..0000000 --- a/clang/test/CodeGen/debug-prefix-map.c +++ /dev/null @@ -1,59 +0,0 @@ -// RUN: %clang_cc1 -debug-info-kind=standalone -fdebug-prefix-map=%p=%{fs-src-root}UNLIKELY_PATH%{fs-sep}empty %s -emit-llvm -o - | FileCheck %s -check-prefix CHECK-NO-MAIN-FILE-NAME -// RUN: %clang_cc1 -debug-info-kind=standalone -fdebug-prefix-map=%p=%{fs-src-root}UNLIKELY_PATH=empty %s -emit-llvm -o - | FileCheck %s -check-prefix CHECK-EVIL -// RUN: %clang_cc1 -debug-info-kind=standalone -fdebug-prefix-map=%p=%{fs-src-root}UNLIKELY_PATH%{fs-sep}empty %s -emit-llvm -o - -main-file-name debug-prefix-map.c | FileCheck %s -// RUN: %clang_cc1 -debug-info-kind=standalone -fdebug-prefix-map=%p=%{fs-src-root}UNLIKELY_PATH%{fs-sep}empty %s -emit-llvm -o - -fdebug-compilation-dir %p | FileCheck %s -check-prefix CHECK-COMPILATION-DIR -// RUN: %clang_cc1 -debug-info-kind=standalone -fdebug-prefix-map=%p=%{fs-src-root}UNLIKELY_PATH%{fs-sep}empty %s -emit-llvm -o - -isysroot %p -debugger-tuning=lldb | FileCheck %s -check-prefix CHECK-SYSROOT -// RUN: %clang -g -fdebug-prefix-map=%p=%{fs-src-root}UNLIKELY_PATH%{fs-sep}empty -S -c %s -emit-llvm -o - | FileCheck %s -// RUN: %clang -g -ffile-prefix-map=%p=%{fs-src-root}UNLIKELY_PATH%{fs-sep}empty -S -c %s -emit-llvm -o - | FileCheck %s - -// RUN: %clang -g -fdebug-prefix-map=%p=./UNLIKELY_PATH/empty -S -c %s -emit-llvm -o - | FileCheck %s --check-prefix=CHECK-REL -// RUN: %clang -g -ffile-prefix-map=%p=./UNLIKELY_PATH/empty -S -c %s -emit-llvm -o - | FileCheck %s --check-prefix=CHECK-REL - -// RUN: rm -rf %t && mkdir -p %t/a/b && cp %s %t/a/b/c.c -// RUN: %clang_cc1 -emit-llvm -debug-info-kind=standalone -I%S -fdebug-prefix-map=%t/a/b=y -fdebug-prefix-map=%t/a=x %t/a/b/c.c -o - | FileCheck %s --check-prefix=CHECK-X -// RUN: %clang_cc1 -emit-llvm -debug-info-kind=standalone -I%S -fdebug-prefix-map=%t/a=x -fdebug-prefix-map=%t/a/b=y %t/a/b/c.c -o - | FileCheck %s --check-prefix=CHECK-Y -// RUN: %clang_cc1 -emit-llvm -debug-info-kind=standalone -I%S -main-file-name %t/a/b/c.c -fdebug-compilation-dir=%t/a -fdebug-prefix-map=%t/a=x -fdebug-prefix-map=%t/a/b=y %t/a/b/c.c -o - | FileCheck %s --check-prefix=CHECK-REMAP-Y - -#include "Inputs/stdio.h" - -int main(int argc, char **argv) { - (void)argc; - (void)argv; - return 0; -} - -void test_rewrite_includes(void) { - __builtin_va_list argp; - vprintf("string", argp); -} - -// CHECK-NO-MAIN-FILE-NAME: !DIFile(filename: "{{/|.:\\\\}}UNLIKELY_PATH{{/|\\\\}}empty{{/|\\\\}}{{.*}}", -// CHECK-NO-MAIN-FILE-NAME-SAME: directory: "") -// CHECK-NO-MAIN-FILE-NAME: !DIFile(filename: "{{/|.:\\\\}}UNLIKELY_PATH{{/|\\\\}}empty{{/|\\\\}}<stdin>", -// CHECK-NO-MAIN-FILE-NAME: !DIFile(filename: "{{/|.:\\\\}}UNLIKELY_PATH{{/|\\\\}}empty{{/|\\\\}}Inputs{{/|\\\\}}stdio.h", -// CHECK-NO-MAIN-FILE-NAME-SAME: directory: "") -// CHECK-NO-MAIN-FILE-NAME-NOT: !DIFile(filename: - -// CHECK-EVIL: !DIFile(filename: "{{/|.:\\\\}}UNLIKELY_PATH=empty{{/|\\\\}}{{.*}}" -// CHECK-EVIL: !DIFile(filename: "{{/|.:\\\\}}UNLIKELY_PATH=empty{{/|\\\\}}{{.*}}Inputs{{/|\\\\}}stdio.h", -// CHECK-EVIL-SAME: directory: "") -// CHECK-EVIL-NOT: !DIFile(filename: - -// CHECK: !DIFile(filename: "{{/|.:\\\\}}UNLIKELY_PATH{{/|\\\\}}empty{{/|\\\\}}{{.*}}", -// CHECK: !DIFile(filename: "{{/|.:\\\\}}UNLIKELY_PATH{{/|\\\\}}empty{{/|\\\\}}{{.*}}Inputs{{/|\\\\}}stdio.h", -// CHECK-SAME: directory: "" -// CHECK-NOT: !DIFile(filename: - -// CHECK-COMPILATION-DIR: !DIFile(filename: "{{.*}}", directory: "{{/|.:\\\\}}UNLIKELY_PATH{{/|\\\\}}empty") -// CHECK-COMPILATION-DIR: !DIFile(filename: "{{.*}}Inputs{{/|\\\\}}stdio.h", directory: "{{/|.:\\\\}}UNLIKELY_PATH{{/|\\\\}}empty") -// CHECK-COMPILATION-DIR-NOT: !DIFile(filename: -// CHECK-SYSROOT: !DICompileUnit({{.*}}sysroot: "{{/|.:\\\\}}UNLIKELY_PATH{{/|\\\\}}empty" - -// CHECK-REL: !DIFile(filename: "./UNLIKELY_PATH/empty{{/|\\\\}}{{.*}}", -// CHECK-REL: !DIFile(filename: "./UNLIKELY_PATH/empty{{/|\\\\}}{{.*}}Inputs/stdio.h", -// CHECK-REL-SAME: directory: "" - -// CHECK-X: !DIFile(filename: "x{{/|\\\\}}b{{/|\\\\}}c.c", directory: "") -// CHECK-Y: !DIFile(filename: "y{{/|\\\\}}c.c", directory: "") - -// CHECK-REMAP-Y: !DIFile(filename: "y{{/|\\\\}}c.c", directory: "x") diff --git a/clang/test/CodeGen/debug-prefix-map.cpp b/clang/test/CodeGen/debug-prefix-map.cpp deleted file mode 100644 index 174bef5..0000000 --- a/clang/test/CodeGen/debug-prefix-map.cpp +++ /dev/null @@ -1,11 +0,0 @@ -// RUN: %clang_cc1 -debug-info-kind=standalone -fdebug-prefix-map=%p=./UNLIKELY_PATH/empty %s -emit-llvm -o - | FileCheck %s - -struct alignas(64) an { - struct { - unsigned char x{0}; - } arr[64]; -}; - -struct an *pan = new an; - -// CHECK: !DISubprogram(name: "(unnamed struct at ./UNLIKELY_PATH/empty{{/|\\\\}}{{.*}}", diff --git a/clang/test/CodeGen/dominating-store-to-return.c b/clang/test/CodeGen/dominating-store-to-return.c index 1c53e35..d095f3f 100644 --- a/clang/test/CodeGen/dominating-store-to-return.c +++ b/clang/test/CodeGen/dominating-store-to-return.c @@ -16,10 +16,10 @@ // LIFETIME-NEXT: [[FOO:%.*]] = alloca i32, align 4 // LIFETIME-NEXT: [[FOO2:%.*]] = alloca i32, align 4 // LIFETIME-NEXT: store i32 0, ptr [[RETVAL]], align 4 -// LIFETIME-NEXT: call void @llvm.lifetime.start.p0(i64 4, ptr [[FOO]]) #[[ATTR2:[0-9]+]] -// LIFETIME-NEXT: call void @llvm.lifetime.start.p0(i64 4, ptr [[FOO2]]) #[[ATTR2]] -// LIFETIME-NEXT: call void @llvm.lifetime.end.p0(i64 4, ptr [[FOO2]]) #[[ATTR2]] -// LIFETIME-NEXT: call void @llvm.lifetime.end.p0(i64 4, ptr [[FOO]]) #[[ATTR2]] +// LIFETIME-NEXT: call void @llvm.lifetime.start.p0(ptr [[FOO]]) #[[ATTR2:[0-9]+]] +// LIFETIME-NEXT: call void @llvm.lifetime.start.p0(ptr [[FOO2]]) #[[ATTR2]] +// LIFETIME-NEXT: call void @llvm.lifetime.end.p0(ptr [[FOO2]]) #[[ATTR2]] +// LIFETIME-NEXT: call void @llvm.lifetime.end.p0(ptr [[FOO]]) #[[ATTR2]] // LIFETIME-NEXT: ret i32 0 // int main() { diff --git a/clang/test/CodeGen/enum2.c b/clang/test/CodeGen/enum2.c deleted file mode 100644 index fcf6381..0000000 --- a/clang/test/CodeGen/enum2.c +++ /dev/null @@ -1,15 +0,0 @@ -// RUN: %clang_cc1 -triple i386-unknown-unknown %s -debug-info-kind=limited -emit-llvm -o - | FileCheck %s - -int v; -enum e { MAX }; - -void foo (void) -{ - v = MAX; -} -// CHECK: !DICompositeType(tag: DW_TAG_enumeration_type, -// CHECK-SAME: baseType: ![[LONG:[0-9]+]] -// CHECK-SAME: elements: ![[ELTS:[0-9]+]] -// CHECK: ![[LONG]] = !DIBasicType(name: "unsigned int", size: 32, encoding: DW_ATE_unsigned) -// CHECK: ![[ELTS]] = !{![[MAX:[0-9]+]]} -// CHECK: ![[MAX]] = !DIEnumerator(name: "MAX", value: 0) diff --git a/clang/test/CodeGen/fake-use-return-line.c b/clang/test/CodeGen/fake-use-return-line.c deleted file mode 100644 index 50d5885..0000000 --- a/clang/test/CodeGen/fake-use-return-line.c +++ /dev/null @@ -1,16 +0,0 @@ -// RUN: %clang_cc1 -emit-llvm -debug-info-kind=limited -fextend-variable-liveness -o - %s | FileCheck %s - -// Clang adjusts the line numbers of returns based on the line numbers of -// dominating stores to %retval; we test that fake use intrinsics do not affect -// this, and the return is given the correct line. - -// CHECK: define{{.*}}@main -// CHECK: call void (...) @llvm.fake.use(i32 -// CHECK-NEXT: ret i32{{.*}}!dbg ![[MDINDEX:[0-9]*]] -// CHECK: ![[MDINDEX]] = !DILocation(line: [[# @LINE + 5]] -int main() -{ - volatile int a = 1; - int b = a + 2; - return b; -} diff --git a/clang/test/CodeGen/func-attr.c b/clang/test/CodeGen/func-attr.c index 96c3d91..1b36c51 100644 --- a/clang/test/CodeGen/func-attr.c +++ b/clang/test/CodeGen/func-attr.c @@ -22,7 +22,6 @@ float foo(float a, float b) { // NOFINITEONLY: define{{.*}} float @foo(float noundef %{{.*}}, float noundef %{{.*}}){{.*}} [[ATTRS:#[0-9]+]] // CHECK: attributes [[ATTRS]] = { -// CHECK-SAME: "approx-func-fp-math"="true" // CHECK-SAME: "no-signed-zeros-fp-math"="true" // CHECK-SAME: "no-trapping-math"="true" // CHECK-UNSAFE-SAME: "unsafe-fp-math"="true" diff --git a/clang/test/CodeGen/global-blocks-lines.c b/clang/test/CodeGen/global-blocks-lines.c deleted file mode 100644 index 9466173..0000000 --- a/clang/test/CodeGen/global-blocks-lines.c +++ /dev/null @@ -1,45 +0,0 @@ -// RUN: %clang_cc1 -fblocks -debug-info-kind=limited -emit-llvm %s -o - | FileCheck %s -// Make sure we do not generate line info for debugging-related frame setup. -// CHECK: define {{.*}}block_invoke -// CHECK-NOT: store {{.*}}ptr{{.*}}dbg -// CHECK: store {{.*}}ptr{{.*}}, align -// CHECK: ret -// CHECK: define {{.*}}block_invoke -// CHECK-NOT: store {{.*}}ptr{{.*}}dbg -// CHECK: store {{.*}}ptr{{.*}}, align -// CHECK: ret -// CHECK: define {{.*}}block_invoke -// CHECK-NOT: store {{.*}}ptr{{.*}}dbg -// CHECK: store {{.*}}ptr{{.*}}, align -// CHECK: ret -int printf(const char*, ...); - -static void* _NSConcreteGlobalBlock; - - -typedef void (^ HelloBlock_t)(const char * name); - - /* Breakpoint for first Block function. */ -HelloBlock_t helloBlock = ^(const char * name) { - printf("Hello there, %s!\n", name); -}; - - /* Breakpoint for second Block function. */ -static HelloBlock_t s_helloBlock = ^(const char * name) { - printf("Hello there, %s!\n", name); -}; - -/* Breakpoint for third Block function. */ -int X = 1234; -int (^CP)(void) = ^{ X = X+1; return X; }; - -int -main(int argc, char * argv[]) -{ - helloBlock("world"); - s_helloBlock("world"); - - CP(); - printf ("X = %d\n", X); - return X - 1235; -} diff --git a/clang/test/CodeGen/issue155126.c b/clang/test/CodeGen/issue155126.c new file mode 100644 index 0000000..56f00f8 --- /dev/null +++ b/clang/test/CodeGen/issue155126.c @@ -0,0 +1,17 @@ +// NOTE: Assertions have been autogenerated by utils/update_cc_test_checks.py UTC_ARGS: --version 5 +// RUN: %clang_cc1 -std=c23 %s -triple x86_64 -emit-llvm -o - | FileCheck %s +// RUN: %clang_cc1 -std=c23 %s -triple x86_64 -emit-llvm -o - -fexperimental-new-constant-interpreter | FileCheck %s + +enum e : bool { b = true }; +// CHECK-LABEL: define dso_local void @foo( +// CHECK-SAME: ) #[[ATTR0:[0-9]+]] { +// CHECK-NEXT: [[ENTRY:.*:]] +// CHECK-NEXT: [[E1:%.*]] = alloca i8, align 1 +// CHECK-NEXT: store i8 0, ptr [[E1]], align 1 +// CHECK-NEXT: ret void +// +void foo () +{ + enum e e1; + e1 = (bool) nullptr; +} diff --git a/clang/test/CodeGen/kcfi-generalize.c b/clang/test/CodeGen/kcfi-generalize.c new file mode 100644 index 0000000..4e32f4f --- /dev/null +++ b/clang/test/CodeGen/kcfi-generalize.c @@ -0,0 +1,33 @@ +// RUN: %clang_cc1 -triple x86_64-unknown-linux -fsanitize=kcfi -fsanitize-trap=kcfi -emit-llvm -o - %s | FileCheck --check-prefix=CHECK --check-prefix=UNGENERALIZED %s +// RUN: %clang_cc1 -triple x86_64-unknown-linux -fsanitize=kcfi -fsanitize-trap=kcfi -fsanitize-cfi-icall-generalize-pointers -emit-llvm -o - %s | FileCheck --check-prefix=CHECK --check-prefix=GENERALIZED %s + +// Test that const char* is generalized to const ptr and that char** is +// generalized to ptr + +// CHECK: define{{.*}} ptr @f({{.*}} !kcfi_type [[TYPE:![0-9]+]] +int** f(const char *a, const char **b) { + return (int**)0; +} + +// GENERALIZED: define{{.*}} ptr @f2({{.*}} !kcfi_type [[TYPE]] +// UNGENERALIZED: define{{.*}} ptr @f2({{.*}} !kcfi_type [[TYPE2:![0-9]+]] +int** f2(const int *a, const int **b) { + return (int**)0; +} + +// CHECK: define{{.*}} ptr @f3({{.*}} !kcfi_type [[TYPE3:![0-9]+]] +int** f3(char *a, char **b) { + return (int**)0; +} + +void g(int** (*fp)(const char *, const char **)) { + // UNGENERALIZED: call {{.*}} [ "kcfi"(i32 1296635908) ] + // GENERALIZED: call {{.*}} [ "kcfi"(i32 -49168686) ] + fp(0, 0); +} + +// UNGENERALIZED: [[TYPE]] = !{i32 1296635908} +// GENERALIZED: [[TYPE]] = !{i32 -49168686} + +// UNGENERALIZED: [[TYPE3]] = !{i32 874141567} +// GENERALIZED: [[TYPE3]] = !{i32 954385378} diff --git a/clang/test/CodeGen/lifetime-debuginfo-1.c b/clang/test/CodeGen/lifetime-debuginfo-1.c deleted file mode 100644 index 10b00f1..0000000 --- a/clang/test/CodeGen/lifetime-debuginfo-1.c +++ /dev/null @@ -1,14 +0,0 @@ -// RUN: %clang_cc1 -O1 -triple x86_64-none-linux-gnu -emit-llvm -debug-info-kind=line-tables-only %s -o - | FileCheck %s -// RUN: %clang_cc1 -O1 -triple x86_64-none-linux-gnu -emit-llvm -debug-info-kind=line-directives-only %s -o - | FileCheck %s - -// Inserting lifetime markers should not affect debuginfo - -extern int x; - -// CHECK-LABEL: define{{.*}} i32 @f -int f(void) { - int *p = &x; -// CHECK: ret i32 %{{.*}}, !dbg [[DI:![0-9]*]] -// CHECK: [[DI]] = !DILocation(line: [[@LINE+1]] - return *p; -} diff --git a/clang/test/CodeGen/lifetime-debuginfo-2.c b/clang/test/CodeGen/lifetime-debuginfo-2.c deleted file mode 100644 index 17d3d0b..0000000 --- a/clang/test/CodeGen/lifetime-debuginfo-2.c +++ /dev/null @@ -1,30 +0,0 @@ -// RUN: %clang_cc1 -O1 -triple x86_64-none-linux-gnu -emit-llvm -debug-info-kind=line-tables-only %s -o - | FileCheck %s -// RUN: %clang_cc1 -O1 -triple x86_64-none-linux-gnu -emit-llvm -debug-info-kind=line-directives-only %s -o - | FileCheck %s - -// Inserting lifetime markers should not affect debuginfo: lifetime.end is not -// a destructor, but instrumentation for the compiler. Ensure the debug info for -// the return statement (in the IR) does not point to the function closing '}' -// which is used to show some destructors have been called before leaving the -// function. - -extern int f(int); -extern int g(int); - -// CHECK-LABEL: define{{.*}} i32 @test -int test(int a, int b) { - int res; - - if (a==2) { - int r = f(b); - res = r + b; - a += 2; - } else { - int r = f(a); - res = r + a; - b += 1; - } - - return res; -// CHECK: ret i32 %{{.*}}, !dbg [[DI:![0-9]+]] -// CHECK: [[DI]] = !DILocation(line: [[@LINE-2]] -} diff --git a/clang/test/CodeGen/lifetime-sanitizer.c b/clang/test/CodeGen/lifetime-sanitizer.c index 68879fd..4d36bd7 100644 --- a/clang/test/CodeGen/lifetime-sanitizer.c +++ b/clang/test/CodeGen/lifetime-sanitizer.c @@ -18,14 +18,14 @@ extern int bar(char *A, int n); // CHECK-O0-NOT: @llvm.lifetime.start int foo(int n) { if (n) { - // LIFETIME: @llvm.lifetime.start.p0(i64 10, ptr {{.*}}) + // LIFETIME: @llvm.lifetime.start.p0(ptr {{.*}}) char A[10]; return bar(A, 1); - // LIFETIME: @llvm.lifetime.end.p0(i64 10, ptr {{.*}}) + // LIFETIME: @llvm.lifetime.end.p0(ptr {{.*}}) } else { - // LIFETIME: @llvm.lifetime.start.p0(i64 20, ptr {{.*}}) + // LIFETIME: @llvm.lifetime.start.p0(ptr {{.*}}) char A[20]; return bar(A, 2); - // LIFETIME: @llvm.lifetime.end.p0(i64 20, ptr {{.*}}) + // LIFETIME: @llvm.lifetime.end.p0(ptr {{.*}}) } } diff --git a/clang/test/CodeGen/lifetime.c b/clang/test/CodeGen/lifetime.c index 748a496..edb6867 100644 --- a/clang/test/CodeGen/lifetime.c +++ b/clang/test/CodeGen/lifetime.c @@ -8,14 +8,14 @@ extern void use(char *a); // CHECK-LABEL: @helper_no_markers __attribute__((always_inline)) void helper_no_markers(void) { char a; - // LIFETIME: call void @llvm.lifetime.start.p0(i64 1, + // LIFETIME: call void @llvm.lifetime.start.p0( use(&a); - // LIFETIME: call void @llvm.lifetime.end.p0(i64 1, + // LIFETIME: call void @llvm.lifetime.end.p0( } // CHECK-LABEL: @lifetime_test void lifetime_test(void) { -// LIFETIME: call void @llvm.lifetime.start.p0(i64 1, +// LIFETIME: call void @llvm.lifetime.start.p0( helper_no_markers(); -// LIFETIME: call void @llvm.lifetime.end.p0(i64 1, +// LIFETIME: call void @llvm.lifetime.end.p0( } diff --git a/clang/test/CodeGen/lifetime2.c b/clang/test/CodeGen/lifetime2.c index 88c35fc..560389f 100644 --- a/clang/test/CodeGen/lifetime2.c +++ b/clang/test/CodeGen/lifetime2.c @@ -7,21 +7,21 @@ extern int bar(char *A, int n); // CHECK-LABEL: @foo int foo (int n) { if (n) { -// O2: call void @llvm.lifetime.start.p0(i64 100, +// O2: call void @llvm.lifetime.start.p0( char A[100]; return bar(A, 1); -// O2: call void @llvm.lifetime.end.p0(i64 100, +// O2: call void @llvm.lifetime.end.p0( } else { -// O2: call void @llvm.lifetime.start.p0(i64 100, +// O2: call void @llvm.lifetime.start.p0( char A[100]; return bar(A, 2); -// O2: call void @llvm.lifetime.end.p0(i64 100, +// O2: call void @llvm.lifetime.end.p0( } } // CHECK-LABEL: @no_goto_bypass void no_goto_bypass(void) { - // O2: call void @llvm.lifetime.start.p0(i64 1, + // O2: call void @llvm.lifetime.start.p0( char x; l1: bar(&x, 1); @@ -45,16 +45,16 @@ void goto_bypass(void) { void no_switch_bypass(int n) { switch (n) { case 1: { - // O2: call void @llvm.lifetime.start.p0(i64 1, - // O2: call void @llvm.lifetime.end.p0(i64 1, + // O2: call void @llvm.lifetime.start.p0( + // O2: call void @llvm.lifetime.end.p0( char x; bar(&x, 1); break; } case 2: n = n; - // O2: call void @llvm.lifetime.start.p0(i64 5, - // O2: call void @llvm.lifetime.end.p0(i64 5, + // O2: call void @llvm.lifetime.start.p0( + // O2: call void @llvm.lifetime.end.p0( char y[5]; bar(y, 5); break; diff --git a/clang/test/CodeGen/lifetime3.cpp b/clang/test/CodeGen/lifetime3.cpp index 64a097c..476ca0d 100644 --- a/clang/test/CodeGen/lifetime3.cpp +++ b/clang/test/CodeGen/lifetime3.cpp @@ -6,30 +6,30 @@ extern int bar(char *A, int n); // CHECK-LABEL: @no_switch_bypass extern "C" void no_switch_bypass(int n) { - // O2: call void @llvm.lifetime.start.p0(i64 4, + // O2: call void @llvm.lifetime.start.p0( switch (n += 1; int b=n) { case 1: { - // O2: call void @llvm.lifetime.start.p0(i64 1, - // O2: call void @llvm.lifetime.end.p0(i64 1, + // O2: call void @llvm.lifetime.start.p0( + // O2: call void @llvm.lifetime.end.p0( char x; bar(&x, 1); break; } case 2: n = n; - // O2: call void @llvm.lifetime.start.p0(i64 5, - // O2: call void @llvm.lifetime.end.p0(i64 5, + // O2: call void @llvm.lifetime.start.p0( + // O2: call void @llvm.lifetime.end.p0( char y[5]; bar(y, 5); break; } - // O2: call void @llvm.lifetime.end.p0(i64 4, + // O2: call void @llvm.lifetime.end.p0( } // CHECK-LABEL: @switch_bypass extern "C" void switch_bypass(int n) { - // O2: call void @llvm.lifetime.start.p0(i64 4, - // O2: call void @llvm.lifetime.end.p0(i64 4, + // O2: call void @llvm.lifetime.start.p0( + // O2: call void @llvm.lifetime.end.p0( switch (n += 1; int b=n) { case 1: n = n; diff --git a/clang/test/CodeGen/lineno-dbginfo.c b/clang/test/CodeGen/lineno-dbginfo.c deleted file mode 100644 index 82f54d0..0000000 --- a/clang/test/CodeGen/lineno-dbginfo.c +++ /dev/null @@ -1,9 +0,0 @@ -// RUN: echo "#include <stddef.h>" > %t.h -// RUN: %clang_cc1 -debug-info-kind=limited -include %t.h %s -emit-llvm -o - | FileCheck %s - -// CHECK: !DIGlobalVariable(name: "outer", -// CHECK-NOT: linkageName: -// CHECK-SAME: line: [[@LINE+2]] -// CHECK-SAME: isDefinition: true -int outer = 42; - diff --git a/clang/test/CodeGen/linetable-endscope.c b/clang/test/CodeGen/linetable-endscope.c deleted file mode 100644 index 03291a2..0000000 --- a/clang/test/CodeGen/linetable-endscope.c +++ /dev/null @@ -1,17 +0,0 @@ -// RUN: %clang_cc1 -emit-llvm -debug-info-kind=limited -triple x86_64-apple-darwin10 %s -o - | FileCheck %s - -// Check the line numbers for the ret instruction. We expect it to be -// at the closing of the lexical scope in this case. See the comments in -// CodeGenFunction::FinishFunction() for more details. - -// CHECK: define {{.*}}foo -// CHECK: store {{.*}}, !dbg ![[CONV:[0-9]+]] -// CHECK: ret {{.*}}, !dbg ![[RET:[0-9]+]] - -void foo(char c) -{ - int i; - // CHECK: ![[CONV]] = !DILocation(line: [[@LINE+1]], column: 5, scope: !{{.*}}) - i = c; - // CHECK: ![[RET]] = !DILocation(line: [[@LINE+1]], column: 1, scope: !{{.*}}) -} diff --git a/clang/test/CodeGen/link-builtin-bitcode.c b/clang/test/CodeGen/link-builtin-bitcode.c index 963a395..9a5b6de 100644 --- a/clang/test/CodeGen/link-builtin-bitcode.c +++ b/clang/test/CodeGen/link-builtin-bitcode.c @@ -43,7 +43,7 @@ int bar() { return no_attr() + attr_in_target() + attr_not_in_target() + attr_in // CHECK-LABEL: @attr_incompatible // CHECK-SAME: () #[[ATTR_INCOMPATIBLE:[0-9]+]] { -// CHECK: attributes #[[ATTR_BAR]] = { {{.*}} "target-cpu"="gfx90a" "target-features"="+16-bit-insts,+atomic-buffer-global-pk-add-f16-insts,+atomic-fadd-rtn-insts,+ci-insts,+dl-insts,+dot1-insts,+dot10-insts,+dot2-insts,+dot3-insts,+dot4-insts,+dot5-insts,+dot6-insts,+dot7-insts,+dpp,+gfx8-insts,+gfx9-insts,+gfx90a-insts,+mai-insts,+s-memrealtime,+s-memtime-inst,+wavefrontsize64" } -// CHECK: attributes #[[ATTR_COMPATIBLE]] = { {{.*}} "target-cpu"="gfx90a" "target-features"="+16-bit-insts,+atomic-buffer-global-pk-add-f16-insts,+atomic-fadd-rtn-insts,+ci-insts,+dl-insts,+dot1-insts,+dot10-insts,+dot2-insts,+dot3-insts,+dot4-insts,+dot5-insts,+dot6-insts,+dot7-insts,+dpp,+gfx8-insts,+gfx9-insts,+gfx90a-insts,+gws,+image-insts,+mai-insts,+s-memrealtime,+s-memtime-inst,+vmem-to-lds-load-insts,+wavefrontsize64" } -// CHECK: attributes #[[ATTR_EXTEND]] = { {{.*}} "target-cpu"="gfx90a" "target-features"="+16-bit-insts,+atomic-buffer-global-pk-add-f16-insts,+atomic-fadd-rtn-insts,+ci-insts,+dl-insts,+dot1-insts,+dot10-insts,+dot2-insts,+dot3-insts,+dot4-insts,+dot5-insts,+dot6-insts,+dot7-insts,+dpp,+extended-image-insts,+gfx8-insts,+gfx9-insts,+gfx90a-insts,+gws,+image-insts,+mai-insts,+s-memrealtime,+s-memtime-inst,+vmem-to-lds-load-insts,+wavefrontsize64" } -// CHECK: attributes #[[ATTR_INCOMPATIBLE]] = { {{.*}} "target-cpu"="gfx90a" "target-features"="+16-bit-insts,+atomic-buffer-global-pk-add-f16-insts,+atomic-fadd-rtn-insts,+ci-insts,+dl-insts,+dot1-insts,+dot10-insts,+dot2-insts,+dot3-insts,+dot4-insts,+dot5-insts,+dot6-insts,+dot7-insts,+dpp,+gfx8-insts,+gfx90a-insts,+gws,+image-insts,+mai-insts,+s-memrealtime,+s-memtime-inst,+vmem-to-lds-load-insts,+wavefrontsize64,-gfx9-insts" } +// CHECK: attributes #[[ATTR_BAR]] = { {{.*}} "target-cpu"="gfx90a" "target-features"="+16-bit-insts,+atomic-buffer-global-pk-add-f16-insts,+atomic-fadd-rtn-insts,+atomic-fmin-fmax-global-f64,+ci-insts,+dl-insts,+dot1-insts,+dot10-insts,+dot2-insts,+dot3-insts,+dot4-insts,+dot5-insts,+dot6-insts,+dot7-insts,+dpp,+gfx8-insts,+gfx9-insts,+gfx90a-insts,+mai-insts,+s-memrealtime,+s-memtime-inst,+wavefrontsize64" } +// CHECK: attributes #[[ATTR_COMPATIBLE]] = { {{.*}} "target-cpu"="gfx90a" "target-features"="+16-bit-insts,+atomic-buffer-global-pk-add-f16-insts,+atomic-fadd-rtn-insts,+atomic-fmin-fmax-global-f64,+ci-insts,+dl-insts,+dot1-insts,+dot10-insts,+dot2-insts,+dot3-insts,+dot4-insts,+dot5-insts,+dot6-insts,+dot7-insts,+dpp,+gfx8-insts,+gfx9-insts,+gfx90a-insts,+gws,+image-insts,+mai-insts,+s-memrealtime,+s-memtime-inst,+vmem-to-lds-load-insts,+wavefrontsize64" } +// CHECK: attributes #[[ATTR_EXTEND]] = { {{.*}} "target-cpu"="gfx90a" "target-features"="+16-bit-insts,+atomic-buffer-global-pk-add-f16-insts,+atomic-fadd-rtn-insts,+atomic-fmin-fmax-global-f64,+ci-insts,+dl-insts,+dot1-insts,+dot10-insts,+dot2-insts,+dot3-insts,+dot4-insts,+dot5-insts,+dot6-insts,+dot7-insts,+dpp,+extended-image-insts,+gfx8-insts,+gfx9-insts,+gfx90a-insts,+gws,+image-insts,+mai-insts,+s-memrealtime,+s-memtime-inst,+vmem-to-lds-load-insts,+wavefrontsize64" } +// CHECK: attributes #[[ATTR_INCOMPATIBLE]] = { {{.*}} "target-cpu"="gfx90a" "target-features"="+16-bit-insts,+atomic-buffer-global-pk-add-f16-insts,+atomic-fadd-rtn-insts,+atomic-fmin-fmax-global-f64,+ci-insts,+dl-insts,+dot1-insts,+dot10-insts,+dot2-insts,+dot3-insts,+dot4-insts,+dot5-insts,+dot6-insts,+dot7-insts,+dpp,+gfx8-insts,+gfx90a-insts,+gws,+image-insts,+mai-insts,+s-memrealtime,+s-memtime-inst,+vmem-to-lds-load-insts,+wavefrontsize64,-gfx9-insts" } diff --git a/clang/test/CodeGen/math-libcalls-tbaa.c b/clang/test/CodeGen/math-libcalls-tbaa.c index f4e81ea..b2f502e 100644 --- a/clang/test/CodeGen/math-libcalls-tbaa.c +++ b/clang/test/CodeGen/math-libcalls-tbaa.c @@ -82,12 +82,12 @@ double test_remainder (double num[], double a) { // CHECK-SAME: ptr noundef readonly captures(none) [[NUM:%.*]]) local_unnamed_addr #[[ATTR5:[0-9]+]] { // CHECK-NEXT: [[ENTRY:.*:]] // CHECK-NEXT: [[E:%.*]] = alloca i32, align 4 -// CHECK-NEXT: call void @llvm.lifetime.start.p0(i64 4, ptr nonnull [[E]]) #[[ATTR9]] +// CHECK-NEXT: call void @llvm.lifetime.start.p0(ptr nonnull [[E]]) #[[ATTR9]] // CHECK-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds nuw i8, ptr [[NUM]], i64 16 // CHECK-NEXT: [[TMP0:%.*]] = load double, ptr [[ARRAYIDX]], align 8, !tbaa [[TBAA8]] // CHECK-NEXT: [[CALL:%.*]] = call double @frexp(double noundef [[TMP0]], ptr noundef nonnull [[E]]) #[[ATTR9]] // CHECK-NEXT: [[MUL:%.*]] = fmul double [[TMP0]], [[CALL]] -// CHECK-NEXT: call void @llvm.lifetime.end.p0(i64 4, ptr nonnull [[E]]) #[[ATTR9]] +// CHECK-NEXT: call void @llvm.lifetime.end.p0(ptr nonnull [[E]]) #[[ATTR9]] // CHECK-NEXT: ret double [[MUL]] // double test_frexp (double num[]) { @@ -105,8 +105,8 @@ double test_frexp (double num[]) { // CHECK-NEXT: [[ENTRY:.*:]] // CHECK-NEXT: [[SIN:%.*]] = alloca float, align 4 // CHECK-NEXT: [[COS:%.*]] = alloca float, align 4 -// CHECK-NEXT: call void @llvm.lifetime.start.p0(i64 4, ptr nonnull [[SIN]]) #[[ATTR9]] -// CHECK-NEXT: call void @llvm.lifetime.start.p0(i64 4, ptr nonnull [[COS]]) #[[ATTR9]] +// CHECK-NEXT: call void @llvm.lifetime.start.p0(ptr nonnull [[SIN]]) #[[ATTR9]] +// CHECK-NEXT: call void @llvm.lifetime.start.p0(ptr nonnull [[COS]]) #[[ATTR9]] // CHECK-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds nuw i8, ptr [[NUM]], i64 8 // CHECK-NEXT: [[TMP0:%.*]] = load float, ptr [[ARRAYIDX]], align 4, !tbaa [[TBAA2]] // CHECK-NEXT: call void @sincos(float noundef [[TMP0]], ptr noundef nonnull [[SIN]], ptr noundef nonnull [[COS]]) #[[ATTR9]] @@ -115,8 +115,8 @@ double test_frexp (double num[]) { // CHECK-NEXT: [[MUL:%.*]] = fmul float [[TMP1]], [[TMP2]] // CHECK-NEXT: [[TMP3:%.*]] = load float, ptr [[ARRAYIDX]], align 4, !tbaa [[TBAA2]] // CHECK-NEXT: [[ADD:%.*]] = fadd float [[MUL]], [[TMP3]] -// CHECK-NEXT: call void @llvm.lifetime.end.p0(i64 4, ptr nonnull [[COS]]) #[[ATTR9]] -// CHECK-NEXT: call void @llvm.lifetime.end.p0(i64 4, ptr nonnull [[SIN]]) #[[ATTR9]] +// CHECK-NEXT: call void @llvm.lifetime.end.p0(ptr nonnull [[COS]]) #[[ATTR9]] +// CHECK-NEXT: call void @llvm.lifetime.end.p0(ptr nonnull [[SIN]]) #[[ATTR9]] // CHECK-NEXT: ret float [[ADD]] // float test_sincos (float num[]) { diff --git a/clang/test/CodeGen/mips-debug-info-bitfield.c b/clang/test/CodeGen/mips-debug-info-bitfield.c deleted file mode 100644 index a0e2ed9c..0000000 --- a/clang/test/CodeGen/mips-debug-info-bitfield.c +++ /dev/null @@ -1,17 +0,0 @@ -// RUN: %clang_cc1 -x c -debug-info-kind=limited -triple mips-none-linux-gnu -emit-llvm -o - %s | FileCheck %s - -struct fields -{ - unsigned a : 4; - unsigned b : 4; -} flags; - -// CHECK: !DIDerivedType(tag: DW_TAG_member, -// CHECK-SAME: {{.*}}name: "a" -// CHECK-NOT: {{.*}}offset: -// CHECK-SAME: {{.*}}flags: DIFlagBitField - -// CHECK: !DIDerivedType(tag: DW_TAG_member, -// CHECK-SAME: {{.*}}name: "b" -// CHECK-SAME: {{.*}}offset: 4 -// CHECK-SAME: {{.*}}flags: DIFlagBitField diff --git a/clang/test/CodeGen/nodebug-attr.c b/clang/test/CodeGen/nodebug-attr.c deleted file mode 100644 index ee19a4c..0000000 --- a/clang/test/CodeGen/nodebug-attr.c +++ /dev/null @@ -1,15 +0,0 @@ -// RUN: %clang_cc1 -triple x86_64-linux-gnu -emit-llvm %s -O3 \ -// RUN: -debug-info-kind=limited -o - -debugger-tuning=gdb -dwarf-version=4 \ -// RUN: | FileCheck %s - -// Makes sure there is no !dbg between function attributes and '{'. -// CHECK-LABEL: define{{.*}} void @foo{{.*}} #{{[0-9]+}} { -// CHECK-NOT: ret {{.*}}!dbg -__attribute__((nodebug)) void foo(int *a) { - *a = 1; -} - -// CHECK-LABEL: define {{.*}}@bar{{.*}}!dbg -void bar(int *a) { - foo(a); -} diff --git a/clang/test/CodeGen/nofpclass.c b/clang/test/CodeGen/nofpclass.c index 8e61ae2..6cd7ec1 100644 --- a/clang/test/CodeGen/nofpclass.c +++ b/clang/test/CodeGen/nofpclass.c @@ -927,14 +927,14 @@ _Complex _Float16 defined_complex_func_f16_ret(_Complex _Float16 c) { // CLFINITEONLY-NEXT: [[CF16_REAL:%.*]] = load half, ptr [[CF16]], align 8 // CLFINITEONLY-NEXT: [[CF16_IMAGP:%.*]] = getelementptr inbounds nuw i8, ptr [[CF16]], i64 2 // CLFINITEONLY-NEXT: [[CF16_IMAG:%.*]] = load half, ptr [[CF16_IMAGP]], align 2 -// CLFINITEONLY-NEXT: call void @llvm.lifetime.start.p0(i64 16, ptr nonnull [[BYVAL_TEMP]]) #[[ATTR12:[0-9]+]] +// CLFINITEONLY-NEXT: call void @llvm.lifetime.start.p0(ptr nonnull [[BYVAL_TEMP]]) #[[ATTR12:[0-9]+]] // CLFINITEONLY-NEXT: [[BYVAL_TEMP_IMAGP:%.*]] = getelementptr inbounds nuw i8, ptr [[BYVAL_TEMP]], i64 8 // CLFINITEONLY-NEXT: store double [[CF64_COERCE0]], ptr [[BYVAL_TEMP]], align 8 // CLFINITEONLY-NEXT: store double [[CF64_COERCE1]], ptr [[BYVAL_TEMP_IMAGP]], align 8 // CLFINITEONLY-NEXT: [[COERCE5_SROA_0_0_VEC_INSERT:%.*]] = insertelement <2 x half> poison, half [[CF16_REAL]], i64 0 // CLFINITEONLY-NEXT: [[COERCE5_SROA_0_2_VEC_INSERT:%.*]] = insertelement <2 x half> [[COERCE5_SROA_0_0_VEC_INSERT]], half [[CF16_IMAG]], i64 1 // CLFINITEONLY-NEXT: [[CALL:%.*]] = tail call nnan ninf nofpclass(nan inf) float (float, ...) @variadic(float noundef nofpclass(nan inf) [[F32]], double noundef nofpclass(nan inf) [[CONV]], double noundef nofpclass(nan inf) [[F64]], half noundef nofpclass(nan inf) [[F16]], double noundef nofpclass(nan inf) [[V2F32_COERCE]], <2 x double> noundef nofpclass(nan inf) [[V2F64]], i32 noundef [[V2F16_COERCE]], <2 x float> noundef nofpclass(nan inf) [[CF32_COERCE]], ptr noundef nonnull byval({ double, double }) align 8 [[BYVAL_TEMP]], <2 x half> noundef nofpclass(nan inf) [[COERCE5_SROA_0_2_VEC_INSERT]]) #[[ATTR11]] -// CLFINITEONLY-NEXT: call void @llvm.lifetime.end.p0(i64 16, ptr nonnull [[BYVAL_TEMP]]) #[[ATTR12]] +// CLFINITEONLY-NEXT: call void @llvm.lifetime.end.p0(ptr nonnull [[BYVAL_TEMP]]) #[[ATTR12]] // CLFINITEONLY-NEXT: ret float [[CALL]] // // NONANS: Function Attrs: noinline nounwind optnone @@ -1180,14 +1180,14 @@ float call_variadic(float f32, double f64, _Float16 f16, // CLFINITEONLY-NEXT: [[CF16_REAL:%.*]] = load half, ptr [[CF16]], align 8 // CLFINITEONLY-NEXT: [[CF16_IMAGP:%.*]] = getelementptr inbounds nuw i8, ptr [[CF16]], i64 2 // CLFINITEONLY-NEXT: [[CF16_IMAG:%.*]] = load half, ptr [[CF16_IMAGP]], align 2 -// CLFINITEONLY-NEXT: call void @llvm.lifetime.start.p0(i64 16, ptr nonnull [[BYVAL_TEMP]]) #[[ATTR12]] +// CLFINITEONLY-NEXT: call void @llvm.lifetime.start.p0(ptr nonnull [[BYVAL_TEMP]]) #[[ATTR12]] // CLFINITEONLY-NEXT: [[BYVAL_TEMP_IMAGP:%.*]] = getelementptr inbounds nuw i8, ptr [[BYVAL_TEMP]], i64 8 // CLFINITEONLY-NEXT: store double [[CF64_COERCE0]], ptr [[BYVAL_TEMP]], align 8 // CLFINITEONLY-NEXT: store double [[CF64_COERCE1]], ptr [[BYVAL_TEMP_IMAGP]], align 8 // CLFINITEONLY-NEXT: [[COERCE5_SROA_0_0_VEC_INSERT:%.*]] = insertelement <2 x half> poison, half [[CF16_REAL]], i64 0 // CLFINITEONLY-NEXT: [[COERCE5_SROA_0_2_VEC_INSERT:%.*]] = insertelement <2 x half> [[COERCE5_SROA_0_0_VEC_INSERT]], half [[CF16_IMAG]], i64 1 // CLFINITEONLY-NEXT: [[CALL:%.*]] = tail call nnan ninf nofpclass(nan inf) float (float, ...) [[FPTR]](float noundef nofpclass(nan inf) [[F32]], double noundef nofpclass(nan inf) [[CONV]], double noundef nofpclass(nan inf) [[F64]], half noundef nofpclass(nan inf) [[F16]], double noundef nofpclass(nan inf) [[V2F32_COERCE]], <2 x double> noundef nofpclass(nan inf) [[V2F64]], i32 noundef [[V2F16_COERCE]], <2 x float> noundef nofpclass(nan inf) [[CF32_COERCE]], ptr noundef nonnull byval({ double, double }) align 8 [[BYVAL_TEMP]], <2 x half> noundef nofpclass(nan inf) [[COERCE5_SROA_0_2_VEC_INSERT]]) #[[ATTR11]] -// CLFINITEONLY-NEXT: call void @llvm.lifetime.end.p0(i64 16, ptr nonnull [[BYVAL_TEMP]]) #[[ATTR12]] +// CLFINITEONLY-NEXT: call void @llvm.lifetime.end.p0(ptr nonnull [[BYVAL_TEMP]]) #[[ATTR12]] // CLFINITEONLY-NEXT: ret float [[CALL]] // // NONANS: Function Attrs: noinline nounwind optnone diff --git a/clang/test/CodeGen/null-sanitizer-debug-info-regression.cpp b/clang/test/CodeGen/null-sanitizer-debug-info-regression.cpp deleted file mode 100644 index 0b62f24..0000000 --- a/clang/test/CodeGen/null-sanitizer-debug-info-regression.cpp +++ /dev/null @@ -1,5 +0,0 @@ -// RUN: %clangxx -g -fsanitize=null -fsanitize-trap=all -fsanitize-annotate-debug-info=all -O2 -std=c++17 -c -o /dev/null %s - -struct foo { - foo(int, long, const int & = int()); -} foo(0, 0); diff --git a/clang/test/CodeGen/object-size.cpp b/clang/test/CodeGen/object-size.cpp index e6ae3ae..39c0f35 100644 --- a/clang/test/CodeGen/object-size.cpp +++ b/clang/test/CodeGen/object-size.cpp @@ -1,4 +1,5 @@ // RUN: %clang_cc1 -triple x86_64-apple-darwin -emit-llvm -o - %s | FileCheck %s +// RUN: %clang_cc1 -triple x86_64-apple-darwin -emit-llvm -o - %s -fexperimental-new-constant-interpreter | FileCheck %s // C++-specific tests for __builtin_object_size diff --git a/clang/test/CodeGen/openmp-prefix-map.c b/clang/test/CodeGen/openmp-prefix-map.c deleted file mode 100644 index be3429c..0000000 --- a/clang/test/CodeGen/openmp-prefix-map.c +++ /dev/null @@ -1,21 +0,0 @@ -// RUN: %clang_cc1 -triple i386-unknown-unknown -debug-info-kind=standalone -fopenmp %s -emit-llvm -o - -disable-llvm-optzns -fdebug-prefix-map=%S=.| FileCheck -DPREFIX=%S %s - -// CHECK-NOT: @{{[0-9]+}} = private unnamed_addr constant [{{[0-9]+}} x i8] c";[[PREFIX]]{{.*}}.c;foo;{{[0-9]+}};{{[0-9]+}};;\00" - -void work1(int, int); -void work2(int, int); -void work12(int, int); - -void foo(int q) { - int p = 2; - - #pragma omp parallel firstprivate(q, p) - work1(p, q); - - #pragma omp parallel for firstprivate(p, q) - for (int i = 0; i < q; i++) - work2(i, p); - - #pragma omp target teams firstprivate(p) - work12(p, p); -} diff --git a/clang/test/CodeGen/overloadable-debug.c b/clang/test/CodeGen/overloadable-debug.c deleted file mode 100644 index c742f74f..0000000 --- a/clang/test/CodeGen/overloadable-debug.c +++ /dev/null @@ -1,9 +0,0 @@ -// RUN: %clang_cc1 -triple %itanium_abi_triple -emit-llvm -debug-info-kind=limited %s -o - | FileCheck %s - -__attribute__((overloadable)) void f1(a) int a; { -} -void f2(a) int a; { -} - -// CHECK: !DISubprogram(name: "f1", linkageName: "_Z2f1i" -// CHECK: !DISubprogram(name: "f2", scope: {{.*}}, spFlags: DISPFlagDefinition, diff --git a/clang/test/CodeGen/packed-arrays.c b/clang/test/CodeGen/packed-arrays.c index 097fa7f..51629b6 100644 --- a/clang/test/CodeGen/packed-arrays.c +++ b/clang/test/CodeGen/packed-arrays.c @@ -55,7 +55,7 @@ int align3_x0 = __alignof(((struct s3*) 0)->x[0]); // CHECK: load i32, ptr %{{.*}}, align 1 // CHECK: } // CHECK-LABEL: define{{.*}} i32 @f0_b -// CHECK: load i32, ptr %{{.*}}, align 4 +// CHECK: load i32, ptr %{{.*}}, align 1 // CHECK: } int f0_a(struct s0 *a) { return a->x[1]; @@ -100,7 +100,7 @@ int f1_d(struct s1 *a) { // CHECK: load i32, ptr %{{.*}}, align 1 // CHECK: } // CHECK-LABEL: define{{.*}} i32 @f2_b -// CHECK: load i32, ptr %{{.*}}, align 4 +// CHECK: load i32, ptr %{{.*}}, align 1 // CHECK: } // CHECK-LABEL: define{{.*}} i32 @f2_c // CHECK: load i32, ptr %{{.*}}, align 1 @@ -125,7 +125,7 @@ int f2_d(struct s2 *a) { // CHECK: load i32, ptr %{{.*}}, align 1 // CHECK: } // CHECK-LABEL: define{{.*}} i32 @f3_b -// CHECK: load i32, ptr %{{.*}}, align 4 +// CHECK: load i32, ptr %{{.*}}, align 1 // CHECK: } // CHECK-LABEL: define{{.*}} i32 @f3_c // CHECK: load i32, ptr %{{.*}}, align 1 diff --git a/clang/test/CodeGen/palignr.c b/clang/test/CodeGen/palignr.c index 092937a..9b80cf9 100644 --- a/clang/test/CodeGen/palignr.c +++ b/clang/test/CodeGen/palignr.c @@ -1,16 +1,16 @@ // REQUIRES: x86-registered-target -// RUN: %clang_cc1 %s -triple=i686-apple-darwin -target-feature +ssse3 -O1 -S -o - | FileCheck %s +// RUN: %clang_cc1 %s -triple=i686-apple-darwin -target-feature +ssse3 -O1 -S -flax-vector-conversions=none -o - | FileCheck %s #define _mm_alignr_epi8(a, b, n) (__builtin_ia32_palignr128((a), (b), (n))) -typedef __attribute__((vector_size(16))) int int4; +typedef char __v16qi __attribute__((__vector_size__(16))); // CHECK: palignr $15, %xmm1, %xmm0 -int4 align1(int4 a, int4 b) { return _mm_alignr_epi8(a, b, 15); } +__v16qi align1(__v16qi a, __v16qi b) { return _mm_alignr_epi8(a, b, 15); } // CHECK: ret // CHECK: ret // CHECK-NOT: palignr -int4 align2(int4 a, int4 b) { return _mm_alignr_epi8(a, b, 16); } +__v16qi align2(__v16qi a, __v16qi b) { return _mm_alignr_epi8(a, b, 16); } // CHECK: psrldq $1, %xmm0 -int4 align3(int4 a, int4 b) { return _mm_alignr_epi8(a, b, 17); } +__v16qi align3(__v16qi a, __v16qi b) { return _mm_alignr_epi8(a, b, 17); } // CHECK: xor -int4 align4(int4 a, int4 b) { return _mm_alignr_epi8(a, b, 32); } +__v16qi align4(__v16qi a, __v16qi b) { return _mm_alignr_epi8(a, b, 32); } diff --git a/clang/test/CodeGen/pointer-arithmetic-align.c b/clang/test/CodeGen/pointer-arithmetic-align.c new file mode 100644 index 0000000..745ab84 --- /dev/null +++ b/clang/test/CodeGen/pointer-arithmetic-align.c @@ -0,0 +1,83 @@ +// NOTE: Assertions have been autogenerated by utils/update_cc_test_checks.py UTC_ARGS: --version 5 +// RUN: %clang_cc1 -O1 -triple=x86_64-unknown-linux %s -emit-llvm -o - | FileCheck %s + +typedef unsigned char uint8_t; +typedef unsigned long long uint64_t; + +struct a { + uint64_t b; + uint8_t block[16]; +}; + +// CHECK-LABEL: define dso_local void @ptradd_0( +// CHECK-SAME: ptr noundef writeonly captures(none) initializes((8, 9)) [[CTX:%.*]]) local_unnamed_addr #[[ATTR0:[0-9]+]] { +// CHECK-NEXT: [[ENTRY:.*:]] +// CHECK-NEXT: [[BLOCK:%.*]] = getelementptr inbounds nuw i8, ptr [[CTX]], i64 8 +// CHECK-NEXT: store i8 0, ptr [[BLOCK]], align 8, !tbaa [[TBAA2:![0-9]+]] +// CHECK-NEXT: ret void +// +void ptradd_0(struct a *ctx) { + *(ctx->block + 0) = 0; +} + +// CHECK-LABEL: define dso_local void @ptradd_4( +// CHECK-SAME: ptr noundef writeonly captures(none) initializes((12, 13)) [[CTX:%.*]]) local_unnamed_addr #[[ATTR0]] { +// CHECK-NEXT: [[ENTRY:.*:]] +// CHECK-NEXT: [[ADD_PTR:%.*]] = getelementptr inbounds nuw i8, ptr [[CTX]], i64 12 +// CHECK-NEXT: store i8 0, ptr [[ADD_PTR]], align 4, !tbaa [[TBAA2]] +// CHECK-NEXT: ret void +// +void ptradd_4(struct a *ctx) { + *(ctx->block + 4) = 0; +} + +// CHECK-LABEL: define dso_local void @ptradd_8( +// CHECK-SAME: ptr noundef writeonly captures(none) initializes((16, 17)) [[CTX:%.*]]) local_unnamed_addr #[[ATTR0]] { +// CHECK-NEXT: [[ENTRY:.*:]] +// CHECK-NEXT: [[ADD_PTR:%.*]] = getelementptr inbounds nuw i8, ptr [[CTX]], i64 16 +// CHECK-NEXT: store i8 0, ptr [[ADD_PTR]], align 8, !tbaa [[TBAA2]] +// CHECK-NEXT: ret void +// +void ptradd_8(struct a *ctx) { + *(ctx->block + 8) = 0; +} + +// CHECK-LABEL: define dso_local void @ptradd_8_commuted( +// CHECK-SAME: ptr noundef writeonly captures(none) initializes((16, 17)) [[CTX:%.*]]) local_unnamed_addr #[[ATTR0]] { +// CHECK-NEXT: [[ENTRY:.*:]] +// CHECK-NEXT: [[ADD_PTR:%.*]] = getelementptr inbounds nuw i8, ptr [[CTX]], i64 16 +// CHECK-NEXT: store i8 0, ptr [[ADD_PTR]], align 8, !tbaa [[TBAA2]] +// CHECK-NEXT: ret void +// +void ptradd_8_commuted(struct a *ctx) { + *(8 + ctx->block) = 0; +} + +// CHECK-LABEL: define dso_local void @ptrsub_4( +// CHECK-SAME: ptr noundef writeonly captures(none) initializes((8, 9)) [[CTX:%.*]]) local_unnamed_addr #[[ATTR0]] { +// CHECK-NEXT: [[ENTRY:.*:]] +// CHECK-NEXT: [[ADD_PTR:%.*]] = getelementptr inbounds nuw i8, ptr [[CTX]], i64 8 +// CHECK-NEXT: store i8 0, ptr [[ADD_PTR]], align 4, !tbaa [[TBAA2]] +// CHECK-NEXT: ret void +// +void ptrsub_4(struct a *ctx) { + *(&ctx->block[4] - 4) = 0; +} + +// CHECK-LABEL: define dso_local void @neg_ptradd_var_index( +// CHECK-SAME: ptr noundef writeonly captures(none) [[CTX:%.*]], i8 noundef zeroext [[IDX:%.*]]) local_unnamed_addr #[[ATTR0]] { +// CHECK-NEXT: [[ENTRY:.*:]] +// CHECK-NEXT: [[BLOCK:%.*]] = getelementptr inbounds nuw i8, ptr [[CTX]], i64 8 +// CHECK-NEXT: [[IDX_EXT:%.*]] = zext i8 [[IDX]] to i64 +// CHECK-NEXT: [[ADD_PTR:%.*]] = getelementptr inbounds nuw i8, ptr [[BLOCK]], i64 [[IDX_EXT]] +// CHECK-NEXT: store i8 0, ptr [[ADD_PTR]], align 1, !tbaa [[TBAA2]] +// CHECK-NEXT: ret void +// +void neg_ptradd_var_index(struct a *ctx, uint8_t idx) { + *(ctx->block + idx) = 0; +} +//. +// CHECK: [[TBAA2]] = !{[[META3:![0-9]+]], [[META3]], i64 0} +// CHECK: [[META3]] = !{!"omnipotent char", [[META4:![0-9]+]], i64 0} +// CHECK: [[META4]] = !{!"Simple C/C++ TBAA"} +//. diff --git a/clang/test/CodeGen/pr52782-stdcall-func-decl.cpp b/clang/test/CodeGen/pr52782-stdcall-func-decl.cpp deleted file mode 100644 index c3c94ec..0000000 --- a/clang/test/CodeGen/pr52782-stdcall-func-decl.cpp +++ /dev/null @@ -1,10 +0,0 @@ -// RUN: %clang_cc1 -triple i686-w64-windows-gnu -o - -emit-llvm -debug-info-kind=constructor %s | FileCheck %s - -enum nsresult {}; - -class NotNull; - -class nsICanvasRenderingContextInternal { - // CHECK: !DISubprogram(name: "InitializeWithDrawTarget", linkageName: "\01__ZN33nsICanvasRenderingContextInternal24InitializeWithDrawTargetE7NotNull@4" - nsresult __stdcall InitializeWithDrawTarget(NotNull); -} nsTBaseHashSet; diff --git a/clang/test/CodeGen/preferred_name-chain.cpp b/clang/test/CodeGen/preferred_name-chain.cpp deleted file mode 100644 index 3108cae..0000000 --- a/clang/test/CodeGen/preferred_name-chain.cpp +++ /dev/null @@ -1,65 +0,0 @@ -// RUN: %clang_cc1 -triple x86_64-unk-unk -o - -emit-llvm -debug-info-kind=standalone -debugger-tuning=lldb %s | FileCheck %s --check-prefixes=COMMON,LLDB -// RUN: %clang_cc1 -triple x86_64-unk-unk -o - -emit-llvm -debug-info-kind=standalone -debugger-tuning=gdb %s | FileCheck %s --check-prefixes=COMMON,GDB - -template <typename T> -struct Foo; - -typedef Foo<int> BarIntBase; -typedef BarIntBase BarIntTmp; -typedef BarIntTmp BarInt; - -template <typename T> -using BarBase = Foo<T>; - -template <typename T> -using BarTmp = BarBase<T>; - -template <typename T> -using Bar = BarTmp<T>; - -template <typename T> -struct [[clang::preferred_name(BarInt), - clang::preferred_name(Bar<char>)]] Foo{ - }; - -int main() { - Foo<int> varInt; - -// COMMON: !DILocalVariable(name: "varInt", scope: ![[#]], file: ![[#]], line: [[#]], type: ![[BAR_INT_TY:[0-9]+]]) -// LLDB: ![[BAR_INT_TY]] = !DIDerivedType(tag: DW_TAG_typedef, name: "BarInt", file: ![[#]], line: [[#]], baseType: ![[BAR_INT_TMP:[0-9]+]]) -// LLDB: ![[BAR_INT_TMP]] = !DIDerivedType(tag: DW_TAG_typedef, name: "BarIntTmp", file: ![[#]], line: [[#]], baseType: ![[BAR_INT_BASE:[0-9]+]]) -// LLDB: ![[BAR_INT_BASE]] = !DIDerivedType(tag: DW_TAG_typedef, name: "BarIntBase", file: ![[#]], line: [[#]], baseType: ![[FOO_INT:[0-9]+]]) -// LLDB: ![[FOO_INT]] = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "Foo<int>", file: ![[#]], line: [[#]], size: [[#]] -// GDB: ![[BAR_INT_TY]] = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "Foo<int>", file: ![[#]], line: [[#]], size: [[#]] - - Foo<char> varChar; - -// COMMON: !DILocalVariable(name: "varChar", scope: ![[#]], file: ![[#]], line: [[#]], type: ![[BAR_CHAR_TY:[0-9]+]]) -// LLDB: ![[BAR_CHAR_TY]] = !DIDerivedType(tag: DW_TAG_typedef, name: "Bar<char>", file: ![[#]], line: [[#]], baseType: ![[BAR_CHAR_TMP:[0-9]+]]) -// LLDB: ![[BAR_CHAR_TMP]] = !DIDerivedType(tag: DW_TAG_typedef, name: "BarTmp<char>", file: ![[#]], line: [[#]], baseType: ![[BAR_CHAR_BASE:[0-9]+]]) -// LLDB: ![[BAR_CHAR_BASE]] = !DIDerivedType(tag: DW_TAG_typedef, name: "BarBase<char>", file: ![[#]], line: [[#]], baseType: ![[FOO_CHAR:[0-9]+]]) -// LLDB: ![[FOO_CHAR]] = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "Foo<char>" -// GDB: ![[BAR_CHAR_TY]] = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "Foo<char>" - - Foo<Foo<int>> varFooInt; - -// COMMON: !DILocalVariable(name: "varFooInt", scope: ![[#]], file: ![[#]], line: [[#]], type: ![[FOO_BAR_INT_TY:[0-9]+]]) -// COMMON: ![[FOO_BAR_INT_TY]] = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "Foo<Foo<int> >" -// COMMON-SAME: templateParams: ![[PARAM:[0-9]+]] -// COMMON: ![[PARAM]] = !{![[TEMPL_TYPE_PARAM:[0-9]+]]} -// GDB: ![[TEMPL_TYPE_PARAM]] = !DITemplateTypeParameter(name: "T", type: ![[BAR_INT_TY]]) -// LLDB: ![[TEMPL_TYPE_PARAM]] = !DITemplateTypeParameter(name: "T", type: ![[BAR_INT_TY]]) - - Foo<Foo<char>> varFooChar; - -// COMMON: !DILocalVariable(name: "varFooChar", scope: ![[#]], file: ![[#]], line: [[#]], type: ![[FOO_BAR_CHAR_TY:[0-9]+]]) -// COMMON: ![[FOO_BAR_CHAR_TY]] = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "Foo<Foo<char> >" -// COMMON-SAME: templateParams: ![[CHAR_PARAM:[0-9]+]] -// COMMON: ![[CHAR_PARAM]] = !{![[CHAR_TEMPL_TYPE_PARAM:[0-9]+]]} -// GDB: ![[CHAR_TEMPL_TYPE_PARAM]] = !DITemplateTypeParameter(name: "T", type: ![[BAR_CHAR_TY]]) -// LLDB: ![[CHAR_TEMPL_TYPE_PARAM]] = !DITemplateTypeParameter(name: "T", type: ![[BAR_CHAR_TY]]) - - return 0; -} - - diff --git a/clang/test/CodeGen/preferred_name.cpp b/clang/test/CodeGen/preferred_name.cpp deleted file mode 100644 index 9b3f532..0000000 --- a/clang/test/CodeGen/preferred_name.cpp +++ /dev/null @@ -1,89 +0,0 @@ -// RUN: %clang_cc1 -triple x86_64-unk-unk -o - -emit-llvm -debug-info-kind=standalone -debugger-tuning=lldb %s | FileCheck %s --check-prefixes=COMMON,LLDB -// RUN: %clang_cc1 -triple x86_64-unk-unk -o - -emit-llvm -debug-info-kind=standalone -debugger-tuning=gdb %s | FileCheck %s --check-prefixes=COMMON,GDB - -template <typename T> -struct Foo; - -typedef Foo<int> BarInt; -typedef Foo<double> BarDouble; - -template <typename T> -using Bar = Foo<T>; - -template <typename T> -struct [[clang::preferred_name(BarInt), - clang::preferred_name(BarDouble), - clang::preferred_name(Bar<short>), - clang::preferred_name(Bar<char>)]] Foo{ - }; - -int main() { - Foo<int> varInt; - -// COMMON: !DILocalVariable(name: "varInt", scope: ![[#]], file: ![[#]], line: [[#]], type: ![[BAR_INT_TY:[0-9]+]]) -// LLDB: ![[BAR_INT_TY]] = !DIDerivedType(tag: DW_TAG_typedef, name: "BarInt", file: ![[#]], line: [[#]], baseType: ![[BAR_INT_BASE:[0-9]+]]) -// LLDB: ![[BAR_INT_BASE]] = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "Foo<int>", file: ![[#]], line: [[#]], size: [[#]] -// GDB: ![[BAR_INT_TY]] = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "Foo<int>", file: ![[#]], line: [[#]], size: [[#]] - - Foo<double> varDouble; - -// COMMON: !DILocalVariable(name: "varDouble", scope: ![[#]], file: ![[#]], line: [[#]], type: ![[BAR_DOUBLE_TY:[0-9]+]]) -// LLDB: ![[BAR_DOUBLE_TY]] = !DIDerivedType(tag: DW_TAG_typedef, name: "BarDouble", file: ![[#]], line: [[#]], baseType: ![[BAR_DOUBLE_BASE:[0-9]+]]) -// LLDB: ![[BAR_DOUBLE_BASE]] = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "Foo<double>" -// GDB: ![[BAR_DOUBLE_TY]] = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "Foo<double>" - - Foo<short> varShort; - -// COMMON: !DILocalVariable(name: "varShort", scope: ![[#]], file: ![[#]], line: [[#]], type: ![[BAR_SHORT_TY:[0-9]+]]) -// LLDB: ![[BAR_SHORT_TY]] = !DIDerivedType(tag: DW_TAG_typedef, name: "Bar<short>", file: ![[#]], line: [[#]], baseType: ![[BAR_SHORT_BASE:[0-9]+]]) -// LLDB: ![[BAR_SHORT_BASE]] = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "Foo<short>" -// GDB: ![[BAR_SHORT_TY]] = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "Foo<short>" - - Foo<char> varChar; - -// COMMON: !DILocalVariable(name: "varChar", scope: ![[#]], file: ![[#]], line: [[#]], type: ![[BAR_CHAR_TY:[0-9]+]]) -// LLDB: ![[BAR_CHAR_TY]] = !DIDerivedType(tag: DW_TAG_typedef, name: "Bar<char>", file: ![[#]], line: [[#]], baseType: ![[BAR_CHAR_BASE:[0-9]+]]) -// LLDB: ![[BAR_CHAR_BASE]] = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "Foo<char>" -// GDB: ![[BAR_CHAR_TY]] = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "Foo<char>" - - Foo<Foo<int>> varFooInt; - -// COMMON: !DILocalVariable(name: "varFooInt", scope: ![[#]], file: ![[#]], line: [[#]], type: ![[FOO_BAR_INT_TY:[0-9]+]]) -// COMMON: ![[FOO_BAR_INT_TY]] = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "Foo<Foo<int> >" -// COMMON-SAME: templateParams: ![[PARAM:[0-9]+]] -// COMMON: ![[PARAM]] = !{![[TEMPL_TYPE_PARAM:[0-9]+]]} -// GDB: ![[TEMPL_TYPE_PARAM]] = !DITemplateTypeParameter(name: "T", type: ![[BAR_INT_TY]]) -// LLDB: ![[TEMPL_TYPE_PARAM]] = !DITemplateTypeParameter(name: "T", type: ![[BAR_INT_TY]]) - - BarInt barInt; - -// LLDB: !DILocalVariable(name: "barInt", scope: ![[#]], file: ![[#]], line: [[#]], type: ![[BAR_INT_TY]]) -// GDB: !DILocalVariable(name: "barInt", scope: ![[#]], file: ![[#]], line: [[#]], type: ![[BAR_INT_TYPEDEF:[0-9]+]]) -// GDB: ![[BAR_INT_TYPEDEF]] = !DIDerivedType(tag: DW_TAG_typedef, name: "BarInt" - - BarDouble barDouble; - -// LLDB: !DILocalVariable(name: "barDouble", scope: ![[#]], file: ![[#]], line: [[#]], type: ![[BAR_DOUBLE_TY]]) -// GDB: !DILocalVariable(name: "barDouble", scope: ![[#]], file: ![[#]], line: [[#]], type: ![[BAR_DOUBLE_TYPEDEF:[0-9]+]]) -// GDB: ![[BAR_DOUBLE_TYPEDEF]] = !DIDerivedType(tag: DW_TAG_typedef, name: "BarDouble" - - Bar<short> barShort; - -// LLDB: !DILocalVariable(name: "barShort", scope: ![[#]], file: ![[#]], line: [[#]], type: ![[BAR_SHORT_TY_2:[0-9]+]]) -// GDB: !DILocalVariable(name: "barShort", scope: ![[#]], file: ![[#]], line: [[#]], type: ![[BAR_SHORT_TYPEDEF:[0-9]+]]) -// GDB: ![[BAR_SHORT_TYPEDEF]] = !DIDerivedType(tag: DW_TAG_typedef, name: "Bar<short>" - - Bar<char> barChar; - -// LLDB: ![[BAR_SHORT_TY_2]] = !DIDerivedType(tag: DW_TAG_typedef, name: "Bar<short>", file: ![[#]], line: [[#]], baseType: ![[BAR_SHORT_TY]]) - -// LLDB: !DILocalVariable(name: "barChar", scope: ![[#]], file: ![[#]], line: [[#]], type: ![[BAR_CHAR_TY_2:[0-9]+]]) -// GDB: !DILocalVariable(name: "barChar", scope: ![[#]], file: ![[#]], line: [[#]], type: ![[BAR_CHAR_TYPEDEF:[0-9]+]]) -// GDB: ![[BAR_CHAR_TYPEDEF]] = !DIDerivedType(tag: DW_TAG_typedef, name: "Bar<char>" - -// LLDB: ![[BAR_CHAR_TY_2]] = !DIDerivedType(tag: DW_TAG_typedef, name: "Bar<char>", file: ![[#]], line: [[#]], baseType: ![[BAR_CHAR_TY]]) - - return 0; -} - - diff --git a/clang/test/CodeGen/ptrauth-debuginfo.c b/clang/test/CodeGen/ptrauth-debuginfo.c deleted file mode 100644 index b76baff..0000000 --- a/clang/test/CodeGen/ptrauth-debuginfo.c +++ /dev/null @@ -1,35 +0,0 @@ -// RUN: %clang_cc1 -triple arm64-apple-ios \ -// RUN: -fptrauth-calls -fptrauth-intrinsics -emit-llvm -fblocks \ -// RUN: %s -debug-info-kind=limited -o - | FileCheck %s -// RUN: %clang_cc1 -triple aarch64-linux-gnu \ -// RUN: -fptrauth-calls -fptrauth-intrinsics -emit-llvm -fblocks \ -// RUN: %s -debug-info-kind=limited -o - | FileCheck %s - -// Constant initializers for data pointers. -extern int external_int; - -int *__ptrauth(1, 0, 1234) g1 = &external_int; -// CHECK: !DIDerivedType(tag: DW_TAG_LLVM_ptrauth_type, -// CHECK-SAME: ptrAuthKey: 1, -// CHECK-SAME: ptrAuthIsAddressDiscriminated: false, -// CHECK-SAME: ptrAuthExtraDiscriminator: 1234, -// CHECK-SAME: ptrAuthIsaPointer: false, -// CHECK-SAME: ptrAuthAuthenticatesNullValues: false) - -struct A { - int value; -}; -struct A *createA(void); - -void f() { - __block struct A *__ptrauth(0, 1, 1236) ptr = createA(); - ^{ - (void)ptr->value; - }(); -} -// CHECK: !DIDerivedType(tag: DW_TAG_LLVM_ptrauth_type, -// CHECK-NOT: ptrAuthKey -// CHECK-SAME: ptrAuthIsAddressDiscriminated: true, -// CHECK-SAME: ptrAuthExtraDiscriminator: 1236, -// CHECK-SAME: ptrAuthIsaPointer: false, -// CHECK-SAME: ptrAuthAuthenticatesNullValues: false) diff --git a/clang/test/CodeGen/ptrauth-qualifier-blocks.c b/clang/test/CodeGen/ptrauth-qualifier-blocks.c index 62da59c..f460da2 100644 --- a/clang/test/CodeGen/ptrauth-qualifier-blocks.c +++ b/clang/test/CodeGen/ptrauth-qualifier-blocks.c @@ -82,9 +82,15 @@ void test_block_address_byref_capture() { // CHECK: store i32 33554432, // CHECK: store i32 48, // CHECK: [[COPY_HELPER_FIELD:%.*]] = getelementptr inbounds nuw [[BYREF_T]], ptr [[BYREF]], i32 0, i32 4 - // CHECK: store ptr @__Block_byref_object_copy_, ptr [[COPY_HELPER_FIELD]], align + // CHECK: [[T0:%.*]] = ptrtoint ptr [[COPY_HELPER_FIELD]] to i64 + // CHECK: [[T1:%.*]] = call i64 @llvm.ptrauth.sign(i64 ptrtoint (ptr @__Block_byref_object_copy_ to i64), i32 0, i64 [[T0]]) + // CHECK: [[T2:%.*]] = inttoptr i64 [[T1]] to ptr + // CHECK: store ptr [[T2]], ptr [[COPY_HELPER_FIELD]], align // CHECK: [[DISPOSE_HELPER_FIELD:%.*]] = getelementptr inbounds nuw [[BYREF_T]], ptr [[BYREF]], i32 0, i32 5 - // CHECK: store ptr @__Block_byref_object_dispose_, ptr [[DISPOSE_HELPER_FIELD]], align + // CHECK: [[T0:%.*]] = ptrtoint ptr [[DISPOSE_HELPER_FIELD]] to i64 + // CHECK: [[T1:%.*]] = call i64 @llvm.ptrauth.sign(i64 ptrtoint (ptr @__Block_byref_object_dispose_ to i64), i32 0, i64 [[T0]]) + // CHECK: [[T2:%.*]] = inttoptr i64 [[T1]] to ptr + // CHECK: store ptr [[T2]], ptr [[DISPOSE_HELPER_FIELD]], align // flags - copy/dispose required // CHECK: store i32 1107296256, ptr __block struct A * __ptrauth(1, 1, 60) ptr = createA(); diff --git a/clang/test/CodeGen/rounding-math.cpp b/clang/test/CodeGen/rounding-math.cpp index 264031d..5c44fd3 100644 --- a/clang/test/CodeGen/rounding-math.cpp +++ b/clang/test/CodeGen/rounding-math.cpp @@ -11,3 +11,55 @@ float V3 = func_01(1.0F, 2.0F); // CHECK: @V1 = {{.*}}global float 1.000000e+00, align 4 // CHECK: @V2 = {{.*}}global float 1.000000e+00, align 4 // CHECK: @V3 = {{.*}}global float 3.000000e+00, align 4 + +void test_builtin_elementwise_fma_round_upward() { + #pragma STDC FENV_ACCESS ON + #pragma STDC FENV_ROUND FE_UPWARD + + // CHECK: store float 0x4018000100000000, ptr %f1 + // CHECK: store float 0x4018000100000000, ptr %f2 + constexpr float f1 = __builtin_elementwise_fma(2.0F, 3.000001F, 0.000001F); + constexpr float f2 = 2.0F * 3.000001F + 0.000001F; + static_assert(f1 == f2); + static_assert(f1 == 6.00000381F); + // CHECK: store double 0x40180000C9539B89, ptr %d1 + // CHECK: store double 0x40180000C9539B89, ptr %d2 + constexpr double d1 = __builtin_elementwise_fma(2.0, 3.000001, 0.000001); + constexpr double d2 = 2.0 * 3.000001 + 0.000001; + static_assert(d1 == d2); + static_assert(d1 == 6.0000030000000004); +} + +void test_builtin_elementwise_fma_round_downward() { + #pragma STDC FENV_ACCESS ON + #pragma STDC FENV_ROUND FE_DOWNWARD + + // CHECK: store float 0x40180000C0000000, ptr %f3 + // CHECK: store float 0x40180000C0000000, ptr %f4 + constexpr float f3 = __builtin_elementwise_fma(2.0F, 3.000001F, 0.000001F); + constexpr float f4 = 2.0F * 3.000001F + 0.000001F; + static_assert(f3 == f4); + // CHECK: store double 0x40180000C9539B87, ptr %d3 + // CHECK: store double 0x40180000C9539B87, ptr %d4 + constexpr double d3 = __builtin_elementwise_fma(2.0, 3.000001, 0.000001); + constexpr double d4 = 2.0 * 3.000001 + 0.000001; + static_assert(d3 == d4); +} + +void test_builtin_elementwise_fma_round_nearest() { + #pragma STDC FENV_ACCESS ON + #pragma STDC FENV_ROUND FE_TONEAREST + + // CHECK: store float 0x40180000C0000000, ptr %f5 + // CHECK: store float 0x40180000C0000000, ptr %f6 + constexpr float f5 = __builtin_elementwise_fma(2.0F, 3.000001F, 0.000001F); + constexpr float f6 = 2.0F * 3.000001F + 0.000001F; + static_assert(f5 == f6); + static_assert(f5 == 6.00000286F); + // CHECK: store double 0x40180000C9539B89, ptr %d5 + // CHECK: store double 0x40180000C9539B89, ptr %d6 + constexpr double d5 = __builtin_elementwise_fma(2.0, 3.000001, 0.000001); + constexpr double d6 = 2.0 * 3.000001 + 0.000001; + static_assert(d5 == d6); + static_assert(d5 == 6.0000030000000004); +} diff --git a/clang/test/CodeGen/split-debug-filename.c b/clang/test/CodeGen/split-debug-filename.c deleted file mode 100644 index ea710cc..0000000 --- a/clang/test/CodeGen/split-debug-filename.c +++ /dev/null @@ -1,14 +0,0 @@ -// REQUIRES: x86-registered-target -// RUN: %clang_cc1 -debug-info-kind=limited -split-dwarf-file foo.dwo -emit-llvm -o - %s | FileCheck %s -// RUN: %clang_cc1 -triple x86_64-unknown-linux -debug-info-kind=limited -split-dwarf-file %t.dwo -split-dwarf-output %t.dwo -emit-obj -o - %s | llvm-readobj -S - | FileCheck --check-prefix=O %s -// RUN: llvm-readobj -S %t.dwo | FileCheck --check-prefix=DWO %s - -int main (void) { - return 0; -} - -// Testing to ensure that the dwo name gets output into the compile unit. -// CHECK: !DICompileUnit({{.*}}, splitDebugFilename: "foo.dwo" - -// O-NOT: .dwo -// DWO: .dwo diff --git a/clang/test/CodeGen/split-debug-inlining.c b/clang/test/CodeGen/split-debug-inlining.c deleted file mode 100644 index b1c9814..0000000 --- a/clang/test/CodeGen/split-debug-inlining.c +++ /dev/null @@ -1,7 +0,0 @@ -// RUN: %clang_cc1 -debug-info-kind=limited -emit-llvm -o - %s | FileCheck %s -// RUN: %clang_cc1 -debug-info-kind=limited -fsplit-dwarf-inlining -emit-llvm -o - %s | FileCheck --check-prefix=ABSENT %s -void f(void) {} -// Verify that disabling split debug inlining info is propagated to the debug -// info metadata. -// CHECK: !DICompileUnit({{.*}}, splitDebugInlining: false -// ABSENT-NOT: splitDebugInlining diff --git a/clang/test/CodeGen/split-debug-output.c b/clang/test/CodeGen/split-debug-output.c deleted file mode 100644 index 94cc141..0000000 --- a/clang/test/CodeGen/split-debug-output.c +++ /dev/null @@ -1,11 +0,0 @@ -// REQUIRES: x86-registered-target -// RUN: %clang_cc1 -triple x86_64-unknown-linux -debug-info-kind=limited -dwarf-version=4 -split-dwarf-file foo.dwo -split-dwarf-output %t -emit-obj -o - %s | llvm-dwarfdump -debug-info - | FileCheck --check-prefix=DWARFv4 %s -// RUN: llvm-dwarfdump -debug-info %t | FileCheck --check-prefix=DWARFv4 %s - -// RUN: %clang_cc1 -triple x86_64-unknown-linux -debug-info-kind=limited -dwarf-version=5 -split-dwarf-file foo.dwo -split-dwarf-output %t -emit-obj -o - %s | llvm-dwarfdump -debug-info - | FileCheck --check-prefix=DWARFv5 %s -// RUN: llvm-dwarfdump -debug-info %t | FileCheck --check-prefix=DWARFv5 %s - -int f(void) { return 0; } - -// DWARFv4: DW_AT_GNU_dwo_name ("foo.dwo") -// DWARFv5: DW_AT_dwo_name ("foo.dwo") diff --git a/clang/test/CodeGen/split-debug-single-file.c b/clang/test/CodeGen/split-debug-single-file.c deleted file mode 100644 index 0c38d0f..0000000 --- a/clang/test/CodeGen/split-debug-single-file.c +++ /dev/null @@ -1,18 +0,0 @@ -// REQUIRES: x86-registered-target - -// Testing to ensure that setting only -split-dwarf-file allows to place .dwo sections into regular output object. -// RUN: %clang_cc1 -debug-info-kind=limited -triple x86_64-unknown-linux \ -// RUN: -split-dwarf-file %t.o -emit-obj -o %t.o %s -// RUN: llvm-readobj -S %t.o | FileCheck --check-prefix=MODE-SINGLE %s -// MODE-SINGLE: .dwo - -// Testing to ensure that setting both -split-dwarf-file and -split-dwarf-output -// does not place .dwo sections into regular output object. -// RUN: %clang_cc1 -debug-info-kind=limited -triple x86_64-unknown-linux \ -// RUN: -split-dwarf-file %t.dwo -split-dwarf-output %t.dwo -emit-obj -o %t.o %s -// RUN: llvm-readobj -S %t.o | FileCheck --check-prefix=MODE-SPLIT %s -// MODE-SPLIT-NOT: .dwo - -int main (void) { - return 0; -} diff --git a/clang/test/CodeGen/target-builtin-noerror.c b/clang/test/CodeGen/target-builtin-noerror.c index 0bbd8c3..5cf53b2 100644 --- a/clang/test/CodeGen/target-builtin-noerror.c +++ b/clang/test/CodeGen/target-builtin-noerror.c @@ -32,15 +32,15 @@ int qq(void) { // Test that fma and fma4 are both separately and combined valid for an fma intrinsic. __m128 __attribute__((target("fma"))) fma_1(__m128 a, __m128 b, __m128 c) { - return __builtin_ia32_vfmaddps(a, b, c); + return __builtin_ia32_vfmaddsubps(a, b, c); } __m128 __attribute__((target("fma4"))) fma_2(__m128 a, __m128 b, __m128 c) { - return __builtin_ia32_vfmaddps(a, b, c); + return __builtin_ia32_vfmaddsubps(a, b, c); } __m128 __attribute__((target("fma,fma4"))) fma_3(__m128 a, __m128 b, __m128 c) { - return __builtin_ia32_vfmaddps(a, b, c); + return __builtin_ia32_vfmaddsubps(a, b, c); } void verifyfeaturestrings(void) { diff --git a/clang/test/CodeGen/target-data.c b/clang/test/CodeGen/target-data.c index 92fe3eb6..eecee69 100644 --- a/clang/test/CodeGen/target-data.c +++ b/clang/test/CodeGen/target-data.c @@ -144,11 +144,11 @@ // RUN: %clang_cc1 -triple nvptx-unknown -o - -emit-llvm %s | \ // RUN: FileCheck %s -check-prefix=NVPTX -// NVPTX: target datalayout = "e-p:32:32-p6:32:32-p7:32:32-i64:64-i128:128-v16:16-v32:32-n16:32:64" +// NVPTX: target datalayout = "e-p:32:32-p6:32:32-p7:32:32-i64:64-i128:128-i256:256-v16:16-v32:32-n16:32:64" // RUN: %clang_cc1 -triple nvptx64-unknown -o - -emit-llvm %s | \ // RUN: FileCheck %s -check-prefix=NVPTX64 -// NVPTX64: target datalayout = "e-p6:32:32-i64:64-i128:128-v16:16-v32:32-n16:32:64" +// NVPTX64: target datalayout = "e-p6:32:32-i64:64-i128:128-i256:256-v16:16-v32:32-n16:32:64" // RUN: %clang_cc1 -triple r600-unknown -o - -emit-llvm %s | \ // RUN: FileCheck %s -check-prefix=R600 diff --git a/clang/test/CodeGen/target-features-error-3.c b/clang/test/CodeGen/target-features-error-3.c new file mode 100644 index 0000000..ff4866a --- /dev/null +++ b/clang/test/CodeGen/target-features-error-3.c @@ -0,0 +1,12 @@ +// RUN: %clang_cc1 %s -triple=x86_64-linux-gnu -emit-llvm -verify -o /dev/null + +typedef double __v2df __attribute__((__vector_size__(16))); + +__v2df __attribute__((target("sse4.1"))) foo() { + __v2df v = {0.0, 0.0}; + return __builtin_ia32_roundpd(v, 2); +} + +__v2df __attribute__((flatten)) bar() { + return foo(); // expected-error {{flatten function 'bar' calls 'foo' which requires target feature 'sse4.1', but the caller is compiled without support for 'sse4.1'}} +} diff --git a/clang/test/CodeGen/target-features-error-4.c b/clang/test/CodeGen/target-features-error-4.c new file mode 100644 index 0000000..fe4879e --- /dev/null +++ b/clang/test/CodeGen/target-features-error-4.c @@ -0,0 +1,12 @@ +// RUN: %clang_cc1 %s -triple=x86_64-linux-gnu -emit-llvm -verify -o /dev/null + +typedef double __v2df __attribute__((__vector_size__(16))); + +__v2df __attribute__((target("sse4.1"))) foo() { + __v2df v = {0.0, 0.0}; + return __builtin_ia32_roundpd(v, 2); +} + +__v2df __attribute__((target("no-sse4.1"), flatten)) bar() { + return foo(); // expected-error {{flatten function 'bar' calls 'foo' which requires target feature 'sse4.1', but the caller is compiled without support for 'sse4.1'}} +} diff --git a/clang/test/CodeGen/target-features-error-5.c b/clang/test/CodeGen/target-features-error-5.c new file mode 100644 index 0000000..8bc3ba1 --- /dev/null +++ b/clang/test/CodeGen/target-features-error-5.c @@ -0,0 +1,12 @@ +// RUN: %clang_cc1 %s -triple=x86_64-linux-gnu -target-feature +sse4.1 -emit-llvm -verify -o /dev/null + +typedef double __v2df __attribute__((__vector_size__(16))); + +__v2df foo() { + __v2df v = {0.0, 0.0}; + return __builtin_ia32_roundpd(v, 2); +} + +__v2df __attribute__((target("no-sse4.1"), flatten)) bar() { + return foo(); // expected-error {{flatten function 'bar' calls 'foo' which requires target feature 'sse4.1', but the caller is compiled without support for 'sse4.1'}} +} diff --git a/clang/test/CodeGen/target-features-no-error-2.c b/clang/test/CodeGen/target-features-no-error-2.c new file mode 100644 index 0000000..eeec3f3 --- /dev/null +++ b/clang/test/CodeGen/target-features-no-error-2.c @@ -0,0 +1,12 @@ +// RUN: %clang_cc1 %s -triple=x86_64-linux-gnu -emit-llvm -verify -o /dev/null + +typedef double __v2df __attribute__((__vector_size__(16))); + +__v2df __attribute__((target("sse4.1"))) foo() { + __v2df v = {0.0, 0.0}; + return __builtin_ia32_roundpd(v, 2); +} + +__v2df __attribute__((target("sse4.1"), flatten)) bar() { + return foo(); // expected-no-diagnostics +} diff --git a/clang/test/CodeGen/temporary-lifetime-exceptions.cpp b/clang/test/CodeGen/temporary-lifetime-exceptions.cpp index 50e4a0f..45400c2 100644 --- a/clang/test/CodeGen/temporary-lifetime-exceptions.cpp +++ b/clang/test/CodeGen/temporary-lifetime-exceptions.cpp @@ -8,15 +8,15 @@ A Baz(const A&); void Test1() { // CHECK-LABEL: @_Z5Test1v( - // CHECK: call void @llvm.lifetime.start.p0(i64 1, ptr nonnull [[TMP:[^ ]+]]) - // CHECK: call void @llvm.lifetime.start.p0(i64 1, ptr nonnull [[TMP1:[^ ]+]]) + // CHECK: call void @llvm.lifetime.start.p0(ptr nonnull [[TMP:[^ ]+]]) + // CHECK: call void @llvm.lifetime.start.p0(ptr nonnull [[TMP1:[^ ]+]]) // Normal exit - // CHECK: call void @llvm.lifetime.end.p0(i64 1, ptr nonnull [[TMP1]]) - // CHECK-NEXT: call void @llvm.lifetime.end.p0(i64 1, ptr nonnull [[TMP]]) + // CHECK: call void @llvm.lifetime.end.p0(ptr nonnull [[TMP1]]) + // CHECK-NEXT: call void @llvm.lifetime.end.p0(ptr nonnull [[TMP]]) // Exception exit - // CHECK: call void @llvm.lifetime.end.p0(i64 1, ptr nonnull [[TMP1]]) - // CHECK-NEXT: call void @llvm.lifetime.end.p0(i64 1, ptr nonnull [[TMP]]) + // CHECK: call void @llvm.lifetime.end.p0(ptr nonnull [[TMP1]]) + // CHECK-NEXT: call void @llvm.lifetime.end.p0(ptr nonnull [[TMP]]) Baz(Baz(A())); } diff --git a/clang/test/CodeGen/temporary-lifetime.cpp b/clang/test/CodeGen/temporary-lifetime.cpp index 9f085d4..0408729 100644 --- a/clang/test/CodeGen/temporary-lifetime.cpp +++ b/clang/test/CodeGen/temporary-lifetime.cpp @@ -21,27 +21,27 @@ T Baz(); void Test1() { // CHECK-DTOR-LABEL: Test1 - // CHECK-DTOR: call void @llvm.lifetime.start.p0(i64 1024, ptr nonnull %[[ADDR:.+]]) + // CHECK-DTOR: call void @llvm.lifetime.start.p0(ptr nonnull %[[ADDR:.+]]) // CHECK-DTOR: call void @_ZN1AC1Ev(ptr nonnull {{[^,]*}} %[[VAR:[^ ]+]]) // CHECK-DTOR: call void @_Z3FooIRK1AEvOT_ // CHECK-DTOR: call void @_ZN1AD1Ev(ptr nonnull {{[^,]*}} %[[VAR]]) - // CHECK-DTOR: call void @llvm.lifetime.end.p0(i64 1024, ptr nonnull %[[ADDR]]) - // CHECK-DTOR: call void @llvm.lifetime.start.p0(i64 1024, ptr nonnull %[[ADDR:.+]]) + // CHECK-DTOR: call void @llvm.lifetime.end.p0(ptr nonnull %[[ADDR]]) + // CHECK-DTOR: call void @llvm.lifetime.start.p0(ptr nonnull %[[ADDR:.+]]) // CHECK-DTOR: call void @_ZN1AC1Ev(ptr nonnull {{[^,]*}} %[[VAR:[^ ]+]]) // CHECK-DTOR: call void @_Z3FooIRK1AEvOT_ // CHECK-DTOR: call void @_ZN1AD1Ev(ptr nonnull {{[^,]*}} %[[VAR]]) - // CHECK-DTOR: call void @llvm.lifetime.end.p0(i64 1024, ptr nonnull %[[ADDR]]) + // CHECK-DTOR: call void @llvm.lifetime.end.p0(ptr nonnull %[[ADDR]]) // CHECK-DTOR: } // CHECK-NO-DTOR-LABEL: Test1 - // CHECK-NO-DTOR: call void @llvm.lifetime.start.p0(i64 1024, ptr nonnull %[[ADDR:.+]]) + // CHECK-NO-DTOR: call void @llvm.lifetime.start.p0(ptr nonnull %[[ADDR:.+]]) // CHECK-NO-DTOR: call void @_ZN1AC1Ev(ptr nonnull {{[^,]*}} %[[VAR:[^ ]+]]) // CHECK-NO-DTOR: call void @_Z3FooIRK1AEvOT_ - // CHECK-NO-DTOR: call void @llvm.lifetime.end.p0(i64 1024, ptr nonnull %[[ADDR]]) - // CHECK-NO-DTOR: call void @llvm.lifetime.start.p0(i64 1024, ptr nonnull %[[ADDR:.+]]) + // CHECK-NO-DTOR: call void @llvm.lifetime.end.p0(ptr nonnull %[[ADDR]]) + // CHECK-NO-DTOR: call void @llvm.lifetime.start.p0(ptr nonnull %[[ADDR:.+]]) // CHECK-NO-DTOR: call void @_ZN1AC1Ev(ptr nonnull {{[^,]*}} %[[VAR:[^ ]+]]) // CHECK-NO-DTOR: call void @_Z3FooIRK1AEvOT_ - // CHECK-NO-DTOR: call void @llvm.lifetime.end.p0(i64 1024, ptr nonnull %[[ADDR]]) + // CHECK-NO-DTOR: call void @llvm.lifetime.end.p0(ptr nonnull %[[ADDR]]) // CHECK-NO-DTOR: } { const A &a = A{}; @@ -55,27 +55,27 @@ void Test1() { void Test2() { // CHECK-DTOR-LABEL: Test2 - // CHECK-DTOR: call void @llvm.lifetime.start.p0(i64 1024, ptr nonnull %[[ADDR1:.+]]) + // CHECK-DTOR: call void @llvm.lifetime.start.p0(ptr nonnull %[[ADDR1:.+]]) // CHECK-DTOR: call void @_ZN1AC1Ev(ptr nonnull {{[^,]*}} %[[VAR1:[^ ]+]]) // CHECK-DTOR: call void @_Z3FooIRK1AEvOT_ - // CHECK-DTOR: call void @llvm.lifetime.start.p0(i64 1024, ptr nonnull %[[ADDR2:.+]]) + // CHECK-DTOR: call void @llvm.lifetime.start.p0(ptr nonnull %[[ADDR2:.+]]) // CHECK-DTOR: call void @_ZN1AC1Ev(ptr nonnull {{[^,]*}} %[[VAR2:[^ ]+]]) // CHECK-DTOR: call void @_Z3FooIRK1AEvOT_ // CHECK-DTOR: call void @_ZN1AD1Ev(ptr nonnull {{[^,]*}} %[[VAR2]]) - // CHECK-DTOR: call void @llvm.lifetime.end.p0(i64 1024, ptr nonnull %[[ADDR2]]) + // CHECK-DTOR: call void @llvm.lifetime.end.p0(ptr nonnull %[[ADDR2]]) // CHECK-DTOR: call void @_ZN1AD1Ev(ptr nonnull {{[^,]*}} %[[VAR1]]) - // CHECK-DTOR: call void @llvm.lifetime.end.p0(i64 1024, ptr nonnull %[[ADDR1]]) + // CHECK-DTOR: call void @llvm.lifetime.end.p0(ptr nonnull %[[ADDR1]]) // CHECK-DTOR: } // CHECK-NO-DTOR-LABEL: Test2 - // CHECK-NO-DTOR: call void @llvm.lifetime.start.p0(i64 1024, ptr nonnull %[[ADDR1:.+]]) + // CHECK-NO-DTOR: call void @llvm.lifetime.start.p0(ptr nonnull %[[ADDR1:.+]]) // CHECK-NO-DTOR: call void @_ZN1AC1Ev(ptr nonnull {{[^,]*}} %[[VAR1:[^ ]+]]) // CHECK-NO-DTOR: call void @_Z3FooIRK1AEvOT_ - // CHECK-NO-DTOR: call void @llvm.lifetime.start.p0(i64 1024, ptr nonnull %[[ADDR2:.+]]) + // CHECK-NO-DTOR: call void @llvm.lifetime.start.p0(ptr nonnull %[[ADDR2:.+]]) // CHECK-NO-DTOR: call void @_ZN1AC1Ev(ptr nonnull {{[^,]*}} %[[VAR2:[^ ]+]]) // CHECK-NO-DTOR: call void @_Z3FooIRK1AEvOT_ - // CHECK-NO-DTOR: call void @llvm.lifetime.end.p0(i64 1024, ptr nonnull %[[ADDR2]]) - // CHECK-NO-DTOR: call void @llvm.lifetime.end.p0(i64 1024, ptr nonnull %[[ADDR1]]) + // CHECK-NO-DTOR: call void @llvm.lifetime.end.p0(ptr nonnull %[[ADDR2]]) + // CHECK-NO-DTOR: call void @llvm.lifetime.end.p0(ptr nonnull %[[ADDR1]]) // CHECK-NO-DTOR: } const A &a = A{}; Foo(a); @@ -135,16 +135,16 @@ int Test5() { void Test6() { // CHECK-DTOR-LABEL: Test6 - // CHECK-DTOR: call void @llvm.lifetime.start.p0(i64 {{[0-9]+}}, ptr nonnull %[[ADDR:.+]]) + // CHECK-DTOR: call void @llvm.lifetime.start.p0(ptr nonnull %[[ADDR:.+]]) // CHECK-DTOR: call i32 @_Z3BazIiET_v() // CHECK-DTOR: store // CHECK-DTOR: call void @_Z3FooIiEvOT_ - // CHECK-DTOR: call void @llvm.lifetime.end.p0(i64 {{[0-9]+}}, ptr nonnull %[[ADDR]]) - // CHECK-DTOR: call void @llvm.lifetime.start.p0(i64 {{[0-9]+}}, ptr nonnull %[[ADDR:.+]]) + // CHECK-DTOR: call void @llvm.lifetime.end.p0(ptr nonnull %[[ADDR]]) + // CHECK-DTOR: call void @llvm.lifetime.start.p0(ptr nonnull %[[ADDR:.+]]) // CHECK-DTOR: call i32 @_Z3BazIiET_v() // CHECK-DTOR: store // CHECK-DTOR: call void @_Z3FooIiEvOT_ - // CHECK-DTOR: call void @llvm.lifetime.end.p0(i64 {{[0-9]+}}, ptr nonnull %[[ADDR]]) + // CHECK-DTOR: call void @llvm.lifetime.end.p0(ptr nonnull %[[ADDR]]) // CHECK-DTOR: } Foo(Baz<int>()); Foo(Baz<int>()); @@ -152,16 +152,16 @@ void Test6() { void Test7() { // CHECK-DTOR-LABEL: Test7 - // CHECK-DTOR: call void @llvm.lifetime.start.p0(i64 1024, ptr nonnull %[[ADDR:.+]]) + // CHECK-DTOR: call void @llvm.lifetime.start.p0(ptr nonnull %[[ADDR:.+]]) // CHECK-DTOR: call void @_Z3BazI1AET_v({{.*}} %[[SLOT:[^ ]+]]) // CHECK-DTOR: call void @_Z3FooI1AEvOT_({{.*}} %[[SLOT]]) // CHECK-DTOR: call void @_ZN1AD1Ev(ptr nonnull {{[^,]*}} %[[SLOT]]) - // CHECK-DTOR: call void @llvm.lifetime.end.p0(i64 1024, ptr nonnull %[[ADDR]]) - // CHECK-DTOR: call void @llvm.lifetime.start.p0(i64 1024, ptr nonnull %[[ADDR:.+]]) + // CHECK-DTOR: call void @llvm.lifetime.end.p0(ptr nonnull %[[ADDR]]) + // CHECK-DTOR: call void @llvm.lifetime.start.p0(ptr nonnull %[[ADDR:.+]]) // CHECK-DTOR: call void @_Z3BazI1AET_v({{.*}} %[[SLOT:[^ ]+]]) // CHECK-DTOR: call void @_Z3FooI1AEvOT_({{.*}} %[[SLOT]]) // CHECK-DTOR: call void @_ZN1AD1Ev(ptr nonnull {{[^,]*}} %[[SLOT]]) - // CHECK-DTOR: call void @llvm.lifetime.end.p0(i64 1024, ptr nonnull %[[ADDR]]) + // CHECK-DTOR: call void @llvm.lifetime.end.p0(ptr nonnull %[[ADDR]]) // CHECK-DTOR: } Foo(Baz<A>()); Foo(Baz<A>()); diff --git a/clang/test/CodeGen/thinlto-split-dwarf.c b/clang/test/CodeGen/thinlto-split-dwarf.c deleted file mode 100644 index b1db029..0000000 --- a/clang/test/CodeGen/thinlto-split-dwarf.c +++ /dev/null @@ -1,43 +0,0 @@ -// REQUIRES: x86-registered-target - -// RUN: %clang_cc1 -debug-info-kind=limited -triple x86_64-unknown-linux-gnu \ -// RUN: -flto=thin -emit-llvm-bc \ -// RUN: -o %t.o %s - -// RUN: llvm-lto2 run -thinlto-distributed-indexes %t.o \ -// RUN: -o %t2.index \ -// RUN: -r=%t.o,main,px - -// RUN: %clang_cc1 -triple x86_64-unknown-linux-gnu \ -// RUN: -emit-obj -fthinlto-index=%t.o.thinlto.bc \ -// RUN: -o %t.native.o -split-dwarf-file %t.file.dwo \ -// RUN: -split-dwarf-output %t.output.dwo -x ir %t.o - -// RUN: llvm-dwarfdump %t.native.o | FileCheck --check-prefix=DWARFv4-O %s -// RUN: llvm-dwarfdump %t.output.dwo | FileCheck --check-prefix=DWARFv4-DWO %s - -// DWARFv4-O: DW_AT_GNU_dwo_name ("{{.*}}.file.dwo") -// DWARFv4-O-NOT: DW_TAG_subprogram -// DWARFv4-DWO: DW_TAG_subprogram - -// RUN: %clang_cc1 -debug-info-kind=limited -dwarf-version=5 -triple x86_64-unknown-linux-gnu \ -// RUN: -flto=thin -emit-llvm-bc \ -// RUN: -o %t.o %s - -// RUN: llvm-lto2 run -thinlto-distributed-indexes %t.o \ -// RUN: -o %t2.index \ -// RUN: -r=%t.o,main,px - -// RUN: %clang_cc1 -triple x86_64-unknown-linux-gnu \ -// RUN: -emit-obj -fthinlto-index=%t.o.thinlto.bc \ -// RUN: -o %t.native.o -dwarf-version=5 -split-dwarf-file %t.file.dwo \ -// RUN: -split-dwarf-output %t.output.dwo -x ir %t.o - -// RUN: llvm-dwarfdump %t.native.o | FileCheck --check-prefix=DWARFv5-O %s -// RUN: llvm-dwarfdump %t.output.dwo | FileCheck --check-prefix=DWARFv5-DWO %s - -// DWARFv5-O: DW_AT_dwo_name ("{{.*}}.file.dwo") -// DWARFv5-O-NOT: DW_TAG_subprogram -// DWARFv5-DWO: DW_TAG_subprogram - -int main(void) {} diff --git a/clang/test/CodeGen/ubsan-debuglog-return.c b/clang/test/CodeGen/ubsan-debuglog-return.c deleted file mode 100644 index 0a96465..0000000 --- a/clang/test/CodeGen/ubsan-debuglog-return.c +++ /dev/null @@ -1,10 +0,0 @@ -// RUN: %clang_cc1 -Wno-error=return-type -x c -debug-info-kind=line-tables-only -emit-llvm -fsanitize=returns-nonnull-attribute -o - %s | FileCheck %s -// The UBSAN function call in the epilogue needs to have a debug location. - -__attribute__((returns_nonnull)) void *allocate(void) {} - -// CHECK: define {{.*}}nonnull ptr @allocate(){{.*}} !dbg -// CHECK: call void @__ubsan_handle_nonnull_return_v1_abort -// CHECK-SAME: !dbg ![[LOC:[0-9]+]] -// CHECK: ret ptr -// CHECK-SAME: !dbg ![[LOC]] diff --git a/clang/test/CodeGen/ubsan-function-debuginfo.c b/clang/test/CodeGen/ubsan-function-debuginfo.c deleted file mode 100644 index 106aece..0000000 --- a/clang/test/CodeGen/ubsan-function-debuginfo.c +++ /dev/null @@ -1,71 +0,0 @@ -// NOTE: Assertions have been autogenerated by utils/update_cc_test_checks.py UTC_ARGS: --version 5 -// RUN: %clang_cc1 -O2 -emit-llvm -triple x86_64 -std=c17 -fsanitize=function %s -o - \ -// RUN: -fdebug-prefix-map=%S/= -fno-ident -fdebug-compilation-dir=%S -debug-info-kind=limited \ -// RUN: -fsanitize-annotate-debug-info=function \ -// RUN: | FileCheck %s - -// CHECK-LABEL: define dso_local void @call_no_prototype( -// CHECK-SAME: ptr noundef readonly captures(none) [[F:%.*]]) local_unnamed_addr #[[ATTR0:[0-9]+]] !dbg [[DBG5:![0-9]+]] !func_sanitize [[META14:![0-9]+]] { -// CHECK-NEXT: [[ENTRY:.*:]] -// CHECK-NEXT: #dbg_value(ptr [[F]], [[META13:![0-9]+]], !DIExpression(), [[META15:![0-9]+]]) -// CHECK-NEXT: tail call void (...) [[F]]() #[[ATTR2:[0-9]+]], !dbg [[DBG16:![0-9]+]] -// CHECK-NEXT: ret void, !dbg [[DBG17:![0-9]+]] -// -void call_no_prototype(void (*f)()) { f(); } - -// CHECK-LABEL: define dso_local void @call_prototype( -// CHECK-SAME: ptr noundef [[F:%.*]]) local_unnamed_addr #[[ATTR0]] !dbg [[DBG18:![0-9]+]] !func_sanitize [[META26:![0-9]+]] { -// CHECK-NEXT: [[ENTRY:.*:]] -// CHECK-NEXT: #dbg_value(ptr [[F]], [[META25:![0-9]+]], !DIExpression(), [[META27:![0-9]+]]) -// CHECK-NEXT: [[TMP0:%.*]] = getelementptr i8, ptr [[F]], i64 -8, !dbg [[DBG28:![0-9]+]] -// CHECK-NEXT: [[TMP1:%.*]] = load i32, ptr [[TMP0]], align 4, !dbg [[DBG28]], !nosanitize [[META32:![0-9]+]] -// CHECK-NEXT: [[TMP2:%.*]] = icmp eq i32 [[TMP1]], -1056584962, !dbg [[DBG28]], !nosanitize [[META32]] -// CHECK-NEXT: br i1 [[TMP2]], label %[[TYPECHECK:.*]], label %[[CONT1:.*]], !dbg [[DBG28]], !nosanitize [[META32]] -// CHECK: [[TYPECHECK]]: -// CHECK-NEXT: [[TMP3:%.*]] = getelementptr i8, ptr [[F]], i64 -4, !dbg [[DBG28]] -// CHECK-NEXT: [[TMP4:%.*]] = load i32, ptr [[TMP3]], align 8, !dbg [[DBG28]], !nosanitize [[META32]] -// CHECK-NEXT: [[TMP5:%.*]] = icmp eq i32 [[TMP4]], 905068220, !dbg [[DBG28]], !nosanitize [[META32]] -// CHECK-NEXT: br i1 [[TMP5]], label %[[CONT1]], label %[[HANDLER_FUNCTION_TYPE_MISMATCH:.*]], !dbg [[DBG28]], !prof [[PROF33:![0-9]+]], !nosanitize [[META32]] -// CHECK: [[HANDLER_FUNCTION_TYPE_MISMATCH]]: -// CHECK-NEXT: [[TMP6:%.*]] = ptrtoint ptr [[F]] to i64, !dbg [[DBG28]], !nosanitize [[META32]] -// CHECK-NEXT: tail call void @__ubsan_handle_function_type_mismatch_abort(ptr nonnull @[[GLOB1:[0-9]+]], i64 [[TMP6]]) #[[ATTR3:[0-9]+]], !dbg [[DBG28]], !nosanitize [[META32]] -// CHECK-NEXT: unreachable, !dbg [[DBG28]], !nosanitize [[META32]] -// CHECK: [[CONT1]]: -// CHECK-NEXT: tail call void [[F]]() #[[ATTR2]], !dbg [[DBG31:![0-9]+]] -// CHECK-NEXT: ret void, !dbg [[DBG34:![0-9]+]] -// -void call_prototype(void (*f)(void)) { f(); } -//. -// CHECK: [[META0:![0-9]+]] = distinct !DICompileUnit(language: DW_LANG_C11, file: [[META1:![0-9]+]], isOptimized: true, runtimeVersion: 0, emissionKind: FullDebug, splitDebugInlining: false, nameTableKind: None) -// CHECK: [[META1]] = !DIFile(filename: "{{.*}}<stdin>", directory: {{.*}}) -// CHECK: [[DBG5]] = distinct !DISubprogram(name: "call_no_prototype", scope: [[META6:![0-9]+]], file: [[META6]], line: 14, type: [[META7:![0-9]+]], scopeLine: 14, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: [[META0]], retainedNodes: [[META12:![0-9]+]]) -// CHECK: [[META6]] = !DIFile(filename: "{{.*}}ubsan-function-debuginfo.c", directory: {{.*}}) -// CHECK: [[META7]] = !DISubroutineType(types: [[META8:![0-9]+]]) -// CHECK: [[META8]] = !{null, [[META9:![0-9]+]]} -// CHECK: [[META9]] = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: [[META10:![0-9]+]], size: 64) -// CHECK: [[META10]] = !DISubroutineType(types: [[META11:![0-9]+]]) -// CHECK: [[META11]] = !{null, null} -// CHECK: [[META12]] = !{[[META13]]} -// CHECK: [[META13]] = !DILocalVariable(name: "f", arg: 1, scope: [[DBG5]], file: [[META6]], line: 14, type: [[META9]]) -// CHECK: [[META14]] = !{i32 -1056584962, i32 187769638} -// CHECK: [[META15]] = !DILocation(line: 0, scope: [[DBG5]]) -// CHECK: [[DBG16]] = !DILocation(line: 14, column: 39, scope: [[DBG5]]) -// CHECK: [[DBG17]] = !DILocation(line: 14, column: 44, scope: [[DBG5]]) -// CHECK: [[DBG18]] = distinct !DISubprogram(name: "call_prototype", scope: [[META6]], file: [[META6]], line: 37, type: [[META19:![0-9]+]], scopeLine: 37, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: [[META0]], retainedNodes: [[META24:![0-9]+]]) -// CHECK: [[META19]] = !DISubroutineType(types: [[META20:![0-9]+]]) -// CHECK: [[META20]] = !{null, [[META21:![0-9]+]]} -// CHECK: [[META21]] = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: [[META22:![0-9]+]], size: 64) -// CHECK: [[META22]] = !DISubroutineType(types: [[META23:![0-9]+]]) -// CHECK: [[META23]] = !{null} -// CHECK: [[META24]] = !{[[META25]]} -// CHECK: [[META25]] = !DILocalVariable(name: "f", arg: 1, scope: [[DBG18]], file: [[META6]], line: 37, type: [[META21]]) -// CHECK: [[META26]] = !{i32 -1056584962, i32 -747727454} -// CHECK: [[META27]] = !DILocation(line: 0, scope: [[DBG18]]) -// CHECK: [[DBG28]] = !DILocation(line: 0, scope: [[META29:![0-9]+]], inlinedAt: [[DBG31]]) -// CHECK: [[META29]] = distinct !DISubprogram(name: "__ubsan_check_function", scope: [[META6]], file: [[META6]], type: [[META30:![0-9]+]], flags: DIFlagArtificial, spFlags: DISPFlagDefinition, unit: [[META0]]) -// CHECK: [[META30]] = !DISubroutineType(types: null) -// CHECK: [[DBG31]] = !DILocation(line: 37, column: 40, scope: [[DBG18]]) -// CHECK: [[META32]] = !{} -// CHECK: [[PROF33]] = !{!"branch_weights", i32 1048575, i32 1} -// CHECK: [[DBG34]] = !DILocation(line: 37, column: 45, scope: [[DBG18]]) -//. diff --git a/clang/test/CodeGen/ubsan-trap-debugloc.c b/clang/test/CodeGen/ubsan-trap-debugloc.c deleted file mode 100644 index 2f5258a..0000000 --- a/clang/test/CodeGen/ubsan-trap-debugloc.c +++ /dev/null @@ -1,27 +0,0 @@ -// RUN: %clang_cc1 -emit-llvm -disable-llvm-passes -O -fsanitize=signed-integer-overflow -fsanitize-trap=signed-integer-overflow -fsanitize-merge=signed-integer-overflow %s -o - -debug-info-kind=line-tables-only | FileCheck %s - - -void foo(volatile int a) { - // CHECK-LABEL: @foo - // CHECK: call void @llvm.ubsantrap(i8 0){{.*}} !dbg [[LOC:![0-9]+]] - a = a + 1; - a = a + 1; -} - -void bar(volatile int a) __attribute__((optnone)) { - // CHECK-LABEL: @bar - // CHECK: call void @llvm.ubsantrap(i8 0){{.*}} !dbg [[LOC2:![0-9]+]] - // CHECK: call void @llvm.ubsantrap(i8 0){{.*}} !dbg [[LOC3:![0-9]+]] - a = a + 1; - a = a + 1; -} - -// With optimisations enabled the traps are merged and need to share a debug location -// CHECK: [[LOC]] = !DILocation(line: 0 - -// With optimisations disabled the traps are not merged and retain accurate debug locations - // CHECK-DAG: [[SRC2:![0-9]+]] = !DILocation(line: 15, column: 9, - // CHECK-DAG: [[SRC3:![0-9]+]] = !DILocation(line: 16, column: 9, - // CHECK-DAG: [[LOC2]] = !DILocation(line: 0, scope: [[SCOPE2:![0-9]+]], inlinedAt: [[SRC2]]) - // CHECK-DAG: [[LOC3]] = !DILocation(line: 0, scope: [[SCOPE3:![0-9]+]], inlinedAt: [[SRC3]]) - diff --git a/clang/test/CodeGen/ubsan-trap-reason-add-overflow.c b/clang/test/CodeGen/ubsan-trap-reason-add-overflow.c deleted file mode 100644 index 225778d..0000000 --- a/clang/test/CodeGen/ubsan-trap-reason-add-overflow.c +++ /dev/null @@ -1,9 +0,0 @@ -// RUN: %clang_cc1 -triple arm64-apple-macosx14.0.0 -O0 -debug-info-kind=standalone -dwarf-version=5 \ -// RUN: -fsanitize=signed-integer-overflow -fsanitize-trap=signed-integer-overflow -emit-llvm %s -o - | FileCheck %s - -int add_overflow(int a, int b) { return a + b; } - -// CHECK-LABEL: @add_overflow -// CHECK: call void @llvm.ubsantrap(i8 0) {{.*}}!dbg [[LOC:![0-9]+]] -// CHECK: [[LOC]] = !DILocation(line: 0, scope: [[MSG:![0-9]+]], {{.+}}) -// CHECK: [[MSG]] = distinct !DISubprogram(name: "__clang_trap_msg$Undefined Behavior Sanitizer$Integer addition overflowed" diff --git a/clang/test/CodeGen/ubsan-trap-reason-alignment-assumption.c b/clang/test/CodeGen/ubsan-trap-reason-alignment-assumption.c deleted file mode 100644 index 3247ceb..0000000 --- a/clang/test/CodeGen/ubsan-trap-reason-alignment-assumption.c +++ /dev/null @@ -1,15 +0,0 @@ -// RUN: %clang_cc1 -triple arm64-apple-macosx14.0.0 -O0 -debug-info-kind=standalone -dwarf-version=5 \ -// RUN: -fsanitize=alignment -fsanitize-trap=alignment -emit-llvm %s -o - | FileCheck %s - -#include <stdint.h> -int32_t *get_int(void) __attribute__((assume_aligned(16))); - -void retrieve_int(void) { - int *i = get_int(); - *i = 7; -} - -// CHECK-LABEL: @retrieve_int -// CHECK: call void @llvm.ubsantrap(i8 23) {{.*}}!dbg [[LOC:![0-9]+]] -// CHECK: [[LOC]] = !DILocation(line: 0, scope: [[MSG:![0-9]+]], {{.+}}) -// CHECK: [[MSG]] = distinct !DISubprogram(name: "__clang_trap_msg$Undefined Behavior Sanitizer$Alignment assumption violated" diff --git a/clang/test/CodeGen/ubsan-trap-reason-builtin-unreachable.c b/clang/test/CodeGen/ubsan-trap-reason-builtin-unreachable.c deleted file mode 100644 index 97bd690..0000000 --- a/clang/test/CodeGen/ubsan-trap-reason-builtin-unreachable.c +++ /dev/null @@ -1,9 +0,0 @@ -// RUN: %clang_cc1 -triple arm64-apple-macosx14.0.0 -O0 -debug-info-kind=standalone -dwarf-version=5 \ -// RUN: -fsanitize=unreachable -fsanitize-trap=unreachable -emit-llvm %s -o - | FileCheck %s - -int call_builtin_unreachable(void) { __builtin_unreachable(); } - -// CHECK-LABEL: @call_builtin_unreachable -// CHECK: call void @llvm.ubsantrap(i8 1) {{.*}}!dbg [[LOC:![0-9]+]] -// CHECK: [[LOC]] = !DILocation(line: 0, scope: [[MSG:![0-9]+]], {{.+}}) -// CHECK: [[MSG]] = distinct !DISubprogram(name: "__clang_trap_msg$Undefined Behavior Sanitizer$_builtin_unreachable(), execution reached an unreachable program point" diff --git a/clang/test/CodeGen/ubsan-trap-reason-cfi-check-fail.c b/clang/test/CodeGen/ubsan-trap-reason-cfi-check-fail.c deleted file mode 100644 index 9304f51..0000000 --- a/clang/test/CodeGen/ubsan-trap-reason-cfi-check-fail.c +++ /dev/null @@ -1,25 +0,0 @@ -// RUN: %clang_cc1 -triple arm64-apple-macosx14.0.0 -O0 -debug-info-kind=standalone -dwarf-version=5 \ -// RUN: -fsanitize=cfi-icall -fsanitize-trap=cfi-icall -emit-llvm %s -o - | FileCheck %s - -typedef int (*fp_t)(int); - -int good(int x) { return x + 1; } - -int bad(void) { return 0; } - -int cfi_trigger(int a) { - fp_t p = good; - int r1 = p(a); - - p = (fp_t)(void *)bad; - int r2 = p(a); - - return r1 + r2; -} - -// CHECK-LABEL: @good -// CHECK-LABEL: @bad -// CHECK-LABEL: @cfi_trigger -// CHECK: call void @llvm.ubsantrap(i8 2) {{.*}}!dbg [[LOC:![0-9]+]] -// CHECK: [[LOC]] = !DILocation(line: 0, scope: [[MSG:![0-9]+]], {{.+}}) -// CHECK: [[MSG]] = distinct !DISubprogram(name: "__clang_trap_msg$Undefined Behavior Sanitizer$Control flow integrity check failed" diff --git a/clang/test/CodeGen/ubsan-trap-reason-crash.cpp b/clang/test/CodeGen/ubsan-trap-reason-crash.cpp deleted file mode 100644 index 6add9bf..0000000 --- a/clang/test/CodeGen/ubsan-trap-reason-crash.cpp +++ /dev/null @@ -1,20 +0,0 @@ -// FIXME: We should emit a trap message for this case too. -// But sometimes Clang will emit a ubsan trap into the prologue of a function, -// at which point the debug-info locations haven't been set up yet and -// can't hook up our artificial inline frame. [Issue #150707] - -// RUN: %clang_cc1 -triple arm64-apple-macosx14.0.0 -O0 -debug-info-kind=standalone -dwarf-version=5 \ -// RUN: -fsanitize=null -fsanitize-trap=null -emit-llvm %s -o - | FileCheck %s - -struct Foo { - void target() {} -} f; - -void caller() { - f.target(); -} - - -// CHECK-LABEL: @_Z6callerv -// CHECK: call void @llvm.ubsantrap(i8 22){{.*}}!nosanitize -// CHECK-NOT: __clang_trap_msg diff --git a/clang/test/CodeGen/ubsan-trap-reason-div-rem-overflow.c b/clang/test/CodeGen/ubsan-trap-reason-div-rem-overflow.c deleted file mode 100644 index d0b21dd..0000000 --- a/clang/test/CodeGen/ubsan-trap-reason-div-rem-overflow.c +++ /dev/null @@ -1,9 +0,0 @@ -// RUN: %clang_cc1 -triple arm64-apple-macosx14.0.0 -O0 -debug-info-kind=standalone -dwarf-version=5 \ -// RUN: -fsanitize=signed-integer-overflow -fsanitize-trap=signed-integer-overflow -emit-llvm %s -o - | FileCheck %s - -int div_rem_overflow(int a, int b) { return a / b; } - -// CHECK-LABEL: @div_rem_overflow -// CHECK: call void @llvm.ubsantrap(i8 3) {{.*}}!dbg [[LOC:![0-9]+]] -// CHECK: [[LOC]] = !DILocation(line: 0, scope: [[MSG:![0-9]+]], {{.+}}) -// CHECK: [[MSG]] = distinct !DISubprogram(name: "__clang_trap_msg$Undefined Behavior Sanitizer$Integer divide or remainder overflowed" diff --git a/clang/test/CodeGen/ubsan-trap-reason-dynamic-type-cache-miss.cpp b/clang/test/CodeGen/ubsan-trap-reason-dynamic-type-cache-miss.cpp deleted file mode 100644 index f89fbdcf..0000000 --- a/clang/test/CodeGen/ubsan-trap-reason-dynamic-type-cache-miss.cpp +++ /dev/null @@ -1,26 +0,0 @@ -// RUN: %clang_cc1 -triple arm64-apple-macosx14.0.0 -O0 -debug-info-kind=standalone -dwarf-version=5 \ -// RUN: -fsanitize=vptr -fsanitize-trap=vptr -emit-llvm %s -o - | FileCheck %s - -struct A { - virtual void foo(); -}; -struct B { - virtual void bar(); -}; - -void A::foo() {} -void B::bar() {} - -int dynamic_type_cache_miss() { - B b; - A &a = reinterpret_cast<A &>(b); - a.foo(); - return 0; -} - -// CHECK-LABEL: @_ZN1A3fooEv -// CHECK-LABEL: @_ZN1B3barEv -// CHECK-LABEL: @_Z23dynamic_type_cache_missv -// CHECK: call void @llvm.ubsantrap(i8 4) {{.*}}!dbg [[LOC:![0-9]+]] -// CHECK: [[LOC]] = !DILocation(line: 0, scope: [[MSG:![0-9]+]], {{.+}}) -// CHECK: [[MSG]] = distinct !DISubprogram(name: "__clang_trap_msg$Undefined Behavior Sanitizer$Dynamic type cache miss, member call made on an object whose dynamic type differs from the expected type" diff --git a/clang/test/CodeGen/ubsan-trap-reason-flag.c b/clang/test/CodeGen/ubsan-trap-reason-flag.c deleted file mode 100644 index 5cc16d1..0000000 --- a/clang/test/CodeGen/ubsan-trap-reason-flag.c +++ /dev/null @@ -1,22 +0,0 @@ -// RUN: %clang_cc1 -triple arm64-apple-macosx14.0.0 -O0 -debug-info-kind=standalone -dwarf-version=5 \ -// RUN: -fsanitize=signed-integer-overflow -fsanitize-trap=signed-integer-overflow -emit-llvm %s -o - \ -// RUN: | FileCheck %s --check-prefix=ANNOTATE - -// RUN: %clang_cc1 -triple arm64-apple-macosx14.0.0 -O0 -debug-info-kind=standalone -dwarf-version=5 \ -// RUN: -fsanitize=signed-integer-overflow -fsanitize-trap=signed-integer-overflow \ -// RUN: -fsanitize-debug-trap-reasons -emit-llvm %s -o - | FileCheck %s --check-prefix=ANNOTATE - -// RUN: %clang_cc1 -triple arm64-apple-macosx14.0.0 -O0 -debug-info-kind=standalone -dwarf-version=5 \ -// RUN: -fsanitize=signed-integer-overflow -fsanitize-trap=signed-integer-overflow \ -// RUN: -fno-sanitize-debug-trap-reasons -emit-llvm %s -o - | FileCheck %s --check-prefix=NO-ANNOTATE - -int add_overflow(int a, int b) { return a + b; } - -// ANNOTATE-LABEL: @add_overflow -// ANNOTATE: call void @llvm.ubsantrap(i8 0) {{.*}}!dbg [[LOC:![0-9]+]] -// ANNOTATE: [[LOC]] = !DILocation(line: 0, scope: [[MSG:![0-9]+]], {{.+}}) -// ANNOTATE: [[MSG]] = distinct !DISubprogram(name: "__clang_trap_msg$Undefined Behavior Sanitizer$Integer addition overflowed" - -// NO-ANNOTATE-LABEL: @add_overflow -// NO-ANNOTATE: call void @llvm.ubsantrap(i8 0) {{.*}}!dbg [[LOC:![0-9]+]] -// NO-ANNOTATE-NOT: __clang_trap_msg diff --git a/clang/test/CodeGen/ubsan-trap-reason-float-cast-overflow.c b/clang/test/CodeGen/ubsan-trap-reason-float-cast-overflow.c deleted file mode 100644 index 079a191e..0000000 --- a/clang/test/CodeGen/ubsan-trap-reason-float-cast-overflow.c +++ /dev/null @@ -1,9 +0,0 @@ -// RUN: %clang_cc1 -triple arm64-apple-macosx14.0.0 -O0 -debug-info-kind=standalone -dwarf-version=5 \ -// RUN: -fsanitize=float-cast-overflow -fsanitize-trap=float-cast-overflow -emit-llvm %s -o - | FileCheck %s - -int float_cast_overflow(float x) { return (int)x; } - -// CHECK-LABEL: @float_cast_overflow -// CHECK: call void @llvm.ubsantrap(i8 5) {{.*}}!dbg [[LOC:![0-9]+]] -// CHECK: [[LOC]] = !DILocation(line: 0, scope: [[MSG:![0-9]+]], {{.+}}) -// CHECK: [[MSG]] = distinct !DISubprogram(name: "__clang_trap_msg$Undefined Behavior Sanitizer$Floating-point to integer conversion overflowed" diff --git a/clang/test/CodeGen/ubsan-trap-reason-function-type-mismatch.c b/clang/test/CodeGen/ubsan-trap-reason-function-type-mismatch.c deleted file mode 100644 index 1727f9c..0000000 --- a/clang/test/CodeGen/ubsan-trap-reason-function-type-mismatch.c +++ /dev/null @@ -1,18 +0,0 @@ -// RUN: %clang_cc1 -triple arm64-apple-macosx14.0.0 -O0 -debug-info-kind=standalone -dwarf-version=5 \ -// RUN: -fsanitize=function -fsanitize-trap=function -emit-llvm %s -o - | FileCheck %s - -void target(void) {} - -int function_type_mismatch(void) { - int (*fp_int)(int); - - fp_int = (int (*)(int))(void *)target; - - return fp_int(42); -} - -// CHECK-LABEL: @target -// CHECK-LABEL: @function_type_mismatch -// CHECK: call void @llvm.ubsantrap(i8 6) {{.*}}!dbg [[LOC:![0-9]+]] -// CHECK: [[LOC]] = !DILocation(line: 0, scope: [[MSG:![0-9]+]], {{.+}}) -// CHECK: [[MSG]] = distinct !DISubprogram(name: "__clang_trap_msg$Undefined Behavior Sanitizer$Function called with mismatched signature" diff --git a/clang/test/CodeGen/ubsan-trap-reason-implicit-conversion.c b/clang/test/CodeGen/ubsan-trap-reason-implicit-conversion.c deleted file mode 100644 index 43c091d..0000000 --- a/clang/test/CodeGen/ubsan-trap-reason-implicit-conversion.c +++ /dev/null @@ -1,11 +0,0 @@ -// RUN: %clang_cc1 -triple arm64-apple-macosx14.0.0 -O0 -debug-info-kind=standalone -dwarf-version=5 \ -// RUN: -fsanitize=implicit-unsigned-integer-truncation -fsanitize-trap=implicit-unsigned-integer-truncation -emit-llvm %s -o - | FileCheck %s - -unsigned long long big; - -unsigned implicit_conversion(void) { return big; } - -// CHECK-LABEL: @implicit_conversion -// CHECK: call void @llvm.ubsantrap(i8 7) {{.*}}!dbg [[LOC:![0-9]+]] -// CHECK: [[LOC]] = !DILocation(line: 0, scope: [[MSG:![0-9]+]], {{.+}}) -// CHECK: [[MSG]] = distinct !DISubprogram(name: "__clang_trap_msg$Undefined Behavior Sanitizer$Implicit integer conversion overflowed or lost data" diff --git a/clang/test/CodeGen/ubsan-trap-reason-invalid-builtin.c b/clang/test/CodeGen/ubsan-trap-reason-invalid-builtin.c deleted file mode 100644 index 56cf674..0000000 --- a/clang/test/CodeGen/ubsan-trap-reason-invalid-builtin.c +++ /dev/null @@ -1,9 +0,0 @@ -// RUN: %clang_cc1 -triple arm64-apple-macosx14.0.0 -O0 -debug-info-kind=standalone -dwarf-version=5 \ -// RUN: -fsanitize=builtin -fsanitize-trap=builtin -emit-llvm %s -o - | FileCheck %s - -unsigned invalid_builtin(unsigned x) { return __builtin_clz(x); } - -// CHECK-LABEL: @invalid_builtin -// CHECK: call void @llvm.ubsantrap(i8 8) {{.*}}!dbg [[LOC:![0-9]+]] -// CHECK: [[LOC]] = !DILocation(line: 0, scope: [[MSG:![0-9]+]], {{.+}}) -// CHECK: [[MSG]] = distinct !DISubprogram(name: "__clang_trap_msg$Undefined Behavior Sanitizer$Invalid use of builtin function" diff --git a/clang/test/CodeGen/ubsan-trap-reason-invalid-objc-cast.m b/clang/test/CodeGen/ubsan-trap-reason-invalid-objc-cast.m deleted file mode 100644 index ed2d5ff..0000000 --- a/clang/test/CodeGen/ubsan-trap-reason-invalid-objc-cast.m +++ /dev/null @@ -1,32 +0,0 @@ -// RUN: %clang_cc1 -triple arm64-apple-macosx14.0.0 -O0 -debug-info-kind=standalone -dwarf-version=5 \ -// RUN: -fsanitize=objc-cast -fsanitize-trap=objc-cast -emit-llvm %s -o - | FileCheck %s - -@interface NSFastEnumerationState -@end - -#define NSUInteger unsigned int - -@interface NSArray -+(NSArray*) arrayWithObjects: (id) first, ...; -- (NSUInteger) countByEnumeratingWithState:(NSFastEnumerationState *) state - objects:(id[]) buffer - count:(NSUInteger) len; --(unsigned) count; -@end -@interface NSString --(const char*) cString; -@end - -void receive_NSString(NSString*); - -void t0(void) { - NSArray *array = [NSArray arrayWithObjects: @"0", @"1", (void*)0]; - for (NSString *i in array) { - receive_NSString(i); - } -} - -// CHECK-LABEL: @t0 -// CHECK: call void @llvm.ubsantrap(i8 9) {{.*}}!dbg [[LOC:![0-9]+]] -// CHECK: [[LOC]] = !DILocation(line: 0, scope: [[MSG:![0-9]+]], {{.+}}) -// CHECK: [[MSG]] = distinct !DISubprogram(name: "__clang_trap_msg$Undefined Behavior Sanitizer$Invalid Objective-C cast" diff --git a/clang/test/CodeGen/ubsan-trap-reason-load-invalid-value.c b/clang/test/CodeGen/ubsan-trap-reason-load-invalid-value.c deleted file mode 100644 index 4aad832..0000000 --- a/clang/test/CodeGen/ubsan-trap-reason-load-invalid-value.c +++ /dev/null @@ -1,13 +0,0 @@ -// RUN: %clang_cc1 -triple arm64-apple-macosx14.0.0 -O0 -debug-info-kind=standalone -dwarf-version=5 \ -// RUN: -fsanitize=bool -fsanitize-trap=bool -emit-llvm %s -o - | FileCheck %s - -#include <stdbool.h> - -unsigned char bad_byte; - -bool load_invalid_value(void) { return *((bool *)&bad_byte); } - -// CHECK-LABEL: @load_invalid_value -// CHECK: call void @llvm.ubsantrap(i8 10) {{.*}}!dbg [[LOC:![0-9]+]] -// CHECK: [[LOC]] = !DILocation(line: 0, scope: [[MSG:![0-9]+]], {{.+}}) -// CHECK: [[MSG]] = distinct !DISubprogram(name: "__clang_trap_msg$Undefined Behavior Sanitizer$Loaded an invalid or uninitialized value for the type" diff --git a/clang/test/CodeGen/ubsan-trap-reason-missing-return.cpp b/clang/test/CodeGen/ubsan-trap-reason-missing-return.cpp deleted file mode 100644 index 2818d9d..0000000 --- a/clang/test/CodeGen/ubsan-trap-reason-missing-return.cpp +++ /dev/null @@ -1,12 +0,0 @@ -// RUN: %clang_cc1 -triple arm64-apple-macosx14.0.0 -O0 -debug-info-kind=standalone -dwarf-version=5 \ -// RUN: -fsanitize=return -fsanitize-trap=return -emit-llvm %s -o - | FileCheck %s - -int missing_return(int x) { - if (x > 0) - return x; -} - -// CHECK-LABEL: @_Z14missing_return -// CHECK: call void @llvm.ubsantrap(i8 11) {{.*}}!dbg [[LOC:![0-9]+]] -// CHECK: [[LOC]] = !DILocation(line: 0, scope: [[MSG:![0-9]+]], {{.+}}) -// CHECK: [[MSG]] = distinct !DISubprogram(name: "__clang_trap_msg$Undefined Behavior Sanitizer$Execution reached the end of a value-returning function without returning a value" diff --git a/clang/test/CodeGen/ubsan-trap-reason-mul-overflow.c b/clang/test/CodeGen/ubsan-trap-reason-mul-overflow.c deleted file mode 100644 index cf9a0b4..0000000 --- a/clang/test/CodeGen/ubsan-trap-reason-mul-overflow.c +++ /dev/null @@ -1,9 +0,0 @@ -// RUN: %clang_cc1 -triple arm64-apple-macosx14.0.0 -O0 -debug-info-kind=standalone -dwarf-version=5 \ -// RUN: -fsanitize=signed-integer-overflow -fsanitize-trap=signed-integer-overflow -emit-llvm %s -o - | FileCheck %s - -int mul_overflow(int a, int b) { return a * b; } - -// CHECK-LABEL: @mul_overflow -// CHECK: call void @llvm.ubsantrap(i8 12) {{.*}}!dbg [[LOC:![0-9]+]] -// CHECK: [[LOC]] = !DILocation(line: 0, scope: [[MSG:![0-9]+]], {{.+}}) -// CHECK: [[MSG]] = distinct !DISubprogram(name: "__clang_trap_msg$Undefined Behavior Sanitizer$Integer multiplication overflowed" diff --git a/clang/test/CodeGen/ubsan-trap-reason-negate-overflow.c b/clang/test/CodeGen/ubsan-trap-reason-negate-overflow.c deleted file mode 100644 index 5534679..0000000 --- a/clang/test/CodeGen/ubsan-trap-reason-negate-overflow.c +++ /dev/null @@ -1,12 +0,0 @@ -// RUN: %clang_cc1 -triple arm64-apple-macosx14.0.0 -O0 -debug-info-kind=standalone -dwarf-version=5 \ -// RUN: -fsanitize=signed-integer-overflow -fsanitize-trap=signed-integer-overflow -emit-llvm %s -o - | FileCheck %s - -int negate_overflow() { - int x; - return -x; -} - -// CHECK-LABEL: @negate_overflow -// CHECK: call void @llvm.ubsantrap(i8 13) {{.*}}!dbg [[LOC:![0-9]+]] -// CHECK: [[LOC]] = !DILocation(line: 0, scope: [[MSG:![0-9]+]], {{.+}}) -// CHECK: [[MSG]] = distinct !DISubprogram(name: "__clang_trap_msg$Undefined Behavior Sanitizer$Integer negation overflowed" diff --git a/clang/test/CodeGen/ubsan-trap-reason-nonnull-arg.c b/clang/test/CodeGen/ubsan-trap-reason-nonnull-arg.c deleted file mode 100644 index 1f0f450..0000000 --- a/clang/test/CodeGen/ubsan-trap-reason-nonnull-arg.c +++ /dev/null @@ -1,12 +0,0 @@ -// RUN: %clang_cc1 -triple arm64-apple-macosx14.0.0 -O0 -debug-info-kind=standalone -dwarf-version=5 \ -// RUN: -fsanitize=nonnull-attribute -fsanitize-trap=nonnull-attribute -emit-llvm %s -o - | FileCheck %s - -__attribute__((nonnull)) void nonnull_arg(int *p) { (void)p; } - -void trigger_nonnull_arg() { nonnull_arg(0); } - -// CHECK-LABEL: @nonnull_arg -// CHECK-LABEL: @trigger_nonnull_arg -// CHECK: call void @llvm.ubsantrap(i8 16) {{.*}}!dbg [[LOC:![0-9]+]] -// CHECK: [[LOC]] = !DILocation(line: 0, scope: [[MSG:![0-9]+]], {{.+}}) -// CHECK: [[MSG]] = distinct !DISubprogram(name: "__clang_trap_msg$Undefined Behavior Sanitizer$Passing null pointer as an argument which is declared to never be null" diff --git a/clang/test/CodeGen/ubsan-trap-reason-nonnull-return.c b/clang/test/CodeGen/ubsan-trap-reason-nonnull-return.c deleted file mode 100644 index 1197b4d..0000000 --- a/clang/test/CodeGen/ubsan-trap-reason-nonnull-return.c +++ /dev/null @@ -1,14 +0,0 @@ -// RUN: %clang_cc1 -triple arm64-apple-macosx14.0.0 -O0 -debug-info-kind=standalone -dwarf-version=5 \ -// RUN: -fsanitize=returns-nonnull-attribute -fsanitize-trap=returns-nonnull-attribute -emit-llvm %s -o - | FileCheck %s - -__attribute__((returns_nonnull)) int *must_return_nonnull(int bad) { - if (bad) - return 0; - static int x = 1; - return &x; -} - -// CHECK-LABEL: @must_return_nonnull -// CHECK: call void @llvm.ubsantrap(i8 17) {{.*}}!dbg [[LOC:![0-9]+]] -// CHECK: [[LOC]] = !DILocation(line: 0, scope: [[MSG:![0-9]+]], {{.+}}) -// CHECK: [[MSG]] = distinct !DISubprogram(name: "__clang_trap_msg$Undefined Behavior Sanitizer$Returning null pointer from a function which is declared to never return null" diff --git a/clang/test/CodeGen/ubsan-trap-reason-nullability-arg.c b/clang/test/CodeGen/ubsan-trap-reason-nullability-arg.c deleted file mode 100644 index 2bc71de..0000000 --- a/clang/test/CodeGen/ubsan-trap-reason-nullability-arg.c +++ /dev/null @@ -1,14 +0,0 @@ -// RUN: %clang_cc1 -triple arm64-apple-macosx14.0.0 -O0 -debug-info-kind=standalone -dwarf-version=5 \ -// RUN: -fsanitize=nullability-arg -fsanitize-trap=nullability-arg -emit-llvm %s -o - | FileCheck %s - -#include <stddef.h> - -int nullability_arg(int *_Nonnull p) { return *p; } - -int trigger_nullability_arg(void) { return nullability_arg(NULL); } - -// CHECK-LABEL: @nullability_arg -// CHECK-LABEL: @trigger_nullability_arg -// CHECK: call void @llvm.ubsantrap(i8 14) {{.*}}!dbg [[LOC:![0-9]+]] -// CHECK: [[LOC]] = !DILocation(line: 0, scope: [[MSG:![0-9]+]], {{.+}}) -// CHECK: [[MSG]] = distinct !DISubprogram(name: "__clang_trap_msg$Undefined Behavior Sanitizer$Passing null as an argument which is annotated with _Nonnull" diff --git a/clang/test/CodeGen/ubsan-trap-reason-nullability-return.c b/clang/test/CodeGen/ubsan-trap-reason-nullability-return.c deleted file mode 100644 index 3d64c5a..0000000 --- a/clang/test/CodeGen/ubsan-trap-reason-nullability-return.c +++ /dev/null @@ -1,18 +0,0 @@ -// RUN: %clang_cc1 -triple arm64-apple-macosx14.0.0 -O0 -debug-info-kind=standalone -dwarf-version=5 \ -// RUN: -fsanitize=nullability-return -fsanitize-trap=nullability-return -emit-llvm %s -o - | FileCheck %s - -#include <stdbool.h> -#include <stddef.h> - -int *_Nonnull nullability_return(bool fail) { - if (fail) - return NULL; - - static int x = 0; - return &x; -} - -// CHECK-LABEL: @nullability_return -// CHECK: call void @llvm.ubsantrap(i8 15) {{.*}}!dbg [[LOC:![0-9]+]] -// CHECK: [[LOC]] = !DILocation(line: 0, scope: [[MSG:![0-9]+]], {{.+}}) -// CHECK: [[MSG]] = distinct !DISubprogram(name: "__clang_trap_msg$Undefined Behavior Sanitizer$Returning null from a function with a return type annotated with _Nonnull" diff --git a/clang/test/CodeGen/ubsan-trap-reason-out-of-bounds.c b/clang/test/CodeGen/ubsan-trap-reason-out-of-bounds.c deleted file mode 100644 index 979886d..0000000 --- a/clang/test/CodeGen/ubsan-trap-reason-out-of-bounds.c +++ /dev/null @@ -1,12 +0,0 @@ -// RUN: %clang_cc1 -triple arm64-apple-macosx14.0.0 -O0 -debug-info-kind=standalone -dwarf-version=5 \ -// RUN: -fsanitize=array-bounds -fsanitize-trap=array-bounds -emit-llvm %s -o - | FileCheck %s - -int out_of_bounds() { - int a[1] = {0}; - return a[1]; -} - -// CHECK-LABEL: @out_of_bounds -// CHECK: call void @llvm.ubsantrap(i8 18) {{.*}}!dbg [[LOC:![0-9]+]] -// CHECK: [[LOC]] = !DILocation(line: 0, scope: [[MSG:![0-9]+]], {{.+}}) -// CHECK: [[MSG]] = distinct !DISubprogram(name: "__clang_trap_msg$Undefined Behavior Sanitizer$Array index out of bounds" diff --git a/clang/test/CodeGen/ubsan-trap-reason-pointer-overflow.c b/clang/test/CodeGen/ubsan-trap-reason-pointer-overflow.c deleted file mode 100644 index 41cb487..0000000 --- a/clang/test/CodeGen/ubsan-trap-reason-pointer-overflow.c +++ /dev/null @@ -1,16 +0,0 @@ -// RUN: %clang_cc1 -triple arm64-apple-macosx14.0.0 -O0 -debug-info-kind=standalone -dwarf-version=5 \ -// RUN: -fsanitize=pointer-overflow -fsanitize-trap=pointer-overflow -emit-llvm %s -o - | FileCheck %s - -#include <stddef.h> -#include <stdint.h> - -int *pointer_overflow(void) { - int buf[4]; - volatile size_t n = (SIZE_MAX / sizeof(int)) - 1; - return buf + n; -} - -// CHECK-LABEL: @pointer_overflow -// CHECK: call void @llvm.ubsantrap(i8 19) {{.*}}!dbg [[LOC:![0-9]+]] -// CHECK: [[LOC]] = !DILocation(line: 0, scope: [[MSG:![0-9]+]], {{.+}}) -// CHECK: [[MSG]] = distinct !DISubprogram(name: "__clang_trap_msg$Undefined Behavior Sanitizer$Pointer arithmetic overflowed bounds" diff --git a/clang/test/CodeGen/ubsan-trap-reason-shift-out-of-bounds.c b/clang/test/CodeGen/ubsan-trap-reason-shift-out-of-bounds.c deleted file mode 100644 index 1a7465d..0000000 --- a/clang/test/CodeGen/ubsan-trap-reason-shift-out-of-bounds.c +++ /dev/null @@ -1,12 +0,0 @@ -// RUN: %clang_cc1 -triple arm64-apple-macosx14.0.0 -O0 -debug-info-kind=standalone -dwarf-version=5 \ -// RUN: -fsanitize=shift-base -fsanitize-trap=shift-base -emit-llvm %s -o - | FileCheck %s - -int shift_out_of_bounds(void) { - int sh = 32; - return 1 << sh; -} - -// CHECK-LABEL: @shift_out_of_bounds -// CHECK: call void @llvm.ubsantrap(i8 20) {{.*}}!dbg [[LOC:![0-9]+]] -// CHECK: [[LOC]] = !DILocation(line: 0, scope: [[MSG:![0-9]+]], {{.+}}) -// CHECK: [[MSG]] = distinct !DISubprogram(name: "__clang_trap_msg$Undefined Behavior Sanitizer$Shift exponent is too large for the type" diff --git a/clang/test/CodeGen/ubsan-trap-reason-sub-overflow.c b/clang/test/CodeGen/ubsan-trap-reason-sub-overflow.c deleted file mode 100644 index 62aa7fc..0000000 --- a/clang/test/CodeGen/ubsan-trap-reason-sub-overflow.c +++ /dev/null @@ -1,9 +0,0 @@ -// RUN: %clang_cc1 -triple arm64-apple-macosx14.0.0 -O0 -debug-info-kind=standalone -dwarf-version=5 \ -// RUN: -fsanitize=signed-integer-overflow -fsanitize-trap=signed-integer-overflow -emit-llvm %s -o - | FileCheck %s - -int sub_overflow(int a, int b) { return a - b; } - -// CHECK-LABEL: @sub_overflow -// CHECK: call void @llvm.ubsantrap(i8 21) {{.*}}!dbg [[LOC:![0-9]+]] -// CHECK: [[LOC]] = !DILocation(line: 0, scope: [[MSG:![0-9]+]], {{.+}}) -// CHECK: [[MSG]] = distinct !DISubprogram(name: "__clang_trap_msg$Undefined Behavior Sanitizer$Integer subtraction overflowed" diff --git a/clang/test/CodeGen/ubsan-trap-reason-type-mismatch.c b/clang/test/CodeGen/ubsan-trap-reason-type-mismatch.c deleted file mode 100644 index 802ec91..0000000 --- a/clang/test/CodeGen/ubsan-trap-reason-type-mismatch.c +++ /dev/null @@ -1,9 +0,0 @@ -// RUN: %clang_cc1 -triple arm64-apple-macosx14.0.0 -O0 -debug-info-kind=standalone -dwarf-version=5 \ -// RUN: -fsanitize=alignment -fsanitize-trap=alignment -emit-llvm %s -o - | FileCheck %s - -int type_mismatch(int *p) { return *p; } - -// CHECK-LABEL: @type_mismatch -// CHECK: call void @llvm.ubsantrap(i8 22) {{.*}}!dbg [[LOC:![0-9]+]] -// CHECK: [[LOC]] = !DILocation(line: 0, scope: [[MSG:![0-9]+]], {{.+}}) -// CHECK: [[MSG]] = distinct !DISubprogram(name: "__clang_trap_msg$Undefined Behavior Sanitizer$Type mismatch in operation" diff --git a/clang/test/CodeGen/ubsan-trap-reason-vla-bound-not-positive.c b/clang/test/CodeGen/ubsan-trap-reason-vla-bound-not-positive.c deleted file mode 100644 index ad9c408..0000000 --- a/clang/test/CodeGen/ubsan-trap-reason-vla-bound-not-positive.c +++ /dev/null @@ -1,14 +0,0 @@ -// RUN: %clang_cc1 -triple arm64-apple-macosx14.0.0 -O0 -debug-info-kind=standalone -dwarf-version=5 \ -// RUN: -fsanitize=vla-bound -fsanitize-trap=vla-bound -emit-llvm %s -o - | FileCheck %s - -int n = 0; - -int vla_bound_not_positive(void) { - int a[n]; - return sizeof a; -} - -// CHECK-LABEL: @vla_bound_not_positive -// CHECK: call void @llvm.ubsantrap(i8 24) {{.*}}!dbg [[LOC:![0-9]+]] -// CHECK: [[LOC]] = !DILocation(line: 0, scope: [[MSG:![0-9]+]], {{.+}}) -// CHECK: [[MSG]] = distinct !DISubprogram(name: "__clang_trap_msg$Undefined Behavior Sanitizer$Variable length array bound evaluates to non-positive value" diff --git a/clang/test/CodeGen/unified-lto-pipeline.c b/clang/test/CodeGen/unified-lto-pipeline.c index e13cd57..0e0c503 100644 --- a/clang/test/CodeGen/unified-lto-pipeline.c +++ b/clang/test/CodeGen/unified-lto-pipeline.c @@ -11,8 +11,10 @@ /// Check that pass pipelines for thin, thin-unified, full-unified all match. // RUN: diff %t.0.txt %t.1.txt // RUN: diff %t.0.txt %t.2.txt -/// Pass pipeline for full is different. -// RUN: not diff %t.0.txt %t.3.txt +/// Pass pipeline for full is different. Unified uses the full Linux pipeline except ThinLTOBitcodeWriterPass vs BitcodeWriterPass. +// RUN: not diff -u %t.0.txt %t.3.txt | FileCheck %s --check-prefix=DIFF --implicit-check-not="{{^[-+!<>] }}" +// DIFF: -Running pass: ThinLTOBitcodeWriterPass +// DIFF-NEXT: +Running pass: BitcodeWriterPass int foo() { return 2 + 2; diff --git a/clang/test/CodeGen/union-tbaa1.c b/clang/test/CodeGen/union-tbaa1.c index 1e2f384..9f2b0e9 100644 --- a/clang/test/CodeGen/union-tbaa1.c +++ b/clang/test/CodeGen/union-tbaa1.c @@ -1,3 +1,4 @@ +// NOTE: Assertions have been autogenerated by utils/update_cc_test_checks.py UTC_ARGS: --version 5 // RUN: %clang_cc1 %s -triple hexagon-unknown-elf -O2 -emit-llvm -o - | FileCheck %s typedef union __attribute__((aligned(4))) { @@ -7,33 +8,33 @@ typedef union __attribute__((aligned(4))) { void bar(vect32 p[][2]); -// CHECK-LABEL: define dso_local void @fred -// CHECK-SAME: (i32 noundef [[NUM:%.*]], ptr noundef writeonly captures(none) initializes((0, 8)) [[VEC:%.*]], ptr noundef readonly captures(none) [[INDEX:%.*]], ptr noundef readonly captures(none) [[ARR:%.*]]) local_unnamed_addr #[[ATTR0:[0-9]+]] { -// CHECK-NEXT: entry: +// CHECK-LABEL: define dso_local void @fred( +// CHECK-SAME: i32 noundef [[NUM:%.*]], ptr noundef writeonly captures(none) initializes((0, 8)) [[VEC:%.*]], ptr noundef readonly captures(none) [[INDEX:%.*]], ptr noundef readonly captures(none) [[ARR:%.*]]) local_unnamed_addr #[[ATTR0:[0-9]+]] { +// CHECK-NEXT: [[ENTRY:.*:]] // CHECK-NEXT: [[TMP:%.*]] = alloca [4 x [2 x %union.vect32]], align 8 -// CHECK-NEXT: call void @llvm.lifetime.start.p0(i64 32, ptr nonnull [[TMP]]) #[[ATTR3:[0-9]+]] +// CHECK-NEXT: call void @llvm.lifetime.start.p0(ptr nonnull [[TMP]]) #[[ATTR3:[0-9]+]] // CHECK-NEXT: [[TMP0:%.*]] = load i32, ptr [[INDEX]], align 4, !tbaa [[TBAA2:![0-9]+]] // CHECK-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds [2 x i32], ptr [[ARR]], i32 [[TMP0]] // CHECK-NEXT: [[TMP1:%.*]] = load i32, ptr [[ARRAYIDX]], align 4, !tbaa [[TBAA2]] // CHECK-NEXT: [[MUL:%.*]] = mul i32 [[TMP1]], [[NUM]] -// CHECK-NEXT: [[ARRAYIDX2:%.*]] = getelementptr inbounds [4 x [2 x %union.vect32]], ptr [[TMP]], i32 0, i32 [[TMP0]] +// CHECK-NEXT: [[ARRAYIDX2:%.*]] = getelementptr inbounds [2 x %union.vect32], ptr [[TMP]], i32 [[TMP0]] // CHECK-NEXT: store i32 [[MUL]], ptr [[ARRAYIDX2]], align 8, !tbaa [[TBAA6:![0-9]+]] // CHECK-NEXT: [[ARRAYIDX5:%.*]] = getelementptr inbounds [2 x i32], ptr [[ARR]], i32 [[TMP0]], i32 1 // CHECK-NEXT: [[TMP2:%.*]] = load i32, ptr [[ARRAYIDX5]], align 4, !tbaa [[TBAA2]] // CHECK-NEXT: [[MUL6:%.*]] = mul i32 [[TMP2]], [[NUM]] -// CHECK-NEXT: [[ARRAYIDX8:%.*]] = getelementptr inbounds [4 x [2 x %union.vect32]], ptr [[TMP]], i32 0, i32 [[TMP0]], i32 1 +// CHECK-NEXT: [[ARRAYIDX8:%.*]] = getelementptr inbounds [2 x %union.vect32], ptr [[TMP]], i32 [[TMP0]], i32 1 // CHECK-NEXT: store i32 [[MUL6]], ptr [[ARRAYIDX8]], align 4, !tbaa [[TBAA6]] // CHECK-NEXT: [[TMP3:%.*]] = lshr i32 [[MUL]], 16 // CHECK-NEXT: store i32 [[TMP3]], ptr [[VEC]], align 4, !tbaa [[TBAA2]] // CHECK-NEXT: [[TMP4:%.*]] = load i32, ptr [[INDEX]], align 4, !tbaa [[TBAA2]] -// CHECK-NEXT: [[ARRAYIDX14:%.*]] = getelementptr inbounds [4 x [2 x %union.vect32]], ptr [[TMP]], i32 0, i32 [[TMP4]], i32 1 +// CHECK-NEXT: [[ARRAYIDX14:%.*]] = getelementptr inbounds [2 x %union.vect32], ptr [[TMP]], i32 [[TMP4]], i32 1 // CHECK-NEXT: [[ARRAYIDX15:%.*]] = getelementptr inbounds nuw i8, ptr [[ARRAYIDX14]], i32 2 // CHECK-NEXT: [[TMP5:%.*]] = load i16, ptr [[ARRAYIDX15]], align 2, !tbaa [[TBAA6]] // CHECK-NEXT: [[CONV16:%.*]] = zext i16 [[TMP5]] to i32 // CHECK-NEXT: [[ARRAYIDX17:%.*]] = getelementptr inbounds nuw i8, ptr [[VEC]], i32 4 // CHECK-NEXT: store i32 [[CONV16]], ptr [[ARRAYIDX17]], align 4, !tbaa [[TBAA2]] // CHECK-NEXT: call void @bar(ptr noundef nonnull [[TMP]]) #[[ATTR3]] -// CHECK-NEXT: call void @llvm.lifetime.end.p0(i64 32, ptr nonnull [[TMP]]) #[[ATTR3]] +// CHECK-NEXT: call void @llvm.lifetime.end.p0(ptr nonnull [[TMP]]) #[[ATTR3]] // CHECK-NEXT: ret void // void fred(unsigned Num, int Vec[2], int *Index, int Arr[4][2]) { @@ -45,5 +46,10 @@ void fred(unsigned Num, int Vec[2], int *Index, int Arr[4][2]) { bar(Tmp); } -// CHECK-DAG: [[CHAR:![0-9]+]] = !{!"omnipotent char" -// CHECK-DAG: [[TBAA6]] = !{[[CHAR]], [[CHAR]], i64 0} +//. +// CHECK: [[TBAA2]] = !{[[META3:![0-9]+]], [[META3]], i64 0} +// CHECK: [[META3]] = !{!"int", [[META4:![0-9]+]], i64 0} +// CHECK: [[META4]] = !{!"omnipotent char", [[META5:![0-9]+]], i64 0} +// CHECK: [[META5]] = !{!"Simple C/C++ TBAA"} +// CHECK: [[TBAA6]] = !{[[META4]], [[META4]], i64 0} +//. diff --git a/clang/test/CodeGen/unique-internal-linkage-names-dwarf.c b/clang/test/CodeGen/unique-internal-linkage-names-dwarf.c deleted file mode 100644 index 5a40118..0000000 --- a/clang/test/CodeGen/unique-internal-linkage-names-dwarf.c +++ /dev/null @@ -1,41 +0,0 @@ -// This test checks if C functions with internal linkage names are mangled -// and the module hash suffixes attached including emitting DW_AT_linkage_name. -// -// RUN: %clang_cc1 -triple x86_64-unknown-linux -Wno-strict-prototypes -debug-info-kind=limited -dwarf-version=4 -emit-llvm -o - %s | FileCheck %s --check-prefix=PLAIN -// RUN: %clang_cc1 -triple x86_64-unknown-linux -Wno-strict-prototypes -debug-info-kind=limited -dwarf-version=4 -funique-internal-linkage-names -emit-llvm -o - %s | FileCheck %s --check-prefix=UNIQUE -// -// RUN: %clang_cc1 -triple x86_64-unknown-linux -Wno-strict-prototypes -debug-info-kind=limited -dwarf-version=5 -emit-llvm -o - %s | FileCheck %s --check-prefix=PLAIN -// RUN: %clang_cc1 -triple x86_64-unknown-linux -Wno-strict-prototypes -debug-info-kind=limited -dwarf-version=5 -funique-internal-linkage-names -emit-llvm -o - %s | FileCheck %s --check-prefix=UNIQUE - -static int glob; -// foo should be given a uniquefied name under -funique-internal-linkage-names. -static int foo(void) { - return glob; -} - -// K&R prototypes should be given uniquefied names under -funique-internal-linkage-names. -static int bar(a) int a; -{ - return glob + a; -} - -void baz(void) { - foo(); - bar(1); -} - - -// PLAIN: @glob = internal global i32 -// PLAIN: define internal i32 @foo() -// PLAIN: define internal i32 @bar(i32 noundef %a) -// PLAIN: distinct !DIGlobalVariable(name: "glob"{{.*}}) -// PLAIN: distinct !DISubprogram(name: "foo"{{.*}}) -// PLAIN: distinct !DISubprogram(name: "bar"{{.*}}) -// PLAIN-NOT: linkageName: -// -// UNIQUE: @glob = internal global i32 -// UNIQUE: define internal i32 @_ZL3foov.[[MODHASH:__uniq.[0-9]+]]() -// UNIQUE: define internal i32 @_ZL3bari.[[MODHASH]](i32 noundef %a) -// UNIQUE: distinct !DIGlobalVariable(name: "glob"{{.*}}) -// UNIQUE: distinct !DISubprogram(name: "foo", linkageName: "_ZL3foov.[[MODHASH]]"{{.*}}) -// UNIQUE: distinct !DISubprogram(name: "bar", linkageName: "_ZL3bari.[[MODHASH]]"{{.*}}) diff --git a/clang/test/CodeGen/unique-internal-linkage-names-dwarf.cpp b/clang/test/CodeGen/unique-internal-linkage-names-dwarf.cpp deleted file mode 100644 index cdd7062..0000000 --- a/clang/test/CodeGen/unique-internal-linkage-names-dwarf.cpp +++ /dev/null @@ -1,60 +0,0 @@ -// This test checks if C++ functions with internal linkage names are mangled -// and the module hash suffixes attached including emitting DW_AT_linkage_name. -// -// RUN: %clang_cc1 -triple x86_64-unknown-linux -debug-info-kind=limited -dwarf-version=4 -emit-llvm -o - %s | FileCheck %s --check-prefix=PLAIN -// RUN: %clang_cc1 -triple x86_64-unknown-linux -debug-info-kind=limited -dwarf-version=4 -funique-internal-linkage-names -emit-llvm -o - %s | FileCheck %s --check-prefix=UNIQUE -// RUN: %clang_cc1 -triple x86_64-unknown-linux -debug-info-kind=limited -dwarf-version=5 -emit-llvm -o - %s | FileCheck %s --check-prefix=PLAIN -// RUN: %clang_cc1 -triple x86_64-unknown-linux -debug-info-kind=limited -dwarf-version=5 -funique-internal-linkage-names -emit-llvm -o - %s | FileCheck %s --check-prefix=UNIQUE - -static int glob_foo = 5; -static int foo(void) { - __builtin_printf("%p", &glob_foo); - return glob_foo; -} - -// Anonymous namespaces generate internal linkage symbols. -namespace { - int glob_bar; - int bar() { - return glob_bar; - } -} - -extern "C" { - static int glob_zip; - static int zip(void) { - return glob_zip; - } -} - -void baz() { - foo(); - bar(); - zip(); -} - -// PLAIN-DAG: @_ZL8glob_foo = internal global i32 -// PLAIN-DAG: define internal noundef i32 @_ZL3foov() -// PLAIN-DAG: distinct !DIGlobalVariable(name: "glob_foo", linkageName: "_ZL8glob_foo"{{.*}}) -// PLAIN-DAG: distinct !DISubprogram(name: "foo", linkageName: "_ZL3foov"{{.*}}) -// PLAIN-DAG: @_ZN12_GLOBAL__N_18glob_barE = internal global i32 -// PLAIN-DAG: define internal noundef i32 @_ZN12_GLOBAL__N_13barEv() -// PLAIN-DAG: distinct !DIGlobalVariable(name: "glob_bar", linkageName: "_ZN12_GLOBAL__N_18glob_barE"{{.*}}) -// PLAIN-DAG: distinct !DISubprogram(name: "bar", linkageName: "_ZN12_GLOBAL__N_13barEv"{{.*}}) -// PLAIN-DAG: @_ZL8glob_zip = internal global i32 -// PLAIN-DAG: define internal noundef i32 @_ZL3zipv() -// PLAIN-DAG: distinct !DIGlobalVariable(name: "glob_zip", linkageName: "_ZL8glob_zip"{{.*}}) -// PLAIN-DAG: distinct !DISubprogram(name: "zip", linkageName: "_ZL3zipv"{{.*}}) - -// UNIQUE-DAG: @_ZL8glob_foo = internal global i32 -// UNIQUE-DAG: define internal noundef i32 @_ZL3foov.[[MODHASH:__uniq\.[0-9]+]]() -// UNIQUE-DAG: distinct !DIGlobalVariable(name: "glob_foo", linkageName: "_ZL8glob_foo"{{.*}}) -// UNIQUE-DAG: distinct !DISubprogram(name: "foo", linkageName: "_ZL3foov.[[MODHASH]]"{{.*}}) -// UNIQUE-DAG: @_ZN12_GLOBAL__N_18glob_barE = internal global i32 -// UNIQUE-DAG: define internal noundef i32 @_ZN12_GLOBAL__N_13barEv.[[MODHASH]]() -// UNIQUE-DAG: distinct !DIGlobalVariable(name: "glob_bar", linkageName: "_ZN12_GLOBAL__N_18glob_barE"{{.*}}) -// UNIQUE-DAG: distinct !DISubprogram(name: "bar", linkageName: "_ZN12_GLOBAL__N_13barEv.[[MODHASH]]"{{.*}}) -// UNIQUE-DAG: @_ZL8glob_zip = internal global i32 -// UNIQUE-DAG: define internal noundef i32 @_ZL3zipv.[[MODHASH]]() -// UNIQUE-DAG: distinct !DIGlobalVariable(name: "glob_zip", linkageName: "_ZL8glob_zip"{{.*}}) -// UNIQUE-DAG: distinct !DISubprogram(name: "zip", linkageName: "_ZL3zipv.[[MODHASH]]"{{.*}}) diff --git a/clang/test/CodeGen/unsigned-promotion-debuginfo.c b/clang/test/CodeGen/unsigned-promotion-debuginfo.c deleted file mode 100644 index 88e691d..0000000 --- a/clang/test/CodeGen/unsigned-promotion-debuginfo.c +++ /dev/null @@ -1,102 +0,0 @@ -// NOTE: Assertions have been autogenerated by utils/update_cc_test_checks.py UTC_ARGS: --version 5 -// RUN: %clang_cc1 -O2 -triple x86_64-linux-gnu -emit-llvm -o - %s \ -// RUN: -fdebug-prefix-map=%S/= -fno-ident -fdebug-compilation-dir=%S -debug-info-kind=limited \ -// RUN: -fsanitize-annotate-debug-info=signed-integer-overflow \ -// RUN: -fsanitize=signed-integer-overflow | FileCheck %s --check-prefix=CHECKS - -// RUN: %clang_cc1 -O2 -triple x86_64-linux-gnu -emit-llvm -o - %s \ -// RUN: -fdebug-prefix-map=%S/= -fno-ident -fdebug-compilation-dir=%S -debug-info-kind=limited \ -// RUN: -fsanitize-annotate-debug-info=signed-integer-overflow \ -// RUN: -fsanitize=unsigned-integer-overflow | FileCheck %s --check-prefix=CHECKU - -unsigned short si, sj, sk; - -// CHECKS-LABEL: define dso_local void @testshortmul( -// CHECKS-SAME: ) local_unnamed_addr #[[ATTR0:[0-9]+]] !dbg [[DBG13:![0-9]+]] { -// CHECKS-NEXT: [[ENTRY:.*:]] -// CHECKS-NEXT: [[TMP0:%.*]] = load i16, ptr @sj, align 2, !dbg [[DBG16:![0-9]+]], !tbaa [[TBAA17:![0-9]+]] -// CHECKS-NEXT: [[CONV:%.*]] = zext i16 [[TMP0]] to i32, !dbg [[DBG16]] -// CHECKS-NEXT: [[TMP1:%.*]] = load i16, ptr @sk, align 2, !dbg [[DBG21:![0-9]+]], !tbaa [[TBAA17]] -// CHECKS-NEXT: [[CONV1:%.*]] = zext i16 [[TMP1]] to i32, !dbg [[DBG21]] -// CHECKS-NEXT: [[TMP2:%.*]] = tail call { i32, i1 } @llvm.smul.with.overflow.i32(i32 [[CONV]], i32 [[CONV1]]), !dbg [[DBG22:![0-9]+]], !nosanitize [[META26:![0-9]+]] -// CHECKS-NEXT: [[TMP3:%.*]] = extractvalue { i32, i1 } [[TMP2]], 1, !dbg [[DBG22]], !nosanitize [[META26]] -// CHECKS-NEXT: br i1 [[TMP3]], label %[[HANDLER_MUL_OVERFLOW:.*]], label %[[CONT:.*]], !dbg [[DBG22]], !prof [[PROF27:![0-9]+]], !nosanitize [[META26]] -// CHECKS: [[HANDLER_MUL_OVERFLOW]]: -// CHECKS-NEXT: [[TMP4:%.*]] = zext i16 [[TMP0]] to i64, !dbg [[DBG22]] -// CHECKS-NEXT: [[TMP5:%.*]] = zext i16 [[TMP1]] to i64, !dbg [[DBG22]] -// CHECKS-NEXT: tail call void @__ubsan_handle_mul_overflow_abort(ptr nonnull @[[GLOB1:[0-9]+]], i64 [[TMP4]], i64 [[TMP5]]) #[[ATTR3:[0-9]+]], !dbg [[DBG22]], !nosanitize [[META26]] -// CHECKS-NEXT: unreachable, !dbg [[DBG22]], !nosanitize [[META26]] -// CHECKS: [[CONT]]: -// CHECKS-NEXT: [[TMP6:%.*]] = extractvalue { i32, i1 } [[TMP2]], 0, !dbg [[DBG22]], !nosanitize [[META26]] -// CHECKS-NEXT: [[CONV2:%.*]] = trunc i32 [[TMP6]] to i16, !dbg [[DBG16]] -// CHECKS-NEXT: store i16 [[CONV2]], ptr @si, align 2, !dbg [[DBG28:![0-9]+]], !tbaa [[TBAA17]] -// CHECKS-NEXT: ret void, !dbg [[DBG29:![0-9]+]] -// -// CHECKU-LABEL: define dso_local void @testshortmul( -// CHECKU-SAME: ) local_unnamed_addr #[[ATTR0:[0-9]+]] !dbg [[DBG13:![0-9]+]] { -// CHECKU-NEXT: [[ENTRY:.*:]] -// CHECKU-NEXT: [[TMP0:%.*]] = load i16, ptr @sj, align 2, !dbg [[DBG16:![0-9]+]], !tbaa [[TBAA17:![0-9]+]] -// CHECKU-NEXT: [[TMP1:%.*]] = load i16, ptr @sk, align 2, !dbg [[DBG21:![0-9]+]], !tbaa [[TBAA17]] -// CHECKU-NEXT: [[MUL:%.*]] = mul i16 [[TMP1]], [[TMP0]], !dbg [[DBG22:![0-9]+]] -// CHECKU-NEXT: store i16 [[MUL]], ptr @si, align 2, !dbg [[DBG23:![0-9]+]], !tbaa [[TBAA17]] -// CHECKU-NEXT: ret void, !dbg [[DBG24:![0-9]+]] -// -void testshortmul(void) { - - // - si = sj * sk; -} -//. -// CHECKS: [[META0:![0-9]+]] = !DIGlobalVariableExpression(var: [[META1:![0-9]+]], expr: !DIExpression()) -// CHECKS: [[META1]] = distinct !DIGlobalVariable(name: "sj", scope: [[META2:![0-9]+]], file: [[META7:![0-9]+]], line: 12, type: [[META8:![0-9]+]], isLocal: false, isDefinition: true) -// CHECKS: [[META2]] = distinct !DICompileUnit(language: DW_LANG_C11, file: [[META3:![0-9]+]], isOptimized: true, runtimeVersion: 0, emissionKind: FullDebug, globals: [[META4:![0-9]+]], splitDebugInlining: false, nameTableKind: None) -// CHECKS: [[META3]] = !DIFile(filename: "<stdin>", directory: {{.*}}) -// CHECKS: [[META4]] = !{[[META5:![0-9]+]], [[META0]], [[META9:![0-9]+]]} -// CHECKS: [[META5]] = !DIGlobalVariableExpression(var: [[META6:![0-9]+]], expr: !DIExpression()) -// CHECKS: [[META6]] = distinct !DIGlobalVariable(name: "si", scope: [[META2]], file: [[META7]], line: 12, type: [[META8]], isLocal: false, isDefinition: true) -// CHECKS: [[META7]] = !DIFile(filename: "{{.*}}unsigned-promotion-debuginfo.c", directory: {{.*}}) -// CHECKS: [[META8]] = !DIBasicType(name: "unsigned short", size: 16, encoding: DW_ATE_unsigned) -// CHECKS: [[META9]] = !DIGlobalVariableExpression(var: [[META10:![0-9]+]], expr: !DIExpression()) -// CHECKS: [[META10]] = distinct !DIGlobalVariable(name: "sk", scope: [[META2]], file: [[META7]], line: 12, type: [[META8]], isLocal: false, isDefinition: true) -// CHECKS: [[DBG13]] = distinct !DISubprogram(name: "testshortmul", scope: [[META7]], file: [[META7]], line: 44, type: [[META14:![0-9]+]], scopeLine: 44, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: [[META2]]) -// CHECKS: [[META14]] = !DISubroutineType(types: [[META15:![0-9]+]]) -// CHECKS: [[META15]] = !{null} -// CHECKS: [[DBG16]] = !DILocation(line: 47, column: 8, scope: [[DBG13]]) -// CHECKS: [[TBAA17]] = !{[[META18:![0-9]+]], [[META18]], i64 0} -// CHECKS: [[META18]] = !{!"short", [[META19:![0-9]+]], i64 0} -// CHECKS: [[META19]] = !{!"omnipotent char", [[META20:![0-9]+]], i64 0} -// CHECKS: [[META20]] = !{!"Simple C/C++ TBAA"} -// CHECKS: [[DBG21]] = !DILocation(line: 47, column: 13, scope: [[DBG13]]) -// CHECKS: [[DBG22]] = !DILocation(line: 0, scope: [[META23:![0-9]+]], inlinedAt: [[META25:![0-9]+]]) -// CHECKS: [[META23]] = distinct !DISubprogram(name: "__ubsan_check_mul_overflow", scope: [[META7]], file: [[META7]], type: [[META24:![0-9]+]], flags: DIFlagArtificial, spFlags: DISPFlagDefinition, unit: [[META2]]) -// CHECKS: [[META24]] = !DISubroutineType(types: null) -// CHECKS: [[META25]] = !DILocation(line: 47, column: 11, scope: [[DBG13]]) -// CHECKS: [[META26]] = !{} -// CHECKS: [[PROF27]] = !{!"branch_weights", i32 1, i32 1048575} -// CHECKS: [[DBG28]] = !DILocation(line: 47, column: 6, scope: [[DBG13]]) -// CHECKS: [[DBG29]] = !DILocation(line: 48, column: 1, scope: [[DBG13]]) -//. -// CHECKU: [[META0:![0-9]+]] = !DIGlobalVariableExpression(var: [[META1:![0-9]+]], expr: !DIExpression()) -// CHECKU: [[META1]] = distinct !DIGlobalVariable(name: "sj", scope: [[META2:![0-9]+]], file: [[META7:![0-9]+]], line: 12, type: [[META8:![0-9]+]], isLocal: false, isDefinition: true) -// CHECKU: [[META2]] = distinct !DICompileUnit(language: DW_LANG_C11, file: [[META3:![0-9]+]], isOptimized: true, runtimeVersion: 0, emissionKind: FullDebug, globals: [[META4:![0-9]+]], splitDebugInlining: false, nameTableKind: None) -// CHECKU: [[META3]] = !DIFile(filename: "<stdin>", directory: {{.*}}) -// CHECKU: [[META4]] = !{[[META5:![0-9]+]], [[META0]], [[META9:![0-9]+]]} -// CHECKU: [[META5]] = !DIGlobalVariableExpression(var: [[META6:![0-9]+]], expr: !DIExpression()) -// CHECKU: [[META6]] = distinct !DIGlobalVariable(name: "si", scope: [[META2]], file: [[META7]], line: 12, type: [[META8]], isLocal: false, isDefinition: true) -// CHECKU: [[META7]] = !DIFile(filename: "{{.*}}unsigned-promotion-debuginfo.c", directory: {{.*}}) -// CHECKU: [[META8]] = !DIBasicType(name: "unsigned short", size: 16, encoding: DW_ATE_unsigned) -// CHECKU: [[META9]] = !DIGlobalVariableExpression(var: [[META10:![0-9]+]], expr: !DIExpression()) -// CHECKU: [[META10]] = distinct !DIGlobalVariable(name: "sk", scope: [[META2]], file: [[META7]], line: 12, type: [[META8]], isLocal: false, isDefinition: true) -// CHECKU: [[DBG13]] = distinct !DISubprogram(name: "testshortmul", scope: [[META7]], file: [[META7]], line: 44, type: [[META14:![0-9]+]], scopeLine: 44, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: [[META2]]) -// CHECKU: [[META14]] = !DISubroutineType(types: [[META15:![0-9]+]]) -// CHECKU: [[META15]] = !{null} -// CHECKU: [[DBG16]] = !DILocation(line: 47, column: 8, scope: [[DBG13]]) -// CHECKU: [[TBAA17]] = !{[[META18:![0-9]+]], [[META18]], i64 0} -// CHECKU: [[META18]] = !{!"short", [[META19:![0-9]+]], i64 0} -// CHECKU: [[META19]] = !{!"omnipotent char", [[META20:![0-9]+]], i64 0} -// CHECKU: [[META20]] = !{!"Simple C/C++ TBAA"} -// CHECKU: [[DBG21]] = !DILocation(line: 47, column: 13, scope: [[DBG13]]) -// CHECKU: [[DBG22]] = !DILocation(line: 47, column: 11, scope: [[DBG13]]) -// CHECKU: [[DBG23]] = !DILocation(line: 47, column: 6, scope: [[DBG13]]) -// CHECKU: [[DBG24]] = !DILocation(line: 48, column: 1, scope: [[DBG13]]) -//. diff --git a/clang/test/CodeGen/unused_nested_enump.cpp b/clang/test/CodeGen/unused_nested_enump.cpp deleted file mode 100644 index 7689b5b..0000000 --- a/clang/test/CodeGen/unused_nested_enump.cpp +++ /dev/null @@ -1,23 +0,0 @@ -// RUN: %clang_cc1 -debug-info-kind=unused-types -emit-llvm -o - %s | FileCheck %s -// RUN: %clang_cc1 -debug-info-kind=limited -emit-llvm -o - %s | FileCheck --check-prefix=NOUNUSEDTYPE %s - -struct Type { - enum { Unused }; - int value = 0; -}; -int main() { - Type t; - return t.value; -} - -// CHECK: !DICompositeType(tag: DW_TAG_enumeration_type -// CHECK-SAME: scope: ![[STRUCT:[0-9]+]] -// CHECK-SAME: elements: ![[ELEMENTS:[0-9]+]] - -// CHECK: ![[STRUCT]] = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "Type" - -// CHECK: ![[ELEMENTS]] = !{![[ENUMERATOR:[0-9]+]]} -// CHECK: ![[ENUMERATOR]] = !DIEnumerator(name: "Unused", value: 0 - - -// NOUNUSEDTYPE-NOT: !DIEnumerator(name: "Unused" diff --git a/clang/test/CodeGen/volatile-1.c b/clang/test/CodeGen/volatile-1.c index 7116a4e..9d97d89 100644 --- a/clang/test/CodeGen/volatile-1.c +++ b/clang/test/CodeGen/volatile-1.c @@ -1,4 +1,3 @@ -// XFAIL: target=aarch64-pc-windows-msvc // RUN: %clang_cc1 -Wno-return-type -Wno-unused-value -emit-llvm %s -w -o - | FileCheck %s // CHECK: @i = {{(dso_local )?}}global [[INT:i[0-9]+]] 0 @@ -27,44 +26,44 @@ int printf(const char *, ...); void test(void) { // CHECK: load volatile [[INT]], ptr @i i; - // CHECK-NEXT: load volatile [[INT]], ptr @ci, align 4 - // CHECK-NEXT: load volatile [[INT]], ptr getelementptr inbounds nuw ([[CINT]], ptr @ci, i32 0, i32 1), align 4 + // CHECK-NEXT: load volatile [[INT]], ptr @ci, align [[ALIGN:[0-9]+]] + // CHECK-NEXT: load volatile [[INT]], ptr getelementptr inbounds nuw ([[CINT]], ptr @ci, i32 0, i32 1), align [[ALIGN_GEP:[0-9]+]] // CHECK-NEXT: sitofp [[INT]] (float)(ci); - // CHECK-NEXT: load volatile [[INT]], ptr @ci, align 4 - // CHECK-NEXT: load volatile [[INT]], ptr getelementptr inbounds nuw ([[CINT]], ptr @ci, i32 0, i32 1), align 4 + // CHECK-NEXT: load volatile [[INT]], ptr @ci, align [[ALIGN]] + // CHECK-NEXT: load volatile [[INT]], ptr getelementptr inbounds nuw ([[CINT]], ptr @ci, i32 0, i32 1), align [[ALIGN_GEP]] (void)ci; // CHECK-NEXT: memcpy (void)a; - // CHECK-NEXT: [[R:%.*]] = load volatile [[INT]], ptr @ci, align 4 - // CHECK-NEXT: [[I:%.*]] = load volatile [[INT]], ptr getelementptr inbounds nuw ([[CINT]], ptr @ci, i32 0, i32 1), align 4 - // CHECK-NEXT: store volatile [[INT]] [[R]], ptr @ci, align 4 - // CHECK-NEXT: store volatile [[INT]] [[I]], ptr getelementptr inbounds nuw ([[CINT]], ptr @ci, i32 0, i32 1), align 4 + // CHECK-NEXT: [[R:%.*]] = load volatile [[INT]], ptr @ci, align [[ALIGN]] + // CHECK-NEXT: [[I:%.*]] = load volatile [[INT]], ptr getelementptr inbounds nuw ([[CINT]], ptr @ci, i32 0, i32 1), align [[ALIGN_GEP]] + // CHECK-NEXT: store volatile [[INT]] [[R]], ptr @ci, align [[ALIGN]] + // CHECK-NEXT: store volatile [[INT]] [[I]], ptr getelementptr inbounds nuw ([[CINT]], ptr @ci, i32 0, i32 1), align [[ALIGN_GEP]] (void)(ci=ci); // CHECK-NEXT: [[T:%.*]] = load volatile [[INT]], ptr @j // CHECK-NEXT: store volatile [[INT]] [[T]], ptr @i (void)(i=j); - // CHECK-NEXT: [[R1:%.*]] = load volatile [[INT]], ptr @ci, align 4 - // CHECK-NEXT: [[I1:%.*]] = load volatile [[INT]], ptr getelementptr inbounds nuw ([[CINT]], ptr @ci, i32 0, i32 1), align 4 - // CHECK-NEXT: [[R2:%.*]] = load volatile [[INT]], ptr @ci, align 4 - // CHECK-NEXT: [[I2:%.*]] = load volatile [[INT]], ptr getelementptr inbounds nuw ([[CINT]], ptr @ci, i32 0, i32 1), align 4 + // CHECK-NEXT: [[R1:%.*]] = load volatile [[INT]], ptr @ci, align [[ALIGN]] + // CHECK-NEXT: [[I1:%.*]] = load volatile [[INT]], ptr getelementptr inbounds nuw ([[CINT]], ptr @ci, i32 0, i32 1), align [[ALIGN_GEP]] + // CHECK-NEXT: [[R2:%.*]] = load volatile [[INT]], ptr @ci, align [[ALIGN]] + // CHECK-NEXT: [[I2:%.*]] = load volatile [[INT]], ptr getelementptr inbounds nuw ([[CINT]], ptr @ci, i32 0, i32 1), align [[ALIGN_GEP]] // Not sure why they're ordered this way. // CHECK-NEXT: [[R:%.*]] = add [[INT]] [[R2]], [[R1]] // CHECK-NEXT: [[I:%.*]] = add [[INT]] [[I2]], [[I1]] - // CHECK-NEXT: store volatile [[INT]] [[R]], ptr @ci, align 4 - // CHECK-NEXT: store volatile [[INT]] [[I]], ptr getelementptr inbounds nuw ([[CINT]], ptr @ci, i32 0, i32 1), align 4 + // CHECK-NEXT: store volatile [[INT]] [[R]], ptr @ci, align [[ALIGN]] + // CHECK-NEXT: store volatile [[INT]] [[I]], ptr getelementptr inbounds nuw ([[CINT]], ptr @ci, i32 0, i32 1), align [[ALIGN_GEP]] ci+=ci; - // CHECK-NEXT: [[R1:%.*]] = load volatile [[INT]], ptr @ci, align 4 - // CHECK-NEXT: [[I1:%.*]] = load volatile [[INT]], ptr getelementptr inbounds nuw ([[CINT]], ptr @ci, i32 0, i32 1), align 4 - // CHECK-NEXT: [[R2:%.*]] = load volatile [[INT]], ptr @ci, align 4 - // CHECK-NEXT: [[I2:%.*]] = load volatile [[INT]], ptr getelementptr inbounds nuw ([[CINT]], ptr @ci, i32 0, i32 1), align 4 + // CHECK-NEXT: [[R1:%.*]] = load volatile [[INT]], ptr @ci, align [[ALIGN]] + // CHECK-NEXT: [[I1:%.*]] = load volatile [[INT]], ptr getelementptr inbounds nuw ([[CINT]], ptr @ci, i32 0, i32 1), align [[ALIGN_GEP]] + // CHECK-NEXT: [[R2:%.*]] = load volatile [[INT]], ptr @ci, align [[ALIGN]] + // CHECK-NEXT: [[I2:%.*]] = load volatile [[INT]], ptr getelementptr inbounds nuw ([[CINT]], ptr @ci, i32 0, i32 1), align [[ALIGN_GEP]] // CHECK-NEXT: [[R:%.*]] = add [[INT]] [[R2]], [[R1]] // CHECK-NEXT: [[I:%.*]] = add [[INT]] [[I2]], [[I1]] - // CHECK-NEXT: store volatile [[INT]] [[R]], ptr @ci, align 4 - // CHECK-NEXT: store volatile [[INT]] [[I]], ptr getelementptr inbounds nuw ([[CINT]], ptr @ci, i32 0, i32 1), align 4 - // CHECK-NEXT: [[R2:%.*]] = load volatile [[INT]], ptr @ci, align 4 - // CHECK-NEXT: [[I2:%.*]] = load volatile [[INT]], ptr getelementptr inbounds nuw ([[CINT]], ptr @ci, i32 0, i32 1), align 4 + // CHECK-NEXT: store volatile [[INT]] [[R]], ptr @ci, align [[ALIGN]] + // CHECK-NEXT: store volatile [[INT]] [[I]], ptr getelementptr inbounds nuw ([[CINT]], ptr @ci, i32 0, i32 1), align [[ALIGN_GEP]] + // CHECK-NEXT: [[R2:%.*]] = load volatile [[INT]], ptr @ci, align [[ALIGN]] + // CHECK-NEXT: [[I2:%.*]] = load volatile [[INT]], ptr getelementptr inbounds nuw ([[CINT]], ptr @ci, i32 0, i32 1), align [[ALIGN_GEP]] // These additions can be elided // CHECK-NEXT: add [[INT]] [[R]], [[R2]] // CHECK-NEXT: add [[INT]] [[I]], [[I2]] |