From 443e8d40ea571da4162ff5e26767cf4495c5843d Mon Sep 17 00:00:00 2001 From: "Duncan P. N. Exon Smith" Date: Fri, 31 Jul 2015 18:59:37 +0000 Subject: [PATCH 0001/1445] DI: Update testcases for LLVM assembly change Update testcases after LLVM change r243774. Most of these had no need to check `tag:` field, but did so as a way of getting to the `name:` field. In a few cases I've converted the `tag:` checks to `arg:` or `CHECK-NOT: arg:`. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@243775 91177308-0d34-0410-b5e6-96231b3b80d8 --- test/CodeGen/debug-info-257-args.c | 6 +++--- test/CodeGen/debug-info-block-out-return.c | 4 ++-- test/CodeGen/debug-info-gline-tables-only.c | 3 +-- test/CodeGen/debug-info-scope.c | 4 ++-- test/CodeGen/debug-info-vla.c | 2 +- test/CodeGenCXX/2010-05-12-PtrToMember-Dbg.cpp | 2 +- test/CodeGenCXX/debug-info-anon-union-vars.cpp | 4 ++-- test/CodeGenCXX/debug-info-method.cpp | 7 ++++--- test/CodeGenCXX/debug-info-qualifiers.cpp | 4 ++-- test/CodeGenCXX/debug-info-scope.cpp | 16 ++++++++-------- test/CodeGenCXX/debug-info-varargs.cpp | 2 +- test/CodeGenCXX/debug-info.cpp | 6 ++++-- test/CodeGenObjC/2010-02-09-DbgSelf.m | 2 +- test/CodeGenObjC/catch-lexical-block.m | 2 +- .../CodeGenObjC/debug-info-block-captured-self.m | 5 +++-- test/CodeGenObjC/debug-info-blocks.m | 4 ++-- test/CodeGenObjC/debug-info-id-with-protocol.m | 4 ++-- test/CodeGenObjC/debug-info-lifetime-crash.m | 4 ++-- test/CodeGenObjC/debug-info-self.m | 6 +++--- test/CodeGenObjC/objc-fixed-enum.m | 8 ++++---- 20 files changed, 49 insertions(+), 46 deletions(-) diff --git a/test/CodeGen/debug-info-257-args.c b/test/CodeGen/debug-info-257-args.c index c6ffa6e9bfb..0b6a6e3c9aa 100644 --- a/test/CodeGen/debug-info-257-args.c +++ b/test/CodeGen/debug-info-257-args.c @@ -1,9 +1,9 @@ // RUN: %clang_cc1 -x c++ -g -emit-llvm -triple x86_64-linux-gnu -o - %s | FileCheck %s // PR23332 -// CHECK: DILocalVariable(tag: DW_TAG_arg_variable, arg: 255 -// CHECK: DILocalVariable(tag: DW_TAG_arg_variable, arg: 256 -// CHECK: DILocalVariable(tag: DW_TAG_arg_variable, arg: 257 +// 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, diff --git a/test/CodeGen/debug-info-block-out-return.c b/test/CodeGen/debug-info-block-out-return.c index e0e5bd91249..b3dc081945e 100644 --- a/test/CodeGen/debug-info-block-out-return.c +++ b/test/CodeGen/debug-info-block-out-return.c @@ -11,8 +11,8 @@ // out of order or not at all (the latter would occur if they were both assigned // the same argument number by mistake). -// CHECK: !DILocalVariable(tag: DW_TAG_arg_variable, name: ".block_descriptor", arg: 1,{{.*}}line: 2, -// CHECK: !DILocalVariable(tag: DW_TAG_arg_variable, name: "param", arg: 2,{{.*}}line: 2, +// 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 preceed the // test code (as the line number is mangled in with the argument number as shown diff --git a/test/CodeGen/debug-info-gline-tables-only.c b/test/CodeGen/debug-info-gline-tables-only.c index 067d8e77218..c8a08b619e0 100644 --- a/test/CodeGen/debug-info-gline-tables-only.c +++ b/test/CodeGen/debug-info-gline-tables-only.c @@ -23,9 +23,8 @@ struct S { // CHECK-NOT: DW_TAG_enumeration_type enum E { ZERO = 0, ONE = 1 }; -// CHECK-NOT: DW_TAG_arg_variable +// CHECK-NOT: DILocalVariable int sum(int p, int q) { - // CHECK-NOT: DW_TAG_auto_variable int r = p + q; struct S s; enum E e; diff --git a/test/CodeGen/debug-info-scope.c b/test/CodeGen/debug-info-scope.c index aa6e5c1f2da..11e5d778de1 100644 --- a/test/CodeGen/debug-info-scope.c +++ b/test/CodeGen/debug-info-scope.c @@ -5,7 +5,7 @@ int main() { int j = 0; int k = 0; -// CHECK: !DILocalVariable(tag: DW_TAG_auto_variable, name: "i" +// CHECK: !DILocalVariable(name: "i" // CHECK-NEXT: !DILexicalBlock( // FIXME: Looks like we don't actually need both these lexical blocks (disc 2 @@ -19,7 +19,7 @@ int main() { // GMLT-NOT: !DILexicalBlock for (int i = 0; i < 10; i++) j++; -// CHECK: !DILocalVariable(tag: DW_TAG_auto_variable, name: "i" +// CHECK: !DILocalVariable(name: "i" // CHECK-NEXT: !DILexicalBlock( // GMLT-NOT: !DILexicalBlock for (int i = 0; i < 10; i++) diff --git a/test/CodeGen/debug-info-vla.c b/test/CodeGen/debug-info-vla.c index 175c24cfb9d..6ba4be0d962 100644 --- a/test/CodeGen/debug-info-vla.c +++ b/test/CodeGen/debug-info-vla.c @@ -4,7 +4,7 @@ void testVLAwithSize(int s) { // CHECK: dbg.declare // CHECK: dbg.declare({{.*}}, metadata ![[VAR:.*]], metadata ![[EXPR:.*]]) -// CHECK: ![[VAR]] = !DILocalVariable(tag: DW_TAG_auto_variable, name: "vla",{{.*}} line: [[@LINE+2]] +// CHECK: ![[VAR]] = !DILocalVariable(name: "vla",{{.*}} line: [[@LINE+2]] // CHECK: ![[EXPR]] = !DIExpression(DW_OP_deref) int vla[s]; int i; diff --git a/test/CodeGenCXX/2010-05-12-PtrToMember-Dbg.cpp b/test/CodeGenCXX/2010-05-12-PtrToMember-Dbg.cpp index 048811f6e64..6b6d5573618 100644 --- a/test/CodeGenCXX/2010-05-12-PtrToMember-Dbg.cpp +++ b/test/CodeGenCXX/2010-05-12-PtrToMember-Dbg.cpp @@ -1,5 +1,5 @@ //RUN: %clang_cc1 -emit-llvm -g -o - %s | FileCheck %s -//CHECK: DW_TAG_auto_variable +//CHECK: DILocalVariable( class Foo { public: diff --git a/test/CodeGenCXX/debug-info-anon-union-vars.cpp b/test/CodeGenCXX/debug-info-anon-union-vars.cpp index ad3b6d4c623..96b1fd60334 100644 --- a/test/CodeGenCXX/debug-info-anon-union-vars.cpp +++ b/test/CodeGenCXX/debug-info-anon-union-vars.cpp @@ -34,8 +34,8 @@ void foo() { // CHECK: !DIGlobalVariable(name: "d",{{.*}} file: [[FILE]], line: 6,{{.*}} isLocal: true, isDefinition: true // CHECK: !DIGlobalVariable(name: "a",{{.*}} file: [[FILE]], line: 6,{{.*}} isLocal: true, isDefinition: true // CHECK: !DIGlobalVariable(name: "b",{{.*}} file: [[FILE]], line: 6,{{.*}} isLocal: true, isDefinition: true -// CHECK: !DILocalVariable(tag: DW_TAG_auto_variable, name: "i", {{.*}}, flags: DIFlagArtificial -// CHECK: !DILocalVariable(tag: DW_TAG_auto_variable, name: "c", {{.*}}, flags: DIFlagArtificial +// CHECK: !DILocalVariable(name: "i", {{.*}}, flags: DIFlagArtificial +// CHECK: !DILocalVariable(name: "c", {{.*}}, flags: DIFlagArtificial // CHECK: !DILocalVariable( // CHECK-NOT: name: // CHECK: type: ![[UNION:[0-9]+]] diff --git a/test/CodeGenCXX/debug-info-method.cpp b/test/CodeGenCXX/debug-info-method.cpp index 3ce05bd2d6b..b71a15b339d 100644 --- a/test/CodeGenCXX/debug-info-method.cpp +++ b/test/CodeGenCXX/debug-info-method.cpp @@ -8,9 +8,10 @@ // CHECK: !DIDerivedType(tag: DW_TAG_ptr_to_member_type, baseType: ![[MEMFUNTYPE:[0-9]+]] // CHECK: ![[MEMFUNTYPE]] = !DISubroutineType(types: ![[MEMFUNARGS:[0-9]+]]) // CHECK: ![[MEMFUNARGS]] = {{.*}}, ![[THISTYPE]], -// CHECK: !DILocalVariable(tag: DW_TAG_arg_variable -// CHECK: !DILocalVariable(tag: DW_TAG_arg_variable -// CHECK: !DILocalVariable(tag: DW_TAG_arg_variable +// CHECK: !DILocalVariable(name: "this", arg: 1 +// CHECK: !DILocalVariable(arg: 2 +// CHECK: !DILocalVariable(arg: 3 +// CHECK: !DILocalVariable(arg: 4 union { int a; float b; diff --git a/test/CodeGenCXX/debug-info-qualifiers.cpp b/test/CodeGenCXX/debug-info-qualifiers.cpp index 9458e1f825e..af483e17845 100644 --- a/test/CodeGenCXX/debug-info-qualifiers.cpp +++ b/test/CodeGenCXX/debug-info-qualifiers.cpp @@ -22,13 +22,13 @@ class A { void g() { A a; // The type of pl is "void (A::*)() const &". - // CHECK: !DILocalVariable(tag: DW_TAG_auto_variable, name: "pl", + // CHECK: !DILocalVariable(name: "pl", // CHECK-SAME: line: [[@LINE+3]] // CHECK-SAME: type: ![[PL:[0-9]+]] // CHECK: !DIDerivedType(tag: DW_TAG_ptr_to_member_type, baseType: ![[PLSR]] auto pl = &A::l; - // CHECK: !DILocalVariable(tag: DW_TAG_auto_variable, name: "pr", + // CHECK: !DILocalVariable(name: "pr", // CHECK-SAME: line: [[@LINE+3]] // CHECK-SAME: type: ![[PR:[0-9]+]] // CHECK: !DIDerivedType(tag: DW_TAG_ptr_to_member_type, baseType: ![[PRSR]] diff --git a/test/CodeGenCXX/debug-info-scope.cpp b/test/CodeGenCXX/debug-info-scope.cpp index 478b7895e4e..d14de6fc806 100644 --- a/test/CodeGenCXX/debug-info-scope.cpp +++ b/test/CodeGenCXX/debug-info-scope.cpp @@ -9,14 +9,14 @@ int src(); void f(); void func() { - // CHECK: = !DILocalVariable(tag: DW_TAG_auto_variable, name: "i" + // CHECK: = !DILocalVariable(name: "i" // CHECK-SAME: scope: [[IF1:![0-9]*]] // CHECK-SAME: line: [[@LINE+2]] // CHECK: [[IF1]] = distinct !DILexicalBlock({{.*}}line: [[@LINE+1]]) if (int i = src()) f(); - // CHECK: = !DILocalVariable(tag: DW_TAG_auto_variable, name: "i" + // CHECK: = !DILocalVariable(name: "i" // CHECK-SAME: scope: [[IF2:![0-9]*]] // CHECK-SAME: line: [[@LINE+2]] // CHECK: [[IF2]] = distinct !DILexicalBlock({{.*}}line: [[@LINE+1]]) @@ -25,12 +25,12 @@ void func() { } else f(); - // CHECK: = !DILocalVariable(tag: DW_TAG_auto_variable, name: "i" + // CHECK: = !DILocalVariable(name: "i" // CHECK-SAME: scope: [[FOR:![0-9]*]] // CHECK-SAME: line: [[@LINE+2]] // CHECK: [[FOR]] = distinct !DILexicalBlock({{.*}}line: [[@LINE+1]]) for (int i = 0; - // CHECK: = !DILocalVariable(tag: DW_TAG_auto_variable, name: "b" + // CHECK: = !DILocalVariable(name: "b" // CHECK-SAME: scope: [[FOR_BODY:![0-9]*]] // CHECK-SAME: line: [[@LINE+6]] // CHECK: [[FOR_BODY]] = distinct !DILexicalBlock({{.*}}line: [[@LINE-4]]) @@ -41,7 +41,7 @@ void func() { bool b = i != 10; ++i) f(); - // CHECK: = !DILocalVariable(tag: DW_TAG_auto_variable, name: "i" + // CHECK: = !DILocalVariable(name: "i" // CHECK-SAME: scope: [[FOR:![0-9]*]] // CHECK-SAME: line: [[@LINE+2]] // CHECK: [[FOR]] = distinct !DILexicalBlock({{.*}}line: [[@LINE+1]]) @@ -50,7 +50,7 @@ void func() { // or using declarations) as direct children, they just waste // space/relocations/etc. // CHECK: [[FOR_LOOP_INCLUDING_COND:!.*]] = distinct !DILexicalBlock(scope: [[FOR]],{{.*}} line: [[@LINE-4]]) - // CHECK: = !DILocalVariable(tag: DW_TAG_auto_variable, name: "b" + // CHECK: = !DILocalVariable(name: "b" // CHECK-SAME: scope: [[FOR_COMPOUND:![0-9]*]] // CHECK-SAME: line: [[@LINE+2]] // CHECK: [[FOR_COMPOUND]] = distinct !DILexicalBlock(scope: [[FOR_LOOP_INCLUDING_COND]],{{.*}} line: [[@LINE-8]]) @@ -58,13 +58,13 @@ void func() { } int x[] = {1, 2}; - // CHECK: = !DILocalVariable(tag: DW_TAG_auto_variable, name: "__range" + // CHECK: = !DILocalVariable(name: "__range" // CHECK-SAME: scope: [[RANGE_FOR:![0-9]*]] // CHECK-NOT: line: // CHECK-SAME: ){{$}} // CHECK: [[RANGE_FOR]] = distinct !DILexicalBlock({{.*}}, line: [[@LINE+1]]) for (int i : x) { - // CHECK: = !DILocalVariable(tag: DW_TAG_auto_variable, name: "i" + // CHECK: = !DILocalVariable(name: "i" // CHECK-SAME: scope: [[RANGE_FOR_BODY:![0-9]*]] // CHECK-SAME: line: [[@LINE-3]] // CHECK: [[RANGE_FOR_BODY]] = distinct !DILexicalBlock(scope: [[RANGE_FOR]],{{.*}} line: [[@LINE-4]]) diff --git a/test/CodeGenCXX/debug-info-varargs.cpp b/test/CodeGenCXX/debug-info-varargs.cpp index edcb0e5a53d..ada1970f1ca 100644 --- a/test/CodeGenCXX/debug-info-varargs.cpp +++ b/test/CodeGenCXX/debug-info-varargs.cpp @@ -20,7 +20,7 @@ void b(int c, ...) { A a; - // CHECK: !DILocalVariable(tag: DW_TAG_auto_variable, name: "fptr" + // CHECK: !DILocalVariable(name: "fptr" // CHECK-SAME: line: [[@LINE+2]] // CHECK-SAME: type: ![[PST:[0-9]+]] void (*fptr)(int, ...) = b; diff --git a/test/CodeGenCXX/debug-info.cpp b/test/CodeGenCXX/debug-info.cpp index 13753684800..bf71bae6b09 100644 --- a/test/CodeGenCXX/debug-info.cpp +++ b/test/CodeGenCXX/debug-info.cpp @@ -142,11 +142,13 @@ incomplete (*x)[3]; } // For some reason function arguments ended up down here -// CHECK: ![[F]] = !DILocalVariable(tag: DW_TAG_arg_variable, name: "f", arg: 1, scope: [[FUNC]] +// CHECK: ![[F]] = !DILocalVariable(name: "f", arg: 1, scope: [[FUNC]] // CHECK-SAME: type: !"[[FOO]]" // CHECK: ![[EXPR]] = !DIExpression(DW_OP_deref) -// CHECK: !DILocalVariable(tag: DW_TAG_auto_variable, name: "c" +// CHECK: !DILocalVariable(name: "c" +// CHECK-NOT: arg: +// CHECK-SAME: ) namespace pr16214 { struct a { diff --git a/test/CodeGenObjC/2010-02-09-DbgSelf.m b/test/CodeGenObjC/2010-02-09-DbgSelf.m index a0179d9227a..0b9e3ceaa5c 100644 --- a/test/CodeGenObjC/2010-02-09-DbgSelf.m +++ b/test/CodeGenObjC/2010-02-09-DbgSelf.m @@ -1,7 +1,7 @@ // RUN: %clang_cc1 -x objective-c -emit-llvm -g < %s | FileCheck %s // Test to check that "self" argument is assigned a location. // CHECK: call void @llvm.dbg.declare(metadata %0** %{{[^,]+}}, metadata [[SELF:![0-9]*]], metadata !{{.*}}) -// CHECK: [[SELF]] = !DILocalVariable(tag: DW_TAG_arg_variable, name: "self" +// CHECK: [[SELF]] = !DILocalVariable(name: "self", arg: 1, @interface Foo -(void) Bar: (int)x ; diff --git a/test/CodeGenObjC/catch-lexical-block.m b/test/CodeGenObjC/catch-lexical-block.m index ae49405160d..f0fe02a2c6a 100644 --- a/test/CodeGenObjC/catch-lexical-block.m +++ b/test/CodeGenObjC/catch-lexical-block.m @@ -10,6 +10,6 @@ void f0() { // We should have 3 lexical blocks here at the moment, including one // for the catch block. // CHECK: !DILexicalBlock( -// CHECK: !DILocalVariable(tag: DW_TAG_auto_variable +// CHECK: !DILocalVariable( // CHECK: !DILexicalBlock( // CHECK: !DILexicalBlock( diff --git a/test/CodeGenObjC/debug-info-block-captured-self.m b/test/CodeGenObjC/debug-info-block-captured-self.m index fb9d7c2045e..b2ad97b65ff 100644 --- a/test/CodeGenObjC/debug-info-block-captured-self.m +++ b/test/CodeGenObjC/debug-info-block-captured-self.m @@ -66,6 +66,7 @@ - (id) initWithContext:(Context *) context // CHECK: ![[MAIN:.*]] = !DICompositeType(tag: DW_TAG_structure_type, name: "Main" // CHECK-SAME: line: 23, // CHECK: ![[PMAIN:.*]] = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: ![[MAIN]], -// CHECK: ![[BDMD]] = !DILocalVariable(tag: DW_TAG_arg_variable, name: ".block_descriptor" -// CHECK: ![[SELF]] = !DILocalVariable(tag: DW_TAG_auto_variable, name: "self" +// CHECK: ![[BDMD]] = !DILocalVariable(name: ".block_descriptor", arg: +// CHECK: ![[SELF]] = !DILocalVariable(name: "self" +// CHECK-NOT: arg: // CHECK-SAME: line: 40, diff --git a/test/CodeGenObjC/debug-info-blocks.m b/test/CodeGenObjC/debug-info-blocks.m index 5514c5164c9..8c862533121 100644 --- a/test/CodeGenObjC/debug-info-blocks.m +++ b/test/CodeGenObjC/debug-info-blocks.m @@ -61,8 +61,8 @@ - (id)init { if ((self = [super init])) { run(^{ - // CHECK-DAG: ![[SELF]] = !DILocalVariable(tag: DW_TAG_auto_variable, name: "self"{{.*}}, line: [[@LINE+4]], - // CHECK-DAG: ![[D]] = !DILocalVariable(tag: DW_TAG_auto_variable, name: "d"{{.*}}, line: [[@LINE+1]], + // CHECK-DAG: ![[SELF]] = !DILocalVariable(name: "self", scope:{{.*}}, line: [[@LINE+4]], + // CHECK-DAG: ![[D]] = !DILocalVariable(name: "d", scope:{{.*}}, line: [[@LINE+1]], NSMutableDictionary *d = [[NSMutableDictionary alloc] init]; ivar = 42 + (int)[d count]; }); diff --git a/test/CodeGenObjC/debug-info-id-with-protocol.m b/test/CodeGenObjC/debug-info-id-with-protocol.m index 836e456b235..1ac0fa3b2b5 100644 --- a/test/CodeGenObjC/debug-info-id-with-protocol.m +++ b/test/CodeGenObjC/debug-info-id-with-protocol.m @@ -38,10 +38,10 @@ int main() // Verify that the debug type for both variables is 'id'. // CHECK: ![[IDTYPE:[0-9]+]] = !DIDerivedType(tag: DW_TAG_typedef, name: "id" // -// CHECK: !DILocalVariable(tag: DW_TAG_arg_variable, name: "bad_carrier" +// CHECK: !DILocalVariable(name: "bad_carrier", arg: // CHECK-NOT: line: // CHECK-SAME: type: ![[IDTYPE]] // -// CHECK: !DILocalVariable(tag: DW_TAG_arg_variable, name: "good_carrier" +// CHECK: !DILocalVariable(name: "good_carrier", arg: // CHECK-NOT: line: // CHECK-SAME: type: ![[IDTYPE]] diff --git a/test/CodeGenObjC/debug-info-lifetime-crash.m b/test/CodeGenObjC/debug-info-lifetime-crash.m index bbd7dd4ac3b..d3d5d88d28f 100644 --- a/test/CodeGenObjC/debug-info-lifetime-crash.m +++ b/test/CodeGenObjC/debug-info-lifetime-crash.m @@ -13,12 +13,12 @@ - (void)View:(View1 *)View foo:(W *)W { // The debug type for these two will be identical, because we do not // actually emit the ownership qualifier. - // CHECK: !DILocalVariable(tag: DW_TAG_auto_variable, name: "weakSelf", + // CHECK: !DILocalVariable(name: "weakSelf", // CHECK-SAME: line: [[@LINE+2]] // CHECK-SAME: type: ![[SELFTY:[0-9]+]] __attribute__((objc_ownership(weak))) __typeof(self) weakSelf = self; Block = [^{ - // CHECK: !DILocalVariable(tag: DW_TAG_auto_variable, name: "strongSelf", + // CHECK: !DILocalVariable(name: "strongSelf", // CHECK-SAME: line: [[@LINE+2]] // CHECK-SAME: type: ![[SELFTY]] __attribute__((objc_ownership(strong))) __typeof(self) strongSelf = weakSelf; diff --git a/test/CodeGenObjC/debug-info-self.m b/test/CodeGenObjC/debug-info-self.m index 225a0bdef63..275089390f4 100644 --- a/test/CodeGenObjC/debug-info-self.m +++ b/test/CodeGenObjC/debug-info-self.m @@ -14,15 +14,15 @@ - (id) init:(int) myarg } @end -// CHECK: !DILocalVariable(tag: DW_TAG_arg_variable, name: "self", arg: 1, +// CHECK: !DILocalVariable(name: "self", arg: 1, // CHECK-SAME: scope: ![[CTOR:[0-9]+]] // CHECK-NOT: line: // CHECK-SAME: flags: DIFlagArtificial | DIFlagObjectPointer{{[,)]}} -// CHECK: !DILocalVariable(tag: DW_TAG_arg_variable, name: "_cmd", arg: 2, +// CHECK: !DILocalVariable(name: "_cmd", arg: 2, // CHECK-SAME: scope: ![[CTOR]] // CHECK-NOT: line: // CHECK-SAME: flags: DIFlagArtificial{{[,)]}} -// CHECK: !DILocalVariable(tag: DW_TAG_arg_variable, name: "myarg", arg: 3, +// CHECK: !DILocalVariable(name: "myarg", arg: 3, // CHECK-SAME: scope: ![[CTOR]] // CHECK-SAME: line: 11 // CHECK-NOT: flags: diff --git a/test/CodeGenObjC/objc-fixed-enum.m b/test/CodeGenObjC/objc-fixed-enum.m index 52811b1d68b..06460bdebb3 100644 --- a/test/CodeGenObjC/objc-fixed-enum.m +++ b/test/CodeGenObjC/objc-fixed-enum.m @@ -59,22 +59,22 @@ int main() { // CHECK-SAME: line: 22 // CHECK-SAME: baseType: ![[ENUMERATOR3]] -// CHECK: ![[ENUM0]] = !DILocalVariable(tag: DW_TAG_auto_variable, name: "e0" +// CHECK: ![[ENUM0]] = !DILocalVariable(name: "e0" // CHECK-SAME: type: ![[TYPE0:[0-9]+]] // CHECK: ![[TYPE0]] = !DIDerivedType(tag: DW_TAG_typedef, name: "Enum0", // CHECK-SAME: baseType: ![[ENUMERATOR0]] -// CHECK: ![[ENUM1]] = !DILocalVariable(tag: DW_TAG_auto_variable, name: "e1" +// CHECK: ![[ENUM1]] = !DILocalVariable(name: "e1" // CHECK-SAME: type: ![[TYPE1:[0-9]+]] // CHECK: ![[TYPE1]] = !DIDerivedType(tag: DW_TAG_typedef, name: "Enum1" // CHECK-SAME: baseType: ![[ENUMERATOR1]] -// CHECK: ![[ENUM2]] = !DILocalVariable(tag: DW_TAG_auto_variable, name: "e2" +// CHECK: ![[ENUM2]] = !DILocalVariable(name: "e2" // CHECK-SAME: type: ![[TYPE2:[0-9]+]] // CHECK: ![[TYPE2]] = !DIDerivedType(tag: DW_TAG_typedef, name: "Enum2" // CHECK-SAME: baseType: ![[ENUMERATOR2]] -// CHECK: ![[ENUM3]] = !DILocalVariable(tag: DW_TAG_auto_variable, name: "e3" +// CHECK: ![[ENUM3]] = !DILocalVariable(name: "e3" // CHECK-SAME: type: ![[TYPE3:[0-9]+]] // CHECK: ![[TYPE3]] = !DIDerivedType(tag: DW_TAG_typedef, name: "Enum3" // CHECK-SAME: baseType: ![[ENUMERATOR3]] From bd3dcdc301942f74803c2ad90d49d9792ebf53c0 Mon Sep 17 00:00:00 2001 From: Nathan Wilson Date: Fri, 31 Jul 2015 20:00:02 +0000 Subject: [PATCH 0002/1445] test commit; wrap ellipses in comment with brackets git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@243776 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Sema/SemaDecl.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/Sema/SemaDecl.cpp b/lib/Sema/SemaDecl.cpp index f273de12583..9f499de0843 100644 --- a/lib/Sema/SemaDecl.cpp +++ b/lib/Sema/SemaDecl.cpp @@ -7440,7 +7440,7 @@ Sema::ActOnFunctionDeclarator(Scope *S, Declarator &D, DeclContext *DC, if (isConcept) { // C++ Concepts TS [dcl.spec.concept]p1: The concept specifier shall be - // applied only to the definition of a function template... + // applied only to the definition of a function template [...] if (!D.isFunctionDefinition()) { Diag(D.getDeclSpec().getConceptSpecLoc(), diag::err_function_concept_not_defined); From 3a58d1daa0a1d5c669f9ef378c21c46118a9b8d3 Mon Sep 17 00:00:00 2001 From: Kostya Serebryany Date: Fri, 31 Jul 2015 21:48:10 +0000 Subject: [PATCH 0003/1445] [libFuzzer] minimal documentation on data-flow-guided fuzzing git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@243793 91177308-0d34-0410-b5e6-96231b3b80d8 --- docs/SanitizerCoverage.rst | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/docs/SanitizerCoverage.rst b/docs/SanitizerCoverage.rst index 65af6ffbf01..efcb49e6eb4 100644 --- a/docs/SanitizerCoverage.rst +++ b/docs/SanitizerCoverage.rst @@ -249,6 +249,33 @@ These counters may also be used for in-process coverage-guided fuzzers. See uintptr_t __sanitizer_update_counter_bitset_and_clear_counters(uint8_t *bitset); +Tracing data flow +================= + +An *experimental* feature to support data-flow-guided fuzzing. +With ``-fsanitize-coverage=trace-cmp`` the compiler will insert extra instrumentation +around comparison instructions and switch statements. +The fuzzer will need to define the following functions, +they will be called by the instrumented code. + +.. code-block:: c++ + + // Called before a comparison instruction. + // SizeAndType is a packed value containing + // - [63:32] the Size of the operands of comparison in bits + // - [31:0] the Type of comparison (one of ICMP_EQ, ... ICMP_SLE) + // Arg1 and Arg2 are arguments of the comparison. + void __sanitizer_cov_trace_cmp(uint64_t SizeAndType, uint64_t Arg1, uint64_t Arg2); + + // Called before a switch statement. + // Val is the switch operand. + // Cases[0] is the number of case constants. + // Cases[1] is the size of Val in bits. + // Cases[2:] are the case constants. + void __sanitizer_cov_trace_switch(uint64_t Val, uint64_t *Cases); + +This interface is a subject to change. + Output directory ================ From 5276862e7f0ae7ba9f23a3ddeab19395a170c452 Mon Sep 17 00:00:00 2001 From: Yunzhong Gao Date: Sat, 1 Aug 2015 02:55:59 +0000 Subject: [PATCH 0004/1445] [Tests] Add explicit -std=lang option to a number of tests. This patch should not change the test results, but it is useful if clang's default C++ language is ever changed from gnu++98. Patch by: Charles Li http://lists.cs.uiuc.edu/pipermail/cfe-commits/Week-of-Mon-20150727/134667.html git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@243819 91177308-0d34-0410-b5e6-96231b3b80d8 --- test/Lexer/cxx0x_keyword_as_cxx98.cpp | 2 +- test/Lexer/has_feature_cxx0x.cpp | 2 +- test/Lexer/ms-extensions.cpp | 2 +- test/Preprocessor/macro-reserved-cxx11.cpp | 1 + test/Preprocessor/macro-reserved.cpp | 2 +- 5 files changed, 5 insertions(+), 4 deletions(-) diff --git a/test/Lexer/cxx0x_keyword_as_cxx98.cpp b/test/Lexer/cxx0x_keyword_as_cxx98.cpp index 5d168100412..8f5fcf40b22 100644 --- a/test/Lexer/cxx0x_keyword_as_cxx98.cpp +++ b/test/Lexer/cxx0x_keyword_as_cxx98.cpp @@ -1,4 +1,4 @@ -// RUN: %clang_cc1 %s -verify -fsyntax-only -Wc++11-compat +// RUN: %clang_cc1 %s -verify -fsyntax-only -Wc++11-compat -std=c++98 #define constexpr const constexpr int x = 0; diff --git a/test/Lexer/has_feature_cxx0x.cpp b/test/Lexer/has_feature_cxx0x.cpp index dbb650e1b22..8c7ff18860a 100644 --- a/test/Lexer/has_feature_cxx0x.cpp +++ b/test/Lexer/has_feature_cxx0x.cpp @@ -1,6 +1,6 @@ // RUN: %clang_cc1 -E -triple x86_64-linux-gnu -std=c++11 %s -o - | FileCheck --check-prefix=CHECK-11 %s // RUN: %clang_cc1 -E -triple armv7-apple-darwin -std=c++11 %s -o - | FileCheck --check-prefix=CHECK-NO-TLS %s -// RUN: %clang_cc1 -E -triple x86_64-linux-gnu %s -o - | FileCheck --check-prefix=CHECK-NO-11 %s +// RUN: %clang_cc1 -E -triple x86_64-linux-gnu -std=c++98 %s -o - | FileCheck --check-prefix=CHECK-NO-11 %s // RUN: %clang_cc1 -E -triple x86_64-linux-gnu -std=c++14 %s -o - | FileCheck --check-prefix=CHECK-14 %s // RUN: %clang_cc1 -E -triple x86_64-linux-gnu -std=c++1z %s -o - | FileCheck --check-prefix=CHECK-1Z %s diff --git a/test/Lexer/ms-extensions.cpp b/test/Lexer/ms-extensions.cpp index 7e18a6cb2bc..9a858a4ff32 100644 --- a/test/Lexer/ms-extensions.cpp +++ b/test/Lexer/ms-extensions.cpp @@ -1,4 +1,4 @@ -// RUN: %clang_cc1 -fsyntax-only -verify -Wreserved-user-defined-literal -fms-extensions -fms-compatibility %s +// RUN: %clang_cc1 -fsyntax-only -verify -Wreserved-user-defined-literal -fms-extensions -fms-compatibility -std=c++98 %s #define bar(x) #x const char * f() { diff --git a/test/Preprocessor/macro-reserved-cxx11.cpp b/test/Preprocessor/macro-reserved-cxx11.cpp index a740ff61295..6daea953e8a 100644 --- a/test/Preprocessor/macro-reserved-cxx11.cpp +++ b/test/Preprocessor/macro-reserved-cxx11.cpp @@ -1,4 +1,5 @@ // RUN: %clang_cc1 -fsyntax-only -std=c++11 -pedantic -verify %s +// RUN: %clang_cc1 -fsyntax-only -std=c++14 -pedantic -verify %s #define for 0 // expected-warning {{keyword is hidden by macro definition}} #define final 1 // expected-warning {{keyword is hidden by macro definition}} diff --git a/test/Preprocessor/macro-reserved.cpp b/test/Preprocessor/macro-reserved.cpp index ba1594a0af4..d1f70317f7a 100644 --- a/test/Preprocessor/macro-reserved.cpp +++ b/test/Preprocessor/macro-reserved.cpp @@ -1,4 +1,4 @@ -// RUN: %clang_cc1 -fsyntax-only -verify -pedantic %s +// RUN: %clang_cc1 -fsyntax-only -verify -pedantic -std=c++98 %s #define for 0 // expected-warning {{keyword is hidden by macro definition}} #define final 1 From d0c24a02dc82b38f88ec9f3e515ffbeefe89eb70 Mon Sep 17 00:00:00 2001 From: David Majnemer Date: Sat, 1 Aug 2015 05:31:56 +0000 Subject: [PATCH 0005/1445] Use the reserved keyword spelling of 'typeof' No functional change intended, just a drive-by cleanup. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@243826 91177308-0d34-0410-b5e6-96231b3b80d8 --- test/CodeGenCXX/exceptions.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/CodeGenCXX/exceptions.cpp b/test/CodeGenCXX/exceptions.cpp index e8f6c7996a1..d6b5942dd23 100644 --- a/test/CodeGenCXX/exceptions.cpp +++ b/test/CodeGenCXX/exceptions.cpp @@ -1,6 +1,6 @@ // RUN: %clang_cc1 %s -triple=x86_64-linux-gnu -emit-llvm -o - -fcxx-exceptions -fexceptions | FileCheck %s -typedef typeof(sizeof(0)) size_t; +typedef __typeof(sizeof(0)) size_t; // This just shouldn't crash. namespace test0 { From f86a8612622eb80555d85219db3d20bae41daccb Mon Sep 17 00:00:00 2001 From: Davide Italiano Date: Sat, 1 Aug 2015 05:48:03 +0000 Subject: [PATCH 0006/1445] Convertibility of nullptr_t to bool is available in clang. Note it. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@243827 91177308-0d34-0410-b5e6-96231b3b80d8 --- www/cxx_dr_status.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/www/cxx_dr_status.html b/www/cxx_dr_status.html index 0c5339176a6..562129626c0 100644 --- a/www/cxx_dr_status.html +++ b/www/cxx_dr_status.html @@ -8353,7 +8353,7 @@

C++ defect report implementation status

1423 CD3 Convertibility of nullptr to bool - Unknown + Yes 1424 From 133cbf204c5b6a927fca47a70e82dcd488c5f68f Mon Sep 17 00:00:00 2001 From: David Majnemer Date: Sat, 1 Aug 2015 05:51:55 +0000 Subject: [PATCH 0007/1445] [MS ABI] Create a mangling for extended vector types Extended vector types are mangled just like normal vector types. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@243828 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/AST/MicrosoftMangle.cpp | 10 +++------- test/CodeGenCXX/mangle-ms-vector-types.cpp | 4 ++++ 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/lib/AST/MicrosoftMangle.cpp b/lib/AST/MicrosoftMangle.cpp index 48a8fa541a6..5c2b68cd62a 100644 --- a/lib/AST/MicrosoftMangle.cpp +++ b/lib/AST/MicrosoftMangle.cpp @@ -2076,13 +2076,9 @@ void MicrosoftCXXNameMangler::mangleType(const VectorType *T, Qualifiers Quals, Out << "@@"; } -void MicrosoftCXXNameMangler::mangleType(const ExtVectorType *T, Qualifiers, - SourceRange Range) { - DiagnosticsEngine &Diags = Context.getDiags(); - unsigned DiagID = Diags.getCustomDiagID(DiagnosticsEngine::Error, - "cannot mangle this extended vector type yet"); - Diags.Report(Range.getBegin(), DiagID) - << Range; +void MicrosoftCXXNameMangler::mangleType(const ExtVectorType *T, + Qualifiers Quals, SourceRange Range) { + mangleType(static_cast(T), Quals, Range); } void MicrosoftCXXNameMangler::mangleType(const DependentSizedExtVectorType *T, Qualifiers, SourceRange Range) { diff --git a/test/CodeGenCXX/mangle-ms-vector-types.cpp b/test/CodeGenCXX/mangle-ms-vector-types.cpp index aca492918a1..5aca4551ceb 100644 --- a/test/CodeGenCXX/mangle-ms-vector-types.cpp +++ b/test/CodeGenCXX/mangle-ms-vector-types.cpp @@ -29,5 +29,9 @@ void foo256i(__m256i) {} void foov8hi(__v8hi) {} // CHECK: define void @"\01?foov8hi@@YAXT__clang_vec8_F@@@Z" +typedef __attribute__((ext_vector_type(4))) int vi4b; +void foovi4b(vi4b) {} +// CHECK: define void @"\01?foovi4b@@YAXT__clang_vec4_H@@@Z" + // Clang does not support vectors of complex types, so we can't test the // mangling of them. From 2abbec88f288baf3c2dc2c2f67a63f6cba3a41e7 Mon Sep 17 00:00:00 2001 From: Davide Italiano Date: Sat, 1 Aug 2015 10:13:39 +0000 Subject: [PATCH 0008/1445] [SemaExpr] Factor out common diagnostic code for remainder/division. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@243832 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Sema/SemaExpr.cpp | 34 ++++++++++++++++------------------ 1 file changed, 16 insertions(+), 18 deletions(-) diff --git a/lib/Sema/SemaExpr.cpp b/lib/Sema/SemaExpr.cpp index bf2de1bb54d..af4e4af5dfa 100644 --- a/lib/Sema/SemaExpr.cpp +++ b/lib/Sema/SemaExpr.cpp @@ -7417,6 +7417,19 @@ static void checkArithmeticNull(Sema &S, ExprResult &LHS, ExprResult &RHS, << LHS.get()->getSourceRange() << RHS.get()->getSourceRange(); } +static void DiagnoseBadDivideOrRemainderValues(Sema& S, ExprResult &LHS, + ExprResult &RHS, + SourceLocation Loc, bool IsDiv) { + // Check for division/remainder by zero. + unsigned Diag = (IsDiv) ? diag::warn_division_by_zero : + diag::warn_remainder_by_zero; + llvm::APSInt RHSValue; + if (!RHS.get()->isValueDependent() && + RHS.get()->EvaluateAsInt(RHSValue, S.Context) && RHSValue == 0) + S.DiagRuntimeBehavior(Loc, RHS.get(), + S.PDiag(Diag) << RHS.get()->getSourceRange()); +} + QualType Sema::CheckMultiplyDivideOperands(ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, bool IsCompAssign, bool IsDiv) { @@ -7435,15 +7448,8 @@ QualType Sema::CheckMultiplyDivideOperands(ExprResult &LHS, ExprResult &RHS, if (compType.isNull() || !compType->isArithmeticType()) return InvalidOperands(Loc, LHS, RHS); - - // Check for division by zero. - llvm::APSInt RHSValue; - if (IsDiv && !RHS.get()->isValueDependent() && - RHS.get()->EvaluateAsInt(RHSValue, Context) && RHSValue == 0) - DiagRuntimeBehavior(Loc, RHS.get(), - PDiag(diag::warn_division_by_zero) - << RHS.get()->getSourceRange()); - + if (IsDiv) + DiagnoseBadDivideOrRemainderValues(*this, LHS, RHS, Loc, IsDiv); return compType; } @@ -7467,15 +7473,7 @@ QualType Sema::CheckRemainderOperands( if (compType.isNull() || !compType->isIntegerType()) return InvalidOperands(Loc, LHS, RHS); - - // Check for remainder by zero. - llvm::APSInt RHSValue; - if (!RHS.get()->isValueDependent() && - RHS.get()->EvaluateAsInt(RHSValue, Context) && RHSValue == 0) - DiagRuntimeBehavior(Loc, RHS.get(), - PDiag(diag::warn_remainder_by_zero) - << RHS.get()->getSourceRange()); - + DiagnoseBadDivideOrRemainderValues(*this, LHS, RHS, Loc, false /* IsDiv */); return compType; } From 704d49d258840fca3577c99d3d7b647f3ad843a3 Mon Sep 17 00:00:00 2001 From: Davide Italiano Date: Sat, 1 Aug 2015 18:25:03 +0000 Subject: [PATCH 0009/1445] Revert r243827. Until I figure out what's the right way of updating this file. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@243840 91177308-0d34-0410-b5e6-96231b3b80d8 --- www/cxx_dr_status.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/www/cxx_dr_status.html b/www/cxx_dr_status.html index 562129626c0..0c5339176a6 100644 --- a/www/cxx_dr_status.html +++ b/www/cxx_dr_status.html @@ -8353,7 +8353,7 @@

C++ defect report implementation status

1423 CD3 Convertibility of nullptr to bool - Yes + Unknown 1424 From bc96e5803a81f0044a555f3766c351695050daf7 Mon Sep 17 00:00:00 2001 From: Yaron Keren Date: Sat, 1 Aug 2015 19:11:36 +0000 Subject: [PATCH 0010/1445] Rangify for loops, NFC. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@243841 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/CodeGen/BackendUtil.cpp | 4 ++-- lib/CodeGen/CGVTables.cpp | 4 ++-- lib/CodeGen/CodeGenAction.cpp | 3 +-- lib/CodeGen/ItaniumCXXABI.cpp | 6 +++--- 4 files changed, 8 insertions(+), 9 deletions(-) diff --git a/lib/CodeGen/BackendUtil.cpp b/lib/CodeGen/BackendUtil.cpp index 05b3ac4305a..7ee8e1fc8a2 100644 --- a/lib/CodeGen/BackendUtil.cpp +++ b/lib/CodeGen/BackendUtil.cpp @@ -458,8 +458,8 @@ TargetMachine *EmitAssemblyHelper::CreateTargetMachine(bool MustCreateTM) { BackendArgs.push_back("-limit-float-precision"); BackendArgs.push_back(CodeGenOpts.LimitFloatPrecision.c_str()); } - for (unsigned i = 0, e = CodeGenOpts.BackendOptions.size(); i != e; ++i) - BackendArgs.push_back(CodeGenOpts.BackendOptions[i].c_str()); + for (const std::string &BackendOption : CodeGenOpts.BackendOptions) + BackendArgs.push_back(BackendOption.c_str()); BackendArgs.push_back(nullptr); llvm::cl::ParseCommandLineOptions(BackendArgs.size() - 1, BackendArgs.data()); diff --git a/lib/CodeGen/CGVTables.cpp b/lib/CodeGen/CGVTables.cpp index 3f5c7a49c17..42cfd36e845 100644 --- a/lib/CodeGen/CGVTables.cpp +++ b/lib/CodeGen/CGVTables.cpp @@ -502,8 +502,8 @@ void CodeGenVTables::EmitThunks(GlobalDecl GD) if (!ThunkInfoVector) return; - for (unsigned I = 0, E = ThunkInfoVector->size(); I != E; ++I) - emitThunk(GD, (*ThunkInfoVector)[I], /*ForVTable=*/false); + for (const ThunkInfo& Thunk : *ThunkInfoVector) + emitThunk(GD, Thunk, /*ForVTable=*/false); } llvm::Constant *CodeGenVTables::CreateVTableInitializer( diff --git a/lib/CodeGen/CodeGenAction.cpp b/lib/CodeGen/CodeGenAction.cpp index 0e7b6d8a71d..8f5ee6fde0a 100644 --- a/lib/CodeGen/CodeGenAction.cpp +++ b/lib/CodeGen/CodeGenAction.cpp @@ -333,8 +333,7 @@ void BackendConsumer::InlineAsmDiagHandler2(const llvm::SMDiagnostic &D, DiagnosticBuilder B = Diags.Report(Loc, diag::note_fe_inline_asm_here); // Convert the SMDiagnostic ranges into SourceRange and attach them // to the diagnostic. - for (unsigned i = 0, e = D.getRanges().size(); i != e; ++i) { - std::pair Range = D.getRanges()[i]; + for (const std::pair &Range : D.getRanges()) { unsigned Column = D.getColumnNo(); B << SourceRange(Loc.getLocWithOffset(Range.first - Column), Loc.getLocWithOffset(Range.second - Column)); diff --git a/lib/CodeGen/ItaniumCXXABI.cpp b/lib/CodeGen/ItaniumCXXABI.cpp index 0b65088e619..cb506c32cba 100644 --- a/lib/CodeGen/ItaniumCXXABI.cpp +++ b/lib/CodeGen/ItaniumCXXABI.cpp @@ -2079,9 +2079,9 @@ void ItaniumCXXABI::EmitThreadLocalInitFuncs( CodeGenFunction(CGM) .GenerateCXXGlobalInitFunc(InitFunc, CXXThreadLocalInits, Guard); } - for (unsigned I = 0, N = CXXThreadLocals.size(); I != N; ++I) { - const VarDecl *VD = CXXThreadLocals[I].first; - llvm::GlobalVariable *Var = CXXThreadLocals[I].second; + for (auto &I : CXXThreadLocals) { + const VarDecl *VD = I.first; + llvm::GlobalVariable *Var = I.second; // Some targets require that all access to thread local variables go through // the thread wrapper. This means that we cannot attempt to create a thread From 36c8e634ccc8104a530f1c103930f1a5d02309b9 Mon Sep 17 00:00:00 2001 From: Asaf Badouh Date: Sun, 2 Aug 2015 12:43:08 +0000 Subject: [PATCH 0011/1445] [X86][AVX512VLDQ] add reduce/range/cvt intrinsics add 128 & 256 width intrinsic versions of reduce/range and cvt i64 to FP and vice versa Differential Revision: http://reviews.llvm.org/D11598 git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@243848 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/clang/Basic/BuiltinsX86.def | 33 ++ lib/Headers/avx512vldqintrin.h | 600 ++++++++++++++++++++++++++++ test/CodeGen/avx512vldq-builtins.c | 576 ++++++++++++++++++++++++++ 3 files changed, 1209 insertions(+) diff --git a/include/clang/Basic/BuiltinsX86.def b/include/clang/Basic/BuiltinsX86.def index 021f8fe2ef4..baafb4a089b 100644 --- a/include/clang/Basic/BuiltinsX86.def +++ b/include/clang/Basic/BuiltinsX86.def @@ -1417,5 +1417,38 @@ BUILTIN(__builtin_ia32_punpckhbw512_mask, "V64cV64cV64cV64cULLi", "") BUILTIN(__builtin_ia32_punpckhwd512_mask, "V32sV32sV32sV32sUi", "") BUILTIN(__builtin_ia32_punpcklbw512_mask, "V64cV64cV64cV64cULLi", "") BUILTIN(__builtin_ia32_punpcklwd512_mask, "V32sV32sV32sV32sUi", "") +BUILTIN(__builtin_ia32_cvtpd2qq128_mask, "V2LLiV2dV2LLiUc", "") +BUILTIN(__builtin_ia32_cvtpd2qq256_mask, "V4LLiV4dV4LLiUc", "") +BUILTIN(__builtin_ia32_cvtpd2uqq128_mask, "V2LLiV2dV2LLiUc", "") +BUILTIN(__builtin_ia32_cvtpd2uqq256_mask, "V4LLiV4dV4LLiUc", "") +BUILTIN(__builtin_ia32_cvtps2qq128_mask, "V2LLiV4fV2LLiUc", "") +BUILTIN(__builtin_ia32_cvtps2qq256_mask, "V4LLiV4fV4LLiUc", "") +BUILTIN(__builtin_ia32_cvtps2uqq128_mask, "V2LLiV4fV2LLiUc", "") +BUILTIN(__builtin_ia32_cvtps2uqq256_mask, "V4LLiV4fV4LLiUc", "") +BUILTIN(__builtin_ia32_cvtqq2pd128_mask, "V2dV2LLiV2dUc", "") +BUILTIN(__builtin_ia32_cvtqq2pd256_mask, "V4dV4LLiV4dUc", "") +BUILTIN(__builtin_ia32_cvtqq2ps128_mask, "V4fV2LLiV4fUc", "") +BUILTIN(__builtin_ia32_cvtqq2ps256_mask, "V4fV4LLiV4fUc", "") +BUILTIN(__builtin_ia32_cvttpd2qq128_mask, "V2LLiV2dV2LLiUc", "") +BUILTIN(__builtin_ia32_cvttpd2qq256_mask, "V4LLiV4dV4LLiUc", "") +BUILTIN(__builtin_ia32_cvttpd2uqq128_mask, "V2LLiV2dV2LLiUc", "") +BUILTIN(__builtin_ia32_cvttpd2uqq256_mask, "V4LLiV4dV4LLiUc", "") +BUILTIN(__builtin_ia32_cvttps2qq128_mask, "V2LLiV4fV2LLiUc", "") +BUILTIN(__builtin_ia32_cvttps2qq256_mask, "V4LLiV4fV4LLiUc", "") +BUILTIN(__builtin_ia32_cvttps2uqq128_mask, "V2LLiV4fV2LLiUc", "") +BUILTIN(__builtin_ia32_cvttps2uqq256_mask, "V4LLiV4fV4LLiUc", "") +BUILTIN(__builtin_ia32_cvtuqq2pd128_mask, "V2dV2LLiV2dUc", "") +BUILTIN(__builtin_ia32_cvtuqq2pd256_mask, "V4dV4LLiV4dUc", "") +BUILTIN(__builtin_ia32_cvtuqq2ps128_mask, "V4fV2LLiV4fUc", "") +BUILTIN(__builtin_ia32_cvtuqq2ps256_mask, "V4fV4LLiV4fUc", "") +BUILTIN(__builtin_ia32_rangepd128_mask, "V2dV2dV2dIiV2dUc", "") +BUILTIN(__builtin_ia32_rangepd256_mask, "V4dV4dV4dIiV4dUc", "") +BUILTIN(__builtin_ia32_rangeps128_mask, "V4fV4fV4fIiV4fUc", "") +BUILTIN(__builtin_ia32_rangeps256_mask, "V8fV8fV8fIiV8fUc", "") +BUILTIN(__builtin_ia32_reducepd128_mask, "V2dV2dIiV2dUc", "") +BUILTIN(__builtin_ia32_reducepd256_mask, "V4dV4dIiV4dUc", "") +BUILTIN(__builtin_ia32_reduceps128_mask, "V4fV4fIiV4fUc", "") +BUILTIN(__builtin_ia32_reduceps256_mask, "V8fV8fIiV8fUc", "") + #undef BUILTIN diff --git a/lib/Headers/avx512vldqintrin.h b/lib/Headers/avx512vldqintrin.h index 032070bfb90..daaf19130bb 100644 --- a/lib/Headers/avx512vldqintrin.h +++ b/lib/Headers/avx512vldqintrin.h @@ -348,6 +348,606 @@ _mm_maskz_or_ps (__mmask8 __U, __m128 __A, __m128 __B) { (__mmask8) __U); } +static __inline__ __m128i __DEFAULT_FN_ATTRS +_mm_cvtpd_epi64 (__m128d __A) { + return (__m128i) __builtin_ia32_cvtpd2qq128_mask ((__v2df) __A, + (__v2di) _mm_setzero_si128(), + (__mmask8) -1); +} + +static __inline__ __m128i __DEFAULT_FN_ATTRS +_mm_mask_cvtpd_epi64 (__m128i __W, __mmask8 __U, __m128d __A) { + return (__m128i) __builtin_ia32_cvtpd2qq128_mask ((__v2df) __A, + (__v2di) __W, + (__mmask8) __U); +} + +static __inline__ __m128i __DEFAULT_FN_ATTRS +_mm_maskz_cvtpd_epi64 (__mmask8 __U, __m128d __A) { + return (__m128i) __builtin_ia32_cvtpd2qq128_mask ((__v2df) __A, + (__v2di) _mm_setzero_si128(), + (__mmask8) __U); +} + +static __inline__ __m256i __DEFAULT_FN_ATTRS +_mm256_cvtpd_epi64 (__m256d __A) { + return (__m256i) __builtin_ia32_cvtpd2qq256_mask ((__v4df) __A, + (__v4di) _mm256_setzero_si256(), + (__mmask8) -1); +} + +static __inline__ __m256i __DEFAULT_FN_ATTRS +_mm256_mask_cvtpd_epi64 (__m256i __W, __mmask8 __U, __m256d __A) { + return (__m256i) __builtin_ia32_cvtpd2qq256_mask ((__v4df) __A, + (__v4di) __W, + (__mmask8) __U); +} + +static __inline__ __m256i __DEFAULT_FN_ATTRS +_mm256_maskz_cvtpd_epi64 (__mmask8 __U, __m256d __A) { + return (__m256i) __builtin_ia32_cvtpd2qq256_mask ((__v4df) __A, + (__v4di) _mm256_setzero_si256(), + (__mmask8) __U); +} + +static __inline__ __m128i __DEFAULT_FN_ATTRS +_mm_cvtpd_epu64 (__m128d __A) { + return (__m128i) __builtin_ia32_cvtpd2uqq128_mask ((__v2df) __A, + (__v2di) _mm_setzero_si128(), + (__mmask8) -1); +} + +static __inline__ __m128i __DEFAULT_FN_ATTRS +_mm_mask_cvtpd_epu64 (__m128i __W, __mmask8 __U, __m128d __A) { + return (__m128i) __builtin_ia32_cvtpd2uqq128_mask ((__v2df) __A, + (__v2di) __W, + (__mmask8) __U); +} + +static __inline__ __m128i __DEFAULT_FN_ATTRS +_mm_maskz_cvtpd_epu64 (__mmask8 __U, __m128d __A) { + return (__m128i) __builtin_ia32_cvtpd2uqq128_mask ((__v2df) __A, + (__v2di) _mm_setzero_si128(), + (__mmask8) __U); +} + +static __inline__ __m256i __DEFAULT_FN_ATTRS +_mm256_cvtpd_epu64 (__m256d __A) { + return (__m256i) __builtin_ia32_cvtpd2uqq256_mask ((__v4df) __A, + (__v4di) _mm256_setzero_si256(), + (__mmask8) -1); +} + +static __inline__ __m256i __DEFAULT_FN_ATTRS +_mm256_mask_cvtpd_epu64 (__m256i __W, __mmask8 __U, __m256d __A) { + return (__m256i) __builtin_ia32_cvtpd2uqq256_mask ((__v4df) __A, + (__v4di) __W, + (__mmask8) __U); +} + +static __inline__ __m256i __DEFAULT_FN_ATTRS +_mm256_maskz_cvtpd_epu64 (__mmask8 __U, __m256d __A) { + return (__m256i) __builtin_ia32_cvtpd2uqq256_mask ((__v4df) __A, + (__v4di) _mm256_setzero_si256(), + (__mmask8) __U); +} + +static __inline__ __m128i __DEFAULT_FN_ATTRS +_mm_cvtps_epi64 (__m128 __A) { + return (__m128i) __builtin_ia32_cvtps2qq128_mask ((__v4sf) __A, + (__v2di) _mm_setzero_si128(), + (__mmask8) -1); +} + +static __inline__ __m128i __DEFAULT_FN_ATTRS +_mm_mask_cvtps_epi64 (__m128i __W, __mmask8 __U, __m128 __A) { + return (__m128i) __builtin_ia32_cvtps2qq128_mask ((__v4sf) __A, + (__v2di) __W, + (__mmask8) __U); +} + +static __inline__ __m128i __DEFAULT_FN_ATTRS +_mm_maskz_cvtps_epi64 (__mmask8 __U, __m128 __A) { + return (__m128i) __builtin_ia32_cvtps2qq128_mask ((__v4sf) __A, + (__v2di) _mm_setzero_si128(), + (__mmask8) __U); +} + +static __inline__ __m256i __DEFAULT_FN_ATTRS +_mm256_cvtps_epi64 (__m128 __A) { + return (__m256i) __builtin_ia32_cvtps2qq256_mask ((__v4sf) __A, + (__v4di) _mm256_setzero_si256(), + (__mmask8) -1); +} + +static __inline__ __m256i __DEFAULT_FN_ATTRS +_mm256_mask_cvtps_epi64 (__m256i __W, __mmask8 __U, __m128 __A) { + return (__m256i) __builtin_ia32_cvtps2qq256_mask ((__v4sf) __A, + (__v4di) __W, + (__mmask8) __U); +} + +static __inline__ __m256i __DEFAULT_FN_ATTRS +_mm256_maskz_cvtps_epi64 (__mmask8 __U, __m128 __A) { + return (__m256i) __builtin_ia32_cvtps2qq256_mask ((__v4sf) __A, + (__v4di) _mm256_setzero_si256(), + (__mmask8) __U); +} + +static __inline__ __m128i __DEFAULT_FN_ATTRS +_mm_cvtps_epu64 (__m128 __A) { + return (__m128i) __builtin_ia32_cvtps2uqq128_mask ((__v4sf) __A, + (__v2di) _mm_setzero_si128(), + (__mmask8) -1); +} + +static __inline__ __m128i __DEFAULT_FN_ATTRS +_mm_mask_cvtps_epu64 (__m128i __W, __mmask8 __U, __m128 __A) { + return (__m128i) __builtin_ia32_cvtps2uqq128_mask ((__v4sf) __A, + (__v2di) __W, + (__mmask8) __U); +} + +static __inline__ __m128i __DEFAULT_FN_ATTRS +_mm_maskz_cvtps_epu64 (__mmask8 __U, __m128 __A) { + return (__m128i) __builtin_ia32_cvtps2uqq128_mask ((__v4sf) __A, + (__v2di) _mm_setzero_si128(), + (__mmask8) __U); +} + +static __inline__ __m256i __DEFAULT_FN_ATTRS +_mm256_cvtps_epu64 (__m128 __A) { + return (__m256i) __builtin_ia32_cvtps2uqq256_mask ((__v4sf) __A, + (__v4di) _mm256_setzero_si256(), + (__mmask8) -1); +} + +static __inline__ __m256i __DEFAULT_FN_ATTRS +_mm256_mask_cvtps_epu64 (__m256i __W, __mmask8 __U, __m128 __A) { + return (__m256i) __builtin_ia32_cvtps2uqq256_mask ((__v4sf) __A, + (__v4di) __W, + (__mmask8) __U); +} + +static __inline__ __m256i __DEFAULT_FN_ATTRS +_mm256_maskz_cvtps_epu64 (__mmask8 __U, __m128 __A) { + return (__m256i) __builtin_ia32_cvtps2uqq256_mask ((__v4sf) __A, + (__v4di) _mm256_setzero_si256(), + (__mmask8) __U); +} + +static __inline__ __m128d __DEFAULT_FN_ATTRS +_mm_cvtepi64_pd (__m128i __A) { + return (__m128d) __builtin_ia32_cvtqq2pd128_mask ((__v2di) __A, + (__v2df) _mm_setzero_pd(), + (__mmask8) -1); +} + +static __inline__ __m128d __DEFAULT_FN_ATTRS +_mm_mask_cvtepi64_pd (__m128d __W, __mmask8 __U, __m128i __A) { + return (__m128d) __builtin_ia32_cvtqq2pd128_mask ((__v2di) __A, + (__v2df) __W, + (__mmask8) __U); +} + +static __inline__ __m128d __DEFAULT_FN_ATTRS +_mm_maskz_cvtepi64_pd (__mmask8 __U, __m128i __A) { + return (__m128d) __builtin_ia32_cvtqq2pd128_mask ((__v2di) __A, + (__v2df) _mm_setzero_pd(), + (__mmask8) __U); +} + +static __inline__ __m256d __DEFAULT_FN_ATTRS +_mm256_cvtepi64_pd (__m256i __A) { + return (__m256d) __builtin_ia32_cvtqq2pd256_mask ((__v4di) __A, + (__v4df) _mm256_setzero_pd(), + (__mmask8) -1); +} + +static __inline__ __m256d __DEFAULT_FN_ATTRS +_mm256_mask_cvtepi64_pd (__m256d __W, __mmask8 __U, __m256i __A) { + return (__m256d) __builtin_ia32_cvtqq2pd256_mask ((__v4di) __A, + (__v4df) __W, + (__mmask8) __U); +} + +static __inline__ __m256d __DEFAULT_FN_ATTRS +_mm256_maskz_cvtepi64_pd (__mmask8 __U, __m256i __A) { + return (__m256d) __builtin_ia32_cvtqq2pd256_mask ((__v4di) __A, + (__v4df) _mm256_setzero_pd(), + (__mmask8) __U); +} + +static __inline__ __m128 __DEFAULT_FN_ATTRS +_mm_cvtepi64_ps (__m128i __A) { + return (__m128) __builtin_ia32_cvtqq2ps128_mask ((__v2di) __A, + (__v4sf) _mm_setzero_ps(), + (__mmask8) -1); +} + +static __inline__ __m128 __DEFAULT_FN_ATTRS +_mm_mask_cvtepi64_ps (__m128 __W, __mmask8 __U, __m128i __A) { + return (__m128) __builtin_ia32_cvtqq2ps128_mask ((__v2di) __A, + (__v4sf) __W, + (__mmask8) __U); +} + +static __inline__ __m128 __DEFAULT_FN_ATTRS +_mm_maskz_cvtepi64_ps (__mmask8 __U, __m128i __A) { + return (__m128) __builtin_ia32_cvtqq2ps128_mask ((__v2di) __A, + (__v4sf) _mm_setzero_ps(), + (__mmask8) __U); +} + +static __inline__ __m128 __DEFAULT_FN_ATTRS +_mm256_cvtepi64_ps (__m256i __A) { + return (__m128) __builtin_ia32_cvtqq2ps256_mask ((__v4di) __A, + (__v4sf) _mm_setzero_ps(), + (__mmask8) -1); +} + +static __inline__ __m128 __DEFAULT_FN_ATTRS +_mm256_mask_cvtepi64_ps (__m128 __W, __mmask8 __U, __m256i __A) { + return (__m128) __builtin_ia32_cvtqq2ps256_mask ((__v4di) __A, + (__v4sf) __W, + (__mmask8) __U); +} + +static __inline__ __m128 __DEFAULT_FN_ATTRS +_mm256_maskz_cvtepi64_ps (__mmask8 __U, __m256i __A) { + return (__m128) __builtin_ia32_cvtqq2ps256_mask ((__v4di) __A, + (__v4sf) _mm_setzero_ps(), + (__mmask8) __U); +} + +static __inline__ __m128i __DEFAULT_FN_ATTRS +_mm_cvttpd_epi64 (__m128d __A) { + return (__m128i) __builtin_ia32_cvttpd2qq128_mask ((__v2df) __A, + (__v2di) _mm_setzero_si128(), + (__mmask8) -1); +} + +static __inline__ __m128i __DEFAULT_FN_ATTRS +_mm_mask_cvttpd_epi64 (__m128i __W, __mmask8 __U, __m128d __A) { + return (__m128i) __builtin_ia32_cvttpd2qq128_mask ((__v2df) __A, + (__v2di) __W, + (__mmask8) __U); +} + +static __inline__ __m128i __DEFAULT_FN_ATTRS +_mm_maskz_cvttpd_epi64 (__mmask8 __U, __m128d __A) { + return (__m128i) __builtin_ia32_cvttpd2qq128_mask ((__v2df) __A, + (__v2di) _mm_setzero_si128(), + (__mmask8) __U); +} + +static __inline__ __m256i __DEFAULT_FN_ATTRS +_mm256_cvttpd_epi64 (__m256d __A) { + return (__m256i) __builtin_ia32_cvttpd2qq256_mask ((__v4df) __A, + (__v4di) _mm256_setzero_si256(), + (__mmask8) -1); +} + +static __inline__ __m256i __DEFAULT_FN_ATTRS +_mm256_mask_cvttpd_epi64 (__m256i __W, __mmask8 __U, __m256d __A) { + return (__m256i) __builtin_ia32_cvttpd2qq256_mask ((__v4df) __A, + (__v4di) __W, + (__mmask8) __U); +} + +static __inline__ __m256i __DEFAULT_FN_ATTRS +_mm256_maskz_cvttpd_epi64 (__mmask8 __U, __m256d __A) { + return (__m256i) __builtin_ia32_cvttpd2qq256_mask ((__v4df) __A, + (__v4di) _mm256_setzero_si256(), + (__mmask8) __U); +} + +static __inline__ __m128i __DEFAULT_FN_ATTRS +_mm_cvttpd_epu64 (__m128d __A) { + return (__m128i) __builtin_ia32_cvttpd2uqq128_mask ((__v2df) __A, + (__v2di) _mm_setzero_si128(), + (__mmask8) -1); +} + +static __inline__ __m128i __DEFAULT_FN_ATTRS +_mm_mask_cvttpd_epu64 (__m128i __W, __mmask8 __U, __m128d __A) { + return (__m128i) __builtin_ia32_cvttpd2uqq128_mask ((__v2df) __A, + (__v2di) __W, + (__mmask8) __U); +} + +static __inline__ __m128i __DEFAULT_FN_ATTRS +_mm_maskz_cvttpd_epu64 (__mmask8 __U, __m128d __A) { + return (__m128i) __builtin_ia32_cvttpd2uqq128_mask ((__v2df) __A, + (__v2di) _mm_setzero_si128(), + (__mmask8) __U); +} + +static __inline__ __m256i __DEFAULT_FN_ATTRS +_mm256_cvttpd_epu64 (__m256d __A) { + return (__m256i) __builtin_ia32_cvttpd2uqq256_mask ((__v4df) __A, + (__v4di) _mm256_setzero_si256(), + (__mmask8) -1); +} + +static __inline__ __m256i __DEFAULT_FN_ATTRS +_mm256_mask_cvttpd_epu64 (__m256i __W, __mmask8 __U, __m256d __A) { + return (__m256i) __builtin_ia32_cvttpd2uqq256_mask ((__v4df) __A, + (__v4di) __W, + (__mmask8) __U); +} + +static __inline__ __m256i __DEFAULT_FN_ATTRS +_mm256_maskz_cvttpd_epu64 (__mmask8 __U, __m256d __A) { + return (__m256i) __builtin_ia32_cvttpd2uqq256_mask ((__v4df) __A, + (__v4di) _mm256_setzero_si256(), + (__mmask8) __U); +} + +static __inline__ __m128i __DEFAULT_FN_ATTRS +_mm_cvttps_epi64 (__m128 __A) { + return (__m128i) __builtin_ia32_cvttps2qq128_mask ((__v4sf) __A, + (__v2di) _mm_setzero_si128(), + (__mmask8) -1); +} + +static __inline__ __m128i __DEFAULT_FN_ATTRS +_mm_mask_cvttps_epi64 (__m128i __W, __mmask8 __U, __m128 __A) { + return (__m128i) __builtin_ia32_cvttps2qq128_mask ((__v4sf) __A, + (__v2di) __W, + (__mmask8) __U); +} + +static __inline__ __m128i __DEFAULT_FN_ATTRS +_mm_maskz_cvttps_epi64 (__mmask8 __U, __m128 __A) { + return (__m128i) __builtin_ia32_cvttps2qq128_mask ((__v4sf) __A, + (__v2di) _mm_setzero_si128(), + (__mmask8) __U); +} + +static __inline__ __m256i __DEFAULT_FN_ATTRS +_mm256_cvttps_epi64 (__m128 __A) { + return (__m256i) __builtin_ia32_cvttps2qq256_mask ((__v4sf) __A, + (__v4di) _mm256_setzero_si256(), + (__mmask8) -1); +} + +static __inline__ __m256i __DEFAULT_FN_ATTRS +_mm256_mask_cvttps_epi64 (__m256i __W, __mmask8 __U, __m128 __A) { + return (__m256i) __builtin_ia32_cvttps2qq256_mask ((__v4sf) __A, + (__v4di) __W, + (__mmask8) __U); +} + +static __inline__ __m256i __DEFAULT_FN_ATTRS +_mm256_maskz_cvttps_epi64 (__mmask8 __U, __m128 __A) { + return (__m256i) __builtin_ia32_cvttps2qq256_mask ((__v4sf) __A, + (__v4di) _mm256_setzero_si256(), + (__mmask8) __U); +} + +static __inline__ __m128i __DEFAULT_FN_ATTRS +_mm_cvttps_epu64 (__m128 __A) { + return (__m128i) __builtin_ia32_cvttps2uqq128_mask ((__v4sf) __A, + (__v2di) _mm_setzero_si128(), + (__mmask8) -1); +} + +static __inline__ __m128i __DEFAULT_FN_ATTRS +_mm_mask_cvttps_epu64 (__m128i __W, __mmask8 __U, __m128 __A) { + return (__m128i) __builtin_ia32_cvttps2uqq128_mask ((__v4sf) __A, + (__v2di) __W, + (__mmask8) __U); +} + +static __inline__ __m128i __DEFAULT_FN_ATTRS +_mm_maskz_cvttps_epu64 (__mmask8 __U, __m128 __A) { + return (__m128i) __builtin_ia32_cvttps2uqq128_mask ((__v4sf) __A, + (__v2di) _mm_setzero_si128(), + (__mmask8) __U); +} + +static __inline__ __m256i __DEFAULT_FN_ATTRS +_mm256_cvttps_epu64 (__m128 __A) { + return (__m256i) __builtin_ia32_cvttps2uqq256_mask ((__v4sf) __A, + (__v4di) _mm256_setzero_si256(), + (__mmask8) -1); +} + +static __inline__ __m256i __DEFAULT_FN_ATTRS +_mm256_mask_cvttps_epu64 (__m256i __W, __mmask8 __U, __m128 __A) { + return (__m256i) __builtin_ia32_cvttps2uqq256_mask ((__v4sf) __A, + (__v4di) __W, + (__mmask8) __U); +} + +static __inline__ __m256i __DEFAULT_FN_ATTRS +_mm256_maskz_cvttps_epu64 (__mmask8 __U, __m128 __A) { + return (__m256i) __builtin_ia32_cvttps2uqq256_mask ((__v4sf) __A, + (__v4di) _mm256_setzero_si256(), + (__mmask8) __U); +} + +static __inline__ __m128d __DEFAULT_FN_ATTRS +_mm_cvtepu64_pd (__m128i __A) { + return (__m128d) __builtin_ia32_cvtuqq2pd128_mask ((__v2di) __A, + (__v2df) _mm_setzero_pd(), + (__mmask8) -1); +} + +static __inline__ __m128d __DEFAULT_FN_ATTRS +_mm_mask_cvtepu64_pd (__m128d __W, __mmask8 __U, __m128i __A) { + return (__m128d) __builtin_ia32_cvtuqq2pd128_mask ((__v2di) __A, + (__v2df) __W, + (__mmask8) __U); +} + +static __inline__ __m128d __DEFAULT_FN_ATTRS +_mm_maskz_cvtepu64_pd (__mmask8 __U, __m128i __A) { + return (__m128d) __builtin_ia32_cvtuqq2pd128_mask ((__v2di) __A, + (__v2df) _mm_setzero_pd(), + (__mmask8) __U); +} + +static __inline__ __m256d __DEFAULT_FN_ATTRS +_mm256_cvtepu64_pd (__m256i __A) { + return (__m256d) __builtin_ia32_cvtuqq2pd256_mask ((__v4di) __A, + (__v4df) _mm256_setzero_pd(), + (__mmask8) -1); +} + +static __inline__ __m256d __DEFAULT_FN_ATTRS +_mm256_mask_cvtepu64_pd (__m256d __W, __mmask8 __U, __m256i __A) { + return (__m256d) __builtin_ia32_cvtuqq2pd256_mask ((__v4di) __A, + (__v4df) __W, + (__mmask8) __U); +} + +static __inline__ __m256d __DEFAULT_FN_ATTRS +_mm256_maskz_cvtepu64_pd (__mmask8 __U, __m256i __A) { + return (__m256d) __builtin_ia32_cvtuqq2pd256_mask ((__v4di) __A, + (__v4df) _mm256_setzero_pd(), + (__mmask8) __U); +} + +static __inline__ __m128 __DEFAULT_FN_ATTRS +_mm_cvtepu64_ps (__m128i __A) { + return (__m128) __builtin_ia32_cvtuqq2ps128_mask ((__v2di) __A, + (__v4sf) _mm_setzero_ps(), + (__mmask8) -1); +} + +static __inline__ __m128 __DEFAULT_FN_ATTRS +_mm_mask_cvtepu64_ps (__m128 __W, __mmask8 __U, __m128i __A) { + return (__m128) __builtin_ia32_cvtuqq2ps128_mask ((__v2di) __A, + (__v4sf) __W, + (__mmask8) __U); +} + +static __inline__ __m128 __DEFAULT_FN_ATTRS +_mm_maskz_cvtepu64_ps (__mmask8 __U, __m128i __A) { + return (__m128) __builtin_ia32_cvtuqq2ps128_mask ((__v2di) __A, + (__v4sf) _mm_setzero_ps(), + (__mmask8) __U); +} + +static __inline__ __m128 __DEFAULT_FN_ATTRS +_mm256_cvtepu64_ps (__m256i __A) { + return (__m128) __builtin_ia32_cvtuqq2ps256_mask ((__v4di) __A, + (__v4sf) _mm_setzero_ps(), + (__mmask8) -1); +} + +static __inline__ __m128 __DEFAULT_FN_ATTRS +_mm256_mask_cvtepu64_ps (__m128 __W, __mmask8 __U, __m256i __A) { + return (__m128) __builtin_ia32_cvtuqq2ps256_mask ((__v4di) __A, + (__v4sf) __W, + (__mmask8) __U); +} + +static __inline__ __m128 __DEFAULT_FN_ATTRS +_mm256_maskz_cvtepu64_ps (__mmask8 __U, __m256i __A) { + return (__m128) __builtin_ia32_cvtuqq2ps256_mask ((__v4di) __A, + (__v4sf) _mm_setzero_ps(), + (__mmask8) __U); +} + +#define _mm_range_pd(__A, __B, __C) __extension__ ({ \ + (__m128d) __builtin_ia32_rangepd128_mask ((__v2df) __A, (__v2df) __B, __C, \ + (__v2df) _mm_setzero_pd(), (__mmask8) -1); }) + +#define _mm_mask_range_pd(__W, __U, __A, __B, __C) __extension__ ({ \ + (__m128d) __builtin_ia32_rangepd128_mask ((__v2df) __A, (__v2df) __B, __C, \ + (__v2df) __W, (__mmask8) __U); }) + +#define _mm_maskz_range_pd(__U, __A, __B, __C) __extension__ ({ \ + (__m128d) __builtin_ia32_rangepd128_mask ((__v2df) __A, (__v2df) __B, __C, \ + (__v2df) _mm_setzero_pd(), (__mmask8) __U); }) + +#define _mm256_range_pd(__A, __B, __C) __extension__ ({ \ + (__m256d) __builtin_ia32_rangepd256_mask ((__v4df) __A, (__v4df) __B, __C, \ + (__v4df) _mm256_setzero_pd(), (__mmask8) -1); }) + +#define _mm256_mask_range_pd(__W, __U, __A, __B, __C) __extension__ ({ \ + (__m256d) __builtin_ia32_rangepd256_mask ((__v4df) __A, (__v4df) __B, __C, \ + (__v4df) __W, (__mmask8) __U); }) + +#define _mm256_maskz_range_pd(__U, __A, __B, __C) __extension__ ({ \ + (__m256d) __builtin_ia32_rangepd256_mask ((__v4df) __A, (__v4df) __B, __C, \ + (__v4df) _mm256_setzero_pd(), (__mmask8) __U); }) + +#define _mm_range_ps(__A, __B, __C) __extension__ ({ \ + (__m128) __builtin_ia32_rangeps128_mask ((__v4sf) __A, (__v4sf) __B, __C, \ + (__v4sf) _mm_setzero_ps(), (__mmask8) -1); }) + +#define _mm_mask_range_ps(__W, __U, __A, __B, __C) __extension__ ({ \ + (__m128) __builtin_ia32_rangeps128_mask ((__v4sf) __A, (__v4sf) __B, __C, \ + (__v4sf) __W, (__mmask8) __U); }) + +#define _mm_maskz_range_ps(__U, __A, __B, __C) __extension__ ({ \ + (__m128) __builtin_ia32_rangeps128_mask ((__v4sf) __A, (__v4sf) __B, __C, \ + (__v4sf) _mm_setzero_ps(), (__mmask8) __U); }) + +#define _mm256_range_ps(__A, __B, __C) __extension__ ({ \ + (__m256) __builtin_ia32_rangeps256_mask ((__v8sf) __A, (__v8sf) __B, __C, \ + (__v8sf) _mm256_setzero_ps(), (__mmask8) -1); }) + +#define _mm256_mask_range_ps(__W, __U, __A, __B, __C) __extension__ ({ \ + (__m256) __builtin_ia32_rangeps256_mask ((__v8sf) __A, (__v8sf) __B, __C, \ + (__v8sf) __W, (__mmask8) __U); }) + +#define _mm256_maskz_range_ps(__U, __A, __B, __C) __extension__ ({ \ + (__m256) __builtin_ia32_rangeps256_mask ((__v8sf) __A, (__v8sf) __B, __C, \ + (__v8sf) _mm256_setzero_ps(), (__mmask8) __U); }) + +#define _mm_reduce_pd(__A, __B) __extension__ ({ \ + (__m128d) __builtin_ia32_reducepd128_mask ((__v2df) __A, __B, \ + (__v2df) _mm_setzero_pd(), (__mmask8) -1); }) + +#define _mm_mask_reduce_pd(__W, __U, __A, __B) __extension__ ({ \ + (__m128d) __builtin_ia32_reducepd128_mask ((__v2df) __A, __B, \ + (__v2df) __W, (__mmask8) __U); }) + +#define _mm_maskz_reduce_pd(__U, __A, __B) __extension__ ({ \ + (__m128d) __builtin_ia32_reducepd128_mask ((__v2df) __A, __B, \ + (__v2df) _mm_setzero_pd(), (__mmask8) __U); }) + +#define _mm256_reduce_pd(__A, __B) __extension__ ({ \ + (__m256d) __builtin_ia32_reducepd256_mask ((__v4df) __A, __B, \ + (__v4df) _mm256_setzero_pd(), (__mmask8) -1); }) + +#define _mm256_mask_reduce_pd(__W, __U, __A, __B) __extension__ ({ \ + (__m256d) __builtin_ia32_reducepd256_mask ((__v4df) __A, __B, \ + (__v4df) __W, (__mmask8) __U); }) + +#define _mm256_maskz_reduce_pd(__U, __A, __B) __extension__ ({ \ + (__m256d) __builtin_ia32_reducepd256_mask ((__v4df) __A, __B, \ + (__v4df) _mm256_setzero_pd(), (__mmask8) __U); }) + +#define _mm_reduce_ps(__A, __B) __extension__ ({ \ + (__m128) __builtin_ia32_reduceps128_mask ((__v4sf) __A, __B, \ + (__v4sf) _mm_setzero_ps(), (__mmask8) -1); }) + +#define _mm_mask_reduce_ps(__W, __U, __A, __B) __extension__ ({ \ + (__m128) __builtin_ia32_reduceps128_mask ((__v4sf) __A, __B, \ + (__v4sf) __W, (__mmask8) __U); }) + +#define _mm_maskz_reduce_ps(__U, __A, __B) __extension__ ({ \ + (__m128) __builtin_ia32_reduceps128_mask ((__v4sf) __A, __B, \ + (__v4sf) _mm_setzero_ps(), (__mmask8) __U); }) + +#define _mm256_reduce_ps(__A, __B) __extension__ ({ \ + (__m256) __builtin_ia32_reduceps256_mask ((__v8sf) __A, __B, \ + (__v8sf) _mm256_setzero_ps(), (__mmask8) -1); }) + +#define _mm256_mask_reduce_ps(__W, __U, __A, __B) __extension__ ({ \ + (__m256) __builtin_ia32_reduceps256_mask ((__v8sf) __A, __B, \ + (__v8sf) __W, (__mmask8) __U); }) + +#define _mm256_maskz_reduce_ps(__U, __A, __B) __extension__ ({ \ + (__m256) __builtin_ia32_reduceps256_mask ((__v8sf) __A, __B, \ + (__v8sf) _mm256_setzero_ps(), (__mmask8) __U); }) + #undef __DEFAULT_FN_ATTRS #endif diff --git a/test/CodeGen/avx512vldq-builtins.c b/test/CodeGen/avx512vldq-builtins.c index a9b6dbfa6fc..582f30be4d8 100644 --- a/test/CodeGen/avx512vldq-builtins.c +++ b/test/CodeGen/avx512vldq-builtins.c @@ -229,3 +229,579 @@ __m128 test_mm_maskz_or_ps (__mmask8 __U, __m128 __A, __m128 __B) { // CHECK: @llvm.x86.avx512.mask.or.ps.128 return (__m128) _mm_maskz_or_ps(__U, __A, __B); } + +__m128i test_mm_cvtpd_epi64(__m128d __A) { + // 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: @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: @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: @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: @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: @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: @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: @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: @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: @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: @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: @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: @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: @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: @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: @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: @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: @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: @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: @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: @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: @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: @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: @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: @llvm.x86.avx512.mask.cvtqq2pd.128 + 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: @llvm.x86.avx512.mask.cvtqq2pd.128 + 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: @llvm.x86.avx512.mask.cvtqq2pd.128 + return _mm_maskz_cvtepi64_pd(__U, __A); +} + +__m256d test_mm256_cvtepi64_pd(__m256i __A) { + // CHECK-LABEL: @test_mm256_cvtepi64_pd + // CHECK: @llvm.x86.avx512.mask.cvtqq2pd.256 + 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: @llvm.x86.avx512.mask.cvtqq2pd.256 + 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: @llvm.x86.avx512.mask.cvtqq2pd.256 + return _mm256_maskz_cvtepi64_pd(__U, __A); +} + +__m128 test_mm_cvtepi64_ps(__m128i __A) { + // 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: @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: @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: @llvm.x86.avx512.mask.cvtqq2ps.256 + 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: @llvm.x86.avx512.mask.cvtqq2ps.256 + 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: @llvm.x86.avx512.mask.cvtqq2ps.256 + return _mm256_maskz_cvtepi64_ps(__U, __A); +} + +__m128i test_mm_cvttpd_epi64(__m128d __A) { + // 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: @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: @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: @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: @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: @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: @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: @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: @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: @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: @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: @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: @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: @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: @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: @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: @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: @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: @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: @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: @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: @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: @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: @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: @llvm.x86.avx512.mask.cvtuqq2pd.128 + 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: @llvm.x86.avx512.mask.cvtuqq2pd.128 + 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: @llvm.x86.avx512.mask.cvtuqq2pd.128 + return _mm_maskz_cvtepu64_pd(__U, __A); +} + +__m256d test_mm256_cvtepu64_pd(__m256i __A) { + // CHECK-LABEL: @test_mm256_cvtepu64_pd + // CHECK: @llvm.x86.avx512.mask.cvtuqq2pd.256 + 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: @llvm.x86.avx512.mask.cvtuqq2pd.256 + 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: @llvm.x86.avx512.mask.cvtuqq2pd.256 + return _mm256_maskz_cvtepu64_pd(__U, __A); +} + +__m128 test_mm_cvtepu64_ps(__m128i __A) { + // 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: @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: @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: @llvm.x86.avx512.mask.cvtuqq2ps.256 + 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: @llvm.x86.avx512.mask.cvtuqq2ps.256 + 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: @llvm.x86.avx512.mask.cvtuqq2ps.256 + return _mm256_maskz_cvtepu64_ps(__U, __A); +} + +__m128d test_mm_range_pd(__m128d __A, __m128d __B) { + // 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: @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: @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: @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: @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: @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: @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: @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: @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: @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: @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: @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: @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: @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: @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: @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: @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: @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: @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: @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: @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: @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: @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: @llvm.x86.avx512.mask.reduce.ps.256 + return _mm256_maskz_reduce_ps(__U, __A, 4); +} \ No newline at end of file From 2a3c90446125f7ce6223eaadb424a6e59e90015c Mon Sep 17 00:00:00 2001 From: Simon Pilgrim Date: Sun, 2 Aug 2015 15:28:10 +0000 Subject: [PATCH 0012/1445] Fix invalid shufflevector operands This patch fixes bug 23800 ( https://llvm.org/bugs/show_bug.cgi?id=23800#c2 ). There existed a case where the index operand from extractelement was directly used to create a shufflevector mask. Since the index can be of any integral type but the mask must only contain 32 bit integers a 64 bit index operand led to an assertion error later on. Committed on behalf of mpflanzer (Moritz Pflanzer) Differential Revision: http://reviews.llvm.org/D10838 git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@243851 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/CodeGen/CGExprScalar.cpp | 13 ++++++++++++- test/CodeGenOpenCL/vector_shufflevector_valid.cl | 13 +++++++++++++ 2 files changed, 25 insertions(+), 1 deletion(-) create mode 100644 test/CodeGenOpenCL/vector_shufflevector_valid.cl diff --git a/lib/CodeGen/CGExprScalar.cpp b/lib/CodeGen/CGExprScalar.cpp index f3e48362130..195c7a4678f 100644 --- a/lib/CodeGen/CGExprScalar.cpp +++ b/lib/CodeGen/CGExprScalar.cpp @@ -1162,6 +1162,16 @@ static llvm::Constant *getMaskElt(llvm::ShuffleVectorInst *SVI, unsigned Idx, return llvm::ConstantInt::get(I32Ty, Off+MV); } +static llvm::Constant *getAsInt32(llvm::ConstantInt *C, llvm::Type *I32Ty) { + if (C->getBitWidth() != 32) { + assert(llvm::ConstantInt::isValueValidForType(I32Ty, + C->getZExtValue()) && + "Index operand too large for shufflevector mask!"); + return llvm::ConstantInt::get(I32Ty, C->getZExtValue()); + } + return C; +} + Value *ScalarExprEmitter::VisitInitListExpr(InitListExpr *E) { bool Ignore = TestAndClearIgnoreResultAssign(); (void)Ignore; @@ -1212,7 +1222,8 @@ Value *ScalarExprEmitter::VisitInitListExpr(InitListExpr *E) { Value *LHS = nullptr, *RHS = nullptr; if (CurIdx == 0) { // insert into undef -> shuffle (src, undef) - Args.push_back(C); + // shufflemask must use an i32 + Args.push_back(getAsInt32(C, CGF.Int32Ty)); Args.resize(ResElts, llvm::UndefValue::get(CGF.Int32Ty)); LHS = EI->getVectorOperand(); diff --git a/test/CodeGenOpenCL/vector_shufflevector_valid.cl b/test/CodeGenOpenCL/vector_shufflevector_valid.cl new file mode 100644 index 00000000000..0953c66f58e --- /dev/null +++ b/test/CodeGenOpenCL/vector_shufflevector_valid.cl @@ -0,0 +1,13 @@ +// RUN: %clang_cc1 -emit-llvm -O0 %s -o - | FileCheck %s + +// The shuffle vector mask must always be of i32 vector type +// See http://reviews.llvm.org/D10838 and https://llvm.org/bugs/show_bug.cgi?id=23800#c2 +// for more information about a bug where a 64 bit index operand causes the generation +// of an invalid mask + +typedef unsigned int uint2 __attribute((ext_vector_type(2))); + +void vector_shufflevector_valid(void) { + //CHECK: {{%.*}} = shufflevector <2 x i32> {{%.*}}, <2 x i32> undef, <2 x i32> + (uint2)(((uint2)(0)).s0, 0); +} From 1703e30a4722cd982281c03eedfac52a7c0bc551 Mon Sep 17 00:00:00 2001 From: Asaf Badouh Date: Mon, 3 Aug 2015 07:51:00 +0000 Subject: [PATCH 0013/1445] [X86][AVX512VLBW] add pack, cvt, mulhi and madd intrinsics Differential Revision: http://reviews.llvm.org/D11642 git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@243867 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/clang/Basic/BuiltinsX86.def | 26 +- lib/Headers/avx512vlbwintrin.h | 429 ++++++++++++++++++++++++++++ test/CodeGen/avx512vlbw-builtins.c | 324 +++++++++++++++++++++ 3 files changed, 777 insertions(+), 2 deletions(-) diff --git a/include/clang/Basic/BuiltinsX86.def b/include/clang/Basic/BuiltinsX86.def index baafb4a089b..4ee6915f83f 100644 --- a/include/clang/Basic/BuiltinsX86.def +++ b/include/clang/Basic/BuiltinsX86.def @@ -1449,6 +1449,28 @@ BUILTIN(__builtin_ia32_reducepd128_mask, "V2dV2dIiV2dUc", "") BUILTIN(__builtin_ia32_reducepd256_mask, "V4dV4dIiV4dUc", "") BUILTIN(__builtin_ia32_reduceps128_mask, "V4fV4fIiV4fUc", "") BUILTIN(__builtin_ia32_reduceps256_mask, "V8fV8fIiV8fUc", "") - - +BUILTIN(__builtin_ia32_pmaddubsw128_mask, "V8sV16cV16cV8sUc", "") +BUILTIN(__builtin_ia32_pmaddubsw256_mask, "V16sV32cV32cV16sUs", "") +BUILTIN(__builtin_ia32_pmaddwd128_mask, "V4iV8sV8sV4iUc", "") +BUILTIN(__builtin_ia32_pmaddwd256_mask, "V8iV16sV16sV8iUc", "") +BUILTIN(__builtin_ia32_pmovswb128_mask, "V16cV8sV16cUc", "") +BUILTIN(__builtin_ia32_pmovswb256_mask, "V16cV16sV16cUs", "") +BUILTIN(__builtin_ia32_pmovuswb128_mask, "V16cV8sV16cUc", "") +BUILTIN(__builtin_ia32_pmovuswb256_mask, "V16cV16sV16cUs", "") +BUILTIN(__builtin_ia32_pmovwb128_mask, "V16cV8sV16cUc", "") +BUILTIN(__builtin_ia32_pmovwb256_mask, "V16cV16sV16cUs", "") +BUILTIN(__builtin_ia32_pmulhrsw128_mask, "V8sV8sV8sV8sUc", "") +BUILTIN(__builtin_ia32_pmulhrsw256_mask, "V16sV16sV16sV16sUs", "") +BUILTIN(__builtin_ia32_pmulhuw128_mask, "V8sV8sV8sV8sUc", "") +BUILTIN(__builtin_ia32_pmulhuw256_mask, "V16sV16sV16sV16sUs", "") +BUILTIN(__builtin_ia32_pmulhw128_mask, "V8sV8sV8sV8sUc", "") +BUILTIN(__builtin_ia32_pmulhw256_mask, "V16sV16sV16sV16sUs", "") +BUILTIN(__builtin_ia32_punpckhbw128_mask, "V16cV16cV16cV16cUs", "") +BUILTIN(__builtin_ia32_punpckhbw256_mask, "V32cV32cV32cV32cUi", "") +BUILTIN(__builtin_ia32_punpckhwd128_mask, "V8sV8sV8sV8sUc", "") +BUILTIN(__builtin_ia32_punpckhwd256_mask, "V16sV16sV16sV16sUs", "") +BUILTIN(__builtin_ia32_punpcklbw128_mask, "V16cV16cV16cV16cUs", "") +BUILTIN(__builtin_ia32_punpcklbw256_mask, "V32cV32cV32cV32cUi", "") +BUILTIN(__builtin_ia32_punpcklwd128_mask, "V8sV8sV8sV8sUc", "") +BUILTIN(__builtin_ia32_punpcklwd256_mask, "V16sV16sV16sV16sUs", "") #undef BUILTIN diff --git a/lib/Headers/avx512vlbwintrin.h b/lib/Headers/avx512vlbwintrin.h index eb198a5ade6..4b885de8ba3 100644 --- a/lib/Headers/avx512vlbwintrin.h +++ b/lib/Headers/avx512vlbwintrin.h @@ -1822,6 +1822,435 @@ _mm256_maskz_permutex2var_epi16 (__mmask16 __U, __m256i __A, (__mmask16) __U); } +static __inline__ __m128i __DEFAULT_FN_ATTRS +_mm_mask_maddubs_epi16 (__m128i __W, __mmask8 __U, __m128i __X, __m128i __Y) { + return (__m128i) __builtin_ia32_pmaddubsw128_mask ((__v16qi) __X, + (__v16qi) __Y, + (__v8hi) __W, + (__mmask8) __U); +} + +static __inline__ __m128i __DEFAULT_FN_ATTRS +_mm_maskz_maddubs_epi16 (__mmask8 __U, __m128i __X, __m128i __Y) { + return (__m128i) __builtin_ia32_pmaddubsw128_mask ((__v16qi) __X, + (__v16qi) __Y, + (__v8hi) _mm_setzero_si128(), + (__mmask8) __U); +} + +static __inline__ __m256i __DEFAULT_FN_ATTRS +_mm256_mask_maddubs_epi16 (__m256i __W, __mmask16 __U, __m256i __X, + __m256i __Y) { + return (__m256i) __builtin_ia32_pmaddubsw256_mask ((__v32qi) __X, + (__v32qi) __Y, + (__v16hi) __W, + (__mmask16) __U); +} + +static __inline__ __m256i __DEFAULT_FN_ATTRS +_mm256_maskz_maddubs_epi16 (__mmask16 __U, __m256i __X, __m256i __Y) { + return (__m256i) __builtin_ia32_pmaddubsw256_mask ((__v32qi) __X, + (__v32qi) __Y, + (__v16hi) _mm256_setzero_si256(), + (__mmask16) __U); +} + +static __inline__ __m128i __DEFAULT_FN_ATTRS +_mm_mask_madd_epi16 (__m128i __W, __mmask8 __U, __m128i __A, + __m128i __B) { + return (__m128i) __builtin_ia32_pmaddwd128_mask ((__v8hi) __A, + (__v8hi) __B, + (__v4si) __W, + (__mmask8) __U); +} + +static __inline__ __m128i __DEFAULT_FN_ATTRS +_mm_maskz_madd_epi16 (__mmask8 __U, __m128i __A, __m128i __B) { + return (__m128i) __builtin_ia32_pmaddwd128_mask ((__v8hi) __A, + (__v8hi) __B, + (__v4si) _mm_setzero_si128(), + (__mmask8) __U); +} + +static __inline__ __m256i __DEFAULT_FN_ATTRS +_mm256_mask_madd_epi16 (__m256i __W, __mmask8 __U, __m256i __A, __m256i __B) { + return (__m256i) __builtin_ia32_pmaddwd256_mask ((__v16hi) __A, + (__v16hi) __B, + (__v8si) __W, + (__mmask8) __U); +} + +static __inline__ __m256i __DEFAULT_FN_ATTRS +_mm256_maskz_madd_epi16 (__mmask8 __U, __m256i __A, __m256i __B) { + return (__m256i) __builtin_ia32_pmaddwd256_mask ((__v16hi) __A, + (__v16hi) __B, + (__v8si) _mm256_setzero_si256(), + (__mmask8) __U); +} + +static __inline__ __m128i __DEFAULT_FN_ATTRS +_mm_cvtsepi16_epi8 (__m128i __A) { + return (__m128i) __builtin_ia32_pmovswb128_mask ((__v8hi) __A, + (__v16qi) _mm_setzero_si128(), + (__mmask8) -1); +} + +static __inline__ __m128i __DEFAULT_FN_ATTRS +_mm_mask_cvtsepi16_epi8 (__m128i __O, __mmask8 __M, __m128i __A) { + return (__m128i) __builtin_ia32_pmovswb128_mask ((__v8hi) __A, + (__v16qi) __O, + __M); +} + +static __inline__ __m128i __DEFAULT_FN_ATTRS +_mm_maskz_cvtsepi16_epi8 (__mmask8 __M, __m128i __A) { + return (__m128i) __builtin_ia32_pmovswb128_mask ((__v8hi) __A, + (__v16qi) _mm_setzero_si128(), + __M); +} + +static __inline__ __m128i __DEFAULT_FN_ATTRS +_mm256_cvtsepi16_epi8 (__m256i __A) { + return (__m128i) __builtin_ia32_pmovswb256_mask ((__v16hi) __A, + (__v16qi) _mm_setzero_si128(), + (__mmask16) -1); +} + +static __inline__ __m128i __DEFAULT_FN_ATTRS +_mm256_mask_cvtsepi16_epi8 (__m128i __O, __mmask16 __M, __m256i __A) { + return (__m128i) __builtin_ia32_pmovswb256_mask ((__v16hi) __A, + (__v16qi) __O, + __M); +} + +static __inline__ __m128i __DEFAULT_FN_ATTRS +_mm256_maskz_cvtsepi16_epi8 (__mmask16 __M, __m256i __A) { + return (__m128i) __builtin_ia32_pmovswb256_mask ((__v16hi) __A, + (__v16qi) _mm_setzero_si128(), + __M); +} + +static __inline__ __m128i __DEFAULT_FN_ATTRS +_mm_cvtusepi16_epi8 (__m128i __A) { + return (__m128i) __builtin_ia32_pmovuswb128_mask ((__v8hi) __A, + (__v16qi) _mm_setzero_si128(), + (__mmask8) -1); +} + +static __inline__ __m128i __DEFAULT_FN_ATTRS +_mm_mask_cvtusepi16_epi8 (__m128i __O, __mmask8 __M, __m128i __A) { + return (__m128i) __builtin_ia32_pmovuswb128_mask ((__v8hi) __A, + (__v16qi) __O, + __M); +} + +static __inline__ __m128i __DEFAULT_FN_ATTRS +_mm_maskz_cvtusepi16_epi8 (__mmask8 __M, __m128i __A) { + return (__m128i) __builtin_ia32_pmovuswb128_mask ((__v8hi) __A, + (__v16qi) _mm_setzero_si128(), + __M); +} + +static __inline__ __m128i __DEFAULT_FN_ATTRS +_mm256_cvtusepi16_epi8 (__m256i __A) { + return (__m128i) __builtin_ia32_pmovuswb256_mask ((__v16hi) __A, + (__v16qi) _mm_setzero_si128(), + (__mmask16) -1); +} + +static __inline__ __m128i __DEFAULT_FN_ATTRS +_mm256_mask_cvtusepi16_epi8 (__m128i __O, __mmask16 __M, __m256i __A) { + return (__m128i) __builtin_ia32_pmovuswb256_mask ((__v16hi) __A, + (__v16qi) __O, + __M); +} + +static __inline__ __m128i __DEFAULT_FN_ATTRS +_mm256_maskz_cvtusepi16_epi8 (__mmask16 __M, __m256i __A) { + return (__m128i) __builtin_ia32_pmovuswb256_mask ((__v16hi) __A, + (__v16qi) _mm_setzero_si128(), + __M); +} + +static __inline__ __m128i __DEFAULT_FN_ATTRS +_mm_cvtepi16_epi8 (__m128i __A) { + + return (__m128i) __builtin_ia32_pmovwb128_mask ((__v8hi) __A, + (__v16qi) _mm_setzero_si128(), + (__mmask8) -1); +} + +static __inline__ __m128i __DEFAULT_FN_ATTRS +_mm_mask_cvtepi16_epi8 (__m128i __O, __mmask8 __M, __m128i __A) { + return (__m128i) __builtin_ia32_pmovwb128_mask ((__v8hi) __A, + (__v16qi) __O, + __M); +} + +static __inline__ __m128i __DEFAULT_FN_ATTRS +_mm_maskz_cvtepi16_epi8 (__mmask8 __M, __m128i __A) { + return (__m128i) __builtin_ia32_pmovwb128_mask ((__v8hi) __A, + (__v16qi) _mm_setzero_si128(), + __M); +} + +static __inline__ __m128i __DEFAULT_FN_ATTRS +_mm256_cvtepi16_epi8 (__m256i __A) { + return (__m128i) __builtin_ia32_pmovwb256_mask ((__v16hi) __A, + (__v16qi) _mm_setzero_si128(), + (__mmask16) -1); +} + +static __inline__ __m128i __DEFAULT_FN_ATTRS +_mm256_mask_cvtepi16_epi8 (__m128i __O, __mmask16 __M, __m256i __A) { + return (__m128i) __builtin_ia32_pmovwb256_mask ((__v16hi) __A, + (__v16qi) __O, + __M); +} + +static __inline__ __m128i __DEFAULT_FN_ATTRS +_mm256_maskz_cvtepi16_epi8 (__mmask16 __M, __m256i __A) { + return (__m128i) __builtin_ia32_pmovwb256_mask ((__v16hi) __A, + (__v16qi) _mm_setzero_si128(), + __M); +} + +static __inline__ __m128i __DEFAULT_FN_ATTRS +_mm_mask_mulhrs_epi16 (__m128i __W, __mmask8 __U, __m128i __X, __m128i __Y) { + return (__m128i) __builtin_ia32_pmulhrsw128_mask ((__v8hi) __X, + (__v8hi) __Y, + (__v8hi) __W, + (__mmask8) __U); +} + +static __inline__ __m128i __DEFAULT_FN_ATTRS +_mm_maskz_mulhrs_epi16 (__mmask8 __U, __m128i __X, __m128i __Y) { + return (__m128i) __builtin_ia32_pmulhrsw128_mask ((__v8hi) __X, + (__v8hi) __Y, + (__v8hi) _mm_setzero_si128(), + (__mmask8) __U); +} + +static __inline__ __m256i __DEFAULT_FN_ATTRS +_mm256_mask_mulhrs_epi16 (__m256i __W, __mmask16 __U, __m256i __X, __m256i __Y) { + return (__m256i) __builtin_ia32_pmulhrsw256_mask ((__v16hi) __X, + (__v16hi) __Y, + (__v16hi) __W, + (__mmask16) __U); +} + +static __inline__ __m256i __DEFAULT_FN_ATTRS +_mm256_maskz_mulhrs_epi16 (__mmask16 __U, __m256i __X, __m256i __Y) { + return (__m256i) __builtin_ia32_pmulhrsw256_mask ((__v16hi) __X, + (__v16hi) __Y, + (__v16hi) _mm256_setzero_si256(), + (__mmask16) __U); +} + +static __inline__ __m128i __DEFAULT_FN_ATTRS +_mm_mask_mulhi_epu16 (__m128i __W, __mmask8 __U, __m128i __A, + __m128i __B) { + return (__m128i) __builtin_ia32_pmulhuw128_mask ((__v8hi) __A, + (__v8hi) __B, + (__v8hi) __W, + (__mmask8) __U); +} + +static __inline__ __m128i __DEFAULT_FN_ATTRS +_mm_maskz_mulhi_epu16 (__mmask8 __U, __m128i __A, __m128i __B) { + return (__m128i) __builtin_ia32_pmulhuw128_mask ((__v8hi) __A, + (__v8hi) __B, + (__v8hi) _mm_setzero_si128(), + (__mmask8) __U); +} + +static __inline__ __m256i __DEFAULT_FN_ATTRS +_mm256_mask_mulhi_epu16 (__m256i __W, __mmask16 __U, __m256i __A, + __m256i __B) { + return (__m256i) __builtin_ia32_pmulhuw256_mask ((__v16hi) __A, + (__v16hi) __B, + (__v16hi) __W, + (__mmask16) __U); +} + +static __inline__ __m256i __DEFAULT_FN_ATTRS +_mm256_maskz_mulhi_epu16 (__mmask16 __U, __m256i __A, __m256i __B) { + return (__m256i) __builtin_ia32_pmulhuw256_mask ((__v16hi) __A, + (__v16hi) __B, + (__v16hi) _mm256_setzero_si256(), + (__mmask16) __U); +} + +static __inline__ __m128i __DEFAULT_FN_ATTRS +_mm_mask_mulhi_epi16 (__m128i __W, __mmask8 __U, __m128i __A, + __m128i __B) { + return (__m128i) __builtin_ia32_pmulhw128_mask ((__v8hi) __A, + (__v8hi) __B, + (__v8hi) __W, + (__mmask8) __U); +} + +static __inline__ __m128i __DEFAULT_FN_ATTRS +_mm_maskz_mulhi_epi16 (__mmask8 __U, __m128i __A, __m128i __B) { + return (__m128i) __builtin_ia32_pmulhw128_mask ((__v8hi) __A, + (__v8hi) __B, + (__v8hi) _mm_setzero_si128(), + (__mmask8) __U); +} + +static __inline__ __m256i __DEFAULT_FN_ATTRS +_mm256_mask_mulhi_epi16 (__m256i __W, __mmask16 __U, __m256i __A, + __m256i __B) { + return (__m256i) __builtin_ia32_pmulhw256_mask ((__v16hi) __A, + (__v16hi) __B, + (__v16hi) __W, + (__mmask16) __U); +} + +static __inline__ __m256i __DEFAULT_FN_ATTRS +_mm256_maskz_mulhi_epi16 (__mmask16 __U, __m256i __A, __m256i __B) { + return (__m256i) __builtin_ia32_pmulhw256_mask ((__v16hi) __A, + (__v16hi) __B, + (__v16hi) _mm256_setzero_si256(), + (__mmask16) __U); +} + +static __inline__ __m128i __DEFAULT_FN_ATTRS +_mm_mask_unpackhi_epi8 (__m128i __W, __mmask16 __U, __m128i __A, + __m128i __B) { + return (__m128i) __builtin_ia32_punpckhbw128_mask ((__v16qi) __A, + (__v16qi) __B, + (__v16qi) __W, + (__mmask16) __U); +} + +static __inline__ __m128i __DEFAULT_FN_ATTRS +_mm_maskz_unpackhi_epi8 (__mmask16 __U, __m128i __A, __m128i __B) { + return (__m128i) __builtin_ia32_punpckhbw128_mask ((__v16qi) __A, + (__v16qi) __B, + (__v16qi) _mm_setzero_si128(), + (__mmask16) __U); +} + +static __inline__ __m256i __DEFAULT_FN_ATTRS +_mm256_mask_unpackhi_epi8 (__m256i __W, __mmask32 __U, __m256i __A, + __m256i __B) { + return (__m256i) __builtin_ia32_punpckhbw256_mask ((__v32qi) __A, + (__v32qi) __B, + (__v32qi) __W, + (__mmask32) __U); +} + +static __inline__ __m256i __DEFAULT_FN_ATTRS +_mm256_maskz_unpackhi_epi8 (__mmask32 __U, __m256i __A, __m256i __B) { + return (__m256i) __builtin_ia32_punpckhbw256_mask ((__v32qi) __A, + (__v32qi) __B, + (__v32qi) _mm256_setzero_si256(), + (__mmask32) __U); +} + +static __inline__ __m128i __DEFAULT_FN_ATTRS +_mm_mask_unpackhi_epi16 (__m128i __W, __mmask8 __U, __m128i __A, + __m128i __B) { + return (__m128i) __builtin_ia32_punpckhwd128_mask ((__v8hi) __A, + (__v8hi) __B, + (__v8hi) __W, + (__mmask8) __U); +} + +static __inline__ __m128i __DEFAULT_FN_ATTRS +_mm_maskz_unpackhi_epi16 (__mmask8 __U, __m128i __A, __m128i __B) { + return (__m128i) __builtin_ia32_punpckhwd128_mask ((__v8hi) __A, + (__v8hi) __B, + (__v8hi) _mm_setzero_si128(), + (__mmask8) __U); +} + +static __inline__ __m256i __DEFAULT_FN_ATTRS +_mm256_mask_unpackhi_epi16 (__m256i __W, __mmask16 __U, __m256i __A, + __m256i __B) { + return (__m256i) __builtin_ia32_punpckhwd256_mask ((__v16hi) __A, + (__v16hi) __B, + (__v16hi) __W, + (__mmask16) __U); +} + +static __inline__ __m256i __DEFAULT_FN_ATTRS +_mm256_maskz_unpackhi_epi16 (__mmask16 __U, __m256i __A, __m256i __B) { + return (__m256i) __builtin_ia32_punpckhwd256_mask ((__v16hi) __A, + (__v16hi) __B, + (__v16hi) _mm256_setzero_si256(), + (__mmask16) __U); +} + +static __inline__ __m128i __DEFAULT_FN_ATTRS +_mm_mask_unpacklo_epi8 (__m128i __W, __mmask16 __U, __m128i __A, + __m128i __B) { + return (__m128i) __builtin_ia32_punpcklbw128_mask ((__v16qi) __A, + (__v16qi) __B, + (__v16qi) __W, + (__mmask16) __U); +} + +static __inline__ __m128i __DEFAULT_FN_ATTRS +_mm_maskz_unpacklo_epi8 (__mmask16 __U, __m128i __A, __m128i __B) { + return (__m128i) __builtin_ia32_punpcklbw128_mask ((__v16qi) __A, + (__v16qi) __B, + (__v16qi) _mm_setzero_si128(), + (__mmask16) __U); +} + +static __inline__ __m256i __DEFAULT_FN_ATTRS +_mm256_mask_unpacklo_epi8 (__m256i __W, __mmask32 __U, __m256i __A, + __m256i __B) { + return (__m256i) __builtin_ia32_punpcklbw256_mask ((__v32qi) __A, + (__v32qi) __B, + (__v32qi) __W, + (__mmask32) __U); +} + +static __inline__ __m256i __DEFAULT_FN_ATTRS +_mm256_maskz_unpacklo_epi8 (__mmask32 __U, __m256i __A, __m256i __B) { + return (__m256i) __builtin_ia32_punpcklbw256_mask ((__v32qi) __A, + (__v32qi) __B, + (__v32qi) _mm256_setzero_si256(), + (__mmask32) __U); +} + +static __inline__ __m128i __DEFAULT_FN_ATTRS +_mm_mask_unpacklo_epi16 (__m128i __W, __mmask8 __U, __m128i __A, + __m128i __B) { + return (__m128i) __builtin_ia32_punpcklwd128_mask ((__v8hi) __A, + (__v8hi) __B, + (__v8hi) __W, + (__mmask8) __U); +} + +static __inline__ __m128i __DEFAULT_FN_ATTRS +_mm_maskz_unpacklo_epi16 (__mmask8 __U, __m128i __A, __m128i __B) { + return (__m128i) __builtin_ia32_punpcklwd128_mask ((__v8hi) __A, + (__v8hi) __B, + (__v8hi) _mm_setzero_si128(), + (__mmask8) __U); +} + +static __inline__ __m256i __DEFAULT_FN_ATTRS +_mm256_mask_unpacklo_epi16 (__m256i __W, __mmask16 __U, __m256i __A, + __m256i __B) { + return (__m256i) __builtin_ia32_punpcklwd256_mask ((__v16hi) __A, + (__v16hi) __B, + (__v16hi) __W, + (__mmask16) __U); +} + +static __inline__ __m256i __DEFAULT_FN_ATTRS +_mm256_maskz_unpacklo_epi16 (__mmask16 __U, __m256i __A, __m256i __B) { + return (__m256i) __builtin_ia32_punpcklwd256_mask ((__v16hi) __A, + (__v16hi) __B, + (__v16hi) _mm256_setzero_si256(), + (__mmask16) __U); +} + #define _mm_cmp_epi8_mask(a, b, p) __extension__ ({ \ (__mmask16)__builtin_ia32_cmpb128_mask((__v16qi)(__m128i)(a), \ (__v16qi)(__m128i)(b), \ diff --git a/test/CodeGen/avx512vlbw-builtins.c b/test/CodeGen/avx512vlbw-builtins.c index 7aa8b873dc4..eb12d504a3c 100644 --- a/test/CodeGen/avx512vlbw-builtins.c +++ b/test/CodeGen/avx512vlbw-builtins.c @@ -1377,3 +1377,327 @@ __m256i test_mm256_maskz_permutex2var_epi16(__mmask16 __U, __m256i __A, // CHECK: @llvm.x86.avx512.maskz.vpermt2var.hi.256 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: @llvm.x86.avx512.mask.pmaddubs.w.128 + 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: @llvm.x86.avx512.mask.pmaddubs.w.128 + 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: @llvm.x86.avx512.mask.pmaddubs.w.256 + 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: @llvm.x86.avx512.mask.pmaddubs.w.256 + 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: @llvm.x86.avx512.mask.pmaddw.d.128 + 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: @llvm.x86.avx512.mask.pmaddw.d.128 + 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: @llvm.x86.avx512.mask.pmaddw.d.256 + 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: @llvm.x86.avx512.mask.pmaddw.d.256 + return _mm256_maskz_madd_epi16(__U, __A, __B); +} + +__m128i test_mm_cvtsepi16_epi8(__m128i __A) { + // 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: @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: @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: @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: @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: @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: @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: @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: @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: @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: @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: @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: @llvm.x86.avx512.mask.pmov.wb.128 + 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: @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: @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: @llvm.x86.avx512.mask.pmov.wb.256 + 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: @llvm.x86.avx512.mask.pmov.wb.256 + 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: @llvm.x86.avx512.mask.pmov.wb.256 + 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: @llvm.x86.avx512.mask.pmul.hr.sw.128 + 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: @llvm.x86.avx512.mask.pmul.hr.sw.128 + 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: @llvm.x86.avx512.mask.pmul.hr.sw.256 + 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: @llvm.x86.avx512.mask.pmul.hr.sw.256 + 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: @llvm.x86.avx512.mask.pmulhu.w.128 + return _mm_mask_mulhi_epu16(__W, __U, __A, __B); +} + +__m128i test_mm_maskz_mulhi_epu16(__mmask8 __U, __m128i __A, __m128i __B) { + // CHECK-LABEL: @test_mm_maskz_mulhi_epu16 + // CHECK: @llvm.x86.avx512.mask.pmulhu.w.128 + return _mm_maskz_mulhi_epu16(__U, __A, __B); +} + +__m256i test_mm256_mask_mulhi_epu16(__m256i __W, __mmask16 __U, __m256i __A, __m256i __B) { + // CHECK-LABEL: @test_mm256_mask_mulhi_epu16 + // CHECK: @llvm.x86.avx512.mask.pmulhu.w.256 + return _mm256_mask_mulhi_epu16(__W, __U, __A, __B); +} + +__m256i test_mm256_maskz_mulhi_epu16(__mmask16 __U, __m256i __A, __m256i __B) { + // CHECK-LABEL: @test_mm256_maskz_mulhi_epu16 + // CHECK: @llvm.x86.avx512.mask.pmulhu.w.256 + return _mm256_maskz_mulhi_epu16(__U, __A, __B); +} + +__m128i test_mm_mask_mulhi_epi16(__m128i __W, __mmask8 __U, __m128i __A, __m128i __B) { + // CHECK-LABEL: @test_mm_mask_mulhi_epi16 + // CHECK: @llvm.x86.avx512.mask.pmulh.w.128 + return _mm_mask_mulhi_epi16(__W, __U, __A, __B); +} + +__m128i test_mm_maskz_mulhi_epi16(__mmask8 __U, __m128i __A, __m128i __B) { + // CHECK-LABEL: @test_mm_maskz_mulhi_epi16 + // CHECK: @llvm.x86.avx512.mask.pmulh.w.128 + return _mm_maskz_mulhi_epi16(__U, __A, __B); +} + +__m256i test_mm256_mask_mulhi_epi16(__m256i __W, __mmask16 __U, __m256i __A, __m256i __B) { + // CHECK-LABEL: @test_mm256_mask_mulhi_epi16 + // CHECK: @llvm.x86.avx512.mask.pmulh.w.256 + return _mm256_mask_mulhi_epi16(__W, __U, __A, __B); +} + +__m256i test_mm256_maskz_mulhi_epi16(__mmask16 __U, __m256i __A, __m256i __B) { + // CHECK-LABEL: @test_mm256_maskz_mulhi_epi16 + // CHECK: @llvm.x86.avx512.mask.pmulh.w.256 + return _mm256_maskz_mulhi_epi16(__U, __A, __B); +} + +__m128i test_mm_mask_unpackhi_epi8(__m128i __W, __mmask16 __U, __m128i __A, __m128i __B) { + // CHECK-LABEL: @test_mm_mask_unpackhi_epi8 + // CHECK: @llvm.x86.avx512.mask.punpckhb.w.128 + 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: @llvm.x86.avx512.mask.punpckhb.w.128 + 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: @llvm.x86.avx512.mask.punpckhb.w.256 + 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: @llvm.x86.avx512.mask.punpckhb.w.256 + 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: @llvm.x86.avx512.mask.punpckhw.d.128 + 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: @llvm.x86.avx512.mask.punpckhw.d.128 + 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: @llvm.x86.avx512.mask.punpckhw.d.256 + 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: @llvm.x86.avx512.mask.punpckhw.d.256 + 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: @llvm.x86.avx512.mask.punpcklb.w.128 + 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: @llvm.x86.avx512.mask.punpcklb.w.128 + 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: @llvm.x86.avx512.mask.punpcklb.w.256 + 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: @llvm.x86.avx512.mask.punpcklb.w.256 + 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: @llvm.x86.avx512.mask.punpcklw.d.128 + 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: @llvm.x86.avx512.mask.punpcklw.d.128 + 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: @llvm.x86.avx512.mask.punpcklw.d.256 + 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: @llvm.x86.avx512.mask.punpcklw.d.256 + return _mm256_maskz_unpacklo_epi16(__U, __A, __B); +} + From a5ffe75862d56eff189d6adcf9cc7e2d471c7b1d Mon Sep 17 00:00:00 2001 From: Andrey Bokhanko Date: Mon, 3 Aug 2015 10:38:10 +0000 Subject: [PATCH 0014/1445] Additional fix for PR14269: Crash on vector elements / global register vars in inline assembler. Compiler crashed when vector elements / global register vars were used in inline assembler with "m" restriction. This patch fixes this. Differential Revision: http://reviews.llvm.org/D10476 git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@243870 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/clang/AST/Expr.h | 4 ++ include/clang/Basic/DiagnosticSemaKinds.td | 6 +-- lib/AST/Expr.cpp | 12 +++++ lib/Sema/SemaStmtAsm.cpp | 53 ++++++++++++++++------ test/Sema/asm.c | 21 +++++++-- 5 files changed, 76 insertions(+), 20 deletions(-) diff --git a/include/clang/AST/Expr.h b/include/clang/AST/Expr.h index 3cc4b7d009f..b4d9040c4b3 100644 --- a/include/clang/AST/Expr.h +++ b/include/clang/AST/Expr.h @@ -459,6 +459,10 @@ class Expr : public Stmt { /// \brief Returns whether this expression refers to a vector element. bool refersToVectorElement() const; + /// \brief Returns whether this expression refers to a global register + /// variable. + bool refersToGlobalRegisterVar() const; + /// \brief Returns whether this expression has a placeholder type. bool hasPlaceholderType() const { return getType()->isPlaceholderType(); diff --git a/include/clang/Basic/DiagnosticSemaKinds.td b/include/clang/Basic/DiagnosticSemaKinds.td index c300d6fe423..65670f454be 100644 --- a/include/clang/Basic/DiagnosticSemaKinds.td +++ b/include/clang/Basic/DiagnosticSemaKinds.td @@ -6385,9 +6385,9 @@ let CategoryName = "Inline Assembly Issue" in { "remove the cast or build with -fheinous-gnu-extensions">; def err_invalid_asm_value_for_constraint : Error <"value '%0' out of range for constraint '%1'">; - def err_asm_bitfield_in_memory_constraint - : Error <"reference to a bit-field in asm " - "%select{input|output}0 with a memory constraint '%1'">; + def err_asm_non_addr_value_in_memory_constraint : Error < + "reference to a %select{bit-field|vector element|global register variable}0" + " in asm %select{input|output}1 with a memory constraint '%2'">; def warn_asm_label_on_auto_decl : Warning< "ignored asm label '%0' on automatic variable">; diff --git a/lib/AST/Expr.cpp b/lib/AST/Expr.cpp index 4882f536d52..89f47f980c9 100644 --- a/lib/AST/Expr.cpp +++ b/lib/AST/Expr.cpp @@ -3437,6 +3437,18 @@ bool Expr::refersToVectorElement() const { return false; } +bool Expr::refersToGlobalRegisterVar() const { + const Expr *E = this->IgnoreParenImpCasts(); + + if (const DeclRefExpr *DRE = dyn_cast(E)) + if (const auto *VD = dyn_cast(DRE->getDecl())) + if (VD->getStorageClass() == SC_Register && + VD->hasAttr() && !VD->isLocalVarDecl()) + return true; + + return false; +} + /// isArrow - Return true if the base expression is a pointer to vector, /// return false if the base expression is a vector. bool ExtVectorElementExpr::isArrow() const { diff --git a/lib/Sema/SemaStmtAsm.cpp b/lib/Sema/SemaStmtAsm.cpp index 8e584919363..799689f1995 100644 --- a/lib/Sema/SemaStmtAsm.cpp +++ b/lib/Sema/SemaStmtAsm.cpp @@ -107,6 +107,37 @@ static bool CheckNakedParmReference(Expr *E, Sema &S) { return false; } +/// \brief Returns true if given expression is not compatible with inline +/// assembly's memory constraint; false otherwise. +static bool checkExprMemoryConstraintCompat(Sema &S, Expr *E, + TargetInfo::ConstraintInfo &Info, + bool is_input_expr) { + enum { + ExprBitfield = 0, + ExprVectorElt, + ExprGlobalRegVar, + ExprSafeType + } EType = ExprSafeType; + + // Bitfields, vector elements and global register variables are not + // compatible. + if (E->refersToBitField()) + EType = ExprBitfield; + else if (E->refersToVectorElement()) + EType = ExprVectorElt; + else if (E->refersToGlobalRegisterVar()) + EType = ExprGlobalRegVar; + + if (EType != ExprSafeType) { + S.Diag(E->getLocStart(), diag::err_asm_non_addr_value_in_memory_constraint) + << EType << is_input_expr << Info.getConstraintStr() + << E->getSourceRange(); + return true; + } + + return false; +} + StmtResult Sema::ActOnGCCAsmStmt(SourceLocation AsmLoc, bool IsSimple, bool IsVolatile, unsigned NumOutputs, unsigned NumInputs, IdentifierInfo **Names, @@ -154,13 +185,10 @@ StmtResult Sema::ActOnGCCAsmStmt(SourceLocation AsmLoc, bool IsSimple, if (CheckNakedParmReference(OutputExpr, *this)) return StmtError(); - // Bitfield can't be referenced with a pointer. - if (Info.allowsMemory() && OutputExpr->refersToBitField()) - return StmtError(Diag(OutputExpr->getLocStart(), - diag::err_asm_bitfield_in_memory_constraint) - << 1 - << Info.getConstraintStr() - << OutputExpr->getSourceRange()); + // Check that the output expression is compatible with memory constraint. + if (Info.allowsMemory() && + checkExprMemoryConstraintCompat(*this, OutputExpr, Info, false)) + return StmtError(); OutputConstraintInfos.push_back(Info); @@ -238,13 +266,10 @@ StmtResult Sema::ActOnGCCAsmStmt(SourceLocation AsmLoc, bool IsSimple, if (CheckNakedParmReference(InputExpr, *this)) return StmtError(); - // Bitfield can't be referenced with a pointer. - if (Info.allowsMemory() && InputExpr->refersToBitField()) - return StmtError(Diag(InputExpr->getLocStart(), - diag::err_asm_bitfield_in_memory_constraint) - << 0 - << Info.getConstraintStr() - << InputExpr->getSourceRange()); + // Check that the input expression is compatible with memory constraint. + if (Info.allowsMemory() && + checkExprMemoryConstraintCompat(*this, InputExpr, Info, true)) + return StmtError(); // Only allow void types for memory constraints. if (Info.allowsMemory() && !Info.allowsRegister()) { diff --git a/test/Sema/asm.c b/test/Sema/asm.c index 1a1e02993a7..9ed8d843eaf 100644 --- a/test/Sema/asm.c +++ b/test/Sema/asm.c @@ -211,13 +211,28 @@ typedef struct test16_foo { unsigned int field2 : 2; unsigned int field3 : 3; } test16_foo; -test16_foo x; +typedef __attribute__((vector_size(16))) int test16_bar; +register int test16_baz asm("rbx"); + void test16() { + test16_foo a; + test16_bar b; + + __asm__("movl $5, %0" + : "=rm" (a.field2)); // expected-error {{reference to a bit-field in asm input with a memory constraint '=rm'}} + __asm__("movl $5, %0" + : + : "m" (a.field3)); // expected-error {{reference to a bit-field in asm output with a memory constraint 'm'}} + __asm__("movl $5, %0" + : "=rm" (b[2])); // expected-error {{reference to a vector element in asm input with a memory constraint '=rm'}} + __asm__("movl $5, %0" + : + : "m" (b[3])); // expected-error {{reference to a vector element in asm output with a memory constraint 'm'}} __asm__("movl $5, %0" - : "=rm" (x.field2)); // expected-error {{reference to a bit-field in asm output with a memory constraint '=rm'}} + : "=rm" (test16_baz)); // expected-error {{reference to a global register variable in asm input with a memory constraint '=rm'}} __asm__("movl $5, %0" : - : "m" (x.field3)); // expected-error {{reference to a bit-field in asm input with a memory constraint 'm'}} + : "m" (test16_baz)); // expected-error {{reference to a global register variable in asm output with a memory constraint 'm'}} } From 86b5a658bcf568830702b4798b891beef591b90a Mon Sep 17 00:00:00 2001 From: Nathan Wilson Date: Mon, 3 Aug 2015 14:25:45 +0000 Subject: [PATCH 0015/1445] [CONCEPTS] Add concept to VarDecl and diagnostic for uninitialized variable concept Summary: Add IsConcept bit to VarDecl::NonParmVarDeclBitfields and associated isConcept/setConcept member functions. Set IsConcept to true when 'concept' specifier is in variable declaration. Create diagnostic when variable concept is not initialized. Reviewers: fraggamuffin, hubert.reinterpretcast, faisalv, aaron.ballman, rsmith Subscribers: aemerson, cfe-commits Differential Revision: http://reviews.llvm.org/D11600 git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@243876 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/clang/AST/Decl.h | 12 ++++++++++++ include/clang/Basic/DiagnosticSemaKinds.td | 2 ++ lib/Sema/SemaDecl.cpp | 12 ++++++++++++ test/SemaCXX/cxx-concept-declaration.cpp | 4 ++++ 4 files changed, 30 insertions(+) diff --git a/include/clang/AST/Decl.h b/include/clang/AST/Decl.h index e06b58b37be..76c05852f72 100644 --- a/include/clang/AST/Decl.h +++ b/include/clang/AST/Decl.h @@ -815,6 +815,9 @@ class VarDecl : public DeclaratorDecl, public Redeclarable { /// \brief Whether this variable is (C++0x) constexpr. unsigned IsConstexpr : 1; + /// \brief Whether this variable is a (C++ Concepts TS) concept. + unsigned IsConcept : 1; + /// \brief Whether this variable is the implicit variable for a lambda /// init-capture. unsigned IsInitCapture : 1; @@ -1238,6 +1241,15 @@ class VarDecl : public DeclaratorDecl, public Redeclarable { NonParmVarDeclBits.IsConstexpr = IC; } + /// Whether this variable is (C++ Concepts TS) concept. + bool isConcept() const { + return isa(this) ? false : NonParmVarDeclBits.IsConcept; + } + void setConcept(bool IC) { + assert(!isa(this)); + NonParmVarDeclBits.IsConcept = IC; + } + /// Whether this variable is the implicit variable for a lambda init-capture. bool isInitCapture() const { return isa(this) ? false : NonParmVarDeclBits.IsInitCapture; diff --git a/include/clang/Basic/DiagnosticSemaKinds.td b/include/clang/Basic/DiagnosticSemaKinds.td index 65670f454be..43c1b47b5ff 100644 --- a/include/clang/Basic/DiagnosticSemaKinds.td +++ b/include/clang/Basic/DiagnosticSemaKinds.td @@ -1971,6 +1971,8 @@ def err_concept_decls_may_only_appear_in_namespace_scope : Error< "concept declarations may only appear in namespace scope">; def err_function_concept_not_defined : Error< "function concept declaration must be a definition">; +def err_var_concept_not_initialized : Error< + "variable concept declaration must be initialized">; // C++11 char16_t/char32_t def warn_cxx98_compat_unicode_type : Warning< diff --git a/lib/Sema/SemaDecl.cpp b/lib/Sema/SemaDecl.cpp index 9f499de0843..962610c1ce5 100644 --- a/lib/Sema/SemaDecl.cpp +++ b/lib/Sema/SemaDecl.cpp @@ -5855,6 +5855,9 @@ Sema::ActOnVariableDeclarator(Scope *S, Declarator &D, DeclContext *DC, if (D.getDeclSpec().isConstexprSpecified()) NewVD->setConstexpr(true); + + if (D.getDeclSpec().isConceptSpecified()) + NewVD->setConcept(true); } // Set the lexical context. If the declarator has a C++ scope specifier, the @@ -9407,6 +9410,15 @@ void Sema::ActOnUninitializedDecl(Decl *RealDecl, return; } + // C++ Concepts TS [dcl.spec.concept]p1: [...] A variable template + // definition having the concept specifier is called a variable concept. A + // concept definition refers to [...] a variable concept and its initializer. + if (Var->isConcept()) { + Diag(Var->getLocation(), diag::err_var_concept_not_initialized); + Var->setInvalidDecl(); + return; + } + // OpenCL v1.1 s6.5.3: variables declared in the constant address space must // be initialized. if (!Var->isInvalidDecl() && diff --git a/test/SemaCXX/cxx-concept-declaration.cpp b/test/SemaCXX/cxx-concept-declaration.cpp index f9878bc5812..1837a63989a 100644 --- a/test/SemaCXX/cxx-concept-declaration.cpp +++ b/test/SemaCXX/cxx-concept-declaration.cpp @@ -19,3 +19,7 @@ struct C { concept bool D4() { return true; } // expected-error {{'concept' can only appear on the definition of a function template or variable template}} concept bool D5 = true; // expected-error {{'concept' can only appear on the definition of a function template or variable template}} + +template +concept bool D6; // expected-error {{variable concept declaration must be initialized}} + From 1b3a539a705cfdfe0620238745ca38d137c514cc Mon Sep 17 00:00:00 2001 From: Douglas Katzman Date: Mon, 3 Aug 2015 14:34:22 +0000 Subject: [PATCH 0016/1445] [SHAVE] Pass all -f, -g, -O, -W options through directly to moviCompile. Differential Revision: http://reviews.llvm.org/D11581 git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@243878 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Driver/Tools.cpp | 27 +++++++++++---------------- test/Driver/shave-toolchain.c | 8 +++++++- 2 files changed, 18 insertions(+), 17 deletions(-) diff --git a/lib/Driver/Tools.cpp b/lib/Driver/Tools.cpp index ce39b872eea..2135b77f5e6 100644 --- a/lib/Driver/Tools.cpp +++ b/lib/Driver/Tools.cpp @@ -9482,26 +9482,21 @@ void tools::SHAVE::Compiler::ConstructJob(Compilation &C, const JobAction &JA, assert(II.getType() == types::TY_C || II.getType() == types::TY_CXX); assert(Output.getType() == types::TY_PP_Asm); // Require preprocessed asm. - // Append all -I, -iquote, -isystem paths, and defines/undefines. - // These are spelled the same way in clang and moviCompile. - Args.AddAllArgs(CmdArgs, - {options::OPT_clang_i_Group, options::OPT_D, options::OPT_U}); - CmdArgs.push_back("-DMYRIAD2"); CmdArgs.push_back("-mcpu=myriad2"); CmdArgs.push_back("-S"); - // Any -O option passes through without translation. What about -Ofast ? - if (Arg *A = Args.getLastArg(options::OPT_O_Group)) - A->render(Args, CmdArgs); - - if (Args.hasFlag(options::OPT_ffunction_sections, - options::OPT_fno_function_sections)) { - CmdArgs.push_back("-ffunction-sections"); - } - if (Args.hasArg(options::OPT_fno_inline_functions)) - CmdArgs.push_back("-fno-inline-functions"); - + // Append all -I, -iquote, -isystem paths, defines/undefines, + // 'f' flags, optimize flags, and warning options. + // These are spelled the same way in clang and moviCompile. + Args.AddAllArgs(CmdArgs, + {options::OPT_I_Group, options::OPT_clang_i_Group, + options::OPT_D, options::OPT_U, + options::OPT_f_Group, + options::OPT_f_clang_Group, + options::OPT_g_Group, + options::OPT_O_Group, + options::OPT_W_Group}); CmdArgs.push_back("-fno-exceptions"); // Always do this even if unspecified. CmdArgs.push_back(II.getFilename()); diff --git a/test/Driver/shave-toolchain.c b/test/Driver/shave-toolchain.c index a02d04971de..5fd0300031a 100644 --- a/test/Driver/shave-toolchain.c +++ b/test/Driver/shave-toolchain.c @@ -10,7 +10,7 @@ // RUN: %clang -target shave -c -### %s -Icommon 2>&1 \ // RUN: | FileCheck %s -check-prefix=movicompile -// movicompile: moviCompile" "-DMYRIAD2" +// movicompile: moviCompile" "-DMYRIAD2" "-mcpu=myriad2" "-S" "-I" "common" // movicompile: moviAsm" "-no6thSlotCompression" "-cv:myriad2" "-noSPrefixing" "-a" "-i:common" "-elf" // RUN: %clang -target shave -c -### %s -DEFINE_ME -UNDEFINE_ME 2>&1 \ @@ -20,3 +20,9 @@ // RUN: %clang -target shave -c -### %s -Icommon -iquote quotepath -isystem syspath 2>&1 \ // RUN: | FileCheck %s -check-prefix=includes // includes: "-iquote" "quotepath" "-isystem" "syspath" + +// RUN: %clang -target shave -c -### %s -g -fno-inline-functions \ +// RUN: -fno-inline-functions-called-once -Os -Wall \ +// RUN: -ffunction-sections 2>&1 | FileCheck %s -check-prefix=F_G_O_W_OPTIONS +// F_G_O_W_OPTIONS: "-g" "-fno-inline-functions" "-fno-inline-functions-called-once" +// F_G_O_W_OPTIONS: "-Os" "-Wall" "-ffunction-sections" From f4e2ba74bdae2c5ebb2338b44b2e9bd85461f071 Mon Sep 17 00:00:00 2001 From: Douglas Katzman Date: Mon, 3 Aug 2015 20:41:31 +0000 Subject: [PATCH 0017/1445] Grammar: Don't imply that a program wouldn't want a person as its output. (Because, hey, who wouldn't?) git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@243901 91177308-0d34-0410-b5e6-96231b3b80d8 --- docs/UsersManual.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/UsersManual.rst b/docs/UsersManual.rst index 53d7286e265..842538ca44e 100644 --- a/docs/UsersManual.rst +++ b/docs/UsersManual.rst @@ -148,8 +148,8 @@ Formatting of Diagnostics Clang aims to produce beautiful diagnostics by default, particularly for new users that first come to Clang. However, different people have -different preferences, and sometimes Clang is driven by another program -that wants to parse simple and consistent output, not a person. For +different preferences, and sometimes Clang is driven not by a human, +but by a program that wants consistent and easily parsable output. For these cases, Clang provides a wide range of options to control the exact output format of the diagnostics that it generates. From 14b0c6caf8f12547107d5891033072b1d2f589f8 Mon Sep 17 00:00:00 2001 From: Justin Bogner Date: Mon, 3 Aug 2015 22:26:06 +0000 Subject: [PATCH 0018/1445] X86: Teach X86 builtins which target features they require This adds the required target feature names to x86 builtins that need particular features. Most have exactly one ("avx", "aes", etc), but some of the avx512 features have multiple requirements, eg "avx512vl,avx512bw". git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@243908 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/clang/Basic/BuiltinsX86.def | 2819 ++++++++++++++------------- 1 file changed, 1444 insertions(+), 1375 deletions(-) diff --git a/include/clang/Basic/BuiltinsX86.def b/include/clang/Basic/BuiltinsX86.def index 4ee6915f83f..18f5281ebee 100644 --- a/include/clang/Basic/BuiltinsX86.def +++ b/include/clang/Basic/BuiltinsX86.def @@ -14,14 +14,15 @@ // The format of this database matches clang/Basic/Builtins.def. -// FIXME: In GCC, these builtins are defined depending on whether support for -// MMX/SSE/etc is turned on. We should do this too. - // FIXME: Ideally we would be able to pull this information from what // LLVM already knows about X86 builtins. We need to match the LLVM // definition anyway, since code generation will lower to the // intrinsic if one exists. +#if defined(BUILTIN) && !defined(TARGET_BUILTIN) +# define TARGET_BUILTIN(ID, TYPE, ATTRS, FEATURE) BUILTIN(ID, TYPE, ATTRS) +#endif + // FIXME: Are these nothrow/const? // Miscellaneous builtin for checking x86 cpu features. @@ -31,33 +32,33 @@ BUILTIN(__builtin_cpu_supports, "bcC*", "nc") // 3DNow! // -BUILTIN(__builtin_ia32_femms, "v", "") -BUILTIN(__builtin_ia32_pavgusb, "V8cV8cV8c", "nc") -BUILTIN(__builtin_ia32_pf2id, "V2iV2f", "nc") -BUILTIN(__builtin_ia32_pfacc, "V2fV2fV2f", "nc") -BUILTIN(__builtin_ia32_pfadd, "V2fV2fV2f", "nc") -BUILTIN(__builtin_ia32_pfcmpeq, "V2iV2fV2f", "nc") -BUILTIN(__builtin_ia32_pfcmpge, "V2iV2fV2f", "nc") -BUILTIN(__builtin_ia32_pfcmpgt, "V2iV2fV2f", "nc") -BUILTIN(__builtin_ia32_pfmax, "V2fV2fV2f", "nc") -BUILTIN(__builtin_ia32_pfmin, "V2fV2fV2f", "nc") -BUILTIN(__builtin_ia32_pfmul, "V2fV2fV2f", "nc") -BUILTIN(__builtin_ia32_pfrcp, "V2fV2f", "nc") -BUILTIN(__builtin_ia32_pfrcpit1, "V2fV2fV2f", "nc") -BUILTIN(__builtin_ia32_pfrcpit2, "V2fV2fV2f", "nc") -BUILTIN(__builtin_ia32_pfrsqrt, "V2fV2f", "nc") -BUILTIN(__builtin_ia32_pfrsqit1, "V2fV2fV2f", "nc") -BUILTIN(__builtin_ia32_pfsub, "V2fV2fV2f", "nc") -BUILTIN(__builtin_ia32_pfsubr, "V2fV2fV2f", "nc") -BUILTIN(__builtin_ia32_pi2fd, "V2fV2i", "nc") -BUILTIN(__builtin_ia32_pmulhrw, "V4sV4sV4s", "nc") +TARGET_BUILTIN(__builtin_ia32_femms, "v", "", "3dnow") +TARGET_BUILTIN(__builtin_ia32_pavgusb, "V8cV8cV8c", "nc", "3dnow") +TARGET_BUILTIN(__builtin_ia32_pf2id, "V2iV2f", "nc", "3dnow") +TARGET_BUILTIN(__builtin_ia32_pfacc, "V2fV2fV2f", "nc", "3dnow") +TARGET_BUILTIN(__builtin_ia32_pfadd, "V2fV2fV2f", "nc", "3dnow") +TARGET_BUILTIN(__builtin_ia32_pfcmpeq, "V2iV2fV2f", "nc", "3dnow") +TARGET_BUILTIN(__builtin_ia32_pfcmpge, "V2iV2fV2f", "nc", "3dnow") +TARGET_BUILTIN(__builtin_ia32_pfcmpgt, "V2iV2fV2f", "nc", "3dnow") +TARGET_BUILTIN(__builtin_ia32_pfmax, "V2fV2fV2f", "nc", "3dnow") +TARGET_BUILTIN(__builtin_ia32_pfmin, "V2fV2fV2f", "nc", "3dnow") +TARGET_BUILTIN(__builtin_ia32_pfmul, "V2fV2fV2f", "nc", "3dnow") +TARGET_BUILTIN(__builtin_ia32_pfrcp, "V2fV2f", "nc", "3dnow") +TARGET_BUILTIN(__builtin_ia32_pfrcpit1, "V2fV2fV2f", "nc", "3dnow") +TARGET_BUILTIN(__builtin_ia32_pfrcpit2, "V2fV2fV2f", "nc", "3dnow") +TARGET_BUILTIN(__builtin_ia32_pfrsqrt, "V2fV2f", "nc", "3dnow") +TARGET_BUILTIN(__builtin_ia32_pfrsqit1, "V2fV2fV2f", "nc", "3dnow") +TARGET_BUILTIN(__builtin_ia32_pfsub, "V2fV2fV2f", "nc", "3dnow") +TARGET_BUILTIN(__builtin_ia32_pfsubr, "V2fV2fV2f", "nc", "3dnow") +TARGET_BUILTIN(__builtin_ia32_pi2fd, "V2fV2i", "nc", "3dnow") +TARGET_BUILTIN(__builtin_ia32_pmulhrw, "V4sV4sV4s", "nc", "3dnow") // 3DNow! Extensions (3dnowa). -BUILTIN(__builtin_ia32_pf2iw, "V2iV2f", "nc") -BUILTIN(__builtin_ia32_pfnacc, "V2fV2fV2f", "nc") -BUILTIN(__builtin_ia32_pfpnacc, "V2fV2fV2f", "nc") -BUILTIN(__builtin_ia32_pi2fw, "V2fV2i", "nc") -BUILTIN(__builtin_ia32_pswapdsf, "V2fV2f", "nc") -BUILTIN(__builtin_ia32_pswapdsi, "V2iV2i", "nc") +TARGET_BUILTIN(__builtin_ia32_pf2iw, "V2iV2f", "nc", "3dnowa") +TARGET_BUILTIN(__builtin_ia32_pfnacc, "V2fV2fV2f", "nc", "3dnowa") +TARGET_BUILTIN(__builtin_ia32_pfpnacc, "V2fV2fV2f", "nc", "3dnowa") +TARGET_BUILTIN(__builtin_ia32_pi2fw, "V2fV2i", "nc", "3dnowa") +TARGET_BUILTIN(__builtin_ia32_pswapdsf, "V2fV2f", "nc", "3dnowa") +TARGET_BUILTIN(__builtin_ia32_pswapdsi, "V2iV2i", "nc", "3dnowa") // MMX // @@ -67,338 +68,346 @@ BUILTIN(__builtin_ia32_pswapdsi, "V2iV2i", "nc") // FIXME: _mm_prefetch must be a built-in because it takes a compile-time constant // argument and our prior approach of using a #define to the current built-in // doesn't work in the presence of re-declaration of _mm_prefetch for windows. -BUILTIN(_mm_prefetch, "vcC*i", "nc") -BUILTIN(__builtin_ia32_emms, "v", "") -BUILTIN(__builtin_ia32_paddb, "V8cV8cV8c", "") -BUILTIN(__builtin_ia32_paddw, "V4sV4sV4s", "") -BUILTIN(__builtin_ia32_paddd, "V2iV2iV2i", "") -BUILTIN(__builtin_ia32_paddsb, "V8cV8cV8c", "") -BUILTIN(__builtin_ia32_paddsw, "V4sV4sV4s", "") -BUILTIN(__builtin_ia32_paddusb, "V8cV8cV8c", "") -BUILTIN(__builtin_ia32_paddusw, "V4sV4sV4s", "") -BUILTIN(__builtin_ia32_psubb, "V8cV8cV8c", "") -BUILTIN(__builtin_ia32_psubw, "V4sV4sV4s", "") -BUILTIN(__builtin_ia32_psubd, "V2iV2iV2i", "") -BUILTIN(__builtin_ia32_psubsb, "V8cV8cV8c", "") -BUILTIN(__builtin_ia32_psubsw, "V4sV4sV4s", "") -BUILTIN(__builtin_ia32_psubusb, "V8cV8cV8c", "") -BUILTIN(__builtin_ia32_psubusw, "V4sV4sV4s", "") -BUILTIN(__builtin_ia32_pmulhw, "V4sV4sV4s", "") -BUILTIN(__builtin_ia32_pmullw, "V4sV4sV4s", "") -BUILTIN(__builtin_ia32_pmaddwd, "V2iV4sV4s", "") -BUILTIN(__builtin_ia32_pand, "V1LLiV1LLiV1LLi", "") -BUILTIN(__builtin_ia32_pandn, "V1LLiV1LLiV1LLi", "") -BUILTIN(__builtin_ia32_por, "V1LLiV1LLiV1LLi", "") -BUILTIN(__builtin_ia32_pxor, "V1LLiV1LLiV1LLi", "") -BUILTIN(__builtin_ia32_psllw, "V4sV4sV1LLi", "") -BUILTIN(__builtin_ia32_pslld, "V2iV2iV1LLi", "") -BUILTIN(__builtin_ia32_psllq, "V1LLiV1LLiV1LLi", "") -BUILTIN(__builtin_ia32_psrlw, "V4sV4sV1LLi", "") -BUILTIN(__builtin_ia32_psrld, "V2iV2iV1LLi", "") -BUILTIN(__builtin_ia32_psrlq, "V1LLiV1LLiV1LLi", "") -BUILTIN(__builtin_ia32_psraw, "V4sV4sV1LLi", "") -BUILTIN(__builtin_ia32_psrad, "V2iV2iV1LLi", "") -BUILTIN(__builtin_ia32_psllwi, "V4sV4si", "") -BUILTIN(__builtin_ia32_pslldi, "V2iV2ii", "") -BUILTIN(__builtin_ia32_psllqi, "V1LLiV1LLii", "") -BUILTIN(__builtin_ia32_psrlwi, "V4sV4si", "") -BUILTIN(__builtin_ia32_psrldi, "V2iV2ii", "") -BUILTIN(__builtin_ia32_psrlqi, "V1LLiV1LLii", "") -BUILTIN(__builtin_ia32_psrawi, "V4sV4si", "") -BUILTIN(__builtin_ia32_psradi, "V2iV2ii", "") -BUILTIN(__builtin_ia32_packsswb, "V8cV4sV4s", "") -BUILTIN(__builtin_ia32_packssdw, "V4sV2iV2i", "") -BUILTIN(__builtin_ia32_packuswb, "V8cV4sV4s", "") -BUILTIN(__builtin_ia32_punpckhbw, "V8cV8cV8c", "") -BUILTIN(__builtin_ia32_punpckhwd, "V4sV4sV4s", "") -BUILTIN(__builtin_ia32_punpckhdq, "V2iV2iV2i", "") -BUILTIN(__builtin_ia32_punpcklbw, "V8cV8cV8c", "") -BUILTIN(__builtin_ia32_punpcklwd, "V4sV4sV4s", "") -BUILTIN(__builtin_ia32_punpckldq, "V2iV2iV2i", "") -BUILTIN(__builtin_ia32_pcmpeqb, "V8cV8cV8c", "") -BUILTIN(__builtin_ia32_pcmpeqw, "V4sV4sV4s", "") -BUILTIN(__builtin_ia32_pcmpeqd, "V2iV2iV2i", "") -BUILTIN(__builtin_ia32_pcmpgtb, "V8cV8cV8c", "") -BUILTIN(__builtin_ia32_pcmpgtw, "V4sV4sV4s", "") -BUILTIN(__builtin_ia32_pcmpgtd, "V2iV2iV2i", "") -BUILTIN(__builtin_ia32_maskmovq, "vV8cV8cc*", "") -BUILTIN(__builtin_ia32_movntq, "vV1LLi*V1LLi", "") -BUILTIN(__builtin_ia32_vec_init_v2si, "V2iii", "") -BUILTIN(__builtin_ia32_vec_init_v4hi, "V4sssss", "") -BUILTIN(__builtin_ia32_vec_init_v8qi, "V8ccccccccc", "") -BUILTIN(__builtin_ia32_vec_ext_v2si, "iV2ii", "") +TARGET_BUILTIN(_mm_prefetch, "vcC*i", "nc", "mmx") +TARGET_BUILTIN(__builtin_ia32_emms, "v", "", "mmx") +TARGET_BUILTIN(__builtin_ia32_paddb, "V8cV8cV8c", "", "mmx") +TARGET_BUILTIN(__builtin_ia32_paddw, "V4sV4sV4s", "", "mmx") +TARGET_BUILTIN(__builtin_ia32_paddd, "V2iV2iV2i", "", "mmx") +TARGET_BUILTIN(__builtin_ia32_paddsb, "V8cV8cV8c", "", "mmx") +TARGET_BUILTIN(__builtin_ia32_paddsw, "V4sV4sV4s", "", "mmx") +TARGET_BUILTIN(__builtin_ia32_paddusb, "V8cV8cV8c", "", "mmx") +TARGET_BUILTIN(__builtin_ia32_paddusw, "V4sV4sV4s", "", "mmx") +TARGET_BUILTIN(__builtin_ia32_psubb, "V8cV8cV8c", "", "mmx") +TARGET_BUILTIN(__builtin_ia32_psubw, "V4sV4sV4s", "", "mmx") +TARGET_BUILTIN(__builtin_ia32_psubd, "V2iV2iV2i", "", "mmx") +TARGET_BUILTIN(__builtin_ia32_psubsb, "V8cV8cV8c", "", "mmx") +TARGET_BUILTIN(__builtin_ia32_psubsw, "V4sV4sV4s", "", "mmx") +TARGET_BUILTIN(__builtin_ia32_psubusb, "V8cV8cV8c", "", "mmx") +TARGET_BUILTIN(__builtin_ia32_psubusw, "V4sV4sV4s", "", "mmx") +TARGET_BUILTIN(__builtin_ia32_pmulhw, "V4sV4sV4s", "", "mmx") +TARGET_BUILTIN(__builtin_ia32_pmullw, "V4sV4sV4s", "", "mmx") +TARGET_BUILTIN(__builtin_ia32_pmaddwd, "V2iV4sV4s", "", "mmx") +TARGET_BUILTIN(__builtin_ia32_pand, "V1LLiV1LLiV1LLi", "", "mmx") +TARGET_BUILTIN(__builtin_ia32_pandn, "V1LLiV1LLiV1LLi", "", "mmx") +TARGET_BUILTIN(__builtin_ia32_por, "V1LLiV1LLiV1LLi", "", "mmx") +TARGET_BUILTIN(__builtin_ia32_pxor, "V1LLiV1LLiV1LLi", "", "mmx") +TARGET_BUILTIN(__builtin_ia32_psllw, "V4sV4sV1LLi", "", "mmx") +TARGET_BUILTIN(__builtin_ia32_pslld, "V2iV2iV1LLi", "", "mmx") +TARGET_BUILTIN(__builtin_ia32_psllq, "V1LLiV1LLiV1LLi", "", "mmx") +TARGET_BUILTIN(__builtin_ia32_psrlw, "V4sV4sV1LLi", "", "mmx") +TARGET_BUILTIN(__builtin_ia32_psrld, "V2iV2iV1LLi", "", "mmx") +TARGET_BUILTIN(__builtin_ia32_psrlq, "V1LLiV1LLiV1LLi", "", "mmx") +TARGET_BUILTIN(__builtin_ia32_psraw, "V4sV4sV1LLi", "", "mmx") +TARGET_BUILTIN(__builtin_ia32_psrad, "V2iV2iV1LLi", "", "mmx") +TARGET_BUILTIN(__builtin_ia32_psllwi, "V4sV4si", "", "mmx") +TARGET_BUILTIN(__builtin_ia32_pslldi, "V2iV2ii", "", "mmx") +TARGET_BUILTIN(__builtin_ia32_psllqi, "V1LLiV1LLii", "", "mmx") +TARGET_BUILTIN(__builtin_ia32_psrlwi, "V4sV4si", "", "mmx") +TARGET_BUILTIN(__builtin_ia32_psrldi, "V2iV2ii", "", "mmx") +TARGET_BUILTIN(__builtin_ia32_psrlqi, "V1LLiV1LLii", "", "mmx") +TARGET_BUILTIN(__builtin_ia32_psrawi, "V4sV4si", "", "mmx") +TARGET_BUILTIN(__builtin_ia32_psradi, "V2iV2ii", "", "mmx") +TARGET_BUILTIN(__builtin_ia32_packsswb, "V8cV4sV4s", "", "mmx") +TARGET_BUILTIN(__builtin_ia32_packssdw, "V4sV2iV2i", "", "mmx") +TARGET_BUILTIN(__builtin_ia32_packuswb, "V8cV4sV4s", "", "mmx") +TARGET_BUILTIN(__builtin_ia32_punpckhbw, "V8cV8cV8c", "", "mmx") +TARGET_BUILTIN(__builtin_ia32_punpckhwd, "V4sV4sV4s", "", "mmx") +TARGET_BUILTIN(__builtin_ia32_punpckhdq, "V2iV2iV2i", "", "mmx") +TARGET_BUILTIN(__builtin_ia32_punpcklbw, "V8cV8cV8c", "", "mmx") +TARGET_BUILTIN(__builtin_ia32_punpcklwd, "V4sV4sV4s", "", "mmx") +TARGET_BUILTIN(__builtin_ia32_punpckldq, "V2iV2iV2i", "", "mmx") +TARGET_BUILTIN(__builtin_ia32_pcmpeqb, "V8cV8cV8c", "", "mmx") +TARGET_BUILTIN(__builtin_ia32_pcmpeqw, "V4sV4sV4s", "", "mmx") +TARGET_BUILTIN(__builtin_ia32_pcmpeqd, "V2iV2iV2i", "", "mmx") +TARGET_BUILTIN(__builtin_ia32_pcmpgtb, "V8cV8cV8c", "", "mmx") +TARGET_BUILTIN(__builtin_ia32_pcmpgtw, "V4sV4sV4s", "", "mmx") +TARGET_BUILTIN(__builtin_ia32_pcmpgtd, "V2iV2iV2i", "", "mmx") +TARGET_BUILTIN(__builtin_ia32_maskmovq, "vV8cV8cc*", "", "mmx") +TARGET_BUILTIN(__builtin_ia32_movntq, "vV1LLi*V1LLi", "", "mmx") +TARGET_BUILTIN(__builtin_ia32_vec_init_v2si, "V2iii", "", "mmx") +TARGET_BUILTIN(__builtin_ia32_vec_init_v4hi, "V4sssss", "", "mmx") +TARGET_BUILTIN(__builtin_ia32_vec_init_v8qi, "V8ccccccccc", "", "mmx") +TARGET_BUILTIN(__builtin_ia32_vec_ext_v2si, "iV2ii", "", "mmx") // MMX2 (MMX+SSE) intrinsics -BUILTIN(__builtin_ia32_cvtpi2ps, "V4fV4fV2i", "") -BUILTIN(__builtin_ia32_cvtps2pi, "V2iV4f", "") -BUILTIN(__builtin_ia32_cvttps2pi, "V2iV4f", "") -BUILTIN(__builtin_ia32_pavgb, "V8cV8cV8c", "") -BUILTIN(__builtin_ia32_pavgw, "V4sV4sV4s", "") -BUILTIN(__builtin_ia32_pmaxsw, "V4sV4sV4s", "") -BUILTIN(__builtin_ia32_pmaxub, "V8cV8cV8c", "") -BUILTIN(__builtin_ia32_pminsw, "V4sV4sV4s", "") -BUILTIN(__builtin_ia32_pminub, "V8cV8cV8c", "") -BUILTIN(__builtin_ia32_pmovmskb, "iV8c", "") -BUILTIN(__builtin_ia32_pmulhuw, "V4sV4sV4s", "") -BUILTIN(__builtin_ia32_psadbw, "V4sV8cV8c", "") -BUILTIN(__builtin_ia32_pshufw, "V4sV4sIc", "") +TARGET_BUILTIN(__builtin_ia32_cvtpi2ps, "V4fV4fV2i", "", "sse") +TARGET_BUILTIN(__builtin_ia32_cvtps2pi, "V2iV4f", "", "sse") +TARGET_BUILTIN(__builtin_ia32_cvttps2pi, "V2iV4f", "", "sse") +TARGET_BUILTIN(__builtin_ia32_pavgb, "V8cV8cV8c", "", "sse") +TARGET_BUILTIN(__builtin_ia32_pavgw, "V4sV4sV4s", "", "sse") +TARGET_BUILTIN(__builtin_ia32_pmaxsw, "V4sV4sV4s", "", "sse") +TARGET_BUILTIN(__builtin_ia32_pmaxub, "V8cV8cV8c", "", "sse") +TARGET_BUILTIN(__builtin_ia32_pminsw, "V4sV4sV4s", "", "sse") +TARGET_BUILTIN(__builtin_ia32_pminub, "V8cV8cV8c", "", "sse") +TARGET_BUILTIN(__builtin_ia32_pmovmskb, "iV8c", "", "sse") +TARGET_BUILTIN(__builtin_ia32_pmulhuw, "V4sV4sV4s", "", "sse") +TARGET_BUILTIN(__builtin_ia32_psadbw, "V4sV8cV8c", "", "sse") +TARGET_BUILTIN(__builtin_ia32_pshufw, "V4sV4sIc", "", "sse") // MMX+SSE2 -BUILTIN(__builtin_ia32_cvtpd2pi, "V2iV2d", "") -BUILTIN(__builtin_ia32_cvtpi2pd, "V2dV2i", "") -BUILTIN(__builtin_ia32_cvttpd2pi, "V2iV2d", "") -BUILTIN(__builtin_ia32_paddq, "V1LLiV1LLiV1LLi", "") -BUILTIN(__builtin_ia32_pmuludq, "V1LLiV2iV2i", "") -BUILTIN(__builtin_ia32_psubq, "V1LLiV1LLiV1LLi", "") +TARGET_BUILTIN(__builtin_ia32_cvtpd2pi, "V2iV2d", "", "sse2") +TARGET_BUILTIN(__builtin_ia32_cvtpi2pd, "V2dV2i", "", "sse2") +TARGET_BUILTIN(__builtin_ia32_cvttpd2pi, "V2iV2d", "", "sse2") +TARGET_BUILTIN(__builtin_ia32_paddq, "V1LLiV1LLiV1LLi", "", "sse2") +TARGET_BUILTIN(__builtin_ia32_pmuludq, "V1LLiV2iV2i", "", "sse2") +TARGET_BUILTIN(__builtin_ia32_psubq, "V1LLiV1LLiV1LLi", "", "sse2") // MMX+SSSE3 -BUILTIN(__builtin_ia32_pabsb, "V8cV8c", "") -BUILTIN(__builtin_ia32_pabsd, "V2iV2i", "") -BUILTIN(__builtin_ia32_pabsw, "V4sV4s", "") -BUILTIN(__builtin_ia32_palignr, "V8cV8cV8cIc", "") -BUILTIN(__builtin_ia32_phaddd, "V2iV2iV2i", "") -BUILTIN(__builtin_ia32_phaddsw, "V4sV4sV4s", "") -BUILTIN(__builtin_ia32_phaddw, "V4sV4sV4s", "") -BUILTIN(__builtin_ia32_phsubd, "V2iV2iV2i", "") -BUILTIN(__builtin_ia32_phsubsw, "V4sV4sV4s", "") -BUILTIN(__builtin_ia32_phsubw, "V4sV4sV4s", "") -BUILTIN(__builtin_ia32_pmaddubsw, "V8cV8cV8c", "") -BUILTIN(__builtin_ia32_pmulhrsw, "V4sV4sV4s", "") -BUILTIN(__builtin_ia32_pshufb, "V8cV8cV8c", "") -BUILTIN(__builtin_ia32_psignw, "V4sV4sV4s", "") -BUILTIN(__builtin_ia32_psignb, "V8cV8cV8c", "") -BUILTIN(__builtin_ia32_psignd, "V2iV2iV2i", "") +TARGET_BUILTIN(__builtin_ia32_pabsb, "V8cV8c", "", "ssse3") +TARGET_BUILTIN(__builtin_ia32_pabsd, "V2iV2i", "", "ssse3") +TARGET_BUILTIN(__builtin_ia32_pabsw, "V4sV4s", "", "ssse3") +TARGET_BUILTIN(__builtin_ia32_palignr, "V8cV8cV8cIc", "", "ssse3") +TARGET_BUILTIN(__builtin_ia32_phaddd, "V2iV2iV2i", "", "ssse3") +TARGET_BUILTIN(__builtin_ia32_phaddsw, "V4sV4sV4s", "", "ssse3") +TARGET_BUILTIN(__builtin_ia32_phaddw, "V4sV4sV4s", "", "ssse3") +TARGET_BUILTIN(__builtin_ia32_phsubd, "V2iV2iV2i", "", "ssse3") +TARGET_BUILTIN(__builtin_ia32_phsubsw, "V4sV4sV4s", "", "ssse3") +TARGET_BUILTIN(__builtin_ia32_phsubw, "V4sV4sV4s", "", "ssse3") +TARGET_BUILTIN(__builtin_ia32_pmaddubsw, "V8cV8cV8c", "", "ssse3") +TARGET_BUILTIN(__builtin_ia32_pmulhrsw, "V4sV4sV4s", "", "ssse3") +TARGET_BUILTIN(__builtin_ia32_pshufb, "V8cV8cV8c", "", "ssse3") +TARGET_BUILTIN(__builtin_ia32_psignw, "V4sV4sV4s", "", "ssse3") +TARGET_BUILTIN(__builtin_ia32_psignb, "V8cV8cV8c", "", "ssse3") +TARGET_BUILTIN(__builtin_ia32_psignd, "V2iV2iV2i", "", "ssse3") // SSE intrinsics. -BUILTIN(__builtin_ia32_comieq, "iV4fV4f", "") -BUILTIN(__builtin_ia32_comilt, "iV4fV4f", "") -BUILTIN(__builtin_ia32_comile, "iV4fV4f", "") -BUILTIN(__builtin_ia32_comigt, "iV4fV4f", "") -BUILTIN(__builtin_ia32_comige, "iV4fV4f", "") -BUILTIN(__builtin_ia32_comineq, "iV4fV4f", "") -BUILTIN(__builtin_ia32_ucomieq, "iV4fV4f", "") -BUILTIN(__builtin_ia32_ucomilt, "iV4fV4f", "") -BUILTIN(__builtin_ia32_ucomile, "iV4fV4f", "") -BUILTIN(__builtin_ia32_ucomigt, "iV4fV4f", "") -BUILTIN(__builtin_ia32_ucomige, "iV4fV4f", "") -BUILTIN(__builtin_ia32_ucomineq, "iV4fV4f", "") -BUILTIN(__builtin_ia32_comisdeq, "iV2dV2d", "") -BUILTIN(__builtin_ia32_comisdlt, "iV2dV2d", "") -BUILTIN(__builtin_ia32_comisdle, "iV2dV2d", "") -BUILTIN(__builtin_ia32_comisdgt, "iV2dV2d", "") -BUILTIN(__builtin_ia32_comisdge, "iV2dV2d", "") -BUILTIN(__builtin_ia32_comisdneq, "iV2dV2d", "") -BUILTIN(__builtin_ia32_ucomisdeq, "iV2dV2d", "") -BUILTIN(__builtin_ia32_ucomisdlt, "iV2dV2d", "") -BUILTIN(__builtin_ia32_ucomisdle, "iV2dV2d", "") -BUILTIN(__builtin_ia32_ucomisdgt, "iV2dV2d", "") -BUILTIN(__builtin_ia32_ucomisdge, "iV2dV2d", "") -BUILTIN(__builtin_ia32_ucomisdneq, "iV2dV2d", "") -BUILTIN(__builtin_ia32_cmpps, "V4fV4fV4fIc", "") -BUILTIN(__builtin_ia32_cmpeqps, "V4fV4fV4f", "") -BUILTIN(__builtin_ia32_cmpltps, "V4fV4fV4f", "") -BUILTIN(__builtin_ia32_cmpleps, "V4fV4fV4f", "") -BUILTIN(__builtin_ia32_cmpunordps, "V4fV4fV4f", "") -BUILTIN(__builtin_ia32_cmpneqps, "V4fV4fV4f", "") -BUILTIN(__builtin_ia32_cmpnltps, "V4fV4fV4f", "") -BUILTIN(__builtin_ia32_cmpnleps, "V4fV4fV4f", "") -BUILTIN(__builtin_ia32_cmpordps, "V4fV4fV4f", "") -BUILTIN(__builtin_ia32_cmpss, "V4fV4fV4fIc", "") -BUILTIN(__builtin_ia32_cmpeqss, "V4fV4fV4f", "") -BUILTIN(__builtin_ia32_cmpltss, "V4fV4fV4f", "") -BUILTIN(__builtin_ia32_cmpless, "V4fV4fV4f", "") -BUILTIN(__builtin_ia32_cmpunordss, "V4fV4fV4f", "") -BUILTIN(__builtin_ia32_cmpneqss, "V4fV4fV4f", "") -BUILTIN(__builtin_ia32_cmpnltss, "V4fV4fV4f", "") -BUILTIN(__builtin_ia32_cmpnless, "V4fV4fV4f", "") -BUILTIN(__builtin_ia32_cmpordss, "V4fV4fV4f", "") -BUILTIN(__builtin_ia32_minps, "V4fV4fV4f", "") -BUILTIN(__builtin_ia32_maxps, "V4fV4fV4f", "") -BUILTIN(__builtin_ia32_minss, "V4fV4fV4f", "") -BUILTIN(__builtin_ia32_maxss, "V4fV4fV4f", "") -BUILTIN(__builtin_ia32_cmppd, "V2dV2dV2dIc", "") -BUILTIN(__builtin_ia32_cmpeqpd, "V2dV2dV2d", "") -BUILTIN(__builtin_ia32_cmpltpd, "V2dV2dV2d", "") -BUILTIN(__builtin_ia32_cmplepd, "V2dV2dV2d", "") -BUILTIN(__builtin_ia32_cmpunordpd, "V2dV2dV2d", "") -BUILTIN(__builtin_ia32_cmpneqpd, "V2dV2dV2d", "") -BUILTIN(__builtin_ia32_cmpnltpd, "V2dV2dV2d", "") -BUILTIN(__builtin_ia32_cmpnlepd, "V2dV2dV2d", "") -BUILTIN(__builtin_ia32_cmpordpd, "V2dV2dV2d", "") -BUILTIN(__builtin_ia32_cmpsd, "V2dV2dV2dIc", "") -BUILTIN(__builtin_ia32_cmpeqsd, "V2dV2dV2d", "") -BUILTIN(__builtin_ia32_cmpltsd, "V2dV2dV2d", "") -BUILTIN(__builtin_ia32_cmplesd, "V2dV2dV2d", "") -BUILTIN(__builtin_ia32_cmpunordsd, "V2dV2dV2d", "") -BUILTIN(__builtin_ia32_cmpneqsd, "V2dV2dV2d", "") -BUILTIN(__builtin_ia32_cmpnltsd, "V2dV2dV2d", "") -BUILTIN(__builtin_ia32_cmpnlesd, "V2dV2dV2d", "") -BUILTIN(__builtin_ia32_cmpordsd, "V2dV2dV2d", "") -BUILTIN(__builtin_ia32_minpd, "V2dV2dV2d", "") -BUILTIN(__builtin_ia32_maxpd, "V2dV2dV2d", "") -BUILTIN(__builtin_ia32_minsd, "V2dV2dV2d", "") -BUILTIN(__builtin_ia32_maxsd, "V2dV2dV2d", "") -BUILTIN(__builtin_ia32_paddsb128, "V16cV16cV16c", "") -BUILTIN(__builtin_ia32_paddsw128, "V8sV8sV8s", "") -BUILTIN(__builtin_ia32_psubsb128, "V16cV16cV16c", "") -BUILTIN(__builtin_ia32_psubsw128, "V8sV8sV8s", "") -BUILTIN(__builtin_ia32_paddusb128, "V16cV16cV16c", "") -BUILTIN(__builtin_ia32_paddusw128, "V8sV8sV8s", "") -BUILTIN(__builtin_ia32_psubusb128, "V16cV16cV16c", "") -BUILTIN(__builtin_ia32_psubusw128, "V8sV8sV8s", "") -BUILTIN(__builtin_ia32_pmulhw128, "V8sV8sV8s", "") -BUILTIN(__builtin_ia32_pavgb128, "V16cV16cV16c", "") -BUILTIN(__builtin_ia32_pavgw128, "V8sV8sV8s", "") -BUILTIN(__builtin_ia32_pmaxub128, "V16cV16cV16c", "") -BUILTIN(__builtin_ia32_pmaxsw128, "V8sV8sV8s", "") -BUILTIN(__builtin_ia32_pminub128, "V16cV16cV16c", "") -BUILTIN(__builtin_ia32_pminsw128, "V8sV8sV8s", "") -BUILTIN(__builtin_ia32_packsswb128, "V16cV8sV8s", "") -BUILTIN(__builtin_ia32_packssdw128, "V8sV4iV4i", "") -BUILTIN(__builtin_ia32_packuswb128, "V16cV8sV8s", "") -BUILTIN(__builtin_ia32_pmulhuw128, "V8sV8sV8s", "") -BUILTIN(__builtin_ia32_addsubps, "V4fV4fV4f", "") -BUILTIN(__builtin_ia32_addsubpd, "V2dV2dV2d", "") -BUILTIN(__builtin_ia32_haddps, "V4fV4fV4f", "") -BUILTIN(__builtin_ia32_haddpd, "V2dV2dV2d", "") -BUILTIN(__builtin_ia32_hsubps, "V4fV4fV4f", "") -BUILTIN(__builtin_ia32_hsubpd, "V2dV2dV2d", "") -BUILTIN(__builtin_ia32_phaddw128, "V8sV8sV8s", "") -BUILTIN(__builtin_ia32_phaddd128, "V4iV4iV4i", "") -BUILTIN(__builtin_ia32_phaddsw128, "V8sV8sV8s", "") -BUILTIN(__builtin_ia32_phsubw128, "V8sV8sV8s", "") -BUILTIN(__builtin_ia32_phsubd128, "V4iV4iV4i", "") -BUILTIN(__builtin_ia32_phsubsw128, "V8sV8sV8s", "") -BUILTIN(__builtin_ia32_pmaddubsw128, "V8sV16cV16c", "") -BUILTIN(__builtin_ia32_pmulhrsw128, "V8sV8sV8s", "") -BUILTIN(__builtin_ia32_pshufb128, "V16cV16cV16c", "") -BUILTIN(__builtin_ia32_psignb128, "V16cV16cV16c", "") -BUILTIN(__builtin_ia32_psignw128, "V8sV8sV8s", "") -BUILTIN(__builtin_ia32_psignd128, "V4iV4iV4i", "") -BUILTIN(__builtin_ia32_pabsb128, "V16cV16c", "") -BUILTIN(__builtin_ia32_pabsw128, "V8sV8s", "") -BUILTIN(__builtin_ia32_pabsd128, "V4iV4i", "") -BUILTIN(__builtin_ia32_ldmxcsr, "vUi", "") -BUILTIN(__builtin_ia32_stmxcsr, "Ui", "") -BUILTIN(__builtin_ia32_cvtss2si, "iV4f", "") -BUILTIN(__builtin_ia32_cvtss2si64, "LLiV4f", "") -BUILTIN(__builtin_ia32_storeups, "vf*V4f", "") -BUILTIN(__builtin_ia32_storehps, "vV2i*V4f", "") -BUILTIN(__builtin_ia32_storelps, "vV2i*V4f", "") -BUILTIN(__builtin_ia32_movmskps, "iV4f", "") -BUILTIN(__builtin_ia32_movntps, "vf*V4f", "") -BUILTIN(__builtin_ia32_sfence, "v", "") -BUILTIN(__builtin_ia32_rcpps, "V4fV4f", "") -BUILTIN(__builtin_ia32_rcpss, "V4fV4f", "") -BUILTIN(__builtin_ia32_rsqrtps, "V4fV4f", "") -BUILTIN(__builtin_ia32_rsqrtss, "V4fV4f", "") -BUILTIN(__builtin_ia32_sqrtps, "V4fV4f", "") -BUILTIN(__builtin_ia32_sqrtss, "V4fV4f", "") -BUILTIN(__builtin_ia32_maskmovdqu, "vV16cV16cc*", "") -BUILTIN(__builtin_ia32_storeupd, "vd*V2d", "") -BUILTIN(__builtin_ia32_movmskpd, "iV2d", "") -BUILTIN(__builtin_ia32_pmovmskb128, "iV16c", "") -BUILTIN(__builtin_ia32_movnti, "vi*i", "") -BUILTIN(__builtin_ia32_movnti64, "vLLi*LLi", "") -BUILTIN(__builtin_ia32_movntpd, "vd*V2d", "") -BUILTIN(__builtin_ia32_movntdq, "vV2LLi*V2LLi", "") -BUILTIN(__builtin_ia32_psadbw128, "V2LLiV16cV16c", "") -BUILTIN(__builtin_ia32_sqrtpd, "V2dV2d", "") -BUILTIN(__builtin_ia32_sqrtsd, "V2dV2d", "") -BUILTIN(__builtin_ia32_cvtdq2pd, "V2dV4i", "") -BUILTIN(__builtin_ia32_cvtdq2ps, "V4fV4i", "") -BUILTIN(__builtin_ia32_cvtpd2dq, "V2LLiV2d", "") -BUILTIN(__builtin_ia32_cvtpd2ps, "V4fV2d", "") -BUILTIN(__builtin_ia32_cvttpd2dq, "V4iV2d", "") -BUILTIN(__builtin_ia32_cvtsd2si, "iV2d", "") -BUILTIN(__builtin_ia32_cvtsd2si64, "LLiV2d", "") -BUILTIN(__builtin_ia32_cvtps2dq, "V4iV4f", "") -BUILTIN(__builtin_ia32_cvtps2pd, "V2dV4f", "") -BUILTIN(__builtin_ia32_cvttps2dq, "V4iV4f", "") -BUILTIN(__builtin_ia32_clflush, "vvC*", "") -BUILTIN(__builtin_ia32_lfence, "v", "") -BUILTIN(__builtin_ia32_mfence, "v", "") -BUILTIN(__builtin_ia32_storedqu, "vc*V16c", "") -BUILTIN(__builtin_ia32_pmuludq128, "V2LLiV4iV4i", "") -BUILTIN(__builtin_ia32_psraw128, "V8sV8sV8s", "") -BUILTIN(__builtin_ia32_psrad128, "V4iV4iV4i", "") -BUILTIN(__builtin_ia32_psrlw128, "V8sV8sV8s", "") -BUILTIN(__builtin_ia32_psrld128, "V4iV4iV4i", "") -BUILTIN(__builtin_ia32_psrlq128, "V2LLiV2LLiV2LLi", "") -BUILTIN(__builtin_ia32_psllw128, "V8sV8sV8s", "") -BUILTIN(__builtin_ia32_pslld128, "V4iV4iV4i", "") -BUILTIN(__builtin_ia32_psllq128, "V2LLiV2LLiV2LLi", "") -BUILTIN(__builtin_ia32_psllwi128, "V8sV8si", "") -BUILTIN(__builtin_ia32_pslldi128, "V4iV4ii", "") -BUILTIN(__builtin_ia32_psllqi128, "V2LLiV2LLii", "") -BUILTIN(__builtin_ia32_psrlwi128, "V8sV8si", "") -BUILTIN(__builtin_ia32_psrldi128, "V4iV4ii", "") -BUILTIN(__builtin_ia32_psrlqi128, "V2LLiV2LLii", "") -BUILTIN(__builtin_ia32_psrawi128, "V8sV8si", "") -BUILTIN(__builtin_ia32_psradi128, "V4iV4ii", "") -BUILTIN(__builtin_ia32_pmaddwd128, "V4iV8sV8s", "") -BUILTIN(__builtin_ia32_monitor, "vv*UiUi", "") -BUILTIN(__builtin_ia32_mwait, "vUiUi", "") -BUILTIN(__builtin_ia32_lddqu, "V16ccC*", "") -BUILTIN(__builtin_ia32_palignr128, "V16cV16cV16cIc", "") -BUILTIN(__builtin_ia32_insertps128, "V4fV4fV4fIc", "") - -BUILTIN(__builtin_ia32_pblendvb128, "V16cV16cV16cV16c", "") -BUILTIN(__builtin_ia32_blendvpd, "V2dV2dV2dV2d", "") -BUILTIN(__builtin_ia32_blendvps, "V4fV4fV4fV4f", "") - -BUILTIN(__builtin_ia32_packusdw128, "V8sV4iV4i", "") -BUILTIN(__builtin_ia32_pmaxsb128, "V16cV16cV16c", "") -BUILTIN(__builtin_ia32_pmaxsd128, "V4iV4iV4i", "") -BUILTIN(__builtin_ia32_pmaxud128, "V4iV4iV4i", "") -BUILTIN(__builtin_ia32_pmaxuw128, "V8sV8sV8s", "") -BUILTIN(__builtin_ia32_pminsb128, "V16cV16cV16c", "") -BUILTIN(__builtin_ia32_pminsd128, "V4iV4iV4i", "") -BUILTIN(__builtin_ia32_pminud128, "V4iV4iV4i", "") -BUILTIN(__builtin_ia32_pminuw128, "V8sV8sV8s", "") -BUILTIN(__builtin_ia32_pmovsxbd128, "V4iV16c", "") -BUILTIN(__builtin_ia32_pmovsxbq128, "V2LLiV16c", "") -BUILTIN(__builtin_ia32_pmovsxbw128, "V8sV16c", "") -BUILTIN(__builtin_ia32_pmovsxdq128, "V2LLiV4i", "") -BUILTIN(__builtin_ia32_pmovsxwd128, "V4iV8s", "") -BUILTIN(__builtin_ia32_pmovsxwq128, "V2LLiV8s", "") -BUILTIN(__builtin_ia32_pmovzxbd128, "V4iV16c", "") -BUILTIN(__builtin_ia32_pmovzxbq128, "V2LLiV16c", "") -BUILTIN(__builtin_ia32_pmovzxbw128, "V8sV16c", "") -BUILTIN(__builtin_ia32_pmovzxdq128, "V2LLiV4i", "") -BUILTIN(__builtin_ia32_pmovzxwd128, "V4iV8s", "") -BUILTIN(__builtin_ia32_pmovzxwq128, "V2LLiV8s", "") -BUILTIN(__builtin_ia32_pmuldq128, "V2LLiV4iV4i", "") -BUILTIN(__builtin_ia32_pmulld128, "V4iV4iV4i", "") -BUILTIN(__builtin_ia32_roundps, "V4fV4fi", "") -BUILTIN(__builtin_ia32_roundss, "V4fV4fV4fi", "") -BUILTIN(__builtin_ia32_roundsd, "V2dV2dV2di", "") -BUILTIN(__builtin_ia32_roundpd, "V2dV2di", "") -BUILTIN(__builtin_ia32_dpps, "V4fV4fV4fIc", "") -BUILTIN(__builtin_ia32_dppd, "V2dV2dV2dIc", "") -BUILTIN(__builtin_ia32_movntdqa, "V2LLiV2LLi*", "") -BUILTIN(__builtin_ia32_ptestz128, "iV2LLiV2LLi", "") -BUILTIN(__builtin_ia32_ptestc128, "iV2LLiV2LLi", "") -BUILTIN(__builtin_ia32_ptestnzc128, "iV2LLiV2LLi", "") -BUILTIN(__builtin_ia32_mpsadbw128, "V16cV16cV16cIc", "") -BUILTIN(__builtin_ia32_phminposuw128, "V8sV8s", "") +TARGET_BUILTIN(__builtin_ia32_comieq, "iV4fV4f", "", "sse") +TARGET_BUILTIN(__builtin_ia32_comilt, "iV4fV4f", "", "sse") +TARGET_BUILTIN(__builtin_ia32_comile, "iV4fV4f", "", "sse") +TARGET_BUILTIN(__builtin_ia32_comigt, "iV4fV4f", "", "sse") +TARGET_BUILTIN(__builtin_ia32_comige, "iV4fV4f", "", "sse") +TARGET_BUILTIN(__builtin_ia32_comineq, "iV4fV4f", "", "sse") +TARGET_BUILTIN(__builtin_ia32_ucomieq, "iV4fV4f", "", "sse") +TARGET_BUILTIN(__builtin_ia32_ucomilt, "iV4fV4f", "", "sse") +TARGET_BUILTIN(__builtin_ia32_ucomile, "iV4fV4f", "", "sse") +TARGET_BUILTIN(__builtin_ia32_ucomigt, "iV4fV4f", "", "sse") +TARGET_BUILTIN(__builtin_ia32_ucomige, "iV4fV4f", "", "sse") +TARGET_BUILTIN(__builtin_ia32_ucomineq, "iV4fV4f", "", "sse") + +TARGET_BUILTIN(__builtin_ia32_comisdeq, "iV2dV2d", "", "sse2") +TARGET_BUILTIN(__builtin_ia32_comisdlt, "iV2dV2d", "", "sse2") +TARGET_BUILTIN(__builtin_ia32_comisdle, "iV2dV2d", "", "sse2") +TARGET_BUILTIN(__builtin_ia32_comisdgt, "iV2dV2d", "", "sse2") +TARGET_BUILTIN(__builtin_ia32_comisdge, "iV2dV2d", "", "sse2") +TARGET_BUILTIN(__builtin_ia32_comisdneq, "iV2dV2d", "", "sse2") +TARGET_BUILTIN(__builtin_ia32_ucomisdeq, "iV2dV2d", "", "sse2") +TARGET_BUILTIN(__builtin_ia32_ucomisdlt, "iV2dV2d", "", "sse2") +TARGET_BUILTIN(__builtin_ia32_ucomisdle, "iV2dV2d", "", "sse2") +TARGET_BUILTIN(__builtin_ia32_ucomisdgt, "iV2dV2d", "", "sse2") +TARGET_BUILTIN(__builtin_ia32_ucomisdge, "iV2dV2d", "", "sse2") +TARGET_BUILTIN(__builtin_ia32_ucomisdneq, "iV2dV2d", "", "sse2") + +TARGET_BUILTIN(__builtin_ia32_cmpps, "V4fV4fV4fIc", "", "sse") +TARGET_BUILTIN(__builtin_ia32_cmpeqps, "V4fV4fV4f", "", "sse") +TARGET_BUILTIN(__builtin_ia32_cmpltps, "V4fV4fV4f", "", "sse") +TARGET_BUILTIN(__builtin_ia32_cmpleps, "V4fV4fV4f", "", "sse") +TARGET_BUILTIN(__builtin_ia32_cmpunordps, "V4fV4fV4f", "", "sse") +TARGET_BUILTIN(__builtin_ia32_cmpneqps, "V4fV4fV4f", "", "sse") +TARGET_BUILTIN(__builtin_ia32_cmpnltps, "V4fV4fV4f", "", "sse") +TARGET_BUILTIN(__builtin_ia32_cmpnleps, "V4fV4fV4f", "", "sse") +TARGET_BUILTIN(__builtin_ia32_cmpordps, "V4fV4fV4f", "", "sse") +TARGET_BUILTIN(__builtin_ia32_cmpss, "V4fV4fV4fIc", "", "sse") +TARGET_BUILTIN(__builtin_ia32_cmpeqss, "V4fV4fV4f", "", "sse") +TARGET_BUILTIN(__builtin_ia32_cmpltss, "V4fV4fV4f", "", "sse") +TARGET_BUILTIN(__builtin_ia32_cmpless, "V4fV4fV4f", "", "sse") +TARGET_BUILTIN(__builtin_ia32_cmpunordss, "V4fV4fV4f", "", "sse") +TARGET_BUILTIN(__builtin_ia32_cmpneqss, "V4fV4fV4f", "", "sse") +TARGET_BUILTIN(__builtin_ia32_cmpnltss, "V4fV4fV4f", "", "sse") +TARGET_BUILTIN(__builtin_ia32_cmpnless, "V4fV4fV4f", "", "sse") +TARGET_BUILTIN(__builtin_ia32_cmpordss, "V4fV4fV4f", "", "sse") +TARGET_BUILTIN(__builtin_ia32_minps, "V4fV4fV4f", "", "sse") +TARGET_BUILTIN(__builtin_ia32_maxps, "V4fV4fV4f", "", "sse") +TARGET_BUILTIN(__builtin_ia32_minss, "V4fV4fV4f", "", "sse") +TARGET_BUILTIN(__builtin_ia32_maxss, "V4fV4fV4f", "", "sse") + +TARGET_BUILTIN(__builtin_ia32_cmppd, "V2dV2dV2dIc", "", "sse2") +TARGET_BUILTIN(__builtin_ia32_cmpeqpd, "V2dV2dV2d", "", "sse2") +TARGET_BUILTIN(__builtin_ia32_cmpltpd, "V2dV2dV2d", "", "sse2") +TARGET_BUILTIN(__builtin_ia32_cmplepd, "V2dV2dV2d", "", "sse2") +TARGET_BUILTIN(__builtin_ia32_cmpunordpd, "V2dV2dV2d", "", "sse2") +TARGET_BUILTIN(__builtin_ia32_cmpneqpd, "V2dV2dV2d", "", "sse2") +TARGET_BUILTIN(__builtin_ia32_cmpnltpd, "V2dV2dV2d", "", "sse2") +TARGET_BUILTIN(__builtin_ia32_cmpnlepd, "V2dV2dV2d", "", "sse2") +TARGET_BUILTIN(__builtin_ia32_cmpordpd, "V2dV2dV2d", "", "sse2") +TARGET_BUILTIN(__builtin_ia32_cmpsd, "V2dV2dV2dIc", "", "sse2") +TARGET_BUILTIN(__builtin_ia32_cmpeqsd, "V2dV2dV2d", "", "sse2") +TARGET_BUILTIN(__builtin_ia32_cmpltsd, "V2dV2dV2d", "", "sse2") +TARGET_BUILTIN(__builtin_ia32_cmplesd, "V2dV2dV2d", "", "sse2") +TARGET_BUILTIN(__builtin_ia32_cmpunordsd, "V2dV2dV2d", "", "sse2") +TARGET_BUILTIN(__builtin_ia32_cmpneqsd, "V2dV2dV2d", "", "sse2") +TARGET_BUILTIN(__builtin_ia32_cmpnltsd, "V2dV2dV2d", "", "sse2") +TARGET_BUILTIN(__builtin_ia32_cmpnlesd, "V2dV2dV2d", "", "sse2") +TARGET_BUILTIN(__builtin_ia32_cmpordsd, "V2dV2dV2d", "", "sse2") +TARGET_BUILTIN(__builtin_ia32_minpd, "V2dV2dV2d", "", "sse2") +TARGET_BUILTIN(__builtin_ia32_maxpd, "V2dV2dV2d", "", "sse2") +TARGET_BUILTIN(__builtin_ia32_minsd, "V2dV2dV2d", "", "sse2") +TARGET_BUILTIN(__builtin_ia32_maxsd, "V2dV2dV2d", "", "sse2") +TARGET_BUILTIN(__builtin_ia32_paddsb128, "V16cV16cV16c", "", "sse2") +TARGET_BUILTIN(__builtin_ia32_paddsw128, "V8sV8sV8s", "", "sse2") +TARGET_BUILTIN(__builtin_ia32_psubsb128, "V16cV16cV16c", "", "sse2") +TARGET_BUILTIN(__builtin_ia32_psubsw128, "V8sV8sV8s", "", "sse2") +TARGET_BUILTIN(__builtin_ia32_paddusb128, "V16cV16cV16c", "", "sse2") +TARGET_BUILTIN(__builtin_ia32_paddusw128, "V8sV8sV8s", "", "sse2") +TARGET_BUILTIN(__builtin_ia32_psubusb128, "V16cV16cV16c", "", "sse2") +TARGET_BUILTIN(__builtin_ia32_psubusw128, "V8sV8sV8s", "", "sse2") +TARGET_BUILTIN(__builtin_ia32_pmulhw128, "V8sV8sV8s", "", "sse2") +TARGET_BUILTIN(__builtin_ia32_pavgb128, "V16cV16cV16c", "", "sse2") +TARGET_BUILTIN(__builtin_ia32_pavgw128, "V8sV8sV8s", "", "sse2") +TARGET_BUILTIN(__builtin_ia32_pmaxub128, "V16cV16cV16c", "", "sse2") +TARGET_BUILTIN(__builtin_ia32_pmaxsw128, "V8sV8sV8s", "", "sse2") +TARGET_BUILTIN(__builtin_ia32_pminub128, "V16cV16cV16c", "", "sse2") +TARGET_BUILTIN(__builtin_ia32_pminsw128, "V8sV8sV8s", "", "sse2") +TARGET_BUILTIN(__builtin_ia32_packsswb128, "V16cV8sV8s", "", "sse2") +TARGET_BUILTIN(__builtin_ia32_packssdw128, "V8sV4iV4i", "", "sse2") +TARGET_BUILTIN(__builtin_ia32_packuswb128, "V16cV8sV8s", "", "sse2") +TARGET_BUILTIN(__builtin_ia32_pmulhuw128, "V8sV8sV8s", "", "sse2") + +TARGET_BUILTIN(__builtin_ia32_addsubps, "V4fV4fV4f", "", "sse3") +TARGET_BUILTIN(__builtin_ia32_addsubpd, "V2dV2dV2d", "", "sse3") +TARGET_BUILTIN(__builtin_ia32_haddps, "V4fV4fV4f", "", "sse3") +TARGET_BUILTIN(__builtin_ia32_haddpd, "V2dV2dV2d", "", "sse3") +TARGET_BUILTIN(__builtin_ia32_hsubps, "V4fV4fV4f", "", "sse3") +TARGET_BUILTIN(__builtin_ia32_hsubpd, "V2dV2dV2d", "", "sse3") +TARGET_BUILTIN(__builtin_ia32_phaddw128, "V8sV8sV8s", "", "ssse3") +TARGET_BUILTIN(__builtin_ia32_phaddd128, "V4iV4iV4i", "", "ssse3") +TARGET_BUILTIN(__builtin_ia32_phaddsw128, "V8sV8sV8s", "", "ssse3") +TARGET_BUILTIN(__builtin_ia32_phsubw128, "V8sV8sV8s", "", "ssse3") +TARGET_BUILTIN(__builtin_ia32_phsubd128, "V4iV4iV4i", "", "ssse3") +TARGET_BUILTIN(__builtin_ia32_phsubsw128, "V8sV8sV8s", "", "ssse3") +TARGET_BUILTIN(__builtin_ia32_pmaddubsw128, "V8sV16cV16c", "", "ssse3") +TARGET_BUILTIN(__builtin_ia32_pmulhrsw128, "V8sV8sV8s", "", "ssse3") +TARGET_BUILTIN(__builtin_ia32_pshufb128, "V16cV16cV16c", "", "ssse3") +TARGET_BUILTIN(__builtin_ia32_psignb128, "V16cV16cV16c", "", "ssse3") +TARGET_BUILTIN(__builtin_ia32_psignw128, "V8sV8sV8s", "", "ssse3") +TARGET_BUILTIN(__builtin_ia32_psignd128, "V4iV4iV4i", "", "ssse3") +TARGET_BUILTIN(__builtin_ia32_pabsb128, "V16cV16c", "", "ssse3") +TARGET_BUILTIN(__builtin_ia32_pabsw128, "V8sV8s", "", "ssse3") +TARGET_BUILTIN(__builtin_ia32_pabsd128, "V4iV4i", "", "ssse3") + +TARGET_BUILTIN(__builtin_ia32_ldmxcsr, "vUi", "", "sse") +TARGET_BUILTIN(__builtin_ia32_stmxcsr, "Ui", "", "sse") +TARGET_BUILTIN(__builtin_ia32_cvtss2si, "iV4f", "", "sse") +TARGET_BUILTIN(__builtin_ia32_cvtss2si64, "LLiV4f", "", "sse") +TARGET_BUILTIN(__builtin_ia32_storeups, "vf*V4f", "", "sse") +TARGET_BUILTIN(__builtin_ia32_storehps, "vV2i*V4f", "", "sse") +TARGET_BUILTIN(__builtin_ia32_storelps, "vV2i*V4f", "", "sse") +TARGET_BUILTIN(__builtin_ia32_movmskps, "iV4f", "", "sse") +TARGET_BUILTIN(__builtin_ia32_movntps, "vf*V4f", "", "sse") +TARGET_BUILTIN(__builtin_ia32_sfence, "v", "", "sse") +TARGET_BUILTIN(__builtin_ia32_rcpps, "V4fV4f", "", "sse") +TARGET_BUILTIN(__builtin_ia32_rcpss, "V4fV4f", "", "sse") +TARGET_BUILTIN(__builtin_ia32_rsqrtps, "V4fV4f", "", "sse") +TARGET_BUILTIN(__builtin_ia32_rsqrtss, "V4fV4f", "", "sse") +TARGET_BUILTIN(__builtin_ia32_sqrtps, "V4fV4f", "", "sse") +TARGET_BUILTIN(__builtin_ia32_sqrtss, "V4fV4f", "", "sse") + +TARGET_BUILTIN(__builtin_ia32_maskmovdqu, "vV16cV16cc*", "", "sse2") +TARGET_BUILTIN(__builtin_ia32_storeupd, "vd*V2d", "", "sse2") +TARGET_BUILTIN(__builtin_ia32_movmskpd, "iV2d", "", "sse2") +TARGET_BUILTIN(__builtin_ia32_pmovmskb128, "iV16c", "", "sse2") +TARGET_BUILTIN(__builtin_ia32_movnti, "vi*i", "", "sse2") +TARGET_BUILTIN(__builtin_ia32_movnti64, "vLLi*LLi", "", "sse2") +TARGET_BUILTIN(__builtin_ia32_movntpd, "vd*V2d", "", "sse2") +TARGET_BUILTIN(__builtin_ia32_movntdq, "vV2LLi*V2LLi", "", "sse2") +TARGET_BUILTIN(__builtin_ia32_psadbw128, "V2LLiV16cV16c", "", "sse2") +TARGET_BUILTIN(__builtin_ia32_sqrtpd, "V2dV2d", "", "sse2") +TARGET_BUILTIN(__builtin_ia32_sqrtsd, "V2dV2d", "", "sse2") +TARGET_BUILTIN(__builtin_ia32_cvtdq2pd, "V2dV4i", "", "sse2") +TARGET_BUILTIN(__builtin_ia32_cvtdq2ps, "V4fV4i", "", "sse2") +TARGET_BUILTIN(__builtin_ia32_cvtpd2dq, "V2LLiV2d", "", "sse2") +TARGET_BUILTIN(__builtin_ia32_cvtpd2ps, "V4fV2d", "", "sse2") +TARGET_BUILTIN(__builtin_ia32_cvttpd2dq, "V4iV2d", "", "sse2") +TARGET_BUILTIN(__builtin_ia32_cvtsd2si, "iV2d", "", "sse2") +TARGET_BUILTIN(__builtin_ia32_cvtsd2si64, "LLiV2d", "", "sse2") +TARGET_BUILTIN(__builtin_ia32_cvtps2dq, "V4iV4f", "", "sse2") +TARGET_BUILTIN(__builtin_ia32_cvtps2pd, "V2dV4f", "", "sse2") +TARGET_BUILTIN(__builtin_ia32_cvttps2dq, "V4iV4f", "", "sse2") +TARGET_BUILTIN(__builtin_ia32_clflush, "vvC*", "", "sse2") +TARGET_BUILTIN(__builtin_ia32_lfence, "v", "", "sse2") +TARGET_BUILTIN(__builtin_ia32_mfence, "v", "", "sse2") +TARGET_BUILTIN(__builtin_ia32_storedqu, "vc*V16c", "", "sse2") +TARGET_BUILTIN(__builtin_ia32_pmuludq128, "V2LLiV4iV4i", "", "sse2") +TARGET_BUILTIN(__builtin_ia32_psraw128, "V8sV8sV8s", "", "sse2") +TARGET_BUILTIN(__builtin_ia32_psrad128, "V4iV4iV4i", "", "sse2") +TARGET_BUILTIN(__builtin_ia32_psrlw128, "V8sV8sV8s", "", "sse2") +TARGET_BUILTIN(__builtin_ia32_psrld128, "V4iV4iV4i", "", "sse2") +TARGET_BUILTIN(__builtin_ia32_psrlq128, "V2LLiV2LLiV2LLi", "", "sse2") +TARGET_BUILTIN(__builtin_ia32_psllw128, "V8sV8sV8s", "", "sse2") +TARGET_BUILTIN(__builtin_ia32_pslld128, "V4iV4iV4i", "", "sse2") +TARGET_BUILTIN(__builtin_ia32_psllq128, "V2LLiV2LLiV2LLi", "", "sse2") +TARGET_BUILTIN(__builtin_ia32_psllwi128, "V8sV8si", "", "sse2") +TARGET_BUILTIN(__builtin_ia32_pslldi128, "V4iV4ii", "", "sse2") +TARGET_BUILTIN(__builtin_ia32_psllqi128, "V2LLiV2LLii", "", "sse2") +TARGET_BUILTIN(__builtin_ia32_psrlwi128, "V8sV8si", "", "sse2") +TARGET_BUILTIN(__builtin_ia32_psrldi128, "V4iV4ii", "", "sse2") +TARGET_BUILTIN(__builtin_ia32_psrlqi128, "V2LLiV2LLii", "", "sse2") +TARGET_BUILTIN(__builtin_ia32_psrawi128, "V8sV8si", "", "sse2") +TARGET_BUILTIN(__builtin_ia32_psradi128, "V4iV4ii", "", "sse2") +TARGET_BUILTIN(__builtin_ia32_pmaddwd128, "V4iV8sV8s", "", "sse2") + +TARGET_BUILTIN(__builtin_ia32_monitor, "vv*UiUi", "", "sse3") +TARGET_BUILTIN(__builtin_ia32_mwait, "vUiUi", "", "sse3") +TARGET_BUILTIN(__builtin_ia32_lddqu, "V16ccC*", "", "sse3") + +TARGET_BUILTIN(__builtin_ia32_palignr128, "V16cV16cV16cIc", "", "ssse3") + +TARGET_BUILTIN(__builtin_ia32_insertps128, "V4fV4fV4fIc", "", "sse4.1") +TARGET_BUILTIN(__builtin_ia32_pblendvb128, "V16cV16cV16cV16c", "", "sse4.1") +TARGET_BUILTIN(__builtin_ia32_blendvpd, "V2dV2dV2dV2d", "", "sse4.1") +TARGET_BUILTIN(__builtin_ia32_blendvps, "V4fV4fV4fV4f", "", "sse4.1") +TARGET_BUILTIN(__builtin_ia32_packusdw128, "V8sV4iV4i", "", "sse4.1") + +TARGET_BUILTIN(__builtin_ia32_pmaxsb128, "V16cV16cV16c", "", "sse4.1") +TARGET_BUILTIN(__builtin_ia32_pmaxsd128, "V4iV4iV4i", "", "sse4.1") +TARGET_BUILTIN(__builtin_ia32_pmaxud128, "V4iV4iV4i", "", "sse4.1") +TARGET_BUILTIN(__builtin_ia32_pmaxuw128, "V8sV8sV8s", "", "sse4.1") +TARGET_BUILTIN(__builtin_ia32_pminsb128, "V16cV16cV16c", "", "sse4.1") +TARGET_BUILTIN(__builtin_ia32_pminsd128, "V4iV4iV4i", "", "sse4.1") +TARGET_BUILTIN(__builtin_ia32_pminud128, "V4iV4iV4i", "", "sse4.1") +TARGET_BUILTIN(__builtin_ia32_pminuw128, "V8sV8sV8s", "", "sse4.1") +TARGET_BUILTIN(__builtin_ia32_pmovsxbd128, "V4iV16c", "", "sse4.1") +TARGET_BUILTIN(__builtin_ia32_pmovsxbq128, "V2LLiV16c", "", "sse4.1") +TARGET_BUILTIN(__builtin_ia32_pmovsxbw128, "V8sV16c", "", "sse4.1") +TARGET_BUILTIN(__builtin_ia32_pmovsxdq128, "V2LLiV4i", "", "sse4.1") +TARGET_BUILTIN(__builtin_ia32_pmovsxwd128, "V4iV8s", "", "sse4.1") +TARGET_BUILTIN(__builtin_ia32_pmovsxwq128, "V2LLiV8s", "", "sse4.1") +TARGET_BUILTIN(__builtin_ia32_pmovzxbd128, "V4iV16c", "", "sse4.1") +TARGET_BUILTIN(__builtin_ia32_pmovzxbq128, "V2LLiV16c", "", "sse4.1") +TARGET_BUILTIN(__builtin_ia32_pmovzxbw128, "V8sV16c", "", "sse4.1") +TARGET_BUILTIN(__builtin_ia32_pmovzxdq128, "V2LLiV4i", "", "sse4.1") +TARGET_BUILTIN(__builtin_ia32_pmovzxwd128, "V4iV8s", "", "sse4.1") +TARGET_BUILTIN(__builtin_ia32_pmovzxwq128, "V2LLiV8s", "", "sse4.1") +TARGET_BUILTIN(__builtin_ia32_pmuldq128, "V2LLiV4iV4i", "", "sse4.1") +TARGET_BUILTIN(__builtin_ia32_pmulld128, "V4iV4iV4i", "", "sse4.1") +TARGET_BUILTIN(__builtin_ia32_roundps, "V4fV4fi", "", "sse4.1") +TARGET_BUILTIN(__builtin_ia32_roundss, "V4fV4fV4fi", "", "sse4.1") +TARGET_BUILTIN(__builtin_ia32_roundsd, "V2dV2dV2di", "", "sse4.1") +TARGET_BUILTIN(__builtin_ia32_roundpd, "V2dV2di", "", "sse4.1") +TARGET_BUILTIN(__builtin_ia32_dpps, "V4fV4fV4fIc", "", "sse4.1") +TARGET_BUILTIN(__builtin_ia32_dppd, "V2dV2dV2dIc", "", "sse4.1") +TARGET_BUILTIN(__builtin_ia32_movntdqa, "V2LLiV2LLi*", "", "sse4.1") +TARGET_BUILTIN(__builtin_ia32_ptestz128, "iV2LLiV2LLi", "", "sse4.1") +TARGET_BUILTIN(__builtin_ia32_ptestc128, "iV2LLiV2LLi", "", "sse4.1") +TARGET_BUILTIN(__builtin_ia32_ptestnzc128, "iV2LLiV2LLi", "", "sse4.1") +TARGET_BUILTIN(__builtin_ia32_mpsadbw128, "V16cV16cV16cIc", "", "sse4.1") +TARGET_BUILTIN(__builtin_ia32_phminposuw128, "V8sV8s", "", "sse4.1") // SSE 4.2 -BUILTIN(__builtin_ia32_pcmpistrm128, "V16cV16cV16cIc", "") -BUILTIN(__builtin_ia32_pcmpistri128, "iV16cV16cIc", "") -BUILTIN(__builtin_ia32_pcmpestrm128, "V16cV16ciV16ciIc", "") -BUILTIN(__builtin_ia32_pcmpestri128, "iV16ciV16ciIc","") - -BUILTIN(__builtin_ia32_pcmpistria128, "iV16cV16cIc","") -BUILTIN(__builtin_ia32_pcmpistric128, "iV16cV16cIc","") -BUILTIN(__builtin_ia32_pcmpistrio128, "iV16cV16cIc","") -BUILTIN(__builtin_ia32_pcmpistris128, "iV16cV16cIc","") -BUILTIN(__builtin_ia32_pcmpistriz128, "iV16cV16cIc","") -BUILTIN(__builtin_ia32_pcmpestria128, "iV16ciV16ciIc","") -BUILTIN(__builtin_ia32_pcmpestric128, "iV16ciV16ciIc","") -BUILTIN(__builtin_ia32_pcmpestrio128, "iV16ciV16ciIc","") -BUILTIN(__builtin_ia32_pcmpestris128, "iV16ciV16ciIc","") -BUILTIN(__builtin_ia32_pcmpestriz128, "iV16ciV16ciIc","") +TARGET_BUILTIN(__builtin_ia32_pcmpistrm128, "V16cV16cV16cIc", "", "sse4.2") +TARGET_BUILTIN(__builtin_ia32_pcmpistri128, "iV16cV16cIc", "", "sse4.2") +TARGET_BUILTIN(__builtin_ia32_pcmpestrm128, "V16cV16ciV16ciIc", "", "sse4.2") +TARGET_BUILTIN(__builtin_ia32_pcmpestri128, "iV16ciV16ciIc","", "sse4.2") + +TARGET_BUILTIN(__builtin_ia32_pcmpistria128, "iV16cV16cIc","", "sse4.2") +TARGET_BUILTIN(__builtin_ia32_pcmpistric128, "iV16cV16cIc","", "sse4.2") +TARGET_BUILTIN(__builtin_ia32_pcmpistrio128, "iV16cV16cIc","", "sse4.2") +TARGET_BUILTIN(__builtin_ia32_pcmpistris128, "iV16cV16cIc","", "sse4.2") +TARGET_BUILTIN(__builtin_ia32_pcmpistriz128, "iV16cV16cIc","", "sse4.2") +TARGET_BUILTIN(__builtin_ia32_pcmpestria128, "iV16ciV16ciIc","", "sse4.2") +TARGET_BUILTIN(__builtin_ia32_pcmpestric128, "iV16ciV16ciIc","", "sse4.2") +TARGET_BUILTIN(__builtin_ia32_pcmpestrio128, "iV16ciV16ciIc","", "sse4.2") +TARGET_BUILTIN(__builtin_ia32_pcmpestris128, "iV16ciV16ciIc","", "sse4.2") +TARGET_BUILTIN(__builtin_ia32_pcmpestriz128, "iV16ciV16ciIc","", "sse4.2") BUILTIN(__builtin_ia32_crc32qi, "UiUiUc", "") BUILTIN(__builtin_ia32_crc32hi, "UiUiUs", "") @@ -406,255 +415,255 @@ BUILTIN(__builtin_ia32_crc32si, "UiUiUi", "") BUILTIN(__builtin_ia32_crc32di, "ULLiULLiULLi", "") // SSE4a -BUILTIN(__builtin_ia32_extrqi, "V2LLiV2LLiIcIc", "") -BUILTIN(__builtin_ia32_extrq, "V2LLiV2LLiV16c", "") -BUILTIN(__builtin_ia32_insertqi, "V2LLiV2LLiV2LLiIcIc", "") -BUILTIN(__builtin_ia32_insertq, "V2LLiV2LLiV2LLi", "") -BUILTIN(__builtin_ia32_movntsd, "vd*V2d", "") -BUILTIN(__builtin_ia32_movntss, "vf*V4f", "") +TARGET_BUILTIN(__builtin_ia32_extrqi, "V2LLiV2LLiIcIc", "", "sse4a") +TARGET_BUILTIN(__builtin_ia32_extrq, "V2LLiV2LLiV16c", "", "sse4a") +TARGET_BUILTIN(__builtin_ia32_insertqi, "V2LLiV2LLiV2LLiIcIc", "", "sse4a") +TARGET_BUILTIN(__builtin_ia32_insertq, "V2LLiV2LLiV2LLi", "", "sse4a") +TARGET_BUILTIN(__builtin_ia32_movntsd, "vd*V2d", "", "sse4a") +TARGET_BUILTIN(__builtin_ia32_movntss, "vf*V4f", "", "sse4a") // AES -BUILTIN(__builtin_ia32_aesenc128, "V2LLiV2LLiV2LLi", "") -BUILTIN(__builtin_ia32_aesenclast128, "V2LLiV2LLiV2LLi", "") -BUILTIN(__builtin_ia32_aesdec128, "V2LLiV2LLiV2LLi", "") -BUILTIN(__builtin_ia32_aesdeclast128, "V2LLiV2LLiV2LLi", "") -BUILTIN(__builtin_ia32_aesimc128, "V2LLiV2LLi", "") -BUILTIN(__builtin_ia32_aeskeygenassist128, "V2LLiV2LLiIc", "") +TARGET_BUILTIN(__builtin_ia32_aesenc128, "V2LLiV2LLiV2LLi", "", "aes") +TARGET_BUILTIN(__builtin_ia32_aesenclast128, "V2LLiV2LLiV2LLi", "", "aes") +TARGET_BUILTIN(__builtin_ia32_aesdec128, "V2LLiV2LLiV2LLi", "", "aes") +TARGET_BUILTIN(__builtin_ia32_aesdeclast128, "V2LLiV2LLiV2LLi", "", "aes") +TARGET_BUILTIN(__builtin_ia32_aesimc128, "V2LLiV2LLi", "", "aes") +TARGET_BUILTIN(__builtin_ia32_aeskeygenassist128, "V2LLiV2LLiIc", "", "aes") // CLMUL -BUILTIN(__builtin_ia32_pclmulqdq128, "V2LLiV2LLiV2LLiIc", "") +TARGET_BUILTIN(__builtin_ia32_pclmulqdq128, "V2LLiV2LLiV2LLiIc", "", "pclmul") // AVX -BUILTIN(__builtin_ia32_addsubpd256, "V4dV4dV4d", "") -BUILTIN(__builtin_ia32_addsubps256, "V8fV8fV8f", "") -BUILTIN(__builtin_ia32_haddpd256, "V4dV4dV4d", "") -BUILTIN(__builtin_ia32_hsubps256, "V8fV8fV8f", "") -BUILTIN(__builtin_ia32_hsubpd256, "V4dV4dV4d", "") -BUILTIN(__builtin_ia32_haddps256, "V8fV8fV8f", "") -BUILTIN(__builtin_ia32_maxpd256, "V4dV4dV4d", "") -BUILTIN(__builtin_ia32_maxps256, "V8fV8fV8f", "") -BUILTIN(__builtin_ia32_minpd256, "V4dV4dV4d", "") -BUILTIN(__builtin_ia32_minps256, "V8fV8fV8f", "") -BUILTIN(__builtin_ia32_vpermilvarpd, "V2dV2dV2LLi", "") -BUILTIN(__builtin_ia32_vpermilvarps, "V4fV4fV4i", "") -BUILTIN(__builtin_ia32_vpermilvarpd256, "V4dV4dV4LLi", "") -BUILTIN(__builtin_ia32_vpermilvarps256, "V8fV8fV8i", "") -BUILTIN(__builtin_ia32_blendvpd256, "V4dV4dV4dV4d", "") -BUILTIN(__builtin_ia32_blendvps256, "V8fV8fV8fV8f", "") -BUILTIN(__builtin_ia32_dpps256, "V8fV8fV8fIc", "") -BUILTIN(__builtin_ia32_cmppd256, "V4dV4dV4dIc", "") -BUILTIN(__builtin_ia32_cmpps256, "V8fV8fV8fIc", "") -BUILTIN(__builtin_ia32_cvtdq2pd256, "V4dV4i", "") -BUILTIN(__builtin_ia32_cvtdq2ps256, "V8fV8i", "") -BUILTIN(__builtin_ia32_cvtpd2ps256, "V4fV4d", "") -BUILTIN(__builtin_ia32_cvtps2dq256, "V8iV8f", "") -BUILTIN(__builtin_ia32_cvtps2pd256, "V4dV4f", "") -BUILTIN(__builtin_ia32_cvttpd2dq256, "V4iV4d", "") -BUILTIN(__builtin_ia32_cvtpd2dq256, "V4iV4d", "") -BUILTIN(__builtin_ia32_cvttps2dq256, "V8iV8f", "") -BUILTIN(__builtin_ia32_vperm2f128_pd256, "V4dV4dV4dIc", "") -BUILTIN(__builtin_ia32_vperm2f128_ps256, "V8fV8fV8fIc", "") -BUILTIN(__builtin_ia32_vperm2f128_si256, "V8iV8iV8iIc", "") -BUILTIN(__builtin_ia32_sqrtpd256, "V4dV4d", "") -BUILTIN(__builtin_ia32_sqrtps256, "V8fV8f", "") -BUILTIN(__builtin_ia32_rsqrtps256, "V8fV8f", "") -BUILTIN(__builtin_ia32_rcpps256, "V8fV8f", "") -BUILTIN(__builtin_ia32_roundpd256, "V4dV4dIi", "") -BUILTIN(__builtin_ia32_roundps256, "V8fV8fIi", "") -BUILTIN(__builtin_ia32_vtestzpd, "iV2dV2d", "") -BUILTIN(__builtin_ia32_vtestcpd, "iV2dV2d", "") -BUILTIN(__builtin_ia32_vtestnzcpd, "iV2dV2d", "") -BUILTIN(__builtin_ia32_vtestzps, "iV4fV4f", "") -BUILTIN(__builtin_ia32_vtestcps, "iV4fV4f", "") -BUILTIN(__builtin_ia32_vtestnzcps, "iV4fV4f", "") -BUILTIN(__builtin_ia32_vtestzpd256, "iV4dV4d", "") -BUILTIN(__builtin_ia32_vtestcpd256, "iV4dV4d", "") -BUILTIN(__builtin_ia32_vtestnzcpd256, "iV4dV4d", "") -BUILTIN(__builtin_ia32_vtestzps256, "iV8fV8f", "") -BUILTIN(__builtin_ia32_vtestcps256, "iV8fV8f", "") -BUILTIN(__builtin_ia32_vtestnzcps256, "iV8fV8f", "") -BUILTIN(__builtin_ia32_ptestz256, "iV4LLiV4LLi", "") -BUILTIN(__builtin_ia32_ptestc256, "iV4LLiV4LLi", "") -BUILTIN(__builtin_ia32_ptestnzc256, "iV4LLiV4LLi", "") -BUILTIN(__builtin_ia32_movmskpd256, "iV4d", "") -BUILTIN(__builtin_ia32_movmskps256, "iV8f", "") -BUILTIN(__builtin_ia32_vzeroall, "v", "") -BUILTIN(__builtin_ia32_vzeroupper, "v", "") -BUILTIN(__builtin_ia32_vbroadcastf128_pd256, "V4dV2dC*", "") -BUILTIN(__builtin_ia32_vbroadcastf128_ps256, "V8fV4fC*", "") -BUILTIN(__builtin_ia32_storeupd256, "vd*V4d", "") -BUILTIN(__builtin_ia32_storeups256, "vf*V8f", "") -BUILTIN(__builtin_ia32_storedqu256, "vc*V32c", "") -BUILTIN(__builtin_ia32_lddqu256, "V32ccC*", "") -BUILTIN(__builtin_ia32_movntdq256, "vV4LLi*V4LLi", "") -BUILTIN(__builtin_ia32_movntpd256, "vd*V4d", "") -BUILTIN(__builtin_ia32_movntps256, "vf*V8f", "") -BUILTIN(__builtin_ia32_maskloadpd, "V2dV2dC*V2d", "") -BUILTIN(__builtin_ia32_maskloadps, "V4fV4fC*V4f", "") -BUILTIN(__builtin_ia32_maskloadpd256, "V4dV4dC*V4d", "") -BUILTIN(__builtin_ia32_maskloadps256, "V8fV8fC*V8f", "") -BUILTIN(__builtin_ia32_maskstorepd, "vV2d*V2dV2d", "") -BUILTIN(__builtin_ia32_maskstoreps, "vV4f*V4fV4f", "") -BUILTIN(__builtin_ia32_maskstorepd256, "vV4d*V4dV4d", "") -BUILTIN(__builtin_ia32_maskstoreps256, "vV8f*V8fV8f", "") +TARGET_BUILTIN(__builtin_ia32_addsubpd256, "V4dV4dV4d", "", "avx") +TARGET_BUILTIN(__builtin_ia32_addsubps256, "V8fV8fV8f", "", "avx") +TARGET_BUILTIN(__builtin_ia32_haddpd256, "V4dV4dV4d", "", "avx") +TARGET_BUILTIN(__builtin_ia32_hsubps256, "V8fV8fV8f", "", "avx") +TARGET_BUILTIN(__builtin_ia32_hsubpd256, "V4dV4dV4d", "", "avx") +TARGET_BUILTIN(__builtin_ia32_haddps256, "V8fV8fV8f", "", "avx") +TARGET_BUILTIN(__builtin_ia32_maxpd256, "V4dV4dV4d", "", "avx") +TARGET_BUILTIN(__builtin_ia32_maxps256, "V8fV8fV8f", "", "avx") +TARGET_BUILTIN(__builtin_ia32_minpd256, "V4dV4dV4d", "", "avx") +TARGET_BUILTIN(__builtin_ia32_minps256, "V8fV8fV8f", "", "avx") +TARGET_BUILTIN(__builtin_ia32_vpermilvarpd, "V2dV2dV2LLi", "", "avx") +TARGET_BUILTIN(__builtin_ia32_vpermilvarps, "V4fV4fV4i", "", "avx") +TARGET_BUILTIN(__builtin_ia32_vpermilvarpd256, "V4dV4dV4LLi", "", "avx") +TARGET_BUILTIN(__builtin_ia32_vpermilvarps256, "V8fV8fV8i", "", "avx") +TARGET_BUILTIN(__builtin_ia32_blendvpd256, "V4dV4dV4dV4d", "", "avx") +TARGET_BUILTIN(__builtin_ia32_blendvps256, "V8fV8fV8fV8f", "", "avx") +TARGET_BUILTIN(__builtin_ia32_dpps256, "V8fV8fV8fIc", "", "avx") +TARGET_BUILTIN(__builtin_ia32_cmppd256, "V4dV4dV4dIc", "", "avx") +TARGET_BUILTIN(__builtin_ia32_cmpps256, "V8fV8fV8fIc", "", "avx") +TARGET_BUILTIN(__builtin_ia32_cvtdq2pd256, "V4dV4i", "", "avx") +TARGET_BUILTIN(__builtin_ia32_cvtdq2ps256, "V8fV8i", "", "avx") +TARGET_BUILTIN(__builtin_ia32_cvtpd2ps256, "V4fV4d", "", "avx") +TARGET_BUILTIN(__builtin_ia32_cvtps2dq256, "V8iV8f", "", "avx") +TARGET_BUILTIN(__builtin_ia32_cvtps2pd256, "V4dV4f", "", "avx") +TARGET_BUILTIN(__builtin_ia32_cvttpd2dq256, "V4iV4d", "", "avx") +TARGET_BUILTIN(__builtin_ia32_cvtpd2dq256, "V4iV4d", "", "avx") +TARGET_BUILTIN(__builtin_ia32_cvttps2dq256, "V8iV8f", "", "avx") +TARGET_BUILTIN(__builtin_ia32_vperm2f128_pd256, "V4dV4dV4dIc", "", "avx") +TARGET_BUILTIN(__builtin_ia32_vperm2f128_ps256, "V8fV8fV8fIc", "", "avx") +TARGET_BUILTIN(__builtin_ia32_vperm2f128_si256, "V8iV8iV8iIc", "", "avx") +TARGET_BUILTIN(__builtin_ia32_sqrtpd256, "V4dV4d", "", "avx") +TARGET_BUILTIN(__builtin_ia32_sqrtps256, "V8fV8f", "", "avx") +TARGET_BUILTIN(__builtin_ia32_rsqrtps256, "V8fV8f", "", "avx") +TARGET_BUILTIN(__builtin_ia32_rcpps256, "V8fV8f", "", "avx") +TARGET_BUILTIN(__builtin_ia32_roundpd256, "V4dV4dIi", "", "avx") +TARGET_BUILTIN(__builtin_ia32_roundps256, "V8fV8fIi", "", "avx") +TARGET_BUILTIN(__builtin_ia32_vtestzpd, "iV2dV2d", "", "avx") +TARGET_BUILTIN(__builtin_ia32_vtestcpd, "iV2dV2d", "", "avx") +TARGET_BUILTIN(__builtin_ia32_vtestnzcpd, "iV2dV2d", "", "avx") +TARGET_BUILTIN(__builtin_ia32_vtestzps, "iV4fV4f", "", "avx") +TARGET_BUILTIN(__builtin_ia32_vtestcps, "iV4fV4f", "", "avx") +TARGET_BUILTIN(__builtin_ia32_vtestnzcps, "iV4fV4f", "", "avx") +TARGET_BUILTIN(__builtin_ia32_vtestzpd256, "iV4dV4d", "", "avx") +TARGET_BUILTIN(__builtin_ia32_vtestcpd256, "iV4dV4d", "", "avx") +TARGET_BUILTIN(__builtin_ia32_vtestnzcpd256, "iV4dV4d", "", "avx") +TARGET_BUILTIN(__builtin_ia32_vtestzps256, "iV8fV8f", "", "avx") +TARGET_BUILTIN(__builtin_ia32_vtestcps256, "iV8fV8f", "", "avx") +TARGET_BUILTIN(__builtin_ia32_vtestnzcps256, "iV8fV8f", "", "avx") +TARGET_BUILTIN(__builtin_ia32_ptestz256, "iV4LLiV4LLi", "", "avx") +TARGET_BUILTIN(__builtin_ia32_ptestc256, "iV4LLiV4LLi", "", "avx") +TARGET_BUILTIN(__builtin_ia32_ptestnzc256, "iV4LLiV4LLi", "", "avx") +TARGET_BUILTIN(__builtin_ia32_movmskpd256, "iV4d", "", "avx") +TARGET_BUILTIN(__builtin_ia32_movmskps256, "iV8f", "", "avx") +TARGET_BUILTIN(__builtin_ia32_vzeroall, "v", "", "avx") +TARGET_BUILTIN(__builtin_ia32_vzeroupper, "v", "", "avx") +TARGET_BUILTIN(__builtin_ia32_vbroadcastf128_pd256, "V4dV2dC*", "", "avx") +TARGET_BUILTIN(__builtin_ia32_vbroadcastf128_ps256, "V8fV4fC*", "", "avx") +TARGET_BUILTIN(__builtin_ia32_storeupd256, "vd*V4d", "", "avx") +TARGET_BUILTIN(__builtin_ia32_storeups256, "vf*V8f", "", "avx") +TARGET_BUILTIN(__builtin_ia32_storedqu256, "vc*V32c", "", "avx") +TARGET_BUILTIN(__builtin_ia32_lddqu256, "V32ccC*", "", "avx") +TARGET_BUILTIN(__builtin_ia32_movntdq256, "vV4LLi*V4LLi", "", "avx") +TARGET_BUILTIN(__builtin_ia32_movntpd256, "vd*V4d", "", "avx") +TARGET_BUILTIN(__builtin_ia32_movntps256, "vf*V8f", "", "avx") +TARGET_BUILTIN(__builtin_ia32_maskloadpd, "V2dV2dC*V2d", "", "avx") +TARGET_BUILTIN(__builtin_ia32_maskloadps, "V4fV4fC*V4f", "", "avx") +TARGET_BUILTIN(__builtin_ia32_maskloadpd256, "V4dV4dC*V4d", "", "avx") +TARGET_BUILTIN(__builtin_ia32_maskloadps256, "V8fV8fC*V8f", "", "avx") +TARGET_BUILTIN(__builtin_ia32_maskstorepd, "vV2d*V2dV2d", "", "avx") +TARGET_BUILTIN(__builtin_ia32_maskstoreps, "vV4f*V4fV4f", "", "avx") +TARGET_BUILTIN(__builtin_ia32_maskstorepd256, "vV4d*V4dV4d", "", "avx") +TARGET_BUILTIN(__builtin_ia32_maskstoreps256, "vV8f*V8fV8f", "", "avx") // AVX2 -BUILTIN(__builtin_ia32_mpsadbw256, "V32cV32cV32cIc", "") -BUILTIN(__builtin_ia32_pabsb256, "V32cV32c", "") -BUILTIN(__builtin_ia32_pabsw256, "V16sV16s", "") -BUILTIN(__builtin_ia32_pabsd256, "V8iV8i", "") -BUILTIN(__builtin_ia32_packsswb256, "V32cV16sV16s", "") -BUILTIN(__builtin_ia32_packssdw256, "V16sV8iV8i", "") -BUILTIN(__builtin_ia32_packuswb256, "V32cV16sV16s", "") -BUILTIN(__builtin_ia32_packusdw256, "V16sV8iV8i", "") -BUILTIN(__builtin_ia32_paddsb256, "V32cV32cV32c", "") -BUILTIN(__builtin_ia32_paddsw256, "V16sV16sV16s", "") -BUILTIN(__builtin_ia32_psubsb256, "V32cV32cV32c", "") -BUILTIN(__builtin_ia32_psubsw256, "V16sV16sV16s", "") -BUILTIN(__builtin_ia32_paddusb256, "V32cV32cV32c", "") -BUILTIN(__builtin_ia32_paddusw256, "V16sV16sV16s", "") -BUILTIN(__builtin_ia32_psubusb256, "V32cV32cV32c", "") -BUILTIN(__builtin_ia32_psubusw256, "V16sV16sV16s", "") -BUILTIN(__builtin_ia32_palignr256, "V32cV32cV32cIc", "") -BUILTIN(__builtin_ia32_pavgb256, "V32cV32cV32c", "") -BUILTIN(__builtin_ia32_pavgw256, "V16sV16sV16s", "") -BUILTIN(__builtin_ia32_pblendvb256, "V32cV32cV32cV32c", "") -BUILTIN(__builtin_ia32_phaddw256, "V16sV16sV16s", "") -BUILTIN(__builtin_ia32_phaddd256, "V8iV8iV8i", "") -BUILTIN(__builtin_ia32_phaddsw256, "V16sV16sV16s", "") -BUILTIN(__builtin_ia32_phsubw256, "V16sV16sV16s", "") -BUILTIN(__builtin_ia32_phsubd256, "V8iV8iV8i", "") -BUILTIN(__builtin_ia32_phsubsw256, "V16sV16sV16s", "") -BUILTIN(__builtin_ia32_pmaddubsw256, "V16sV32cV32c", "") -BUILTIN(__builtin_ia32_pmaddwd256, "V8iV16sV16s", "") -BUILTIN(__builtin_ia32_pmaxub256, "V32cV32cV32c", "") -BUILTIN(__builtin_ia32_pmaxuw256, "V16sV16sV16s", "") -BUILTIN(__builtin_ia32_pmaxud256, "V8iV8iV8i", "") -BUILTIN(__builtin_ia32_pmaxsb256, "V32cV32cV32c", "") -BUILTIN(__builtin_ia32_pmaxsw256, "V16sV16sV16s", "") -BUILTIN(__builtin_ia32_pmaxsd256, "V8iV8iV8i", "") -BUILTIN(__builtin_ia32_pminub256, "V32cV32cV32c", "") -BUILTIN(__builtin_ia32_pminuw256, "V16sV16sV16s", "") -BUILTIN(__builtin_ia32_pminud256, "V8iV8iV8i", "") -BUILTIN(__builtin_ia32_pminsb256, "V32cV32cV32c", "") -BUILTIN(__builtin_ia32_pminsw256, "V16sV16sV16s", "") -BUILTIN(__builtin_ia32_pminsd256, "V8iV8iV8i", "") -BUILTIN(__builtin_ia32_pmovmskb256, "iV32c", "") -BUILTIN(__builtin_ia32_pmovsxbw256, "V16sV16c", "") -BUILTIN(__builtin_ia32_pmovsxbd256, "V8iV16c", "") -BUILTIN(__builtin_ia32_pmovsxbq256, "V4LLiV16c", "") -BUILTIN(__builtin_ia32_pmovsxwd256, "V8iV8s", "") -BUILTIN(__builtin_ia32_pmovsxwq256, "V4LLiV8s", "") -BUILTIN(__builtin_ia32_pmovsxdq256, "V4LLiV4i", "") -BUILTIN(__builtin_ia32_pmovzxbw256, "V16sV16c", "") -BUILTIN(__builtin_ia32_pmovzxbd256, "V8iV16c", "") -BUILTIN(__builtin_ia32_pmovzxbq256, "V4LLiV16c", "") -BUILTIN(__builtin_ia32_pmovzxwd256, "V8iV8s", "") -BUILTIN(__builtin_ia32_pmovzxwq256, "V4LLiV8s", "") -BUILTIN(__builtin_ia32_pmovzxdq256, "V4LLiV4i", "") -BUILTIN(__builtin_ia32_pmuldq256, "V4LLiV8iV8i", "") -BUILTIN(__builtin_ia32_pmulhrsw256, "V16sV16sV16s", "") -BUILTIN(__builtin_ia32_pmulhuw256, "V16sV16sV16s", "") -BUILTIN(__builtin_ia32_pmulhw256, "V16sV16sV16s", "") -BUILTIN(__builtin_ia32_pmuludq256, "V4LLiV8iV8i", "") -BUILTIN(__builtin_ia32_psadbw256, "V4LLiV32cV32c", "") -BUILTIN(__builtin_ia32_pshufb256, "V32cV32cV32c", "") -BUILTIN(__builtin_ia32_psignb256, "V32cV32cV32c", "") -BUILTIN(__builtin_ia32_psignw256, "V16sV16sV16s", "") -BUILTIN(__builtin_ia32_psignd256, "V8iV8iV8i", "") -BUILTIN(__builtin_ia32_pslldqi256, "V4LLiV4LLiIi", "") -BUILTIN(__builtin_ia32_psllwi256, "V16sV16si", "") -BUILTIN(__builtin_ia32_psllw256, "V16sV16sV8s", "") -BUILTIN(__builtin_ia32_pslldi256, "V8iV8ii", "") -BUILTIN(__builtin_ia32_pslld256, "V8iV8iV4i", "") -BUILTIN(__builtin_ia32_psllqi256, "V4LLiV4LLii", "") -BUILTIN(__builtin_ia32_psllq256, "V4LLiV4LLiV2LLi", "") -BUILTIN(__builtin_ia32_psrawi256, "V16sV16si", "") -BUILTIN(__builtin_ia32_psraw256, "V16sV16sV8s", "") -BUILTIN(__builtin_ia32_psradi256, "V8iV8ii", "") -BUILTIN(__builtin_ia32_psrad256, "V8iV8iV4i", "") -BUILTIN(__builtin_ia32_psrldqi256, "V4LLiV4LLiIi", "") -BUILTIN(__builtin_ia32_psrlwi256, "V16sV16si", "") -BUILTIN(__builtin_ia32_psrlw256, "V16sV16sV8s", "") -BUILTIN(__builtin_ia32_psrldi256, "V8iV8ii", "") -BUILTIN(__builtin_ia32_psrld256, "V8iV8iV4i", "") -BUILTIN(__builtin_ia32_psrlqi256, "V4LLiV4LLii", "") -BUILTIN(__builtin_ia32_psrlq256, "V4LLiV4LLiV2LLi", "") -BUILTIN(__builtin_ia32_movntdqa256, "V4LLiV4LLi*", "") -BUILTIN(__builtin_ia32_vbroadcastss_ps, "V4fV4f", "") -BUILTIN(__builtin_ia32_vbroadcastss_ps256, "V8fV4f", "") -BUILTIN(__builtin_ia32_vbroadcastsd_pd256, "V4dV2d", "") -BUILTIN(__builtin_ia32_pbroadcastb256, "V32cV16c", "") -BUILTIN(__builtin_ia32_pbroadcastw256, "V16sV8s", "") -BUILTIN(__builtin_ia32_pbroadcastd256, "V8iV4i", "") -BUILTIN(__builtin_ia32_pbroadcastq256, "V4LLiV2LLi", "") -BUILTIN(__builtin_ia32_pbroadcastb128, "V16cV16c", "") -BUILTIN(__builtin_ia32_pbroadcastw128, "V8sV8s", "") -BUILTIN(__builtin_ia32_pbroadcastd128, "V4iV4i", "") -BUILTIN(__builtin_ia32_pbroadcastq128, "V2LLiV2LLi", "") -BUILTIN(__builtin_ia32_permvarsi256, "V8iV8iV8i", "") -BUILTIN(__builtin_ia32_permvarsf256, "V8fV8fV8f", "") -BUILTIN(__builtin_ia32_permti256, "V4LLiV4LLiV4LLiIc", "") -BUILTIN(__builtin_ia32_maskloadd256, "V8iV8iC*V8i", "") -BUILTIN(__builtin_ia32_maskloadq256, "V4LLiV4LLiC*V4LLi", "") -BUILTIN(__builtin_ia32_maskloadd, "V4iV4iC*V4i", "") -BUILTIN(__builtin_ia32_maskloadq, "V2LLiV2LLiC*V2LLi", "") -BUILTIN(__builtin_ia32_maskstored256, "vV8i*V8iV8i", "") -BUILTIN(__builtin_ia32_maskstoreq256, "vV4LLi*V4LLiV4LLi", "") -BUILTIN(__builtin_ia32_maskstored, "vV4i*V4iV4i", "") -BUILTIN(__builtin_ia32_maskstoreq, "vV2LLi*V2LLiV2LLi", "") -BUILTIN(__builtin_ia32_psllv8si, "V8iV8iV8i", "") -BUILTIN(__builtin_ia32_psllv4si, "V4iV4iV4i", "") -BUILTIN(__builtin_ia32_psllv4di, "V4LLiV4LLiV4LLi", "") -BUILTIN(__builtin_ia32_psllv2di, "V2LLiV2LLiV2LLi", "") -BUILTIN(__builtin_ia32_psrav8si, "V8iV8iV8i", "") -BUILTIN(__builtin_ia32_psrav4si, "V4iV4iV4i", "") -BUILTIN(__builtin_ia32_psrlv8si, "V8iV8iV8i", "") -BUILTIN(__builtin_ia32_psrlv4si, "V4iV4iV4i", "") -BUILTIN(__builtin_ia32_psrlv4di, "V4LLiV4LLiV4LLi", "") -BUILTIN(__builtin_ia32_psrlv2di, "V2LLiV2LLiV2LLi", "") +TARGET_BUILTIN(__builtin_ia32_mpsadbw256, "V32cV32cV32cIc", "", "avx2") +TARGET_BUILTIN(__builtin_ia32_pabsb256, "V32cV32c", "", "avx2") +TARGET_BUILTIN(__builtin_ia32_pabsw256, "V16sV16s", "", "avx2") +TARGET_BUILTIN(__builtin_ia32_pabsd256, "V8iV8i", "", "avx2") +TARGET_BUILTIN(__builtin_ia32_packsswb256, "V32cV16sV16s", "", "avx2") +TARGET_BUILTIN(__builtin_ia32_packssdw256, "V16sV8iV8i", "", "avx2") +TARGET_BUILTIN(__builtin_ia32_packuswb256, "V32cV16sV16s", "", "avx2") +TARGET_BUILTIN(__builtin_ia32_packusdw256, "V16sV8iV8i", "", "avx2") +TARGET_BUILTIN(__builtin_ia32_paddsb256, "V32cV32cV32c", "", "avx2") +TARGET_BUILTIN(__builtin_ia32_paddsw256, "V16sV16sV16s", "", "avx2") +TARGET_BUILTIN(__builtin_ia32_psubsb256, "V32cV32cV32c", "", "avx2") +TARGET_BUILTIN(__builtin_ia32_psubsw256, "V16sV16sV16s", "", "avx2") +TARGET_BUILTIN(__builtin_ia32_paddusb256, "V32cV32cV32c", "", "avx2") +TARGET_BUILTIN(__builtin_ia32_paddusw256, "V16sV16sV16s", "", "avx2") +TARGET_BUILTIN(__builtin_ia32_psubusb256, "V32cV32cV32c", "", "avx2") +TARGET_BUILTIN(__builtin_ia32_psubusw256, "V16sV16sV16s", "", "avx2") +TARGET_BUILTIN(__builtin_ia32_palignr256, "V32cV32cV32cIc", "", "avx2") +TARGET_BUILTIN(__builtin_ia32_pavgb256, "V32cV32cV32c", "", "avx2") +TARGET_BUILTIN(__builtin_ia32_pavgw256, "V16sV16sV16s", "", "avx2") +TARGET_BUILTIN(__builtin_ia32_pblendvb256, "V32cV32cV32cV32c", "", "avx2") +TARGET_BUILTIN(__builtin_ia32_phaddw256, "V16sV16sV16s", "", "avx2") +TARGET_BUILTIN(__builtin_ia32_phaddd256, "V8iV8iV8i", "", "avx2") +TARGET_BUILTIN(__builtin_ia32_phaddsw256, "V16sV16sV16s", "", "avx2") +TARGET_BUILTIN(__builtin_ia32_phsubw256, "V16sV16sV16s", "", "avx2") +TARGET_BUILTIN(__builtin_ia32_phsubd256, "V8iV8iV8i", "", "avx2") +TARGET_BUILTIN(__builtin_ia32_phsubsw256, "V16sV16sV16s", "", "avx2") +TARGET_BUILTIN(__builtin_ia32_pmaddubsw256, "V16sV32cV32c", "", "avx2") +TARGET_BUILTIN(__builtin_ia32_pmaddwd256, "V8iV16sV16s", "", "avx2") +TARGET_BUILTIN(__builtin_ia32_pmaxub256, "V32cV32cV32c", "", "avx2") +TARGET_BUILTIN(__builtin_ia32_pmaxuw256, "V16sV16sV16s", "", "avx2") +TARGET_BUILTIN(__builtin_ia32_pmaxud256, "V8iV8iV8i", "", "avx2") +TARGET_BUILTIN(__builtin_ia32_pmaxsb256, "V32cV32cV32c", "", "avx2") +TARGET_BUILTIN(__builtin_ia32_pmaxsw256, "V16sV16sV16s", "", "avx2") +TARGET_BUILTIN(__builtin_ia32_pmaxsd256, "V8iV8iV8i", "", "avx2") +TARGET_BUILTIN(__builtin_ia32_pminub256, "V32cV32cV32c", "", "avx2") +TARGET_BUILTIN(__builtin_ia32_pminuw256, "V16sV16sV16s", "", "avx2") +TARGET_BUILTIN(__builtin_ia32_pminud256, "V8iV8iV8i", "", "avx2") +TARGET_BUILTIN(__builtin_ia32_pminsb256, "V32cV32cV32c", "", "avx2") +TARGET_BUILTIN(__builtin_ia32_pminsw256, "V16sV16sV16s", "", "avx2") +TARGET_BUILTIN(__builtin_ia32_pminsd256, "V8iV8iV8i", "", "avx2") +TARGET_BUILTIN(__builtin_ia32_pmovmskb256, "iV32c", "", "avx2") +TARGET_BUILTIN(__builtin_ia32_pmovsxbw256, "V16sV16c", "", "avx2") +TARGET_BUILTIN(__builtin_ia32_pmovsxbd256, "V8iV16c", "", "avx2") +TARGET_BUILTIN(__builtin_ia32_pmovsxbq256, "V4LLiV16c", "", "avx2") +TARGET_BUILTIN(__builtin_ia32_pmovsxwd256, "V8iV8s", "", "avx2") +TARGET_BUILTIN(__builtin_ia32_pmovsxwq256, "V4LLiV8s", "", "avx2") +TARGET_BUILTIN(__builtin_ia32_pmovsxdq256, "V4LLiV4i", "", "avx2") +TARGET_BUILTIN(__builtin_ia32_pmovzxbw256, "V16sV16c", "", "avx2") +TARGET_BUILTIN(__builtin_ia32_pmovzxbd256, "V8iV16c", "", "avx2") +TARGET_BUILTIN(__builtin_ia32_pmovzxbq256, "V4LLiV16c", "", "avx2") +TARGET_BUILTIN(__builtin_ia32_pmovzxwd256, "V8iV8s", "", "avx2") +TARGET_BUILTIN(__builtin_ia32_pmovzxwq256, "V4LLiV8s", "", "avx2") +TARGET_BUILTIN(__builtin_ia32_pmovzxdq256, "V4LLiV4i", "", "avx2") +TARGET_BUILTIN(__builtin_ia32_pmuldq256, "V4LLiV8iV8i", "", "avx2") +TARGET_BUILTIN(__builtin_ia32_pmulhrsw256, "V16sV16sV16s", "", "avx2") +TARGET_BUILTIN(__builtin_ia32_pmulhuw256, "V16sV16sV16s", "", "avx2") +TARGET_BUILTIN(__builtin_ia32_pmulhw256, "V16sV16sV16s", "", "avx2") +TARGET_BUILTIN(__builtin_ia32_pmuludq256, "V4LLiV8iV8i", "", "avx2") +TARGET_BUILTIN(__builtin_ia32_psadbw256, "V4LLiV32cV32c", "", "avx2") +TARGET_BUILTIN(__builtin_ia32_pshufb256, "V32cV32cV32c", "", "avx2") +TARGET_BUILTIN(__builtin_ia32_psignb256, "V32cV32cV32c", "", "avx2") +TARGET_BUILTIN(__builtin_ia32_psignw256, "V16sV16sV16s", "", "avx2") +TARGET_BUILTIN(__builtin_ia32_psignd256, "V8iV8iV8i", "", "avx2") +TARGET_BUILTIN(__builtin_ia32_pslldqi256, "V4LLiV4LLiIi", "", "avx2") +TARGET_BUILTIN(__builtin_ia32_psllwi256, "V16sV16si", "", "avx2") +TARGET_BUILTIN(__builtin_ia32_psllw256, "V16sV16sV8s", "", "avx2") +TARGET_BUILTIN(__builtin_ia32_pslldi256, "V8iV8ii", "", "avx2") +TARGET_BUILTIN(__builtin_ia32_pslld256, "V8iV8iV4i", "", "avx2") +TARGET_BUILTIN(__builtin_ia32_psllqi256, "V4LLiV4LLii", "", "avx2") +TARGET_BUILTIN(__builtin_ia32_psllq256, "V4LLiV4LLiV2LLi", "", "avx2") +TARGET_BUILTIN(__builtin_ia32_psrawi256, "V16sV16si", "", "avx2") +TARGET_BUILTIN(__builtin_ia32_psraw256, "V16sV16sV8s", "", "avx2") +TARGET_BUILTIN(__builtin_ia32_psradi256, "V8iV8ii", "", "avx2") +TARGET_BUILTIN(__builtin_ia32_psrad256, "V8iV8iV4i", "", "avx2") +TARGET_BUILTIN(__builtin_ia32_psrldqi256, "V4LLiV4LLiIi", "", "avx2") +TARGET_BUILTIN(__builtin_ia32_psrlwi256, "V16sV16si", "", "avx2") +TARGET_BUILTIN(__builtin_ia32_psrlw256, "V16sV16sV8s", "", "avx2") +TARGET_BUILTIN(__builtin_ia32_psrldi256, "V8iV8ii", "", "avx2") +TARGET_BUILTIN(__builtin_ia32_psrld256, "V8iV8iV4i", "", "avx2") +TARGET_BUILTIN(__builtin_ia32_psrlqi256, "V4LLiV4LLii", "", "avx2") +TARGET_BUILTIN(__builtin_ia32_psrlq256, "V4LLiV4LLiV2LLi", "", "avx2") +TARGET_BUILTIN(__builtin_ia32_movntdqa256, "V4LLiV4LLi*", "", "avx2") +TARGET_BUILTIN(__builtin_ia32_vbroadcastss_ps, "V4fV4f", "", "avx2") +TARGET_BUILTIN(__builtin_ia32_vbroadcastss_ps256, "V8fV4f", "", "avx2") +TARGET_BUILTIN(__builtin_ia32_vbroadcastsd_pd256, "V4dV2d", "", "avx2") +TARGET_BUILTIN(__builtin_ia32_pbroadcastb256, "V32cV16c", "", "avx2") +TARGET_BUILTIN(__builtin_ia32_pbroadcastw256, "V16sV8s", "", "avx2") +TARGET_BUILTIN(__builtin_ia32_pbroadcastd256, "V8iV4i", "", "avx2") +TARGET_BUILTIN(__builtin_ia32_pbroadcastq256, "V4LLiV2LLi", "", "avx2") +TARGET_BUILTIN(__builtin_ia32_pbroadcastb128, "V16cV16c", "", "avx2") +TARGET_BUILTIN(__builtin_ia32_pbroadcastw128, "V8sV8s", "", "avx2") +TARGET_BUILTIN(__builtin_ia32_pbroadcastd128, "V4iV4i", "", "avx2") +TARGET_BUILTIN(__builtin_ia32_pbroadcastq128, "V2LLiV2LLi", "", "avx2") +TARGET_BUILTIN(__builtin_ia32_permvarsi256, "V8iV8iV8i", "", "avx2") +TARGET_BUILTIN(__builtin_ia32_permvarsf256, "V8fV8fV8f", "", "avx2") +TARGET_BUILTIN(__builtin_ia32_permti256, "V4LLiV4LLiV4LLiIc", "", "avx2") +TARGET_BUILTIN(__builtin_ia32_maskloadd256, "V8iV8iC*V8i", "", "avx2") +TARGET_BUILTIN(__builtin_ia32_maskloadq256, "V4LLiV4LLiC*V4LLi", "", "avx2") +TARGET_BUILTIN(__builtin_ia32_maskloadd, "V4iV4iC*V4i", "", "avx2") +TARGET_BUILTIN(__builtin_ia32_maskloadq, "V2LLiV2LLiC*V2LLi", "", "avx2") +TARGET_BUILTIN(__builtin_ia32_maskstored256, "vV8i*V8iV8i", "", "avx2") +TARGET_BUILTIN(__builtin_ia32_maskstoreq256, "vV4LLi*V4LLiV4LLi", "", "avx2") +TARGET_BUILTIN(__builtin_ia32_maskstored, "vV4i*V4iV4i", "", "avx2") +TARGET_BUILTIN(__builtin_ia32_maskstoreq, "vV2LLi*V2LLiV2LLi", "", "avx2") +TARGET_BUILTIN(__builtin_ia32_psllv8si, "V8iV8iV8i", "", "avx2") +TARGET_BUILTIN(__builtin_ia32_psllv4si, "V4iV4iV4i", "", "avx2") +TARGET_BUILTIN(__builtin_ia32_psllv4di, "V4LLiV4LLiV4LLi", "", "avx2") +TARGET_BUILTIN(__builtin_ia32_psllv2di, "V2LLiV2LLiV2LLi", "", "avx2") +TARGET_BUILTIN(__builtin_ia32_psrav8si, "V8iV8iV8i", "", "avx2") +TARGET_BUILTIN(__builtin_ia32_psrav4si, "V4iV4iV4i", "", "avx2") +TARGET_BUILTIN(__builtin_ia32_psrlv8si, "V8iV8iV8i", "", "avx2") +TARGET_BUILTIN(__builtin_ia32_psrlv4si, "V4iV4iV4i", "", "avx2") +TARGET_BUILTIN(__builtin_ia32_psrlv4di, "V4LLiV4LLiV4LLi", "", "avx2") +TARGET_BUILTIN(__builtin_ia32_psrlv2di, "V2LLiV2LLiV2LLi", "", "avx2") // GATHER -BUILTIN(__builtin_ia32_gatherd_pd, "V2dV2dV2dC*V4iV2dIc", "") -BUILTIN(__builtin_ia32_gatherd_pd256, "V4dV4dV4dC*V4iV4dIc", "") -BUILTIN(__builtin_ia32_gatherq_pd, "V2dV2dV2dC*V2LLiV2dIc", "") -BUILTIN(__builtin_ia32_gatherq_pd256, "V4dV4dV4dC*V4LLiV4dIc", "") -BUILTIN(__builtin_ia32_gatherd_ps, "V4fV4fV4fC*V4iV4fIc", "") -BUILTIN(__builtin_ia32_gatherd_ps256, "V8fV8fV8fC*V8iV8fIc", "") -BUILTIN(__builtin_ia32_gatherq_ps, "V4fV4fV4fC*V2LLiV4fIc", "") -BUILTIN(__builtin_ia32_gatherq_ps256, "V4fV4fV4fC*V4LLiV4fIc", "") - -BUILTIN(__builtin_ia32_gatherd_q, "V2LLiV2LLiV2LLiC*V4iV2LLiIc", "") -BUILTIN(__builtin_ia32_gatherd_q256, "V4LLiV4LLiV4LLiC*V4iV4LLiIc", "") -BUILTIN(__builtin_ia32_gatherq_q, "V2LLiV2LLiV2LLiC*V2LLiV2LLiIc", "") -BUILTIN(__builtin_ia32_gatherq_q256, "V4LLiV4LLiV4LLiC*V4LLiV4LLiIc", "") -BUILTIN(__builtin_ia32_gatherd_d, "V4iV4iV4iC*V4iV4iIc", "") -BUILTIN(__builtin_ia32_gatherd_d256, "V8iV8iV8iC*V8iV8iIc", "") -BUILTIN(__builtin_ia32_gatherq_d, "V4iV4iV4iC*V2LLiV4iIc", "") -BUILTIN(__builtin_ia32_gatherq_d256, "V4iV4iV4iC*V4LLiV4iIc", "") +TARGET_BUILTIN(__builtin_ia32_gatherd_pd, "V2dV2dV2dC*V4iV2dIc", "", "avx2") +TARGET_BUILTIN(__builtin_ia32_gatherd_pd256, "V4dV4dV4dC*V4iV4dIc", "", "avx2") +TARGET_BUILTIN(__builtin_ia32_gatherq_pd, "V2dV2dV2dC*V2LLiV2dIc", "", "avx2") +TARGET_BUILTIN(__builtin_ia32_gatherq_pd256, "V4dV4dV4dC*V4LLiV4dIc", "", "avx2") +TARGET_BUILTIN(__builtin_ia32_gatherd_ps, "V4fV4fV4fC*V4iV4fIc", "", "avx2") +TARGET_BUILTIN(__builtin_ia32_gatherd_ps256, "V8fV8fV8fC*V8iV8fIc", "", "avx2") +TARGET_BUILTIN(__builtin_ia32_gatherq_ps, "V4fV4fV4fC*V2LLiV4fIc", "", "avx2") +TARGET_BUILTIN(__builtin_ia32_gatherq_ps256, "V4fV4fV4fC*V4LLiV4fIc", "", "avx2") + +TARGET_BUILTIN(__builtin_ia32_gatherd_q, "V2LLiV2LLiV2LLiC*V4iV2LLiIc", "", "avx2") +TARGET_BUILTIN(__builtin_ia32_gatherd_q256, "V4LLiV4LLiV4LLiC*V4iV4LLiIc", "", "avx2") +TARGET_BUILTIN(__builtin_ia32_gatherq_q, "V2LLiV2LLiV2LLiC*V2LLiV2LLiIc", "", "avx2") +TARGET_BUILTIN(__builtin_ia32_gatherq_q256, "V4LLiV4LLiV4LLiC*V4LLiV4LLiIc", "", "avx2") +TARGET_BUILTIN(__builtin_ia32_gatherd_d, "V4iV4iV4iC*V4iV4iIc", "", "avx2") +TARGET_BUILTIN(__builtin_ia32_gatherd_d256, "V8iV8iV8iC*V8iV8iIc", "", "avx2") +TARGET_BUILTIN(__builtin_ia32_gatherq_d, "V4iV4iV4iC*V2LLiV4iIc", "", "avx2") +TARGET_BUILTIN(__builtin_ia32_gatherq_d256, "V4iV4iV4iC*V4LLiV4iIc", "", "avx2") // F16C -BUILTIN(__builtin_ia32_vcvtps2ph, "V8sV4fIi", "") -BUILTIN(__builtin_ia32_vcvtps2ph256, "V8sV8fIi", "") -BUILTIN(__builtin_ia32_vcvtps2ph512, "V16sV16fIi", "") -BUILTIN(__builtin_ia32_vcvtph2ps, "V4fV8s", "") -BUILTIN(__builtin_ia32_vcvtph2ps256, "V8fV8s", "") -BUILTIN(__builtin_ia32_vcvtph2ps512, "V16fV16s", "") +TARGET_BUILTIN(__builtin_ia32_vcvtps2ph, "V8sV4fIi", "", "f16c") +TARGET_BUILTIN(__builtin_ia32_vcvtps2ph256, "V8sV8fIi", "", "f16c") +TARGET_BUILTIN(__builtin_ia32_vcvtps2ph512, "V16sV16fIi", "", "avx512f") +TARGET_BUILTIN(__builtin_ia32_vcvtph2ps, "V4fV8s", "", "f16c") +TARGET_BUILTIN(__builtin_ia32_vcvtph2ps256, "V8fV8s", "", "f16c") +TARGET_BUILTIN(__builtin_ia32_vcvtph2ps512, "V16fV16s", "", "avx512f") // RDRAND -BUILTIN(__builtin_ia32_rdrand16_step, "UiUs*", "") -BUILTIN(__builtin_ia32_rdrand32_step, "UiUi*", "") -BUILTIN(__builtin_ia32_rdrand64_step, "UiULLi*", "") +TARGET_BUILTIN(__builtin_ia32_rdrand16_step, "UiUs*", "", "rdrand") +TARGET_BUILTIN(__builtin_ia32_rdrand32_step, "UiUi*", "", "rdrand") +TARGET_BUILTIN(__builtin_ia32_rdrand64_step, "UiULLi*", "", "rdrand") // FSGSBASE -BUILTIN(__builtin_ia32_rdfsbase32, "Ui", "") -BUILTIN(__builtin_ia32_rdfsbase64, "ULLi", "") -BUILTIN(__builtin_ia32_rdgsbase32, "Ui", "") -BUILTIN(__builtin_ia32_rdgsbase64, "ULLi", "") -BUILTIN(__builtin_ia32_wrfsbase32, "vUi", "") -BUILTIN(__builtin_ia32_wrfsbase64, "vULLi", "") -BUILTIN(__builtin_ia32_wrgsbase32, "vUi", "") -BUILTIN(__builtin_ia32_wrgsbase64, "vULLi", "") +TARGET_BUILTIN(__builtin_ia32_rdfsbase32, "Ui", "", "fsgsbase") +TARGET_BUILTIN(__builtin_ia32_rdfsbase64, "ULLi", "", "fsgsbase") +TARGET_BUILTIN(__builtin_ia32_rdgsbase32, "Ui", "", "fsgsbase") +TARGET_BUILTIN(__builtin_ia32_rdgsbase64, "ULLi", "", "fsgsbase") +TARGET_BUILTIN(__builtin_ia32_wrfsbase32, "vUi", "", "fsgsbase") +TARGET_BUILTIN(__builtin_ia32_wrfsbase64, "vULLi", "", "fsgsbase") +TARGET_BUILTIN(__builtin_ia32_wrgsbase32, "vUi", "", "fsgsbase") +TARGET_BUILTIN(__builtin_ia32_wrgsbase64, "vULLi", "", "fsgsbase") // FXSR BUILTIN(__builtin_ia32_fxrstor, "vv*", "") @@ -663,814 +672,874 @@ BUILTIN(__builtin_ia32_fxsave, "vv*", "") BUILTIN(__builtin_ia32_fxsave64, "vv*", "") // ADX -BUILTIN(__builtin_ia32_addcarryx_u32, "UcUcUiUiUi*", "") -BUILTIN(__builtin_ia32_addcarryx_u64, "UcUcULLiULLiULLi*", "") -BUILTIN(__builtin_ia32_addcarry_u32, "UcUcUiUiUi*", "") -BUILTIN(__builtin_ia32_addcarry_u64, "UcUcULLiULLiULLi*", "") -BUILTIN(__builtin_ia32_subborrow_u32, "UcUcUiUiUi*", "") -BUILTIN(__builtin_ia32_subborrow_u64, "UcUcULLiULLiULLi*", "") +TARGET_BUILTIN(__builtin_ia32_addcarryx_u32, "UcUcUiUiUi*", "", "adx") +TARGET_BUILTIN(__builtin_ia32_addcarryx_u64, "UcUcULLiULLiULLi*", "", "adx") +TARGET_BUILTIN(__builtin_ia32_addcarry_u32, "UcUcUiUiUi*", "", "adx") +TARGET_BUILTIN(__builtin_ia32_addcarry_u64, "UcUcULLiULLiULLi*", "", "adx") +TARGET_BUILTIN(__builtin_ia32_subborrow_u32, "UcUcUiUiUi*", "", "adx") +TARGET_BUILTIN(__builtin_ia32_subborrow_u64, "UcUcULLiULLiULLi*", "", "adx") // RDSEED -BUILTIN(__builtin_ia32_rdseed16_step, "UiUs*", "") -BUILTIN(__builtin_ia32_rdseed32_step, "UiUi*", "") -BUILTIN(__builtin_ia32_rdseed64_step, "UiULLi*", "") +TARGET_BUILTIN(__builtin_ia32_rdseed16_step, "UiUs*", "", "rdseed") +TARGET_BUILTIN(__builtin_ia32_rdseed32_step, "UiUi*", "", "rdseed") +TARGET_BUILTIN(__builtin_ia32_rdseed64_step, "UiULLi*", "", "rdseed") // BMI -BUILTIN(__builtin_ia32_bextr_u32, "UiUiUi", "") -BUILTIN(__builtin_ia32_bextr_u64, "ULLiULLiULLi", "") +TARGET_BUILTIN(__builtin_ia32_bextr_u32, "UiUiUi", "", "bmi") +TARGET_BUILTIN(__builtin_ia32_bextr_u64, "ULLiULLiULLi", "", "bmi") // BMI2 -BUILTIN(__builtin_ia32_bzhi_si, "UiUiUi", "") -BUILTIN(__builtin_ia32_bzhi_di, "ULLiULLiULLi", "") -BUILTIN(__builtin_ia32_pdep_si, "UiUiUi", "") -BUILTIN(__builtin_ia32_pdep_di, "ULLiULLiULLi", "") -BUILTIN(__builtin_ia32_pext_si, "UiUiUi", "") -BUILTIN(__builtin_ia32_pext_di, "ULLiULLiULLi", "") +TARGET_BUILTIN(__builtin_ia32_bzhi_si, "UiUiUi", "", "bmi2") +TARGET_BUILTIN(__builtin_ia32_bzhi_di, "ULLiULLiULLi", "", "bmi2") +TARGET_BUILTIN(__builtin_ia32_pdep_si, "UiUiUi", "", "bmi2") +TARGET_BUILTIN(__builtin_ia32_pdep_di, "ULLiULLiULLi", "", "bmi2") +TARGET_BUILTIN(__builtin_ia32_pext_si, "UiUiUi", "", "bmi2") +TARGET_BUILTIN(__builtin_ia32_pext_di, "ULLiULLiULLi", "", "bmi2") // TBM -BUILTIN(__builtin_ia32_bextri_u32, "UiUiIUi", "") -BUILTIN(__builtin_ia32_bextri_u64, "ULLiULLiIULLi", "") +TARGET_BUILTIN(__builtin_ia32_bextri_u32, "UiUiIUi", "", "tbm") +TARGET_BUILTIN(__builtin_ia32_bextri_u64, "ULLiULLiIULLi", "", "tbm") // SHA -BUILTIN(__builtin_ia32_sha1rnds4, "V4iV4iV4iIc", "") -BUILTIN(__builtin_ia32_sha1nexte, "V4iV4iV4i", "") -BUILTIN(__builtin_ia32_sha1msg1, "V4iV4iV4i", "") -BUILTIN(__builtin_ia32_sha1msg2, "V4iV4iV4i", "") -BUILTIN(__builtin_ia32_sha256rnds2, "V4iV4iV4iV4i", "") -BUILTIN(__builtin_ia32_sha256msg1, "V4iV4iV4i", "") -BUILTIN(__builtin_ia32_sha256msg2, "V4iV4iV4i", "") +TARGET_BUILTIN(__builtin_ia32_sha1rnds4, "V4iV4iV4iIc", "", "sha") +TARGET_BUILTIN(__builtin_ia32_sha1nexte, "V4iV4iV4i", "", "sha") +TARGET_BUILTIN(__builtin_ia32_sha1msg1, "V4iV4iV4i", "", "sha") +TARGET_BUILTIN(__builtin_ia32_sha1msg2, "V4iV4iV4i", "", "sha") +TARGET_BUILTIN(__builtin_ia32_sha256rnds2, "V4iV4iV4iV4i", "", "sha") +TARGET_BUILTIN(__builtin_ia32_sha256msg1, "V4iV4iV4i", "", "sha") +TARGET_BUILTIN(__builtin_ia32_sha256msg2, "V4iV4iV4i", "", "sha") // FMA -BUILTIN(__builtin_ia32_vfmaddps, "V4fV4fV4fV4f", "") -BUILTIN(__builtin_ia32_vfmaddpd, "V2dV2dV2dV2d", "") -BUILTIN(__builtin_ia32_vfmaddss, "V4fV4fV4fV4f", "") -BUILTIN(__builtin_ia32_vfmaddsd, "V2dV2dV2dV2d", "") -BUILTIN(__builtin_ia32_vfmsubps, "V4fV4fV4fV4f", "") -BUILTIN(__builtin_ia32_vfmsubpd, "V2dV2dV2dV2d", "") -BUILTIN(__builtin_ia32_vfmsubss, "V4fV4fV4fV4f", "") -BUILTIN(__builtin_ia32_vfmsubsd, "V2dV2dV2dV2d", "") -BUILTIN(__builtin_ia32_vfnmaddps, "V4fV4fV4fV4f", "") -BUILTIN(__builtin_ia32_vfnmaddpd, "V2dV2dV2dV2d", "") -BUILTIN(__builtin_ia32_vfnmaddss, "V4fV4fV4fV4f", "") -BUILTIN(__builtin_ia32_vfnmaddsd, "V2dV2dV2dV2d", "") -BUILTIN(__builtin_ia32_vfnmsubps, "V4fV4fV4fV4f", "") -BUILTIN(__builtin_ia32_vfnmsubpd, "V2dV2dV2dV2d", "") -BUILTIN(__builtin_ia32_vfnmsubss, "V4fV4fV4fV4f", "") -BUILTIN(__builtin_ia32_vfnmsubsd, "V2dV2dV2dV2d", "") -BUILTIN(__builtin_ia32_vfmaddsubps, "V4fV4fV4fV4f", "") -BUILTIN(__builtin_ia32_vfmaddsubpd, "V2dV2dV2dV2d", "") -BUILTIN(__builtin_ia32_vfmsubaddps, "V4fV4fV4fV4f", "") -BUILTIN(__builtin_ia32_vfmsubaddpd, "V2dV2dV2dV2d", "") -BUILTIN(__builtin_ia32_vfmaddps256, "V8fV8fV8fV8f", "") -BUILTIN(__builtin_ia32_vfmaddpd256, "V4dV4dV4dV4d", "") -BUILTIN(__builtin_ia32_vfmsubps256, "V8fV8fV8fV8f", "") -BUILTIN(__builtin_ia32_vfmsubpd256, "V4dV4dV4dV4d", "") -BUILTIN(__builtin_ia32_vfnmaddps256, "V8fV8fV8fV8f", "") -BUILTIN(__builtin_ia32_vfnmaddpd256, "V4dV4dV4dV4d", "") -BUILTIN(__builtin_ia32_vfnmsubps256, "V8fV8fV8fV8f", "") -BUILTIN(__builtin_ia32_vfnmsubpd256, "V4dV4dV4dV4d", "") -BUILTIN(__builtin_ia32_vfmaddsubps256, "V8fV8fV8fV8f", "") -BUILTIN(__builtin_ia32_vfmaddsubpd256, "V4dV4dV4dV4d", "") -BUILTIN(__builtin_ia32_vfmsubaddps256, "V8fV8fV8fV8f", "") -BUILTIN(__builtin_ia32_vfmsubaddpd256, "V4dV4dV4dV4d", "") -BUILTIN(__builtin_ia32_vfmaddpd128_mask, "V2dV2dV2dV2dUc", "") -BUILTIN(__builtin_ia32_vfmaddpd128_mask3, "V2dV2dV2dV2dUc", "") -BUILTIN(__builtin_ia32_vfmaddpd128_maskz, "V2dV2dV2dV2dUc", "") -BUILTIN(__builtin_ia32_vfmaddpd256_mask, "V4dV4dV4dV4dUc", "") -BUILTIN(__builtin_ia32_vfmaddpd256_mask3, "V4dV4dV4dV4dUc", "") -BUILTIN(__builtin_ia32_vfmaddpd256_maskz, "V4dV4dV4dV4dUc", "") -BUILTIN(__builtin_ia32_vfmaddpd512_mask, "V8dV8dV8dV8dUcIi", "") -BUILTIN(__builtin_ia32_vfmaddpd512_mask3, "V8dV8dV8dV8dUcIi", "") -BUILTIN(__builtin_ia32_vfmaddpd512_maskz, "V8dV8dV8dV8dUcIi", "") -BUILTIN(__builtin_ia32_vfmaddps128_mask, "V4fV4fV4fV4fUc", "") -BUILTIN(__builtin_ia32_vfmaddps128_mask3, "V4fV4fV4fV4fUc", "") -BUILTIN(__builtin_ia32_vfmaddps128_maskz, "V4fV4fV4fV4fUc", "") -BUILTIN(__builtin_ia32_vfmaddps256_mask, "V8fV8fV8fV8fUc", "") -BUILTIN(__builtin_ia32_vfmaddps256_mask3, "V8fV8fV8fV8fUc", "") -BUILTIN(__builtin_ia32_vfmaddps256_maskz, "V8fV8fV8fV8fUc", "") -BUILTIN(__builtin_ia32_vfmaddps512_mask, "V16fV16fV16fV16fUsIi", "") -BUILTIN(__builtin_ia32_vfmaddps512_mask3, "V16fV16fV16fV16fUsIi", "") -BUILTIN(__builtin_ia32_vfmaddps512_maskz, "V16fV16fV16fV16fUsIi", "") -BUILTIN(__builtin_ia32_vfmaddsubpd128_mask, "V2dV2dV2dV2dUc", "") -BUILTIN(__builtin_ia32_vfmaddsubpd128_mask3, "V2dV2dV2dV2dUc", "") -BUILTIN(__builtin_ia32_vfmaddsubpd128_maskz, "V2dV2dV2dV2dUc", "") -BUILTIN(__builtin_ia32_vfmaddsubpd256_mask, "V4dV4dV4dV4dUc", "") -BUILTIN(__builtin_ia32_vfmaddsubpd256_mask3, "V4dV4dV4dV4dUc", "") -BUILTIN(__builtin_ia32_vfmaddsubpd256_maskz, "V4dV4dV4dV4dUc", "") -BUILTIN(__builtin_ia32_vfmaddsubpd512_mask, "V8dV8dV8dV8dUcIi", "") -BUILTIN(__builtin_ia32_vfmaddsubpd512_mask3, "V8dV8dV8dV8dUcIi", "") -BUILTIN(__builtin_ia32_vfmaddsubpd512_maskz, "V8dV8dV8dV8dUcIi", "") -BUILTIN(__builtin_ia32_vfmaddsubps128_mask, "V4fV4fV4fV4fUc", "") -BUILTIN(__builtin_ia32_vfmaddsubps128_mask3, "V4fV4fV4fV4fUc", "") -BUILTIN(__builtin_ia32_vfmaddsubps128_maskz, "V4fV4fV4fV4fUc", "") -BUILTIN(__builtin_ia32_vfmaddsubps256_mask, "V8fV8fV8fV8fUc", "") -BUILTIN(__builtin_ia32_vfmaddsubps256_mask3, "V8fV8fV8fV8fUc", "") -BUILTIN(__builtin_ia32_vfmaddsubps256_maskz, "V8fV8fV8fV8fUc", "") -BUILTIN(__builtin_ia32_vfmaddsubps512_mask, "V16fV16fV16fV16fUsIi", "") -BUILTIN(__builtin_ia32_vfmaddsubps512_mask3, "V16fV16fV16fV16fUsIi", "") -BUILTIN(__builtin_ia32_vfmaddsubps512_maskz, "V16fV16fV16fV16fUsIi", "") -BUILTIN(__builtin_ia32_vfmsubpd128_mask3, "V2dV2dV2dV2dUc", "") -BUILTIN(__builtin_ia32_vfmsubpd256_mask3, "V4dV4dV4dV4dUc", "") -BUILTIN(__builtin_ia32_vfmsubpd512_mask3, "V8dV8dV8dV8dUcIi", "") -BUILTIN(__builtin_ia32_vfmsubps128_mask3, "V4fV4fV4fV4fUc", "") -BUILTIN(__builtin_ia32_vfmsubps256_mask3, "V8fV8fV8fV8fUc", "") -BUILTIN(__builtin_ia32_vfmsubps512_mask3, "V16fV16fV16fV16fUsIi", "") -BUILTIN(__builtin_ia32_vfmsubaddpd128_mask3, "V2dV2dV2dV2dUc", "") -BUILTIN(__builtin_ia32_vfmsubaddpd256_mask3, "V4dV4dV4dV4dUc", "") -BUILTIN(__builtin_ia32_vfmsubaddpd512_mask3, "V8dV8dV8dV8dUcIi", "") -BUILTIN(__builtin_ia32_vfmsubaddps128_mask3, "V4fV4fV4fV4fUc", "") -BUILTIN(__builtin_ia32_vfmsubaddps256_mask3, "V8fV8fV8fV8fUc", "") -BUILTIN(__builtin_ia32_vfmsubaddps512_mask3, "V16fV16fV16fV16fUsIi", "") -BUILTIN(__builtin_ia32_vfnmaddpd128_mask, "V2dV2dV2dV2dUc", "") -BUILTIN(__builtin_ia32_vfnmaddpd256_mask, "V4dV4dV4dV4dUc", "") -BUILTIN(__builtin_ia32_vfnmaddpd512_mask, "V8dV8dV8dV8dUcIi", "") -BUILTIN(__builtin_ia32_vfnmaddps128_mask, "V4fV4fV4fV4fUc", "") -BUILTIN(__builtin_ia32_vfnmaddps256_mask, "V8fV8fV8fV8fUc", "") -BUILTIN(__builtin_ia32_vfnmaddps512_mask, "V16fV16fV16fV16fUsIi", "") -BUILTIN(__builtin_ia32_vfnmsubpd128_mask, "V2dV2dV2dV2dUc", "") -BUILTIN(__builtin_ia32_vfnmsubpd128_mask3, "V2dV2dV2dV2dUc", "") -BUILTIN(__builtin_ia32_vfnmsubpd256_mask, "V4dV4dV4dV4dUc", "") -BUILTIN(__builtin_ia32_vfnmsubpd256_mask3, "V4dV4dV4dV4dUc", "") -BUILTIN(__builtin_ia32_vfnmsubpd512_mask, "V8dV8dV8dV8dUcIi", "") -BUILTIN(__builtin_ia32_vfnmsubpd512_mask3, "V8dV8dV8dV8dUcIi", "") -BUILTIN(__builtin_ia32_vfnmsubps128_mask, "V4fV4fV4fV4fUc", "") -BUILTIN(__builtin_ia32_vfnmsubps128_mask3, "V4fV4fV4fV4fUc", "") -BUILTIN(__builtin_ia32_vfnmsubps256_mask, "V8fV8fV8fV8fUc", "") -BUILTIN(__builtin_ia32_vfnmsubps256_mask3, "V8fV8fV8fV8fUc", "") -BUILTIN(__builtin_ia32_vfnmsubps512_mask, "V16fV16fV16fV16fUsIi", "") -BUILTIN(__builtin_ia32_vfnmsubps512_mask3, "V16fV16fV16fV16fUsIi", "") +TARGET_BUILTIN(__builtin_ia32_vfmaddps, "V4fV4fV4fV4f", "", "fma") +TARGET_BUILTIN(__builtin_ia32_vfmaddpd, "V2dV2dV2dV2d", "", "fma") +TARGET_BUILTIN(__builtin_ia32_vfmaddss, "V4fV4fV4fV4f", "", "fma") +TARGET_BUILTIN(__builtin_ia32_vfmaddsd, "V2dV2dV2dV2d", "", "fma") +TARGET_BUILTIN(__builtin_ia32_vfmsubps, "V4fV4fV4fV4f", "", "fma") +TARGET_BUILTIN(__builtin_ia32_vfmsubpd, "V2dV2dV2dV2d", "", "fma") +TARGET_BUILTIN(__builtin_ia32_vfmsubss, "V4fV4fV4fV4f", "", "fma") +TARGET_BUILTIN(__builtin_ia32_vfmsubsd, "V2dV2dV2dV2d", "", "fma") +TARGET_BUILTIN(__builtin_ia32_vfnmaddps, "V4fV4fV4fV4f", "", "fma") +TARGET_BUILTIN(__builtin_ia32_vfnmaddpd, "V2dV2dV2dV2d", "", "fma") +TARGET_BUILTIN(__builtin_ia32_vfnmaddss, "V4fV4fV4fV4f", "", "fma") +TARGET_BUILTIN(__builtin_ia32_vfnmaddsd, "V2dV2dV2dV2d", "", "fma") +TARGET_BUILTIN(__builtin_ia32_vfnmsubps, "V4fV4fV4fV4f", "", "fma") +TARGET_BUILTIN(__builtin_ia32_vfnmsubpd, "V2dV2dV2dV2d", "", "fma") +TARGET_BUILTIN(__builtin_ia32_vfnmsubss, "V4fV4fV4fV4f", "", "fma") +TARGET_BUILTIN(__builtin_ia32_vfnmsubsd, "V2dV2dV2dV2d", "", "fma") +TARGET_BUILTIN(__builtin_ia32_vfmaddsubps, "V4fV4fV4fV4f", "", "fma") +TARGET_BUILTIN(__builtin_ia32_vfmaddsubpd, "V2dV2dV2dV2d", "", "fma") +TARGET_BUILTIN(__builtin_ia32_vfmsubaddps, "V4fV4fV4fV4f", "", "fma") +TARGET_BUILTIN(__builtin_ia32_vfmsubaddpd, "V2dV2dV2dV2d", "", "fma") +TARGET_BUILTIN(__builtin_ia32_vfmaddps256, "V8fV8fV8fV8f", "", "fma") +TARGET_BUILTIN(__builtin_ia32_vfmaddpd256, "V4dV4dV4dV4d", "", "fma") +TARGET_BUILTIN(__builtin_ia32_vfmsubps256, "V8fV8fV8fV8f", "", "fma") +TARGET_BUILTIN(__builtin_ia32_vfmsubpd256, "V4dV4dV4dV4d", "", "fma") +TARGET_BUILTIN(__builtin_ia32_vfnmaddps256, "V8fV8fV8fV8f", "", "fma") +TARGET_BUILTIN(__builtin_ia32_vfnmaddpd256, "V4dV4dV4dV4d", "", "fma") +TARGET_BUILTIN(__builtin_ia32_vfnmsubps256, "V8fV8fV8fV8f", "", "fma") +TARGET_BUILTIN(__builtin_ia32_vfnmsubpd256, "V4dV4dV4dV4d", "", "fma") +TARGET_BUILTIN(__builtin_ia32_vfmaddsubps256, "V8fV8fV8fV8f", "", "fma") +TARGET_BUILTIN(__builtin_ia32_vfmaddsubpd256, "V4dV4dV4dV4d", "", "fma") +TARGET_BUILTIN(__builtin_ia32_vfmsubaddps256, "V8fV8fV8fV8f", "", "fma") +TARGET_BUILTIN(__builtin_ia32_vfmsubaddpd256, "V4dV4dV4dV4d", "", "fma") + +TARGET_BUILTIN(__builtin_ia32_vfmaddpd128_mask, "V2dV2dV2dV2dUc", "", "avx512vd") +TARGET_BUILTIN(__builtin_ia32_vfmaddpd128_mask3, "V2dV2dV2dV2dUc", "", "avx512vd") +TARGET_BUILTIN(__builtin_ia32_vfmaddpd128_maskz, "V2dV2dV2dV2dUc", "", "avx512vd") +TARGET_BUILTIN(__builtin_ia32_vfmaddpd256_mask, "V4dV4dV4dV4dUc", "", "avx512vd") +TARGET_BUILTIN(__builtin_ia32_vfmaddpd256_mask3, "V4dV4dV4dV4dUc", "", "avx512vd") +TARGET_BUILTIN(__builtin_ia32_vfmaddpd256_maskz, "V4dV4dV4dV4dUc", "", "avx512vd") + +TARGET_BUILTIN(__builtin_ia32_vfmaddpd512_mask, "V8dV8dV8dV8dUcIi", "", "avx512f") +TARGET_BUILTIN(__builtin_ia32_vfmaddpd512_mask3, "V8dV8dV8dV8dUcIi", "", "avx512f") +TARGET_BUILTIN(__builtin_ia32_vfmaddpd512_maskz, "V8dV8dV8dV8dUcIi", "", "avx512f") + +TARGET_BUILTIN(__builtin_ia32_vfmaddps128_mask, "V4fV4fV4fV4fUc", "", "avx512vd") +TARGET_BUILTIN(__builtin_ia32_vfmaddps128_mask3, "V4fV4fV4fV4fUc", "", "avx512vd") +TARGET_BUILTIN(__builtin_ia32_vfmaddps128_maskz, "V4fV4fV4fV4fUc", "", "avx512vd") +TARGET_BUILTIN(__builtin_ia32_vfmaddps256_mask, "V8fV8fV8fV8fUc", "", "avx512vd") +TARGET_BUILTIN(__builtin_ia32_vfmaddps256_mask3, "V8fV8fV8fV8fUc", "", "avx512vd") +TARGET_BUILTIN(__builtin_ia32_vfmaddps256_maskz, "V8fV8fV8fV8fUc", "", "avx512vd") + +TARGET_BUILTIN(__builtin_ia32_vfmaddps512_mask, "V16fV16fV16fV16fUsIi", "", "avx512f") +TARGET_BUILTIN(__builtin_ia32_vfmaddps512_mask3, "V16fV16fV16fV16fUsIi", "", "avx512f") +TARGET_BUILTIN(__builtin_ia32_vfmaddps512_maskz, "V16fV16fV16fV16fUsIi", "", "avx512f") + +TARGET_BUILTIN(__builtin_ia32_vfmaddsubpd128_mask, "V2dV2dV2dV2dUc", "", "avx512vd") +TARGET_BUILTIN(__builtin_ia32_vfmaddsubpd128_mask3, "V2dV2dV2dV2dUc", "", "avx512vd") +TARGET_BUILTIN(__builtin_ia32_vfmaddsubpd128_maskz, "V2dV2dV2dV2dUc", "", "avx512vd") +TARGET_BUILTIN(__builtin_ia32_vfmaddsubpd256_mask, "V4dV4dV4dV4dUc", "", "avx512vd") +TARGET_BUILTIN(__builtin_ia32_vfmaddsubpd256_mask3, "V4dV4dV4dV4dUc", "", "avx512vd") +TARGET_BUILTIN(__builtin_ia32_vfmaddsubpd256_maskz, "V4dV4dV4dV4dUc", "", "avx512vd") + +TARGET_BUILTIN(__builtin_ia32_vfmaddsubpd512_mask, "V8dV8dV8dV8dUcIi", "", "avx512f") +TARGET_BUILTIN(__builtin_ia32_vfmaddsubpd512_mask3, "V8dV8dV8dV8dUcIi", "", "avx512f") +TARGET_BUILTIN(__builtin_ia32_vfmaddsubpd512_maskz, "V8dV8dV8dV8dUcIi", "", "avx512f") + +TARGET_BUILTIN(__builtin_ia32_vfmaddsubps128_mask, "V4fV4fV4fV4fUc", "", "avx512vd") +TARGET_BUILTIN(__builtin_ia32_vfmaddsubps128_mask3, "V4fV4fV4fV4fUc", "", "avx512vd") +TARGET_BUILTIN(__builtin_ia32_vfmaddsubps128_maskz, "V4fV4fV4fV4fUc", "", "avx512vd") +TARGET_BUILTIN(__builtin_ia32_vfmaddsubps256_mask, "V8fV8fV8fV8fUc", "", "avx512vd") +TARGET_BUILTIN(__builtin_ia32_vfmaddsubps256_mask3, "V8fV8fV8fV8fUc", "", "avx512vd") +TARGET_BUILTIN(__builtin_ia32_vfmaddsubps256_maskz, "V8fV8fV8fV8fUc", "", "avx512vd") + +TARGET_BUILTIN(__builtin_ia32_vfmaddsubps512_mask, "V16fV16fV16fV16fUsIi", "", "avx512f") +TARGET_BUILTIN(__builtin_ia32_vfmaddsubps512_mask3, "V16fV16fV16fV16fUsIi", "", "avx512f") +TARGET_BUILTIN(__builtin_ia32_vfmaddsubps512_maskz, "V16fV16fV16fV16fUsIi", "", "avx512f") + +TARGET_BUILTIN(__builtin_ia32_vfmsubpd128_mask3, "V2dV2dV2dV2dUc", "", "avx512vd") +TARGET_BUILTIN(__builtin_ia32_vfmsubpd256_mask3, "V4dV4dV4dV4dUc", "", "avx512vd") + +TARGET_BUILTIN(__builtin_ia32_vfmsubpd512_mask3, "V8dV8dV8dV8dUcIi", "", "avx512f") + +TARGET_BUILTIN(__builtin_ia32_vfmsubps128_mask3, "V4fV4fV4fV4fUc", "", "avx512vd") +TARGET_BUILTIN(__builtin_ia32_vfmsubps256_mask3, "V8fV8fV8fV8fUc", "", "avx512vd") + +TARGET_BUILTIN(__builtin_ia32_vfmsubps512_mask3, "V16fV16fV16fV16fUsIi", "", "avx512f") + +TARGET_BUILTIN(__builtin_ia32_vfmsubaddpd128_mask3, "V2dV2dV2dV2dUc", "", "avx512vd") +TARGET_BUILTIN(__builtin_ia32_vfmsubaddpd256_mask3, "V4dV4dV4dV4dUc", "", "avx512vd") + +TARGET_BUILTIN(__builtin_ia32_vfmsubaddpd512_mask3, "V8dV8dV8dV8dUcIi", "", "avx512f") + +TARGET_BUILTIN(__builtin_ia32_vfmsubaddps128_mask3, "V4fV4fV4fV4fUc", "", "avx512vd") +TARGET_BUILTIN(__builtin_ia32_vfmsubaddps256_mask3, "V8fV8fV8fV8fUc", "", "avx512vd") + +TARGET_BUILTIN(__builtin_ia32_vfmsubaddps512_mask3, "V16fV16fV16fV16fUsIi", "", "avx512f") + +TARGET_BUILTIN(__builtin_ia32_vfnmaddpd128_mask, "V2dV2dV2dV2dUc", "", "avx512vd") +TARGET_BUILTIN(__builtin_ia32_vfnmaddpd256_mask, "V4dV4dV4dV4dUc", "", "avx512vd") + +TARGET_BUILTIN(__builtin_ia32_vfnmaddpd512_mask, "V8dV8dV8dV8dUcIi", "", "avx512f") + +TARGET_BUILTIN(__builtin_ia32_vfnmaddps128_mask, "V4fV4fV4fV4fUc", "", "avx512vd") +TARGET_BUILTIN(__builtin_ia32_vfnmaddps256_mask, "V8fV8fV8fV8fUc", "", "avx512vd") + +TARGET_BUILTIN(__builtin_ia32_vfnmaddps512_mask, "V16fV16fV16fV16fUsIi", "", "avx512f") + +TARGET_BUILTIN(__builtin_ia32_vfnmsubpd128_mask, "V2dV2dV2dV2dUc", "", "avx512vd") +TARGET_BUILTIN(__builtin_ia32_vfnmsubpd128_mask3, "V2dV2dV2dV2dUc", "", "avx512vd") +TARGET_BUILTIN(__builtin_ia32_vfnmsubpd256_mask, "V4dV4dV4dV4dUc", "", "avx512vd") +TARGET_BUILTIN(__builtin_ia32_vfnmsubpd256_mask3, "V4dV4dV4dV4dUc", "", "avx512vd") + +TARGET_BUILTIN(__builtin_ia32_vfnmsubpd512_mask, "V8dV8dV8dV8dUcIi", "", "avx512f") +TARGET_BUILTIN(__builtin_ia32_vfnmsubpd512_mask3, "V8dV8dV8dV8dUcIi", "", "avx512f") + +TARGET_BUILTIN(__builtin_ia32_vfnmsubps128_mask, "V4fV4fV4fV4fUc", "", "avx512vd") +TARGET_BUILTIN(__builtin_ia32_vfnmsubps128_mask3, "V4fV4fV4fV4fUc", "", "avx512vd") +TARGET_BUILTIN(__builtin_ia32_vfnmsubps256_mask, "V8fV8fV8fV8fUc", "", "avx512vd") +TARGET_BUILTIN(__builtin_ia32_vfnmsubps256_mask3, "V8fV8fV8fV8fUc", "", "avx512vd") + +TARGET_BUILTIN(__builtin_ia32_vfnmsubps512_mask, "V16fV16fV16fV16fUsIi", "", "avx512f") +TARGET_BUILTIN(__builtin_ia32_vfnmsubps512_mask3, "V16fV16fV16fV16fUsIi", "", "avx512f") // XOP -BUILTIN(__builtin_ia32_vpmacssww, "V8sV8sV8sV8s", "") -BUILTIN(__builtin_ia32_vpmacsww, "V8sV8sV8sV8s", "") -BUILTIN(__builtin_ia32_vpmacsswd, "V4iV8sV8sV4i", "") -BUILTIN(__builtin_ia32_vpmacswd, "V4iV8sV8sV4i", "") -BUILTIN(__builtin_ia32_vpmacssdd, "V4iV4iV4iV4i", "") -BUILTIN(__builtin_ia32_vpmacsdd, "V4iV4iV4iV4i", "") -BUILTIN(__builtin_ia32_vpmacssdql, "V2LLiV4iV4iV2LLi", "") -BUILTIN(__builtin_ia32_vpmacsdql, "V2LLiV4iV4iV2LLi", "") -BUILTIN(__builtin_ia32_vpmacssdqh, "V2LLiV4iV4iV2LLi", "") -BUILTIN(__builtin_ia32_vpmacsdqh, "V2LLiV4iV4iV2LLi", "") -BUILTIN(__builtin_ia32_vpmadcsswd, "V4iV8sV8sV4i", "") -BUILTIN(__builtin_ia32_vpmadcswd, "V4iV8sV8sV4i", "") - -BUILTIN(__builtin_ia32_vphaddbw, "V8sV16c", "") -BUILTIN(__builtin_ia32_vphaddbd, "V4iV16c", "") -BUILTIN(__builtin_ia32_vphaddbq, "V2LLiV16c", "") -BUILTIN(__builtin_ia32_vphaddwd, "V4iV8s", "") -BUILTIN(__builtin_ia32_vphaddwq, "V2LLiV8s", "") -BUILTIN(__builtin_ia32_vphadddq, "V2LLiV4i", "") -BUILTIN(__builtin_ia32_vphaddubw, "V8sV16c", "") -BUILTIN(__builtin_ia32_vphaddubd, "V4iV16c", "") -BUILTIN(__builtin_ia32_vphaddubq, "V2LLiV16c", "") -BUILTIN(__builtin_ia32_vphadduwd, "V4iV8s", "") -BUILTIN(__builtin_ia32_vphadduwq, "V2LLiV8s", "") -BUILTIN(__builtin_ia32_vphaddudq, "V2LLiV4i", "") -BUILTIN(__builtin_ia32_vphsubbw, "V8sV16c", "") -BUILTIN(__builtin_ia32_vphsubwd, "V4iV8s", "") -BUILTIN(__builtin_ia32_vphsubdq, "V2LLiV4i", "") -BUILTIN(__builtin_ia32_vpcmov, "V2LLiV2LLiV2LLiV2LLi", "") -BUILTIN(__builtin_ia32_vpcmov_256, "V4LLiV4LLiV4LLiV4LLi", "") -BUILTIN(__builtin_ia32_vpperm, "V16cV16cV16cV16c", "") -BUILTIN(__builtin_ia32_vprotb, "V16cV16cV16c", "") -BUILTIN(__builtin_ia32_vprotw, "V8sV8sV8s", "") -BUILTIN(__builtin_ia32_vprotd, "V4iV4iV4i", "") -BUILTIN(__builtin_ia32_vprotq, "V2LLiV2LLiV2LLi", "") -BUILTIN(__builtin_ia32_vprotbi, "V16cV16cIc", "") -BUILTIN(__builtin_ia32_vprotwi, "V8sV8sIc", "") -BUILTIN(__builtin_ia32_vprotdi, "V4iV4iIc", "") -BUILTIN(__builtin_ia32_vprotqi, "V2LLiV2LLiIc", "") -BUILTIN(__builtin_ia32_vpshlb, "V16cV16cV16c", "") -BUILTIN(__builtin_ia32_vpshlw, "V8sV8sV8s", "") -BUILTIN(__builtin_ia32_vpshld, "V4iV4iV4i", "") -BUILTIN(__builtin_ia32_vpshlq, "V2LLiV2LLiV2LLi", "") -BUILTIN(__builtin_ia32_vpshab, "V16cV16cV16c", "") -BUILTIN(__builtin_ia32_vpshaw, "V8sV8sV8s", "") -BUILTIN(__builtin_ia32_vpshad, "V4iV4iV4i", "") -BUILTIN(__builtin_ia32_vpshaq, "V2LLiV2LLiV2LLi", "") -BUILTIN(__builtin_ia32_vpcomub, "V16cV16cV16cIc", "") -BUILTIN(__builtin_ia32_vpcomuw, "V8sV8sV8sIc", "") -BUILTIN(__builtin_ia32_vpcomud, "V4iV4iV4iIc", "") -BUILTIN(__builtin_ia32_vpcomuq, "V2LLiV2LLiV2LLiIc", "") -BUILTIN(__builtin_ia32_vpcomb, "V16cV16cV16cIc", "") -BUILTIN(__builtin_ia32_vpcomw, "V8sV8sV8sIc", "") -BUILTIN(__builtin_ia32_vpcomd, "V4iV4iV4iIc", "") -BUILTIN(__builtin_ia32_vpcomq, "V2LLiV2LLiV2LLiIc", "") -BUILTIN(__builtin_ia32_vpermil2pd, "V2dV2dV2dV2LLiIc", "") -BUILTIN(__builtin_ia32_vpermil2pd256, "V4dV4dV4dV4LLiIc", "") -BUILTIN(__builtin_ia32_vpermil2ps, "V4fV4fV4fV4iIc", "") -BUILTIN(__builtin_ia32_vpermil2ps256, "V8fV8fV8fV8iIc", "") -BUILTIN(__builtin_ia32_vfrczss, "V4fV4f", "") -BUILTIN(__builtin_ia32_vfrczsd, "V2dV2d", "") -BUILTIN(__builtin_ia32_vfrczps, "V4fV4f", "") -BUILTIN(__builtin_ia32_vfrczpd, "V2dV2d", "") -BUILTIN(__builtin_ia32_vfrczps256, "V8fV8f", "") -BUILTIN(__builtin_ia32_vfrczpd256, "V4dV4d", "") -BUILTIN(__builtin_ia32_xbegin, "i", "") -BUILTIN(__builtin_ia32_xend, "v", "") -BUILTIN(__builtin_ia32_xabort, "vIc", "") -BUILTIN(__builtin_ia32_xtest, "i", "") +TARGET_BUILTIN(__builtin_ia32_vpmacssww, "V8sV8sV8sV8s", "", "xop") +TARGET_BUILTIN(__builtin_ia32_vpmacsww, "V8sV8sV8sV8s", "", "xop") +TARGET_BUILTIN(__builtin_ia32_vpmacsswd, "V4iV8sV8sV4i", "", "xop") +TARGET_BUILTIN(__builtin_ia32_vpmacswd, "V4iV8sV8sV4i", "", "xop") +TARGET_BUILTIN(__builtin_ia32_vpmacssdd, "V4iV4iV4iV4i", "", "xop") +TARGET_BUILTIN(__builtin_ia32_vpmacsdd, "V4iV4iV4iV4i", "", "xop") +TARGET_BUILTIN(__builtin_ia32_vpmacssdql, "V2LLiV4iV4iV2LLi", "", "xop") +TARGET_BUILTIN(__builtin_ia32_vpmacsdql, "V2LLiV4iV4iV2LLi", "", "xop") +TARGET_BUILTIN(__builtin_ia32_vpmacssdqh, "V2LLiV4iV4iV2LLi", "", "xop") +TARGET_BUILTIN(__builtin_ia32_vpmacsdqh, "V2LLiV4iV4iV2LLi", "", "xop") +TARGET_BUILTIN(__builtin_ia32_vpmadcsswd, "V4iV8sV8sV4i", "", "xop") +TARGET_BUILTIN(__builtin_ia32_vpmadcswd, "V4iV8sV8sV4i", "", "xop") + +TARGET_BUILTIN(__builtin_ia32_vphaddbw, "V8sV16c", "", "xop") +TARGET_BUILTIN(__builtin_ia32_vphaddbd, "V4iV16c", "", "xop") +TARGET_BUILTIN(__builtin_ia32_vphaddbq, "V2LLiV16c", "", "xop") +TARGET_BUILTIN(__builtin_ia32_vphaddwd, "V4iV8s", "", "xop") +TARGET_BUILTIN(__builtin_ia32_vphaddwq, "V2LLiV8s", "", "xop") +TARGET_BUILTIN(__builtin_ia32_vphadddq, "V2LLiV4i", "", "xop") +TARGET_BUILTIN(__builtin_ia32_vphaddubw, "V8sV16c", "", "xop") +TARGET_BUILTIN(__builtin_ia32_vphaddubd, "V4iV16c", "", "xop") +TARGET_BUILTIN(__builtin_ia32_vphaddubq, "V2LLiV16c", "", "xop") +TARGET_BUILTIN(__builtin_ia32_vphadduwd, "V4iV8s", "", "xop") +TARGET_BUILTIN(__builtin_ia32_vphadduwq, "V2LLiV8s", "", "xop") +TARGET_BUILTIN(__builtin_ia32_vphaddudq, "V2LLiV4i", "", "xop") +TARGET_BUILTIN(__builtin_ia32_vphsubbw, "V8sV16c", "", "xop") +TARGET_BUILTIN(__builtin_ia32_vphsubwd, "V4iV8s", "", "xop") +TARGET_BUILTIN(__builtin_ia32_vphsubdq, "V2LLiV4i", "", "xop") +TARGET_BUILTIN(__builtin_ia32_vpcmov, "V2LLiV2LLiV2LLiV2LLi", "", "xop") +TARGET_BUILTIN(__builtin_ia32_vpcmov_256, "V4LLiV4LLiV4LLiV4LLi", "", "xop") +TARGET_BUILTIN(__builtin_ia32_vpperm, "V16cV16cV16cV16c", "", "xop") +TARGET_BUILTIN(__builtin_ia32_vprotb, "V16cV16cV16c", "", "xop") +TARGET_BUILTIN(__builtin_ia32_vprotw, "V8sV8sV8s", "", "xop") +TARGET_BUILTIN(__builtin_ia32_vprotd, "V4iV4iV4i", "", "xop") +TARGET_BUILTIN(__builtin_ia32_vprotq, "V2LLiV2LLiV2LLi", "", "xop") +TARGET_BUILTIN(__builtin_ia32_vprotbi, "V16cV16cIc", "", "xop") +TARGET_BUILTIN(__builtin_ia32_vprotwi, "V8sV8sIc", "", "xop") +TARGET_BUILTIN(__builtin_ia32_vprotdi, "V4iV4iIc", "", "xop") +TARGET_BUILTIN(__builtin_ia32_vprotqi, "V2LLiV2LLiIc", "", "xop") +TARGET_BUILTIN(__builtin_ia32_vpshlb, "V16cV16cV16c", "", "xop") +TARGET_BUILTIN(__builtin_ia32_vpshlw, "V8sV8sV8s", "", "xop") +TARGET_BUILTIN(__builtin_ia32_vpshld, "V4iV4iV4i", "", "xop") +TARGET_BUILTIN(__builtin_ia32_vpshlq, "V2LLiV2LLiV2LLi", "", "xop") +TARGET_BUILTIN(__builtin_ia32_vpshab, "V16cV16cV16c", "", "xop") +TARGET_BUILTIN(__builtin_ia32_vpshaw, "V8sV8sV8s", "", "xop") +TARGET_BUILTIN(__builtin_ia32_vpshad, "V4iV4iV4i", "", "xop") +TARGET_BUILTIN(__builtin_ia32_vpshaq, "V2LLiV2LLiV2LLi", "", "xop") +TARGET_BUILTIN(__builtin_ia32_vpcomub, "V16cV16cV16cIc", "", "xop") +TARGET_BUILTIN(__builtin_ia32_vpcomuw, "V8sV8sV8sIc", "", "xop") +TARGET_BUILTIN(__builtin_ia32_vpcomud, "V4iV4iV4iIc", "", "xop") +TARGET_BUILTIN(__builtin_ia32_vpcomuq, "V2LLiV2LLiV2LLiIc", "", "xop") +TARGET_BUILTIN(__builtin_ia32_vpcomb, "V16cV16cV16cIc", "", "xop") +TARGET_BUILTIN(__builtin_ia32_vpcomw, "V8sV8sV8sIc", "", "xop") +TARGET_BUILTIN(__builtin_ia32_vpcomd, "V4iV4iV4iIc", "", "xop") +TARGET_BUILTIN(__builtin_ia32_vpcomq, "V2LLiV2LLiV2LLiIc", "", "xop") +TARGET_BUILTIN(__builtin_ia32_vpermil2pd, "V2dV2dV2dV2LLiIc", "", "xop") +TARGET_BUILTIN(__builtin_ia32_vpermil2pd256, "V4dV4dV4dV4LLiIc", "", "xop") +TARGET_BUILTIN(__builtin_ia32_vpermil2ps, "V4fV4fV4fV4iIc", "", "xop") +TARGET_BUILTIN(__builtin_ia32_vpermil2ps256, "V8fV8fV8fV8iIc", "", "xop") +TARGET_BUILTIN(__builtin_ia32_vfrczss, "V4fV4f", "", "xop") +TARGET_BUILTIN(__builtin_ia32_vfrczsd, "V2dV2d", "", "xop") +TARGET_BUILTIN(__builtin_ia32_vfrczps, "V4fV4f", "", "xop") +TARGET_BUILTIN(__builtin_ia32_vfrczpd, "V2dV2d", "", "xop") +TARGET_BUILTIN(__builtin_ia32_vfrczps256, "V8fV8f", "", "xop") +TARGET_BUILTIN(__builtin_ia32_vfrczpd256, "V4dV4d", "", "xop") + +TARGET_BUILTIN(__builtin_ia32_xbegin, "i", "", "rtm") +TARGET_BUILTIN(__builtin_ia32_xend, "v", "", "rtm") +TARGET_BUILTIN(__builtin_ia32_xabort, "vIc", "", "rtm") +TARGET_BUILTIN(__builtin_ia32_xtest, "i", "", "rtm") + BUILTIN(__builtin_ia32_rdpmc, "ULLii", "") BUILTIN(__builtin_ia32_rdtsc, "ULLi", "") BUILTIN(__builtin_ia32_rdtscp, "ULLiUi*", "") // AVX-512 -BUILTIN(__builtin_ia32_sqrtpd512_mask, "V8dV8dV8dUcIi", "") -BUILTIN(__builtin_ia32_sqrtps512_mask, "V16fV16fV16fUsIi", "") -BUILTIN(__builtin_ia32_rsqrt14sd_mask, "V2dV2dV2dV2dUc", "") -BUILTIN(__builtin_ia32_rsqrt14ss_mask, "V4fV4fV4fV4fUc", "") -BUILTIN(__builtin_ia32_rsqrt14pd512_mask, "V8dV8dV8dUc", "") -BUILTIN(__builtin_ia32_rsqrt14ps512_mask, "V16fV16fV16fUs", "") -BUILTIN(__builtin_ia32_rsqrt28sd_mask, "V2dV2dV2dV2dUcIi", "") -BUILTIN(__builtin_ia32_rsqrt28ss_mask, "V4fV4fV4fV4fUcIi", "") -BUILTIN(__builtin_ia32_rsqrt28pd_mask, "V8dV8dV8dUcIi", "") -BUILTIN(__builtin_ia32_rsqrt28ps_mask, "V16fV16fV16fUsIi", "") -BUILTIN(__builtin_ia32_rcp14sd_mask, "V2dV2dV2dV2dUc", "") -BUILTIN(__builtin_ia32_rcp14ss_mask, "V4fV4fV4fV4fUc", "") -BUILTIN(__builtin_ia32_rcp14pd512_mask, "V8dV8dV8dUc", "") -BUILTIN(__builtin_ia32_rcp14ps512_mask, "V16fV16fV16fUs", "") -BUILTIN(__builtin_ia32_rcp28sd_mask, "V2dV2dV2dV2dUcIi", "") -BUILTIN(__builtin_ia32_rcp28ss_mask, "V4fV4fV4fV4fUcIi", "") -BUILTIN(__builtin_ia32_rcp28pd_mask, "V8dV8dV8dUcIi", "") -BUILTIN(__builtin_ia32_rcp28ps_mask, "V16fV16fV16fUsIi", "") -BUILTIN(__builtin_ia32_exp2pd_mask, "V8dV8dV8dUcIi", "") -BUILTIN(__builtin_ia32_exp2ps_mask, "V16fV16fV16fUsIi", "") -BUILTIN(__builtin_ia32_cvttps2dq512_mask, "V16iV16fV16iUsIi", "") -BUILTIN(__builtin_ia32_cvttps2udq512_mask, "V16iV16fV16iUsIi", "") -BUILTIN(__builtin_ia32_cvttpd2dq512_mask, "V8iV8dV8iUcIi", "") -BUILTIN(__builtin_ia32_cvttpd2udq512_mask, "V8iV8dV8iUcIi", "") -BUILTIN(__builtin_ia32_cmpps512_mask, "UsV16fV16fIiUsIi", "") -BUILTIN(__builtin_ia32_cmpps256_mask, "UcV8fV8fIiUc", "") -BUILTIN(__builtin_ia32_cmpps128_mask, "UcV4fV4fIiUc", "") -BUILTIN(__builtin_ia32_pcmpeqb512_mask, "LLiV64cV64cLLi", "") -BUILTIN(__builtin_ia32_pcmpeqd512_mask, "sV16iV16is", "") -BUILTIN(__builtin_ia32_pcmpeqq512_mask, "cV8LLiV8LLic", "") -BUILTIN(__builtin_ia32_pcmpeqw512_mask, "iV32sV32si", "") -BUILTIN(__builtin_ia32_pcmpeqb256_mask, "iV32cV32ci", "") -BUILTIN(__builtin_ia32_pcmpeqd256_mask, "cV8iV8ic", "") -BUILTIN(__builtin_ia32_pcmpeqq256_mask, "cV4LLiV4LLic", "") -BUILTIN(__builtin_ia32_pcmpeqw256_mask, "sV16sV16ss", "") -BUILTIN(__builtin_ia32_pcmpeqb128_mask, "sV16cV16cs", "") -BUILTIN(__builtin_ia32_pcmpeqd128_mask, "cV4iV4ic", "") -BUILTIN(__builtin_ia32_pcmpeqq128_mask, "cV2LLiV2LLic", "") -BUILTIN(__builtin_ia32_pcmpeqw128_mask, "cV8sV8sc", "") -BUILTIN(__builtin_ia32_pcmpgtb512_mask, "LLiV64cV64cLLi", "") -BUILTIN(__builtin_ia32_pcmpgtd512_mask, "sV16iV16is", "") -BUILTIN(__builtin_ia32_pcmpgtq512_mask, "cV8LLiV8LLic", "") -BUILTIN(__builtin_ia32_pcmpgtw512_mask, "iV32sV32si", "") -BUILTIN(__builtin_ia32_pcmpgtb256_mask, "iV32cV32ci", "") -BUILTIN(__builtin_ia32_pcmpgtd256_mask, "cV8iV8ic", "") -BUILTIN(__builtin_ia32_pcmpgtq256_mask, "cV4LLiV4LLic", "") -BUILTIN(__builtin_ia32_pcmpgtw256_mask, "sV16sV16ss", "") -BUILTIN(__builtin_ia32_pcmpgtb128_mask, "sV16cV16cs", "") -BUILTIN(__builtin_ia32_pcmpgtd128_mask, "cV4iV4ic", "") -BUILTIN(__builtin_ia32_pcmpgtq128_mask, "cV2LLiV2LLic", "") -BUILTIN(__builtin_ia32_pcmpgtw128_mask, "cV8sV8sc", "") -BUILTIN(__builtin_ia32_cmppd512_mask, "UcV8dV8dIiUcIi", "") -BUILTIN(__builtin_ia32_cmppd256_mask, "UcV4dV4dIiUc", "") -BUILTIN(__builtin_ia32_cmppd128_mask, "UcV2dV2dIiUc", "") -BUILTIN(__builtin_ia32_rndscaleps_mask, "V16fV16fIiV16fUsIi", "") -BUILTIN(__builtin_ia32_rndscalepd_mask, "V8dV8dIiV8dUcIi", "") -BUILTIN(__builtin_ia32_cvtps2dq512_mask, "V16iV16fV16iUsIi", "") -BUILTIN(__builtin_ia32_cvtpd2dq512_mask, "V8iV8dV8iUcIi", "") -BUILTIN(__builtin_ia32_cvtps2udq512_mask, "V16iV16fV16iUsIi", "") -BUILTIN(__builtin_ia32_cvtpd2udq512_mask, "V8iV8dV8iUcIi", "") -BUILTIN(__builtin_ia32_minps512_mask, "V16fV16fV16fV16fUsIi", "") -BUILTIN(__builtin_ia32_minpd512_mask, "V8dV8dV8dV8dUcIi", "") -BUILTIN(__builtin_ia32_maxps512_mask, "V16fV16fV16fV16fUsIi", "") -BUILTIN(__builtin_ia32_maxpd512_mask, "V8dV8dV8dV8dUcIi", "") -BUILTIN(__builtin_ia32_cvtdq2ps512_mask, "V16fV16iV16fUsIi", "") -BUILTIN(__builtin_ia32_cvtudq2ps512_mask, "V16fV16iV16fUsIi", "") -BUILTIN(__builtin_ia32_cvtdq2pd512_mask, "V8dV8iV8dUc", "") -BUILTIN(__builtin_ia32_cvtudq2pd512_mask, "V8dV8iV8dUc", "") -BUILTIN(__builtin_ia32_cvtpd2ps512_mask, "V8fV8dV8fUcIi", "") -BUILTIN(__builtin_ia32_vcvtps2ph512_mask, "V16sV16fIiV16sUs", "") -BUILTIN(__builtin_ia32_vcvtph2ps512_mask, "V16fV16sV16fUsIi", "") -BUILTIN(__builtin_ia32_pandd512_mask, "V16iV16iV16iV16iUs", "") -BUILTIN(__builtin_ia32_pandq512_mask, "V8LLiV8LLiV8LLiV8LLiUc", "") -BUILTIN(__builtin_ia32_pord512_mask, "V16iV16iV16iV16iUs", "") -BUILTIN(__builtin_ia32_porq512_mask, "V8LLiV8LLiV8LLiV8LLiUc", "") -BUILTIN(__builtin_ia32_pxord512_mask, "V16iV16iV16iV16iUs", "") -BUILTIN(__builtin_ia32_pxorq512_mask, "V8LLiV8LLiV8LLiV8LLiUc", "") -BUILTIN(__builtin_ia32_pabsd512_mask, "V16iV16iV16iUs", "") -BUILTIN(__builtin_ia32_pabsq512_mask, "V8LLiV8LLiV8LLiUc", "") -BUILTIN(__builtin_ia32_pmaxsd512_mask, "V16iV16iV16iV16iUs", "") -BUILTIN(__builtin_ia32_pmaxsq512_mask, "V8LLiV8LLiV8LLiV8LLiUc", "") -BUILTIN(__builtin_ia32_pmaxud512_mask, "V16iV16iV16iV16iUs", "") -BUILTIN(__builtin_ia32_pmaxuq512_mask, "V8LLiV8LLiV8LLiV8LLiUc", "") -BUILTIN(__builtin_ia32_pminsd512_mask, "V16iV16iV16iV16iUs", "") -BUILTIN(__builtin_ia32_pminsq512_mask, "V8LLiV8LLiV8LLiV8LLiUc", "") -BUILTIN(__builtin_ia32_pminud512_mask, "V16iV16iV16iV16iUs", "") -BUILTIN(__builtin_ia32_pminuq512_mask, "V8LLiV8LLiV8LLiV8LLiUc", "") -BUILTIN(__builtin_ia32_pmuldq512_mask, "V8LLiV16iV16iV8LLiUc", "") -BUILTIN(__builtin_ia32_pmuludq512_mask, "V8LLiV16iV16iV8LLiUc", "") -BUILTIN(__builtin_ia32_blendmd_512_mask, "V16iV16iV16iUs", "") -BUILTIN(__builtin_ia32_blendmq_512_mask, "V8LLiV8LLiV8LLiUc", "") -BUILTIN(__builtin_ia32_blendmps_512_mask, "V16fV16fV16fUs", "") -BUILTIN(__builtin_ia32_blendmpd_512_mask, "V8dV8dV8dUc", "") -BUILTIN(__builtin_ia32_ptestmd512, "UsV16iV16iUs", "") -BUILTIN(__builtin_ia32_ptestmq512, "UcV8LLiV8LLiUc", "") -BUILTIN(__builtin_ia32_pbroadcastd512_gpr_mask, "V16iiV16iUs", "") -BUILTIN(__builtin_ia32_pbroadcastq512_gpr_mask, "V8LLiLLiV8LLiUc", "") -BUILTIN(__builtin_ia32_pbroadcastq512_mem_mask, "V8LLiLLiV8LLiUc", "") -BUILTIN(__builtin_ia32_loaddqusi512_mask, "V16ivC*V16iUs", "") -BUILTIN(__builtin_ia32_loaddqudi512_mask, "V8LLivC*V8LLiUc", "") -BUILTIN(__builtin_ia32_loadups512_mask, "V16fvC*V16fUs", "") -BUILTIN(__builtin_ia32_loadaps512_mask, "V16fvC*V16fUs", "") -BUILTIN(__builtin_ia32_loadupd512_mask, "V8dvC*V8dUc", "") -BUILTIN(__builtin_ia32_loadapd512_mask, "V8dvC*V8dUc", "") -BUILTIN(__builtin_ia32_storedqudi512_mask, "vv*V8LLiUc", "") -BUILTIN(__builtin_ia32_storedqusi512_mask, "vv*V16iUs", "") -BUILTIN(__builtin_ia32_storeupd512_mask, "vv*V8dUc", "") -BUILTIN(__builtin_ia32_storeapd512_mask, "vv*V8dUc", "") -BUILTIN(__builtin_ia32_storeups512_mask, "vv*V16fUs", "") -BUILTIN(__builtin_ia32_storeaps512_mask, "vv*V16fUs", "") -BUILTIN(__builtin_ia32_vpermt2vard512_mask, "V16iV16iV16iV16iUs", "") -BUILTIN(__builtin_ia32_vpermt2varq512_mask, "V8LLiV8LLiV8LLiV8LLiUc", "") -BUILTIN(__builtin_ia32_vpermt2varps512_mask, "V16fV16iV16fV16fUs", "") -BUILTIN(__builtin_ia32_vpermt2varpd512_mask, "V8dV8LLiV8dV8dUc", "") -BUILTIN(__builtin_ia32_alignq512_mask, "V8LLiV8LLiV8LLiIcV8LLiUc", "") -BUILTIN(__builtin_ia32_alignd512_mask, "V16iV16iV16iIcV16iUs", "") -BUILTIN(__builtin_ia32_extractf64x4_mask, "V4dV8dIcV4dUc", "") -BUILTIN(__builtin_ia32_extractf32x4_mask, "V4fV16fIcV4fUc", "") -BUILTIN(__builtin_ia32_gathersiv8df, "V8dV8dvC*V8iUcIi", "") -BUILTIN(__builtin_ia32_gathersiv16sf, "V16fV16fvC*UsIi", "") -BUILTIN(__builtin_ia32_gatherdiv8df, "V8dV8dvC*V8LLiUcIi", "") -BUILTIN(__builtin_ia32_gatherdiv16sf, "V8fV8fvC*V8LLiUcIi", "") -BUILTIN(__builtin_ia32_gathersiv8di, "V8LLiV8LLivC*V8iUcIi", "") -BUILTIN(__builtin_ia32_gathersiv16si, "V16iV16ivC*UsIi", "") -BUILTIN(__builtin_ia32_gatherdiv8di, "V8LLiV8LLivC*V8LLiUcIi", "") -BUILTIN(__builtin_ia32_gatherdiv16si, "V8iV8ivC*V8LLiUcIi", "") -BUILTIN(__builtin_ia32_scattersiv8df, "vv*UcV8iV8dIi", "") -BUILTIN(__builtin_ia32_scattersiv16sf, "vv*UsV16iV16fIi", "") -BUILTIN(__builtin_ia32_scatterdiv8df, "vv*UcV8LLiV8dIi", "") -BUILTIN(__builtin_ia32_scatterdiv16sf, "vv*UcV8LLiV8fIi", "") -BUILTIN(__builtin_ia32_scattersiv8di, "vv*UcV8iV8LLiIi", "") -BUILTIN(__builtin_ia32_scattersiv16si, "vv*UsV16iV16iIi", "") -BUILTIN(__builtin_ia32_scatterdiv8di, "vv*UcV8LLiV8LLiIi", "") -BUILTIN(__builtin_ia32_scatterdiv16si, "vv*UcV8LLiV8iIi", "") -BUILTIN(__builtin_ia32_gatherpfdpd, "vUcV8ivC*IiIi", "") -BUILTIN(__builtin_ia32_gatherpfdps, "vUsV16ivC*IiIi", "") -BUILTIN(__builtin_ia32_gatherpfqpd, "vUcV8LLivC*IiIi", "") -BUILTIN(__builtin_ia32_gatherpfqps, "vUcV8LLivC*IiIi", "") -BUILTIN(__builtin_ia32_scatterpfdpd, "vUcV8iv*IiIi", "") -BUILTIN(__builtin_ia32_scatterpfdps, "vUsV16iv*IiIi", "") -BUILTIN(__builtin_ia32_scatterpfqpd, "vUcV8LLiv*IiIi", "") -BUILTIN(__builtin_ia32_scatterpfqps, "vUcV8LLiv*IiIi", "") -BUILTIN(__builtin_ia32_knothi, "UsUs", "") - -BUILTIN(__builtin_ia32_cmpb128_mask, "UsV16cV16cIiUs", "") -BUILTIN(__builtin_ia32_cmpd128_mask, "UcV4iV4iIiUc", "") -BUILTIN(__builtin_ia32_cmpq128_mask, "UcV2LLiV2LLiIiUc", "") -BUILTIN(__builtin_ia32_cmpw128_mask, "UcV8sV8sIiUc", "") -BUILTIN(__builtin_ia32_cmpb256_mask, "UiV32cV32cIiUi", "") -BUILTIN(__builtin_ia32_cmpd256_mask, "UcV8iV8iIiUc", "") -BUILTIN(__builtin_ia32_cmpq256_mask, "UcV4LLiV4LLiIiUc", "") -BUILTIN(__builtin_ia32_cmpw256_mask, "UsV16sV16sIiUs", "") -BUILTIN(__builtin_ia32_cmpb512_mask, "ULLiV64cV64cIiULLi", "") -BUILTIN(__builtin_ia32_cmpd512_mask, "UsV16iV16iIiUs", "") -BUILTIN(__builtin_ia32_cmpq512_mask, "UcV8LLiV8LLiIiUc", "") -BUILTIN(__builtin_ia32_cmpw512_mask, "UiV32sV32sIiUi", "") -BUILTIN(__builtin_ia32_ucmpb128_mask, "UsV16cV16cIiUs", "") -BUILTIN(__builtin_ia32_ucmpd128_mask, "UcV4iV4iIiUc", "") -BUILTIN(__builtin_ia32_ucmpq128_mask, "UcV2LLiV2LLiIiUc", "") -BUILTIN(__builtin_ia32_ucmpw128_mask, "UcV8sV8sIiUc", "") -BUILTIN(__builtin_ia32_ucmpb256_mask, "UiV32cV32cIiUi", "") -BUILTIN(__builtin_ia32_ucmpd256_mask, "UcV8iV8iIiUc", "") -BUILTIN(__builtin_ia32_ucmpq256_mask, "UcV4LLiV4LLiIiUc", "") -BUILTIN(__builtin_ia32_ucmpw256_mask, "UsV16sV16sIiUs", "") -BUILTIN(__builtin_ia32_ucmpb512_mask, "ULLiV64cV64cIiULLi", "") -BUILTIN(__builtin_ia32_ucmpd512_mask, "UsV16iV16iIiUs", "") -BUILTIN(__builtin_ia32_ucmpq512_mask, "UcV8LLiV8LLiIiUc", "") -BUILTIN(__builtin_ia32_ucmpw512_mask, "UiV32sV32sIiUi", "") - -BUILTIN(__builtin_ia32_paddd256_mask, "V8iV8iV8iV8iUc", "") -BUILTIN(__builtin_ia32_paddq256_mask, "V4LLiV4LLiV4LLiV4LLiUc", "") -BUILTIN(__builtin_ia32_psubd256_mask, "V8iV8iV8iV8iUc", "") -BUILTIN(__builtin_ia32_psubq256_mask, "V4LLiV4LLiV4LLiV4LLiUc", "") -BUILTIN(__builtin_ia32_paddd128_mask, "V4iV4iV4iV4iUc", "") -BUILTIN(__builtin_ia32_paddq128_mask, "V2LLiV2LLiV2LLiV2LLiUc", "") -BUILTIN(__builtin_ia32_psubd128_mask, "V4iV4iV4iV4iUc", "") -BUILTIN(__builtin_ia32_psubq128_mask, "V2LLiV2LLiV2LLiV2LLiUc", "") -BUILTIN(__builtin_ia32_pmuldq256_mask, "V4LLiV8iV8iV4LLiUc", "") -BUILTIN(__builtin_ia32_pmuldq128_mask, "V2LLiV4iV4iV2LLiUc", "") -BUILTIN(__builtin_ia32_pmuludq256_mask, "V4LLiV8iV8iV4LLiUc", "") -BUILTIN(__builtin_ia32_pmuludq128_mask, "V2LLiV4iV4iV2LLiUc", "") -BUILTIN(__builtin_ia32_pmulld256_mask, "V8iV8iV8iV8iUc", "") -BUILTIN(__builtin_ia32_pmulld128_mask, "V4iV4iV4iV4iUc", "") -BUILTIN(__builtin_ia32_pandd256_mask, "V8iV8iV8iV8iUc", "") -BUILTIN(__builtin_ia32_pandd128_mask, "V4iV4iV4iV4iUc", "") -BUILTIN(__builtin_ia32_pandnd256_mask, "V8iV8iV8iV8iUc", "") -BUILTIN(__builtin_ia32_pandnd128_mask, "V4iV4iV4iV4iUc", "") -BUILTIN(__builtin_ia32_pord256_mask, "V8iV8iV8iV8iUc", "") -BUILTIN(__builtin_ia32_pord128_mask, "V4iV4iV4iV4iUc", "") -BUILTIN(__builtin_ia32_pxord256_mask, "V8iV8iV8iV8iUc", "") -BUILTIN(__builtin_ia32_pxord128_mask, "V4iV4iV4iV4iUc", "") -BUILTIN(__builtin_ia32_pandq256_mask, "V4LLiV4LLiV4LLiV4LLiUc", "") -BUILTIN(__builtin_ia32_pandq128_mask, "V2LLiV2LLiV2LLiV2LLiUc", "") -BUILTIN(__builtin_ia32_pandnq256_mask, "V4LLiV4LLiV4LLiV4LLiUc", "") -BUILTIN(__builtin_ia32_pandnq128_mask, "V2LLiV2LLiV2LLiV2LLiUc", "") -BUILTIN(__builtin_ia32_porq256_mask, "V4LLiV4LLiV4LLiV4LLiUc", "") -BUILTIN(__builtin_ia32_porq128_mask, "V2LLiV2LLiV2LLiV2LLiUc", "") -BUILTIN(__builtin_ia32_pxorq256_mask, "V4LLiV4LLiV4LLiV4LLiUc", "") -BUILTIN(__builtin_ia32_pxorq128_mask, "V2LLiV2LLiV2LLiV2LLiUc", "") -BUILTIN(__builtin_ia32_paddb512_mask, "V64cV64cV64cV64cULLi", "") -BUILTIN(__builtin_ia32_psubb512_mask, "V64cV64cV64cV64cULLi", "") -BUILTIN(__builtin_ia32_paddw512_mask, "V32sV32sV32sV32sUi", "") -BUILTIN(__builtin_ia32_psubw512_mask, "V32sV32sV32sV32sUi", "") -BUILTIN(__builtin_ia32_pmullw512_mask, "V32sV32sV32sV32sUi", "") -BUILTIN(__builtin_ia32_paddb256_mask, "V32cV32cV32cV32cUi", "") -BUILTIN(__builtin_ia32_paddw256_mask, "V16sV16sV16sV16sUs", "") -BUILTIN(__builtin_ia32_psubb256_mask, "V32cV32cV32cV32cUi", "") -BUILTIN(__builtin_ia32_psubw256_mask, "V16sV16sV16sV16sUs", "") -BUILTIN(__builtin_ia32_paddb128_mask, "V16cV16cV16cV16cUs", "") -BUILTIN(__builtin_ia32_paddw128_mask, "V8sV8sV8sV8sUc", "") -BUILTIN(__builtin_ia32_psubb128_mask, "V16cV16cV16cV16cUs", "") -BUILTIN(__builtin_ia32_psubw128_mask, "V8sV8sV8sV8sUc", "") -BUILTIN(__builtin_ia32_pmullw256_mask, "V16sV16sV16sV16sUs", "") -BUILTIN(__builtin_ia32_pmullw128_mask, "V8sV8sV8sV8sUc", "") -BUILTIN(__builtin_ia32_pandnd512_mask, "V16iV16iV16iV16iUs", "") -BUILTIN(__builtin_ia32_pandnq512_mask, "V8LLiV8LLiV8LLiV8LLiUc", "") -BUILTIN(__builtin_ia32_paddq512_mask, "V8LLiV8LLiV8LLiV8LLiUc", "") -BUILTIN(__builtin_ia32_psubq512_mask, "V8LLiV8LLiV8LLiV8LLiUc", "") -BUILTIN(__builtin_ia32_paddd512_mask, "V16iV16iV16iV16iUs", "") -BUILTIN(__builtin_ia32_psubd512_mask, "V16iV16iV16iV16iUs", "") -BUILTIN(__builtin_ia32_pmulld512_mask, "V16iV16iV16iV16iUs", "") -BUILTIN(__builtin_ia32_pmullq512_mask, "V8LLiV8LLiV8LLiV8LLiUc", "") -BUILTIN(__builtin_ia32_xorpd512_mask, "V8dV8dV8dV8dUc", "") -BUILTIN(__builtin_ia32_xorps512_mask, "V16fV16fV16fV16fUs", "") -BUILTIN(__builtin_ia32_orpd512_mask, "V8dV8dV8dV8dUc", "") -BUILTIN(__builtin_ia32_orps512_mask, "V16fV16fV16fV16fUs", "") -BUILTIN(__builtin_ia32_andpd512_mask, "V8dV8dV8dV8dUc", "") -BUILTIN(__builtin_ia32_andps512_mask, "V16fV16fV16fV16fUs", "") -BUILTIN(__builtin_ia32_andnpd512_mask, "V8dV8dV8dV8dUc", "") -BUILTIN(__builtin_ia32_andnps512_mask, "V16fV16fV16fV16fUs", "") -BUILTIN(__builtin_ia32_pmullq256_mask, "V4LLiV4LLiV4LLiV4LLiUc", "") -BUILTIN(__builtin_ia32_pmullq128_mask, "V2LLiV2LLiV2LLiV2LLiUc", "") -BUILTIN(__builtin_ia32_andnpd256_mask, "V4dV4dV4dV4dUc", "") -BUILTIN(__builtin_ia32_andnpd128_mask, "V2dV2dV2dV2dUc", "") -BUILTIN(__builtin_ia32_andnps256_mask, "V8fV8fV8fV8fUc", "") -BUILTIN(__builtin_ia32_andnps128_mask, "V4fV4fV4fV4fUc", "") -BUILTIN(__builtin_ia32_andpd256_mask, "V4dV4dV4dV4dUc", "") -BUILTIN(__builtin_ia32_andpd128_mask, "V2dV2dV2dV2dUc", "") -BUILTIN(__builtin_ia32_andps256_mask, "V8fV8fV8fV8fUc", "") -BUILTIN(__builtin_ia32_andps128_mask, "V4fV4fV4fV4fUc", "") -BUILTIN(__builtin_ia32_xorpd256_mask, "V4dV4dV4dV4dUc", "") -BUILTIN(__builtin_ia32_xorpd128_mask, "V2dV2dV2dV2dUc", "") -BUILTIN(__builtin_ia32_xorps256_mask, "V8fV8fV8fV8fUc", "") -BUILTIN(__builtin_ia32_xorps128_mask, "V4fV4fV4fV4fUc", "") -BUILTIN(__builtin_ia32_orpd256_mask, "V4dV4dV4dV4dUc", "") -BUILTIN(__builtin_ia32_orpd128_mask, "V2dV2dV2dV2dUc", "") -BUILTIN(__builtin_ia32_orps256_mask, "V8fV8fV8fV8fUc", "") -BUILTIN(__builtin_ia32_orps128_mask, "V4fV4fV4fV4fUc", "") -BUILTIN(__builtin_ia32_blendmb_512_mask, "V64cV64cV64cULLi", "") -BUILTIN(__builtin_ia32_blendmw_512_mask, "V32sV32sV32sUi", "") -BUILTIN(__builtin_ia32_pabsb512_mask, "V64cV64cV64cULLi", "") -BUILTIN(__builtin_ia32_pabsw512_mask, "V32sV32sV32sUi", "") -BUILTIN(__builtin_ia32_packssdw512_mask, "V32sV16iV16iV32sUi", "") -BUILTIN(__builtin_ia32_packsswb512_mask, "V64cV32sV32sV64cULLi", "") -BUILTIN(__builtin_ia32_packusdw512_mask, "V32sV16iV16iV32sUi", "") -BUILTIN(__builtin_ia32_packuswb512_mask, "V64cV32sV32sV64cULLi", "") -BUILTIN(__builtin_ia32_paddsb512_mask, "V64cV64cV64cV64cULLi", "") -BUILTIN(__builtin_ia32_paddsw512_mask, "V32sV32sV32sV32sUi", "") -BUILTIN(__builtin_ia32_paddusb512_mask, "V64cV64cV64cV64cULLi", "") -BUILTIN(__builtin_ia32_paddusw512_mask, "V32sV32sV32sV32sUi", "") -BUILTIN(__builtin_ia32_pavgb512_mask, "V64cV64cV64cV64cULLi", "") -BUILTIN(__builtin_ia32_pavgw512_mask, "V32sV32sV32sV32sUi", "") -BUILTIN(__builtin_ia32_pmaxsb512_mask, "V64cV64cV64cV64cULLi", "") -BUILTIN(__builtin_ia32_pmaxsw512_mask, "V32sV32sV32sV32sUi", "") -BUILTIN(__builtin_ia32_pmaxub512_mask, "V64cV64cV64cV64cULLi", "") -BUILTIN(__builtin_ia32_pmaxuw512_mask, "V32sV32sV32sV32sUi", "") -BUILTIN(__builtin_ia32_pminsb512_mask, "V64cV64cV64cV64cULLi", "") -BUILTIN(__builtin_ia32_pminsw512_mask, "V32sV32sV32sV32sUi", "") -BUILTIN(__builtin_ia32_pminub512_mask, "V64cV64cV64cV64cULLi", "") -BUILTIN(__builtin_ia32_pminuw512_mask, "V32sV32sV32sV32sUi", "") -BUILTIN(__builtin_ia32_pshufb512_mask, "V64cV64cV64cV64cULLi", "") -BUILTIN(__builtin_ia32_psubsb512_mask, "V64cV64cV64cV64cULLi", "") -BUILTIN(__builtin_ia32_psubsw512_mask, "V32sV32sV32sV32sUi", "") -BUILTIN(__builtin_ia32_psubusb512_mask, "V64cV64cV64cV64cULLi", "") -BUILTIN(__builtin_ia32_psubusw512_mask, "V32sV32sV32sV32sUi", "") -BUILTIN(__builtin_ia32_vpermi2varhi512_mask, "V32sV32sV32sV32sUi", "") -BUILTIN(__builtin_ia32_vpermt2varhi512_mask, "V32sV32sV32sV32sUi", "") -BUILTIN(__builtin_ia32_vpermt2varhi512_maskz, "V32sV32sV32sV32sUi", "") -BUILTIN(__builtin_ia32_vpconflictdi_512_mask, "V8LLiV8LLiV8LLiUc", "") -BUILTIN(__builtin_ia32_vpconflictsi_512_mask, "V16iV16iV16iUs", "") -BUILTIN(__builtin_ia32_vplzcntd_512_mask, "V16iV16iV16iUs", "") -BUILTIN(__builtin_ia32_vplzcntq_512_mask, "V8LLiV8LLiV8LLiUc", "") -BUILTIN(__builtin_ia32_blendmb_128_mask, "V16cV16cV16cUs", "") -BUILTIN(__builtin_ia32_blendmb_256_mask, "V32cV32cV32cUi", "") -BUILTIN(__builtin_ia32_blendmw_128_mask, "V8sV8sV8sUc", "") -BUILTIN(__builtin_ia32_blendmw_256_mask, "V16sV16sV16sUs", "") -BUILTIN(__builtin_ia32_pabsb128_mask, "V16cV16cV16cUs", "") -BUILTIN(__builtin_ia32_pabsb256_mask, "V32cV32cV32cUi", "") -BUILTIN(__builtin_ia32_pabsw128_mask, "V8sV8sV8sUc", "") -BUILTIN(__builtin_ia32_pabsw256_mask, "V16sV16sV16sUs", "") -BUILTIN(__builtin_ia32_packssdw128_mask, "V8sV4iV4iV8sUc", "") -BUILTIN(__builtin_ia32_packssdw256_mask, "V16sV8iV8iV16sUs", "") -BUILTIN(__builtin_ia32_packsswb128_mask, "V16cV8sV8sV16cUs", "") -BUILTIN(__builtin_ia32_packsswb256_mask, "V32cV16sV16sV32cUi", "") -BUILTIN(__builtin_ia32_packusdw128_mask, "V8sV4iV4iV8sUc", "") -BUILTIN(__builtin_ia32_packusdw256_mask, "V16sV8iV8iV16sUs", "") -BUILTIN(__builtin_ia32_packuswb128_mask, "V16cV8sV8sV16cUs", "") -BUILTIN(__builtin_ia32_packuswb256_mask, "V32cV16sV16sV32cUi", "") -BUILTIN(__builtin_ia32_paddsb128_mask, "V16cV16cV16cV16cUs", "") -BUILTIN(__builtin_ia32_paddsb256_mask, "V32cV32cV32cV32cUi", "") -BUILTIN(__builtin_ia32_paddsw128_mask, "V8sV8sV8sV8sUc", "") -BUILTIN(__builtin_ia32_paddsw256_mask, "V16sV16sV16sV16sUs", "") -BUILTIN(__builtin_ia32_paddusb128_mask, "V16cV16cV16cV16cUs", "") -BUILTIN(__builtin_ia32_paddusb256_mask, "V32cV32cV32cV32cUi", "") -BUILTIN(__builtin_ia32_paddusw128_mask, "V8sV8sV8sV8sUc", "") -BUILTIN(__builtin_ia32_paddusw256_mask, "V16sV16sV16sV16sUs", "") -BUILTIN(__builtin_ia32_pavgb128_mask, "V16cV16cV16cV16cUs", "") -BUILTIN(__builtin_ia32_pavgb256_mask, "V32cV32cV32cV32cUi", "") -BUILTIN(__builtin_ia32_pavgw128_mask, "V8sV8sV8sV8sUc", "") -BUILTIN(__builtin_ia32_pavgw256_mask, "V16sV16sV16sV16sUs", "") -BUILTIN(__builtin_ia32_pmaxsb128_mask, "V16cV16cV16cV16cUs", "") -BUILTIN(__builtin_ia32_pmaxsb256_mask, "V32cV32cV32cV32cUi", "") -BUILTIN(__builtin_ia32_pmaxsw128_mask, "V8sV8sV8sV8sUc", "") -BUILTIN(__builtin_ia32_pmaxsw256_mask, "V16sV16sV16sV16sUs", "") -BUILTIN(__builtin_ia32_pmaxub128_mask, "V16cV16cV16cV16cUs", "") -BUILTIN(__builtin_ia32_pmaxub256_mask, "V32cV32cV32cV32cUi", "") -BUILTIN(__builtin_ia32_pmaxuw128_mask, "V8sV8sV8sV8sUc", "") -BUILTIN(__builtin_ia32_pmaxuw256_mask, "V16sV16sV16sV16sUs", "") -BUILTIN(__builtin_ia32_pminsb128_mask, "V16cV16cV16cV16cUs", "") -BUILTIN(__builtin_ia32_pminsb256_mask, "V32cV32cV32cV32cUi", "") -BUILTIN(__builtin_ia32_pminsw128_mask, "V8sV8sV8sV8sUc", "") -BUILTIN(__builtin_ia32_pminsw256_mask, "V16sV16sV16sV16sUs", "") -BUILTIN(__builtin_ia32_pminub128_mask, "V16cV16cV16cV16cUs", "") -BUILTIN(__builtin_ia32_pminub256_mask, "V32cV32cV32cV32cUi", "") -BUILTIN(__builtin_ia32_pminuw128_mask, "V8sV8sV8sV8sUc", "") -BUILTIN(__builtin_ia32_pminuw256_mask, "V16sV16sV16sV16sUs", "") -BUILTIN(__builtin_ia32_pshufb128_mask, "V16cV16cV16cV16cUs", "") -BUILTIN(__builtin_ia32_pshufb256_mask, "V32cV32cV32cV32cUi", "") -BUILTIN(__builtin_ia32_psubsb128_mask, "V16cV16cV16cV16cUs", "") -BUILTIN(__builtin_ia32_psubsb256_mask, "V32cV32cV32cV32cUi", "") -BUILTIN(__builtin_ia32_psubsw128_mask, "V8sV8sV8sV8sUc", "") -BUILTIN(__builtin_ia32_psubsw256_mask, "V16sV16sV16sV16sUs", "") -BUILTIN(__builtin_ia32_psubusb128_mask, "V16cV16cV16cV16cUs", "") -BUILTIN(__builtin_ia32_psubusb256_mask, "V32cV32cV32cV32cUi", "") -BUILTIN(__builtin_ia32_psubusw128_mask, "V8sV8sV8sV8sUc", "") -BUILTIN(__builtin_ia32_psubusw256_mask, "V16sV16sV16sV16sUs", "") -BUILTIN(__builtin_ia32_vpermi2varhi128_mask, "V8sV8sV8sV8sUc", "") -BUILTIN(__builtin_ia32_vpermi2varhi256_mask, "V16sV16sV16sV16sUs", "") -BUILTIN(__builtin_ia32_vpermt2varhi128_mask, "V8sV8sV8sV8sUc", "") -BUILTIN(__builtin_ia32_vpermt2varhi128_maskz, "V8sV8sV8sV8sUc", "") -BUILTIN(__builtin_ia32_vpermt2varhi256_mask, "V16sV16sV16sV16sUs", "") -BUILTIN(__builtin_ia32_vpermt2varhi256_maskz, "V16sV16sV16sV16sUs", "") -BUILTIN(__builtin_ia32_pmulhrsw512_mask, "V32sV32sV32sV32sUi", "") -BUILTIN(__builtin_ia32_pmulhuw512_mask, "V32sV32sV32sV32sUi", "") -BUILTIN(__builtin_ia32_pmulhw512_mask, "V32sV32sV32sV32sUi", "") -BUILTIN(__builtin_ia32_addpd512_mask, "V8dV8dV8dV8dUcIi", "") -BUILTIN(__builtin_ia32_addps512_mask, "V16fV16fV16fV16fUsIi", "") -BUILTIN(__builtin_ia32_divpd512_mask, "V8dV8dV8dV8dUcIi", "") -BUILTIN(__builtin_ia32_divps512_mask, "V16fV16fV16fV16fUsIi", "") -BUILTIN(__builtin_ia32_mulpd512_mask, "V8dV8dV8dV8dUcIi", "") -BUILTIN(__builtin_ia32_mulps512_mask, "V16fV16fV16fV16fUsIi", "") -BUILTIN(__builtin_ia32_subpd512_mask, "V8dV8dV8dV8dUcIi", "") -BUILTIN(__builtin_ia32_subps512_mask, "V16fV16fV16fV16fUsIi", "") -BUILTIN(__builtin_ia32_pmaddubsw512_mask, "V32sV64cV64cV32sUi", "") -BUILTIN(__builtin_ia32_pmaddwd512_mask, "V16iV32sV32sV16iUs", "") -BUILTIN(__builtin_ia32_addss_mask, "V4fV4fV4fV4fUcIi", "") -BUILTIN(__builtin_ia32_divss_mask, "V4fV4fV4fV4fUcIi", "") -BUILTIN(__builtin_ia32_mulss_mask, "V4fV4fV4fV4fUcIi", "") -BUILTIN(__builtin_ia32_subss_mask, "V4fV4fV4fV4fUcIi", "") -BUILTIN(__builtin_ia32_maxss_mask, "V4fV4fV4fV4fUcIi", "") -BUILTIN(__builtin_ia32_minss_mask, "V4fV4fV4fV4fUcIi", "") -BUILTIN(__builtin_ia32_addsd_mask, "V2dV2dV2dV2dUcIi", "") -BUILTIN(__builtin_ia32_divsd_mask, "V2dV2dV2dV2dUcIi", "") -BUILTIN(__builtin_ia32_mulsd_mask, "V2dV2dV2dV2dUcIi", "") -BUILTIN(__builtin_ia32_subsd_mask, "V2dV2dV2dV2dUcIi", "") -BUILTIN(__builtin_ia32_maxsd_mask, "V2dV2dV2dV2dUcIi", "") -BUILTIN(__builtin_ia32_minsd_mask, "V2dV2dV2dV2dUcIi", "") -BUILTIN(__builtin_ia32_addpd128_mask, "V2dV2dV2dV2dUc", "") -BUILTIN(__builtin_ia32_addpd256_mask, "V4dV4dV4dV4dUc", "") -BUILTIN(__builtin_ia32_addps128_mask, "V4fV4fV4fV4fUc", "") -BUILTIN(__builtin_ia32_addps256_mask, "V8fV8fV8fV8fUc", "") -BUILTIN(__builtin_ia32_blendmd_128_mask, "V4iV4iV4iUc", "") -BUILTIN(__builtin_ia32_blendmd_256_mask, "V8iV8iV8iUc", "") -BUILTIN(__builtin_ia32_blendmpd_128_mask, "V2dV2dV2dUc", "") -BUILTIN(__builtin_ia32_blendmpd_256_mask, "V4dV4dV4dUc", "") -BUILTIN(__builtin_ia32_blendmps_128_mask, "V4fV4fV4fUc", "") -BUILTIN(__builtin_ia32_blendmps_256_mask, "V8fV8fV8fUc", "") -BUILTIN(__builtin_ia32_blendmq_128_mask, "V2LLiV2LLiV2LLiUc", "") -BUILTIN(__builtin_ia32_blendmq_256_mask, "V4LLiV4LLiV4LLiUc", "") -BUILTIN(__builtin_ia32_compressdf128_mask, "V2dV2dV2dUc", "") -BUILTIN(__builtin_ia32_compressdf256_mask, "V4dV4dV4dUc", "") -BUILTIN(__builtin_ia32_compressdi128_mask, "V2LLiV2LLiV2LLiUc", "") -BUILTIN(__builtin_ia32_compressdi256_mask, "V4LLiV4LLiV4LLiUc", "") -BUILTIN(__builtin_ia32_compresssf128_mask, "V4fV4fV4fUc", "") -BUILTIN(__builtin_ia32_compresssf256_mask, "V8fV8fV8fUc", "") -BUILTIN(__builtin_ia32_compresssi128_mask, "V4iV4iV4iUc", "") -BUILTIN(__builtin_ia32_compresssi256_mask, "V8iV8iV8iUc", "") -BUILTIN(__builtin_ia32_compressstoredf128_mask, "vV2d*V2dUc", "") -BUILTIN(__builtin_ia32_compressstoredf256_mask, "vV4d*V4dUc", "") -BUILTIN(__builtin_ia32_compressstoredi128_mask, "vV2LLi*V2LLiUc", "") -BUILTIN(__builtin_ia32_compressstoredi256_mask, "vV4LLi*V4LLiUc", "") -BUILTIN(__builtin_ia32_compressstoresf128_mask, "vV4f*V4fUc", "") -BUILTIN(__builtin_ia32_compressstoresf256_mask, "vV8f*V8fUc", "") -BUILTIN(__builtin_ia32_compressstoresi128_mask, "vV4i*V4iUc", "") -BUILTIN(__builtin_ia32_compressstoresi256_mask, "vV8i*V8iUc", "") -BUILTIN(__builtin_ia32_cvtdq2pd128_mask, "V2dV4iV2dUc", "") -BUILTIN(__builtin_ia32_cvtdq2pd256_mask, "V4dV4iV4dUc", "") -BUILTIN(__builtin_ia32_cvtdq2ps128_mask, "V4fV4iV4fUc", "") -BUILTIN(__builtin_ia32_cvtdq2ps256_mask, "V8fV8iV8fUc", "") -BUILTIN(__builtin_ia32_cvtpd2dq128_mask, "V4iV2dV4iUc", "") -BUILTIN(__builtin_ia32_cvtpd2dq256_mask, "V4iV4dV4iUc", "") -BUILTIN(__builtin_ia32_cvtpd2ps_mask, "V4fV2dV4fUc", "") -BUILTIN(__builtin_ia32_cvtpd2ps256_mask, "V4fV4dV4fUc", "") -BUILTIN(__builtin_ia32_cvtpd2udq128_mask, "V4iV2dV4iUc", "") -BUILTIN(__builtin_ia32_cvtpd2udq256_mask, "V4iV4dV4iUc", "") -BUILTIN(__builtin_ia32_cvtps2dq128_mask, "V4iV4fV4iUc", "") -BUILTIN(__builtin_ia32_cvtps2dq256_mask, "V8iV8fV8iUc", "") -BUILTIN(__builtin_ia32_cvtps2pd128_mask, "V2dV4fV2dUc", "") -BUILTIN(__builtin_ia32_cvtps2pd256_mask, "V4dV4fV4dUc", "") -BUILTIN(__builtin_ia32_cvtps2udq128_mask, "V4iV4fV4iUc", "") -BUILTIN(__builtin_ia32_cvtps2udq256_mask, "V8iV8fV8iUc", "") -BUILTIN(__builtin_ia32_cvttpd2dq128_mask, "V4iV2dV4iUc", "") -BUILTIN(__builtin_ia32_cvttpd2dq256_mask, "V4iV4dV4iUc", "") -BUILTIN(__builtin_ia32_cvttpd2udq128_mask, "V4iV2dV4iUc", "") -BUILTIN(__builtin_ia32_cvttpd2udq256_mask, "V4iV4dV4iUc", "") -BUILTIN(__builtin_ia32_cvttps2dq128_mask, "V4iV4fV4iUc", "") -BUILTIN(__builtin_ia32_cvttps2dq256_mask, "V8iV8fV8iUc", "") -BUILTIN(__builtin_ia32_cvttps2udq128_mask, "V4iV4fV4iUc", "") -BUILTIN(__builtin_ia32_cvttps2udq256_mask, "V8iV8fV8iUc", "") -BUILTIN(__builtin_ia32_cvtudq2pd128_mask, "V2dV4iV2dUc", "") -BUILTIN(__builtin_ia32_cvtudq2pd256_mask, "V4dV4iV4dUc", "") -BUILTIN(__builtin_ia32_cvtudq2ps128_mask, "V4fV4iV4fUc", "") -BUILTIN(__builtin_ia32_cvtudq2ps256_mask, "V8fV8iV8fUc", "") -BUILTIN(__builtin_ia32_divpd_mask, "V2dV2dV2dV2dUc", "") -BUILTIN(__builtin_ia32_divpd256_mask, "V4dV4dV4dV4dUc", "") -BUILTIN(__builtin_ia32_divps_mask, "V4fV4fV4fV4fUc", "") -BUILTIN(__builtin_ia32_divps256_mask, "V8fV8fV8fV8fUc", "") -BUILTIN(__builtin_ia32_expanddf128_mask, "V2dV2dV2dUc", "") -BUILTIN(__builtin_ia32_expanddf256_mask, "V4dV4dV4dUc", "") -BUILTIN(__builtin_ia32_expanddi128_mask, "V2LLiV2LLiV2LLiUc", "") -BUILTIN(__builtin_ia32_expanddi256_mask, "V4LLiV4LLiV4LLiUc", "") -BUILTIN(__builtin_ia32_expandloaddf128_mask, "V2dV2d*V2dUc", "") -BUILTIN(__builtin_ia32_expandloaddf256_mask, "V4dV4d*V4dUc", "") -BUILTIN(__builtin_ia32_expandloaddi128_mask, "V4iV2LLi*V2LLiUc", "") -BUILTIN(__builtin_ia32_expandloaddi256_mask, "V4LLiV4LLi*V4LLiUc", "") -BUILTIN(__builtin_ia32_expandloadsf128_mask, "V4fV4f*V4fUc", "") -BUILTIN(__builtin_ia32_expandloadsf256_mask, "V8fV8f*V8fUc", "") -BUILTIN(__builtin_ia32_expandloadsi128_mask, "V4iV4i*V4iUc", "") -BUILTIN(__builtin_ia32_expandloadsi256_mask, "V8iV8i*V8iUc", "") -BUILTIN(__builtin_ia32_expandsf128_mask, "V4fV4fV4fUc", "") -BUILTIN(__builtin_ia32_expandsf256_mask, "V8fV8fV8fUc", "") -BUILTIN(__builtin_ia32_expandsi128_mask, "V4iV4iV4iUc", "") -BUILTIN(__builtin_ia32_expandsi256_mask, "V8iV8iV8iUc", "") -BUILTIN(__builtin_ia32_getexppd128_mask, "V2dV2dV2dUc", "") -BUILTIN(__builtin_ia32_getexppd256_mask, "V4dV4dV4dUc", "") -BUILTIN(__builtin_ia32_getexpps128_mask, "V4fV4fV4fUc", "") -BUILTIN(__builtin_ia32_getexpps256_mask, "V8fV8fV8fUc", "") -BUILTIN(__builtin_ia32_maxpd_mask, "V2dV2dV2dV2dUc", "") -BUILTIN(__builtin_ia32_maxpd256_mask, "V4dV4dV4dV4dUc", "") -BUILTIN(__builtin_ia32_maxps_mask, "V4fV4fV4fV4fUc", "") -BUILTIN(__builtin_ia32_maxps256_mask, "V8fV8fV8fV8fUc", "") -BUILTIN(__builtin_ia32_minpd_mask, "V2dV2dV2dV2dUc", "") -BUILTIN(__builtin_ia32_minpd256_mask, "V4dV4dV4dV4dUc", "") -BUILTIN(__builtin_ia32_minps_mask, "V4fV4fV4fV4fUc", "") -BUILTIN(__builtin_ia32_minps256_mask, "V8fV8fV8fV8fUc", "") -BUILTIN(__builtin_ia32_mulpd_mask, "V2dV2dV2dV2dUc", "") -BUILTIN(__builtin_ia32_mulpd256_mask, "V4dV4dV4dV4dUc", "") -BUILTIN(__builtin_ia32_mulps_mask, "V4fV4fV4fV4fUc", "") -BUILTIN(__builtin_ia32_mulps256_mask, "V8fV8fV8fV8fUc", "") -BUILTIN(__builtin_ia32_pabsd128_mask, "V4iV4iV4iUc", "") -BUILTIN(__builtin_ia32_pabsd256_mask, "V8iV8iV8iUc", "") -BUILTIN(__builtin_ia32_pabsq128_mask, "V2LLiV2LLiV2LLiUc", "") -BUILTIN(__builtin_ia32_pabsq256_mask, "V4LLiV4LLiV4LLiUc", "") -BUILTIN(__builtin_ia32_pmaxsd128_mask, "V4iV4iV4iV4iUc", "") -BUILTIN(__builtin_ia32_pmaxsd256_mask, "V8iV8iV8iV8iUc", "") -BUILTIN(__builtin_ia32_pmaxsq128_mask, "V2LLiV2LLiV2LLiV2LLiUc", "") -BUILTIN(__builtin_ia32_pmaxsq256_mask, "V4LLiV4LLiV4LLiV4LLiUc", "") -BUILTIN(__builtin_ia32_pmaxud128_mask, "V4iV4iV4iV4iUc", "") -BUILTIN(__builtin_ia32_pmaxud256_mask, "V8iV8iV8iV8iUc", "") -BUILTIN(__builtin_ia32_pmaxuq128_mask, "V2LLiV2LLiV2LLiV2LLiUc", "") -BUILTIN(__builtin_ia32_pmaxuq256_mask, "V4LLiV4LLiV4LLiV4LLiUc", "") -BUILTIN(__builtin_ia32_pminsd128_mask, "V4iV4iV4iV4iUc", "") -BUILTIN(__builtin_ia32_pminsd256_mask, "V8iV8iV8iV8iUc", "") -BUILTIN(__builtin_ia32_pminsq128_mask, "V2LLiV2LLiV2LLiV2LLiUc", "") -BUILTIN(__builtin_ia32_pminsq256_mask, "V4LLiV4LLiV4LLiV4LLiUc", "") -BUILTIN(__builtin_ia32_pminud128_mask, "V4iV4iV4iV4iUc", "") -BUILTIN(__builtin_ia32_pminud256_mask, "V8iV8iV8iV8iUc", "") -BUILTIN(__builtin_ia32_pminuq128_mask, "V2LLiV2LLiV2LLiV2LLiUc", "") -BUILTIN(__builtin_ia32_pminuq256_mask, "V4LLiV4LLiV4LLiV4LLiUc", "") -BUILTIN(__builtin_ia32_rndscalepd_128_mask, "V2dV2dIiV2dUc", "") -BUILTIN(__builtin_ia32_rndscalepd_256_mask, "V4dV4dIiV4dUc", "") -BUILTIN(__builtin_ia32_rndscaleps_128_mask, "V4fV4fIiV4fUc", "") -BUILTIN(__builtin_ia32_rndscaleps_256_mask, "V8fV8fIiV8fUc", "") -BUILTIN(__builtin_ia32_scalefpd128_mask, "V2dV2dV2dV2dUc", "") -BUILTIN(__builtin_ia32_scalefpd256_mask, "V4dV4dV4dV4dUc", "") -BUILTIN(__builtin_ia32_scalefps128_mask, "V4fV4fV4fV4fUc", "") -BUILTIN(__builtin_ia32_scalefps256_mask, "V8fV8fV8fV8fUc", "") -BUILTIN(__builtin_ia32_scatterdiv2df, "vv*UcV2LLiV2dIi", "") -BUILTIN(__builtin_ia32_scatterdiv2di, "vv*UcV2LLiV2LLiIi", "") -BUILTIN(__builtin_ia32_scatterdiv4df, "vv*UcV4LLiV4dIi", "") -BUILTIN(__builtin_ia32_scatterdiv4di, "vv*UcV4LLiV4LLiIi", "") -BUILTIN(__builtin_ia32_scatterdiv4sf, "vv*UcV2LLiV4fIi", "") -BUILTIN(__builtin_ia32_scatterdiv4si, "vv*UcV2LLiV4iIi", "") -BUILTIN(__builtin_ia32_scatterdiv8sf, "vv*UcV4LLiV4fIi", "") -BUILTIN(__builtin_ia32_scatterdiv8si, "vv*UcV4LLiV4iIi", "") -BUILTIN(__builtin_ia32_scattersiv2df, "vv*UcV4iV2dIi", "") -BUILTIN(__builtin_ia32_scattersiv2di, "vv*UcV4iV2LLiIi", "") -BUILTIN(__builtin_ia32_scattersiv4df, "vv*UcV4iV4dIi", "") -BUILTIN(__builtin_ia32_scattersiv4di, "vv*UcV4iV4LLiIi", "") -BUILTIN(__builtin_ia32_scattersiv4sf, "vv*UcV4iV4fIi", "") -BUILTIN(__builtin_ia32_scattersiv4si, "vv*UcV4iV4iIi", "") -BUILTIN(__builtin_ia32_scattersiv8sf, "vv*UcV8iV8fIi", "") -BUILTIN(__builtin_ia32_scattersiv8si, "vv*UcV8iV8iIi", "") -BUILTIN(__builtin_ia32_sqrtpd128_mask, "V2dV2dV2dUc", "") -BUILTIN(__builtin_ia32_sqrtpd256_mask, "V4dV4dV4dUc", "") -BUILTIN(__builtin_ia32_sqrtps128_mask, "V4fV4fV4fUc", "") -BUILTIN(__builtin_ia32_sqrtps256_mask, "V8fV8fV8fUc", "") -BUILTIN(__builtin_ia32_subpd128_mask, "V2dV2dV2dV2dUc", "") -BUILTIN(__builtin_ia32_subpd256_mask, "V4dV4dV4dV4dUc", "") -BUILTIN(__builtin_ia32_subps128_mask, "V4fV4fV4fV4fUc", "") -BUILTIN(__builtin_ia32_subps256_mask, "V8fV8fV8fV8fUc", "") -BUILTIN(__builtin_ia32_vpermi2vard128_mask, "V4iV4iV4iV4iUc", "") -BUILTIN(__builtin_ia32_vpermi2vard256_mask, "V8iV8iV8iV8iUc", "") -BUILTIN(__builtin_ia32_vpermi2varpd128_mask, "V2dV2dV2LLiV2dUc", "") -BUILTIN(__builtin_ia32_vpermi2varpd256_mask, "V4dV4dV4LLiV4dUc", "") -BUILTIN(__builtin_ia32_vpermi2varps128_mask, "V4fV4fV4iV4fUc", "") -BUILTIN(__builtin_ia32_vpermi2varps256_mask, "V8fV8fV8iV8fUc", "") -BUILTIN(__builtin_ia32_vpermi2varq128_mask, "V2LLiV2LLiV2LLiV2LLiUc", "") -BUILTIN(__builtin_ia32_vpermi2varq256_mask, "V4LLiV4LLiV4LLiV4LLiUc", "") -BUILTIN(__builtin_ia32_vpermt2vard128_mask, "V4iV4iV4iV4iUc", "") -BUILTIN(__builtin_ia32_vpermt2vard128_maskz, "V4iV4iV4iV4iUc", "") -BUILTIN(__builtin_ia32_vpermt2vard256_mask, "V8iV8iV8iV8iUc", "") -BUILTIN(__builtin_ia32_vpermt2vard256_maskz, "V8iV8iV8iV8iUc", "") -BUILTIN(__builtin_ia32_vpermt2varpd128_mask, "V2dV2LLiV2dV2dUc", "") -BUILTIN(__builtin_ia32_vpermt2varpd128_maskz, "V2dV2LLiV2dV2dUc", "") -BUILTIN(__builtin_ia32_vpermt2varpd256_mask, "V4dV4LLiV4dV4dUc", "") -BUILTIN(__builtin_ia32_vpermt2varpd256_maskz, "V4dV4LLiV4dV4dUc", "") -BUILTIN(__builtin_ia32_vpermt2varps128_mask, "V4fV4iV4fV4fUc", "") -BUILTIN(__builtin_ia32_vpermt2varps128_maskz, "V4fV4iV4fV4fUc", "") -BUILTIN(__builtin_ia32_vpermt2varps256_mask, "V8fV8iV8fV8fUc", "") -BUILTIN(__builtin_ia32_vpermt2varps256_maskz, "V8fV8iV8fV8fUc", "") -BUILTIN(__builtin_ia32_vpermt2varq128_mask, "V2LLiV2LLiV2LLiV2LLiUc", "") -BUILTIN(__builtin_ia32_vpermt2varq128_maskz, "V2LLiV2LLiV2LLiV2LLiUc", "") -BUILTIN(__builtin_ia32_vpermt2varq256_mask, "V4LLiV4LLiV4LLiV4LLiUc", "") -BUILTIN(__builtin_ia32_vpermt2varq256_maskz, "V4LLiV4LLiV4LLiV4LLiUc", "") -BUILTIN(__builtin_ia32_pmovswb512_mask, "V32cV32sV32cUi", "") -BUILTIN(__builtin_ia32_pmovuswb512_mask, "V32cV32sV32cUi", "") -BUILTIN(__builtin_ia32_pmovwb512_mask, "V32cV32sV32cUi", "") -BUILTIN(__builtin_ia32_punpckhbw512_mask, "V64cV64cV64cV64cULLi", "") -BUILTIN(__builtin_ia32_punpckhwd512_mask, "V32sV32sV32sV32sUi", "") -BUILTIN(__builtin_ia32_punpcklbw512_mask, "V64cV64cV64cV64cULLi", "") -BUILTIN(__builtin_ia32_punpcklwd512_mask, "V32sV32sV32sV32sUi", "") -BUILTIN(__builtin_ia32_cvtpd2qq128_mask, "V2LLiV2dV2LLiUc", "") -BUILTIN(__builtin_ia32_cvtpd2qq256_mask, "V4LLiV4dV4LLiUc", "") -BUILTIN(__builtin_ia32_cvtpd2uqq128_mask, "V2LLiV2dV2LLiUc", "") -BUILTIN(__builtin_ia32_cvtpd2uqq256_mask, "V4LLiV4dV4LLiUc", "") -BUILTIN(__builtin_ia32_cvtps2qq128_mask, "V2LLiV4fV2LLiUc", "") -BUILTIN(__builtin_ia32_cvtps2qq256_mask, "V4LLiV4fV4LLiUc", "") -BUILTIN(__builtin_ia32_cvtps2uqq128_mask, "V2LLiV4fV2LLiUc", "") -BUILTIN(__builtin_ia32_cvtps2uqq256_mask, "V4LLiV4fV4LLiUc", "") -BUILTIN(__builtin_ia32_cvtqq2pd128_mask, "V2dV2LLiV2dUc", "") -BUILTIN(__builtin_ia32_cvtqq2pd256_mask, "V4dV4LLiV4dUc", "") -BUILTIN(__builtin_ia32_cvtqq2ps128_mask, "V4fV2LLiV4fUc", "") -BUILTIN(__builtin_ia32_cvtqq2ps256_mask, "V4fV4LLiV4fUc", "") -BUILTIN(__builtin_ia32_cvttpd2qq128_mask, "V2LLiV2dV2LLiUc", "") -BUILTIN(__builtin_ia32_cvttpd2qq256_mask, "V4LLiV4dV4LLiUc", "") -BUILTIN(__builtin_ia32_cvttpd2uqq128_mask, "V2LLiV2dV2LLiUc", "") -BUILTIN(__builtin_ia32_cvttpd2uqq256_mask, "V4LLiV4dV4LLiUc", "") -BUILTIN(__builtin_ia32_cvttps2qq128_mask, "V2LLiV4fV2LLiUc", "") -BUILTIN(__builtin_ia32_cvttps2qq256_mask, "V4LLiV4fV4LLiUc", "") -BUILTIN(__builtin_ia32_cvttps2uqq128_mask, "V2LLiV4fV2LLiUc", "") -BUILTIN(__builtin_ia32_cvttps2uqq256_mask, "V4LLiV4fV4LLiUc", "") -BUILTIN(__builtin_ia32_cvtuqq2pd128_mask, "V2dV2LLiV2dUc", "") -BUILTIN(__builtin_ia32_cvtuqq2pd256_mask, "V4dV4LLiV4dUc", "") -BUILTIN(__builtin_ia32_cvtuqq2ps128_mask, "V4fV2LLiV4fUc", "") -BUILTIN(__builtin_ia32_cvtuqq2ps256_mask, "V4fV4LLiV4fUc", "") -BUILTIN(__builtin_ia32_rangepd128_mask, "V2dV2dV2dIiV2dUc", "") -BUILTIN(__builtin_ia32_rangepd256_mask, "V4dV4dV4dIiV4dUc", "") -BUILTIN(__builtin_ia32_rangeps128_mask, "V4fV4fV4fIiV4fUc", "") -BUILTIN(__builtin_ia32_rangeps256_mask, "V8fV8fV8fIiV8fUc", "") -BUILTIN(__builtin_ia32_reducepd128_mask, "V2dV2dIiV2dUc", "") -BUILTIN(__builtin_ia32_reducepd256_mask, "V4dV4dIiV4dUc", "") -BUILTIN(__builtin_ia32_reduceps128_mask, "V4fV4fIiV4fUc", "") -BUILTIN(__builtin_ia32_reduceps256_mask, "V8fV8fIiV8fUc", "") -BUILTIN(__builtin_ia32_pmaddubsw128_mask, "V8sV16cV16cV8sUc", "") -BUILTIN(__builtin_ia32_pmaddubsw256_mask, "V16sV32cV32cV16sUs", "") -BUILTIN(__builtin_ia32_pmaddwd128_mask, "V4iV8sV8sV4iUc", "") -BUILTIN(__builtin_ia32_pmaddwd256_mask, "V8iV16sV16sV8iUc", "") -BUILTIN(__builtin_ia32_pmovswb128_mask, "V16cV8sV16cUc", "") -BUILTIN(__builtin_ia32_pmovswb256_mask, "V16cV16sV16cUs", "") -BUILTIN(__builtin_ia32_pmovuswb128_mask, "V16cV8sV16cUc", "") -BUILTIN(__builtin_ia32_pmovuswb256_mask, "V16cV16sV16cUs", "") -BUILTIN(__builtin_ia32_pmovwb128_mask, "V16cV8sV16cUc", "") -BUILTIN(__builtin_ia32_pmovwb256_mask, "V16cV16sV16cUs", "") -BUILTIN(__builtin_ia32_pmulhrsw128_mask, "V8sV8sV8sV8sUc", "") -BUILTIN(__builtin_ia32_pmulhrsw256_mask, "V16sV16sV16sV16sUs", "") -BUILTIN(__builtin_ia32_pmulhuw128_mask, "V8sV8sV8sV8sUc", "") -BUILTIN(__builtin_ia32_pmulhuw256_mask, "V16sV16sV16sV16sUs", "") -BUILTIN(__builtin_ia32_pmulhw128_mask, "V8sV8sV8sV8sUc", "") -BUILTIN(__builtin_ia32_pmulhw256_mask, "V16sV16sV16sV16sUs", "") -BUILTIN(__builtin_ia32_punpckhbw128_mask, "V16cV16cV16cV16cUs", "") -BUILTIN(__builtin_ia32_punpckhbw256_mask, "V32cV32cV32cV32cUi", "") -BUILTIN(__builtin_ia32_punpckhwd128_mask, "V8sV8sV8sV8sUc", "") -BUILTIN(__builtin_ia32_punpckhwd256_mask, "V16sV16sV16sV16sUs", "") -BUILTIN(__builtin_ia32_punpcklbw128_mask, "V16cV16cV16cV16cUs", "") -BUILTIN(__builtin_ia32_punpcklbw256_mask, "V32cV32cV32cV32cUi", "") -BUILTIN(__builtin_ia32_punpcklwd128_mask, "V8sV8sV8sV8sUc", "") -BUILTIN(__builtin_ia32_punpcklwd256_mask, "V16sV16sV16sV16sUs", "") +TARGET_BUILTIN(__builtin_ia32_sqrtpd512_mask, "V8dV8dV8dUcIi", "", "avx512f") +TARGET_BUILTIN(__builtin_ia32_sqrtps512_mask, "V16fV16fV16fUsIi", "", "avx512f") +TARGET_BUILTIN(__builtin_ia32_rsqrt14sd_mask, "V2dV2dV2dV2dUc", "", "avx512f") +TARGET_BUILTIN(__builtin_ia32_rsqrt14ss_mask, "V4fV4fV4fV4fUc", "", "avx512f") +TARGET_BUILTIN(__builtin_ia32_rsqrt14pd512_mask, "V8dV8dV8dUc", "", "avx512f") +TARGET_BUILTIN(__builtin_ia32_rsqrt14ps512_mask, "V16fV16fV16fUs", "", "avx512f") + +TARGET_BUILTIN(__builtin_ia32_rsqrt28sd_mask, "V2dV2dV2dV2dUcIi", "", "avx512er") +TARGET_BUILTIN(__builtin_ia32_rsqrt28ss_mask, "V4fV4fV4fV4fUcIi", "", "avx512er") +TARGET_BUILTIN(__builtin_ia32_rsqrt28pd_mask, "V8dV8dV8dUcIi", "", "avx512er") +TARGET_BUILTIN(__builtin_ia32_rsqrt28ps_mask, "V16fV16fV16fUsIi", "", "avx512er") + +TARGET_BUILTIN(__builtin_ia32_rcp14sd_mask, "V2dV2dV2dV2dUc", "", "avx512f") +TARGET_BUILTIN(__builtin_ia32_rcp14ss_mask, "V4fV4fV4fV4fUc", "", "avx512f") +TARGET_BUILTIN(__builtin_ia32_rcp14pd512_mask, "V8dV8dV8dUc", "", "avx512f") +TARGET_BUILTIN(__builtin_ia32_rcp14ps512_mask, "V16fV16fV16fUs", "", "avx512f") + +TARGET_BUILTIN(__builtin_ia32_rcp28sd_mask, "V2dV2dV2dV2dUcIi", "", "avx512er") +TARGET_BUILTIN(__builtin_ia32_rcp28ss_mask, "V4fV4fV4fV4fUcIi", "", "avx512er") +TARGET_BUILTIN(__builtin_ia32_rcp28pd_mask, "V8dV8dV8dUcIi", "", "avx512er") +TARGET_BUILTIN(__builtin_ia32_rcp28ps_mask, "V16fV16fV16fUsIi", "", "avx512er") +TARGET_BUILTIN(__builtin_ia32_exp2pd_mask, "V8dV8dV8dUcIi", "", "avx512er") +TARGET_BUILTIN(__builtin_ia32_exp2ps_mask, "V16fV16fV16fUsIi", "", "avx512er") + +TARGET_BUILTIN(__builtin_ia32_cvttps2dq512_mask, "V16iV16fV16iUsIi", "", "avx512f") +TARGET_BUILTIN(__builtin_ia32_cvttps2udq512_mask, "V16iV16fV16iUsIi", "", "avx512f") +TARGET_BUILTIN(__builtin_ia32_cvttpd2dq512_mask, "V8iV8dV8iUcIi", "", "avx512f") +TARGET_BUILTIN(__builtin_ia32_cvttpd2udq512_mask, "V8iV8dV8iUcIi", "", "avx512f") +TARGET_BUILTIN(__builtin_ia32_cmpps512_mask, "UsV16fV16fIiUsIi", "", "avx512f") + +TARGET_BUILTIN(__builtin_ia32_cmpps256_mask, "UcV8fV8fIiUc", "", "avx512vl") +TARGET_BUILTIN(__builtin_ia32_cmpps128_mask, "UcV4fV4fIiUc", "", "avx512vl") + +TARGET_BUILTIN(__builtin_ia32_pcmpeqb512_mask, "LLiV64cV64cLLi", "", "avx512bw") +TARGET_BUILTIN(__builtin_ia32_pcmpeqd512_mask, "sV16iV16is", "", "avx512bw") +TARGET_BUILTIN(__builtin_ia32_pcmpeqq512_mask, "cV8LLiV8LLic", "", "avx512bw") +TARGET_BUILTIN(__builtin_ia32_pcmpeqw512_mask, "iV32sV32si", "", "avx512bw") + +TARGET_BUILTIN(__builtin_ia32_pcmpeqb256_mask, "iV32cV32ci", "", "avx512vl,avx512bw") +TARGET_BUILTIN(__builtin_ia32_pcmpeqd256_mask, "cV8iV8ic", "", "avx512vl,avx512bw") +TARGET_BUILTIN(__builtin_ia32_pcmpeqq256_mask, "cV4LLiV4LLic", "", "avx512vl,avx512bw") +TARGET_BUILTIN(__builtin_ia32_pcmpeqw256_mask, "sV16sV16ss", "", "avx512vl,avx512bw") +TARGET_BUILTIN(__builtin_ia32_pcmpeqb128_mask, "sV16cV16cs", "", "avx512vl,avx512bw") +TARGET_BUILTIN(__builtin_ia32_pcmpeqd128_mask, "cV4iV4ic", "", "avx512vl,avx512bw") +TARGET_BUILTIN(__builtin_ia32_pcmpeqq128_mask, "cV2LLiV2LLic", "", "avx512vl,avx512bw") +TARGET_BUILTIN(__builtin_ia32_pcmpeqw128_mask, "cV8sV8sc", "", "avx512vl,avx512bw") + +TARGET_BUILTIN(__builtin_ia32_pcmpgtb512_mask, "LLiV64cV64cLLi", "", "avx512bw") +TARGET_BUILTIN(__builtin_ia32_pcmpgtd512_mask, "sV16iV16is", "", "avx512bw") +TARGET_BUILTIN(__builtin_ia32_pcmpgtq512_mask, "cV8LLiV8LLic", "", "avx512bw") +TARGET_BUILTIN(__builtin_ia32_pcmpgtw512_mask, "iV32sV32si", "", "avx512bw") + +TARGET_BUILTIN(__builtin_ia32_pcmpgtb256_mask, "iV32cV32ci", "", "avx512vl,avx512bw") +TARGET_BUILTIN(__builtin_ia32_pcmpgtd256_mask, "cV8iV8ic", "", "avx512vl,avx512bw") +TARGET_BUILTIN(__builtin_ia32_pcmpgtq256_mask, "cV4LLiV4LLic", "", "avx512vl,avx512bw") +TARGET_BUILTIN(__builtin_ia32_pcmpgtw256_mask, "sV16sV16ss", "", "avx512vl,avx512bw") +TARGET_BUILTIN(__builtin_ia32_pcmpgtb128_mask, "sV16cV16cs", "", "avx512vl,avx512bw") +TARGET_BUILTIN(__builtin_ia32_pcmpgtd128_mask, "cV4iV4ic", "", "avx512vl,avx512bw") +TARGET_BUILTIN(__builtin_ia32_pcmpgtq128_mask, "cV2LLiV2LLic", "", "avx512vl,avx512bw") +TARGET_BUILTIN(__builtin_ia32_pcmpgtw128_mask, "cV8sV8sc", "", "avx512vl,avx512bw") + +TARGET_BUILTIN(__builtin_ia32_cmppd512_mask, "UcV8dV8dIiUcIi", "", "avx512f") +TARGET_BUILTIN(__builtin_ia32_cmppd256_mask, "UcV4dV4dIiUc", "", "avx512vl") +TARGET_BUILTIN(__builtin_ia32_cmppd128_mask, "UcV2dV2dIiUc", "", "avx512vl") + +TARGET_BUILTIN(__builtin_ia32_rndscaleps_mask, "V16fV16fIiV16fUsIi", "", "avx512f") +TARGET_BUILTIN(__builtin_ia32_rndscalepd_mask, "V8dV8dIiV8dUcIi", "", "avx512f") +TARGET_BUILTIN(__builtin_ia32_cvtps2dq512_mask, "V16iV16fV16iUsIi", "", "avx512f") +TARGET_BUILTIN(__builtin_ia32_cvtpd2dq512_mask, "V8iV8dV8iUcIi", "", "avx512f") +TARGET_BUILTIN(__builtin_ia32_cvtps2udq512_mask, "V16iV16fV16iUsIi", "", "avx512f") +TARGET_BUILTIN(__builtin_ia32_cvtpd2udq512_mask, "V8iV8dV8iUcIi", "", "avx512f") +TARGET_BUILTIN(__builtin_ia32_minps512_mask, "V16fV16fV16fV16fUsIi", "", "avx512f") +TARGET_BUILTIN(__builtin_ia32_minpd512_mask, "V8dV8dV8dV8dUcIi", "", "avx512f") +TARGET_BUILTIN(__builtin_ia32_maxps512_mask, "V16fV16fV16fV16fUsIi", "", "avx512f") +TARGET_BUILTIN(__builtin_ia32_maxpd512_mask, "V8dV8dV8dV8dUcIi", "", "avx512f") +TARGET_BUILTIN(__builtin_ia32_cvtdq2ps512_mask, "V16fV16iV16fUsIi", "", "avx512f") +TARGET_BUILTIN(__builtin_ia32_cvtudq2ps512_mask, "V16fV16iV16fUsIi", "", "avx512f") +TARGET_BUILTIN(__builtin_ia32_cvtdq2pd512_mask, "V8dV8iV8dUc", "", "avx512f") +TARGET_BUILTIN(__builtin_ia32_cvtudq2pd512_mask, "V8dV8iV8dUc", "", "avx512f") +TARGET_BUILTIN(__builtin_ia32_cvtpd2ps512_mask, "V8fV8dV8fUcIi", "", "avx512f") +TARGET_BUILTIN(__builtin_ia32_vcvtps2ph512_mask, "V16sV16fIiV16sUs", "", "avx512f") +TARGET_BUILTIN(__builtin_ia32_vcvtph2ps512_mask, "V16fV16sV16fUsIi", "", "avx512f") +TARGET_BUILTIN(__builtin_ia32_pandd512_mask, "V16iV16iV16iV16iUs", "", "avx512f") +TARGET_BUILTIN(__builtin_ia32_pandq512_mask, "V8LLiV8LLiV8LLiV8LLiUc", "", "avx512f") +TARGET_BUILTIN(__builtin_ia32_pord512_mask, "V16iV16iV16iV16iUs", "", "avx512f") +TARGET_BUILTIN(__builtin_ia32_porq512_mask, "V8LLiV8LLiV8LLiV8LLiUc", "", "avx512f") +TARGET_BUILTIN(__builtin_ia32_pxord512_mask, "V16iV16iV16iV16iUs", "", "avx512f") +TARGET_BUILTIN(__builtin_ia32_pxorq512_mask, "V8LLiV8LLiV8LLiV8LLiUc", "", "avx512f") +TARGET_BUILTIN(__builtin_ia32_pabsd512_mask, "V16iV16iV16iUs", "", "avx512ff") +TARGET_BUILTIN(__builtin_ia32_pabsq512_mask, "V8LLiV8LLiV8LLiUc", "", "avx512f") +TARGET_BUILTIN(__builtin_ia32_pmaxsd512_mask, "V16iV16iV16iV16iUs", "", "avx512f") +TARGET_BUILTIN(__builtin_ia32_pmaxsq512_mask, "V8LLiV8LLiV8LLiV8LLiUc", "", "avx512f") +TARGET_BUILTIN(__builtin_ia32_pmaxud512_mask, "V16iV16iV16iV16iUs", "", "avx512f") +TARGET_BUILTIN(__builtin_ia32_pmaxuq512_mask, "V8LLiV8LLiV8LLiV8LLiUc", "", "avx512f") +TARGET_BUILTIN(__builtin_ia32_pminsd512_mask, "V16iV16iV16iV16iUs", "", "avx512f") +TARGET_BUILTIN(__builtin_ia32_pminsq512_mask, "V8LLiV8LLiV8LLiV8LLiUc", "", "avx512f") +TARGET_BUILTIN(__builtin_ia32_pminud512_mask, "V16iV16iV16iV16iUs", "", "avx512f") +TARGET_BUILTIN(__builtin_ia32_pminuq512_mask, "V8LLiV8LLiV8LLiV8LLiUc", "", "avx512f") +TARGET_BUILTIN(__builtin_ia32_pmuldq512_mask, "V8LLiV16iV16iV8LLiUc", "", "avx512f") +TARGET_BUILTIN(__builtin_ia32_pmuludq512_mask, "V8LLiV16iV16iV8LLiUc", "", "avx512f") +TARGET_BUILTIN(__builtin_ia32_blendmd_512_mask, "V16iV16iV16iUs", "", "avx512f") +TARGET_BUILTIN(__builtin_ia32_blendmq_512_mask, "V8LLiV8LLiV8LLiUc", "", "avx512f") +TARGET_BUILTIN(__builtin_ia32_blendmps_512_mask, "V16fV16fV16fUs", "", "avx512f") +TARGET_BUILTIN(__builtin_ia32_blendmpd_512_mask, "V8dV8dV8dUc", "", "avx512f") +TARGET_BUILTIN(__builtin_ia32_ptestmd512, "UsV16iV16iUs", "", "avx512f") +TARGET_BUILTIN(__builtin_ia32_ptestmq512, "UcV8LLiV8LLiUc", "", "avx512f") +TARGET_BUILTIN(__builtin_ia32_pbroadcastd512_gpr_mask, "V16iiV16iUs", "", "avx512f") +TARGET_BUILTIN(__builtin_ia32_pbroadcastq512_gpr_mask, "V8LLiLLiV8LLiUc", "", "avx512f") +TARGET_BUILTIN(__builtin_ia32_pbroadcastq512_mem_mask, "V8LLiLLiV8LLiUc", "", "avx512f") +TARGET_BUILTIN(__builtin_ia32_loaddqusi512_mask, "V16ivC*V16iUs", "", "avx512f") +TARGET_BUILTIN(__builtin_ia32_loaddqudi512_mask, "V8LLivC*V8LLiUc", "", "avx512f") +TARGET_BUILTIN(__builtin_ia32_loadups512_mask, "V16fvC*V16fUs", "", "avx512f") +TARGET_BUILTIN(__builtin_ia32_loadaps512_mask, "V16fvC*V16fUs", "", "avx512f") +TARGET_BUILTIN(__builtin_ia32_loadupd512_mask, "V8dvC*V8dUc", "", "avx512f") +TARGET_BUILTIN(__builtin_ia32_loadapd512_mask, "V8dvC*V8dUc", "", "avx512f") +TARGET_BUILTIN(__builtin_ia32_storedqudi512_mask, "vv*V8LLiUc", "", "avx512f") +TARGET_BUILTIN(__builtin_ia32_storedqusi512_mask, "vv*V16iUs", "", "avx512f") +TARGET_BUILTIN(__builtin_ia32_storeupd512_mask, "vv*V8dUc", "", "avx512f") +TARGET_BUILTIN(__builtin_ia32_storeapd512_mask, "vv*V8dUc", "", "avx512f") +TARGET_BUILTIN(__builtin_ia32_storeups512_mask, "vv*V16fUs", "", "avx512f") +TARGET_BUILTIN(__builtin_ia32_storeaps512_mask, "vv*V16fUs", "", "avx512f") +TARGET_BUILTIN(__builtin_ia32_vpermt2vard512_mask, "V16iV16iV16iV16iUs", "", "avx512f") +TARGET_BUILTIN(__builtin_ia32_vpermt2varq512_mask, "V8LLiV8LLiV8LLiV8LLiUc", "", "avx512f") +TARGET_BUILTIN(__builtin_ia32_vpermt2varps512_mask, "V16fV16iV16fV16fUs", "", "avx512f") +TARGET_BUILTIN(__builtin_ia32_vpermt2varpd512_mask, "V8dV8LLiV8dV8dUc", "", "avx512f") +TARGET_BUILTIN(__builtin_ia32_alignq512_mask, "V8LLiV8LLiV8LLiIcV8LLiUc", "", "avx512f") +TARGET_BUILTIN(__builtin_ia32_alignd512_mask, "V16iV16iV16iIcV16iUs", "", "avx512f") +TARGET_BUILTIN(__builtin_ia32_extractf64x4_mask, "V4dV8dIcV4dUc", "", "avx512f") +TARGET_BUILTIN(__builtin_ia32_extractf32x4_mask, "V4fV16fIcV4fUc", "", "avx512f") + +TARGET_BUILTIN(__builtin_ia32_gathersiv8df, "V8dV8dvC*V8iUcIi", "", "avx512f") +TARGET_BUILTIN(__builtin_ia32_gathersiv16sf, "V16fV16fvC*UsIi", "", "avx512f") +TARGET_BUILTIN(__builtin_ia32_gatherdiv8df, "V8dV8dvC*V8LLiUcIi", "", "avx512f") +TARGET_BUILTIN(__builtin_ia32_gatherdiv16sf, "V8fV8fvC*V8LLiUcIi", "", "avx512f") +TARGET_BUILTIN(__builtin_ia32_gathersiv8di, "V8LLiV8LLivC*V8iUcIi", "", "avx512f") +TARGET_BUILTIN(__builtin_ia32_gathersiv16si, "V16iV16ivC*UsIi", "", "avx512f") +TARGET_BUILTIN(__builtin_ia32_gatherdiv8di, "V8LLiV8LLivC*V8LLiUcIi", "", "avx512f") +TARGET_BUILTIN(__builtin_ia32_gatherdiv16si, "V8iV8ivC*V8LLiUcIi", "", "avx512f") +TARGET_BUILTIN(__builtin_ia32_scattersiv8df, "vv*UcV8iV8dIi", "", "avx512f") +TARGET_BUILTIN(__builtin_ia32_scattersiv16sf, "vv*UsV16iV16fIi", "", "avx512f") +TARGET_BUILTIN(__builtin_ia32_scatterdiv8df, "vv*UcV8LLiV8dIi", "", "avx512f") +TARGET_BUILTIN(__builtin_ia32_scatterdiv16sf, "vv*UcV8LLiV8fIi", "", "avx512f") +TARGET_BUILTIN(__builtin_ia32_scattersiv8di, "vv*UcV8iV8LLiIi", "", "avx512f") +TARGET_BUILTIN(__builtin_ia32_scattersiv16si, "vv*UsV16iV16iIi", "", "avx512f") +TARGET_BUILTIN(__builtin_ia32_scatterdiv8di, "vv*UcV8LLiV8LLiIi", "", "avx512f") +TARGET_BUILTIN(__builtin_ia32_scatterdiv16si, "vv*UcV8LLiV8iIi", "", "avx512f") + +TARGET_BUILTIN(__builtin_ia32_gatherpfdpd, "vUcV8ivC*IiIi", "", "avx512pf") +TARGET_BUILTIN(__builtin_ia32_gatherpfdps, "vUsV16ivC*IiIi", "", "avx512pf") +TARGET_BUILTIN(__builtin_ia32_gatherpfqpd, "vUcV8LLivC*IiIi", "", "avx512pf") +TARGET_BUILTIN(__builtin_ia32_gatherpfqps, "vUcV8LLivC*IiIi", "", "avx512pf") +TARGET_BUILTIN(__builtin_ia32_scatterpfdpd, "vUcV8iv*IiIi", "", "avx512pf") +TARGET_BUILTIN(__builtin_ia32_scatterpfdps, "vUsV16iv*IiIi", "", "avx512pf") +TARGET_BUILTIN(__builtin_ia32_scatterpfqpd, "vUcV8LLiv*IiIi", "", "avx512pf") +TARGET_BUILTIN(__builtin_ia32_scatterpfqps, "vUcV8LLiv*IiIi", "", "avx512pf") + +TARGET_BUILTIN(__builtin_ia32_knothi, "UsUs", "", "avx512f") + +TARGET_BUILTIN(__builtin_ia32_cmpb128_mask, "UsV16cV16cIiUs", "", "avx512vl,avx512bw") +TARGET_BUILTIN(__builtin_ia32_cmpd128_mask, "UcV4iV4iIiUc", "", "avx512vl") +TARGET_BUILTIN(__builtin_ia32_cmpq128_mask, "UcV2LLiV2LLiIiUc", "", "avx512vl") +TARGET_BUILTIN(__builtin_ia32_cmpw128_mask, "UcV8sV8sIiUc", "", "avx512vl,avx512bw") +TARGET_BUILTIN(__builtin_ia32_cmpb256_mask, "UiV32cV32cIiUi", "", "avx512vl,avx512bw") +TARGET_BUILTIN(__builtin_ia32_cmpd256_mask, "UcV8iV8iIiUc", "", "avx512vl") +TARGET_BUILTIN(__builtin_ia32_cmpq256_mask, "UcV4LLiV4LLiIiUc", "", "avx512vl") +TARGET_BUILTIN(__builtin_ia32_cmpw256_mask, "UsV16sV16sIiUs", "", "avx512vl,avx512bw") +TARGET_BUILTIN(__builtin_ia32_cmpb512_mask, "ULLiV64cV64cIiULLi", "", "avx512bw") +TARGET_BUILTIN(__builtin_ia32_cmpd512_mask, "UsV16iV16iIiUs", "", "avx512f") +TARGET_BUILTIN(__builtin_ia32_cmpq512_mask, "UcV8LLiV8LLiIiUc", "", "avx512f") +TARGET_BUILTIN(__builtin_ia32_cmpw512_mask, "UiV32sV32sIiUi", "", "avx512bw") +TARGET_BUILTIN(__builtin_ia32_ucmpb128_mask, "UsV16cV16cIiUs", "", "avx512vl,avx512bw") +TARGET_BUILTIN(__builtin_ia32_ucmpd128_mask, "UcV4iV4iIiUc", "", "avx512vl") +TARGET_BUILTIN(__builtin_ia32_ucmpq128_mask, "UcV2LLiV2LLiIiUc", "", "avx512vl") +TARGET_BUILTIN(__builtin_ia32_ucmpw128_mask, "UcV8sV8sIiUc", "", "avx512vl,avx512bw") +TARGET_BUILTIN(__builtin_ia32_ucmpb256_mask, "UiV32cV32cIiUi", "", "avx512vl,avx512bw") +TARGET_BUILTIN(__builtin_ia32_ucmpd256_mask, "UcV8iV8iIiUc", "", "avx512vl") +TARGET_BUILTIN(__builtin_ia32_ucmpq256_mask, "UcV4LLiV4LLiIiUc", "", "avx512vl") +TARGET_BUILTIN(__builtin_ia32_ucmpw256_mask, "UsV16sV16sIiUs", "", "avx512vl,avx512bw") +TARGET_BUILTIN(__builtin_ia32_ucmpb512_mask, "ULLiV64cV64cIiULLi", "", "avx512bw") +TARGET_BUILTIN(__builtin_ia32_ucmpd512_mask, "UsV16iV16iIiUs", "", "avx512f") +TARGET_BUILTIN(__builtin_ia32_ucmpq512_mask, "UcV8LLiV8LLiIiUc", "", "avx512f") +TARGET_BUILTIN(__builtin_ia32_ucmpw512_mask, "UiV32sV32sIiUi", "", "avx512bw") + +TARGET_BUILTIN(__builtin_ia32_paddd256_mask, "V8iV8iV8iV8iUc", "", "avx512vl") +TARGET_BUILTIN(__builtin_ia32_paddq256_mask, "V4LLiV4LLiV4LLiV4LLiUc", "", "avx512vl") +TARGET_BUILTIN(__builtin_ia32_psubd256_mask, "V8iV8iV8iV8iUc", "", "avx512vl") +TARGET_BUILTIN(__builtin_ia32_psubq256_mask, "V4LLiV4LLiV4LLiV4LLiUc", "", "avx512vl") +TARGET_BUILTIN(__builtin_ia32_paddd128_mask, "V4iV4iV4iV4iUc", "", "avx512vl") +TARGET_BUILTIN(__builtin_ia32_paddq128_mask, "V2LLiV2LLiV2LLiV2LLiUc", "", "avx512vl") +TARGET_BUILTIN(__builtin_ia32_psubd128_mask, "V4iV4iV4iV4iUc", "", "avx512vl") +TARGET_BUILTIN(__builtin_ia32_psubq128_mask, "V2LLiV2LLiV2LLiV2LLiUc", "", "avx512vl") +TARGET_BUILTIN(__builtin_ia32_pmuldq256_mask, "V4LLiV8iV8iV4LLiUc", "", "avx512vl") +TARGET_BUILTIN(__builtin_ia32_pmuldq128_mask, "V2LLiV4iV4iV2LLiUc", "", "avx512vl") +TARGET_BUILTIN(__builtin_ia32_pmuludq256_mask, "V4LLiV8iV8iV4LLiUc", "", "avx512vl") +TARGET_BUILTIN(__builtin_ia32_pmuludq128_mask, "V2LLiV4iV4iV2LLiUc", "", "avx512vl") +TARGET_BUILTIN(__builtin_ia32_pmulld256_mask, "V8iV8iV8iV8iUc", "", "avx512vl") +TARGET_BUILTIN(__builtin_ia32_pmulld128_mask, "V4iV4iV4iV4iUc", "", "avx512vl") +TARGET_BUILTIN(__builtin_ia32_pandd256_mask, "V8iV8iV8iV8iUc", "", "avx512vl") +TARGET_BUILTIN(__builtin_ia32_pandd128_mask, "V4iV4iV4iV4iUc", "", "avx512vl") +TARGET_BUILTIN(__builtin_ia32_pandnd256_mask, "V8iV8iV8iV8iUc", "", "avx512vl") +TARGET_BUILTIN(__builtin_ia32_pandnd128_mask, "V4iV4iV4iV4iUc", "", "avx512vl") +TARGET_BUILTIN(__builtin_ia32_pord256_mask, "V8iV8iV8iV8iUc", "", "avx512vl") +TARGET_BUILTIN(__builtin_ia32_pord128_mask, "V4iV4iV4iV4iUc", "", "avx512vl") +TARGET_BUILTIN(__builtin_ia32_pxord256_mask, "V8iV8iV8iV8iUc", "", "avx512vl") +TARGET_BUILTIN(__builtin_ia32_pxord128_mask, "V4iV4iV4iV4iUc", "", "avx512vl") +TARGET_BUILTIN(__builtin_ia32_pandq256_mask, "V4LLiV4LLiV4LLiV4LLiUc", "", "avx512vl") +TARGET_BUILTIN(__builtin_ia32_pandq128_mask, "V2LLiV2LLiV2LLiV2LLiUc", "", "avx512vl") +TARGET_BUILTIN(__builtin_ia32_pandnq256_mask, "V4LLiV4LLiV4LLiV4LLiUc", "", "avx512vl") +TARGET_BUILTIN(__builtin_ia32_pandnq128_mask, "V2LLiV2LLiV2LLiV2LLiUc", "", "avx512vl") +TARGET_BUILTIN(__builtin_ia32_porq256_mask, "V4LLiV4LLiV4LLiV4LLiUc", "", "avx512vl") +TARGET_BUILTIN(__builtin_ia32_porq128_mask, "V2LLiV2LLiV2LLiV2LLiUc", "", "avx512vl") +TARGET_BUILTIN(__builtin_ia32_pxorq256_mask, "V4LLiV4LLiV4LLiV4LLiUc", "", "avx512vl") +TARGET_BUILTIN(__builtin_ia32_pxorq128_mask, "V2LLiV2LLiV2LLiV2LLiUc", "", "avx512vl") + +TARGET_BUILTIN(__builtin_ia32_paddb512_mask, "V64cV64cV64cV64cULLi", "", "avx512bw") +TARGET_BUILTIN(__builtin_ia32_psubb512_mask, "V64cV64cV64cV64cULLi", "", "avx512bw") +TARGET_BUILTIN(__builtin_ia32_paddw512_mask, "V32sV32sV32sV32sUi", "", "avx512bw") +TARGET_BUILTIN(__builtin_ia32_psubw512_mask, "V32sV32sV32sV32sUi", "", "avx512bw") +TARGET_BUILTIN(__builtin_ia32_pmullw512_mask, "V32sV32sV32sV32sUi", "", "avx512bw") +TARGET_BUILTIN(__builtin_ia32_paddb256_mask, "V32cV32cV32cV32cUi", "", "avx512vl,avx512bw") +TARGET_BUILTIN(__builtin_ia32_paddw256_mask, "V16sV16sV16sV16sUs", "", "avx512vl,avx512bw") +TARGET_BUILTIN(__builtin_ia32_psubb256_mask, "V32cV32cV32cV32cUi", "", "avx512vl,avx512bw") +TARGET_BUILTIN(__builtin_ia32_psubw256_mask, "V16sV16sV16sV16sUs", "", "avx512vl,avx512bw") +TARGET_BUILTIN(__builtin_ia32_paddb128_mask, "V16cV16cV16cV16cUs", "", "avx512vl,avx512bw") +TARGET_BUILTIN(__builtin_ia32_paddw128_mask, "V8sV8sV8sV8sUc", "", "avx512vl,avx512bw") +TARGET_BUILTIN(__builtin_ia32_psubb128_mask, "V16cV16cV16cV16cUs", "", "avx512vl,avx512bw") +TARGET_BUILTIN(__builtin_ia32_psubw128_mask, "V8sV8sV8sV8sUc", "", "avx512vl,avx512bw") +TARGET_BUILTIN(__builtin_ia32_pmullw256_mask, "V16sV16sV16sV16sUs", "", "avx512vl,avx512bw") +TARGET_BUILTIN(__builtin_ia32_pmullw128_mask, "V8sV8sV8sV8sUc", "", "avx512vl,avx512bw") + +TARGET_BUILTIN(__builtin_ia32_pandnd512_mask, "V16iV16iV16iV16iUs", "", "avx512f") +TARGET_BUILTIN(__builtin_ia32_pandnq512_mask, "V8LLiV8LLiV8LLiV8LLiUc", "", "avx512f") +TARGET_BUILTIN(__builtin_ia32_paddq512_mask, "V8LLiV8LLiV8LLiV8LLiUc", "", "avx512f") +TARGET_BUILTIN(__builtin_ia32_psubq512_mask, "V8LLiV8LLiV8LLiV8LLiUc", "", "avx512f") +TARGET_BUILTIN(__builtin_ia32_paddd512_mask, "V16iV16iV16iV16iUs", "", "avx512f") +TARGET_BUILTIN(__builtin_ia32_psubd512_mask, "V16iV16iV16iV16iUs", "", "avx512f") + +TARGET_BUILTIN(__builtin_ia32_pmulld512_mask, "V16iV16iV16iV16iUs", "", "avx512f") +TARGET_BUILTIN(__builtin_ia32_pmullq512_mask, "V8LLiV8LLiV8LLiV8LLiUc", "", "avx512dq") +TARGET_BUILTIN(__builtin_ia32_xorpd512_mask, "V8dV8dV8dV8dUc", "", "avx512dq") +TARGET_BUILTIN(__builtin_ia32_xorps512_mask, "V16fV16fV16fV16fUs", "", "avx512dq") +TARGET_BUILTIN(__builtin_ia32_orpd512_mask, "V8dV8dV8dV8dUc", "", "avx512dq") +TARGET_BUILTIN(__builtin_ia32_orps512_mask, "V16fV16fV16fV16fUs", "", "avx512dq") +TARGET_BUILTIN(__builtin_ia32_andpd512_mask, "V8dV8dV8dV8dUc", "", "avx512dq") +TARGET_BUILTIN(__builtin_ia32_andps512_mask, "V16fV16fV16fV16fUs", "", "avx512dq") +TARGET_BUILTIN(__builtin_ia32_andnpd512_mask, "V8dV8dV8dV8dUc", "", "avx512dq") +TARGET_BUILTIN(__builtin_ia32_andnps512_mask, "V16fV16fV16fV16fUs", "", "avx512dq") +TARGET_BUILTIN(__builtin_ia32_pmullq256_mask, "V4LLiV4LLiV4LLiV4LLiUc", "", "avx512vl,avx512dq") +TARGET_BUILTIN(__builtin_ia32_pmullq128_mask, "V2LLiV2LLiV2LLiV2LLiUc", "", "avx512vl,avx512dq") +TARGET_BUILTIN(__builtin_ia32_andnpd256_mask, "V4dV4dV4dV4dUc", "", "avx512vl,avx512dq") +TARGET_BUILTIN(__builtin_ia32_andnpd128_mask, "V2dV2dV2dV2dUc", "", "avx512vl,avx512dq") +TARGET_BUILTIN(__builtin_ia32_andnps256_mask, "V8fV8fV8fV8fUc", "", "avx512vl,avx512dq") +TARGET_BUILTIN(__builtin_ia32_andnps128_mask, "V4fV4fV4fV4fUc", "", "avx512vl,avx512dq") +TARGET_BUILTIN(__builtin_ia32_andpd256_mask, "V4dV4dV4dV4dUc", "", "avx512vl,avx512dq") +TARGET_BUILTIN(__builtin_ia32_andpd128_mask, "V2dV2dV2dV2dUc", "", "avx512vl,avx512dq") +TARGET_BUILTIN(__builtin_ia32_andps256_mask, "V8fV8fV8fV8fUc", "", "avx512vl,avx512dq") +TARGET_BUILTIN(__builtin_ia32_andps128_mask, "V4fV4fV4fV4fUc", "", "avx512vl,avx512dq") +TARGET_BUILTIN(__builtin_ia32_xorpd256_mask, "V4dV4dV4dV4dUc", "", "avx512vl,avx512dq") +TARGET_BUILTIN(__builtin_ia32_xorpd128_mask, "V2dV2dV2dV2dUc", "", "avx512vl,avx512dq") +TARGET_BUILTIN(__builtin_ia32_xorps256_mask, "V8fV8fV8fV8fUc", "", "avx512vl,avx512dq") +TARGET_BUILTIN(__builtin_ia32_xorps128_mask, "V4fV4fV4fV4fUc", "", "avx512vl,avx512dq") +TARGET_BUILTIN(__builtin_ia32_orpd256_mask, "V4dV4dV4dV4dUc", "", "avx512vl,avx512dq") +TARGET_BUILTIN(__builtin_ia32_orpd128_mask, "V2dV2dV2dV2dUc", "", "avx512vl,avx512dq") +TARGET_BUILTIN(__builtin_ia32_orps256_mask, "V8fV8fV8fV8fUc", "", "avx512vl,avx512dq") +TARGET_BUILTIN(__builtin_ia32_orps128_mask, "V4fV4fV4fV4fUc", "", "avx512vl,avx512dq") + +TARGET_BUILTIN(__builtin_ia32_blendmb_512_mask, "V64cV64cV64cULLi", "", "avx512bw") +TARGET_BUILTIN(__builtin_ia32_blendmw_512_mask, "V32sV32sV32sUi", "", "avx512bw") +TARGET_BUILTIN(__builtin_ia32_pabsb512_mask, "V64cV64cV64cULLi", "", "avx512bw") +TARGET_BUILTIN(__builtin_ia32_pabsw512_mask, "V32sV32sV32sUi", "", "avx512bw") +TARGET_BUILTIN(__builtin_ia32_packssdw512_mask, "V32sV16iV16iV32sUi", "", "avx512bw") +TARGET_BUILTIN(__builtin_ia32_packsswb512_mask, "V64cV32sV32sV64cULLi", "", "avx512bw") +TARGET_BUILTIN(__builtin_ia32_packusdw512_mask, "V32sV16iV16iV32sUi", "", "avx512bw") +TARGET_BUILTIN(__builtin_ia32_packuswb512_mask, "V64cV32sV32sV64cULLi", "", "avx512bw") +TARGET_BUILTIN(__builtin_ia32_paddsb512_mask, "V64cV64cV64cV64cULLi", "", "avx512bw") +TARGET_BUILTIN(__builtin_ia32_paddsw512_mask, "V32sV32sV32sV32sUi", "", "avx512bw") +TARGET_BUILTIN(__builtin_ia32_paddusb512_mask, "V64cV64cV64cV64cULLi", "", "avx512bw") +TARGET_BUILTIN(__builtin_ia32_paddusw512_mask, "V32sV32sV32sV32sUi", "", "avx512bw") +TARGET_BUILTIN(__builtin_ia32_pavgb512_mask, "V64cV64cV64cV64cULLi", "", "avx512bw") +TARGET_BUILTIN(__builtin_ia32_pavgw512_mask, "V32sV32sV32sV32sUi", "", "avx512bw") +TARGET_BUILTIN(__builtin_ia32_pmaxsb512_mask, "V64cV64cV64cV64cULLi", "", "avx512bw") +TARGET_BUILTIN(__builtin_ia32_pmaxsw512_mask, "V32sV32sV32sV32sUi", "", "avx512bw") +TARGET_BUILTIN(__builtin_ia32_pmaxub512_mask, "V64cV64cV64cV64cULLi", "", "avx512bw") +TARGET_BUILTIN(__builtin_ia32_pmaxuw512_mask, "V32sV32sV32sV32sUi", "", "avx512bw") +TARGET_BUILTIN(__builtin_ia32_pminsb512_mask, "V64cV64cV64cV64cULLi", "", "avx512bw") +TARGET_BUILTIN(__builtin_ia32_pminsw512_mask, "V32sV32sV32sV32sUi", "", "avx512bw") +TARGET_BUILTIN(__builtin_ia32_pminub512_mask, "V64cV64cV64cV64cULLi", "", "avx512bw") +TARGET_BUILTIN(__builtin_ia32_pminuw512_mask, "V32sV32sV32sV32sUi", "", "avx512bw") +TARGET_BUILTIN(__builtin_ia32_pshufb512_mask, "V64cV64cV64cV64cULLi", "", "avx512bw") +TARGET_BUILTIN(__builtin_ia32_psubsb512_mask, "V64cV64cV64cV64cULLi", "", "avx512bw") +TARGET_BUILTIN(__builtin_ia32_psubsw512_mask, "V32sV32sV32sV32sUi", "", "avx512bw") +TARGET_BUILTIN(__builtin_ia32_psubusb512_mask, "V64cV64cV64cV64cULLi", "", "avx512bw") +TARGET_BUILTIN(__builtin_ia32_psubusw512_mask, "V32sV32sV32sV32sUi", "", "avx512bw") + +TARGET_BUILTIN(__builtin_ia32_vpermi2varhi512_mask, "V32sV32sV32sV32sUi", "", "avx512bw") +TARGET_BUILTIN(__builtin_ia32_vpermt2varhi512_mask, "V32sV32sV32sV32sUi", "", "avx512bw") +TARGET_BUILTIN(__builtin_ia32_vpermt2varhi512_maskz, "V32sV32sV32sV32sUi", "", "avx512bw") + +TARGET_BUILTIN(__builtin_ia32_vpconflictdi_512_mask, "V8LLiV8LLiV8LLiUc", "", "avx512cd") +TARGET_BUILTIN(__builtin_ia32_vpconflictsi_512_mask, "V16iV16iV16iUs", "", "avx512cd") +TARGET_BUILTIN(__builtin_ia32_vplzcntd_512_mask, "V16iV16iV16iUs", "", "avx512cd") +TARGET_BUILTIN(__builtin_ia32_vplzcntq_512_mask, "V8LLiV8LLiV8LLiUc", "", "avx512cd") + +TARGET_BUILTIN(__builtin_ia32_blendmb_128_mask, "V16cV16cV16cUs", "", "avx512vl,avx512bw") +TARGET_BUILTIN(__builtin_ia32_blendmb_256_mask, "V32cV32cV32cUi", "", "avx512vl,avx512bw") +TARGET_BUILTIN(__builtin_ia32_blendmw_128_mask, "V8sV8sV8sUc", "", "avx512vl,avx512bw") +TARGET_BUILTIN(__builtin_ia32_blendmw_256_mask, "V16sV16sV16sUs", "", "avx512vl,avx512bw") +TARGET_BUILTIN(__builtin_ia32_pabsb128_mask, "V16cV16cV16cUs", "", "avx512vl,avx512bw") +TARGET_BUILTIN(__builtin_ia32_pabsb256_mask, "V32cV32cV32cUi", "", "avx512vl,avx512bw") +TARGET_BUILTIN(__builtin_ia32_pabsw128_mask, "V8sV8sV8sUc", "", "avx512vl,avx512bw") +TARGET_BUILTIN(__builtin_ia32_pabsw256_mask, "V16sV16sV16sUs", "", "avx512vl,avx512bw") +TARGET_BUILTIN(__builtin_ia32_packssdw128_mask, "V8sV4iV4iV8sUc", "", "avx512vl,avx512bw") +TARGET_BUILTIN(__builtin_ia32_packssdw256_mask, "V16sV8iV8iV16sUs", "", "avx512vl,avx512bw") +TARGET_BUILTIN(__builtin_ia32_packsswb128_mask, "V16cV8sV8sV16cUs", "", "avx512vl,avx512bw") +TARGET_BUILTIN(__builtin_ia32_packsswb256_mask, "V32cV16sV16sV32cUi", "", "avx512vl,avx512bw") +TARGET_BUILTIN(__builtin_ia32_packusdw128_mask, "V8sV4iV4iV8sUc", "", "avx512vl,avx512bw") +TARGET_BUILTIN(__builtin_ia32_packusdw256_mask, "V16sV8iV8iV16sUs", "", "avx512vl,avx512bw") +TARGET_BUILTIN(__builtin_ia32_packuswb128_mask, "V16cV8sV8sV16cUs", "", "avx512vl,avx512bw") +TARGET_BUILTIN(__builtin_ia32_packuswb256_mask, "V32cV16sV16sV32cUi", "", "avx512vl,avx512bw") +TARGET_BUILTIN(__builtin_ia32_paddsb128_mask, "V16cV16cV16cV16cUs", "", "avx512vl,avx512bw") +TARGET_BUILTIN(__builtin_ia32_paddsb256_mask, "V32cV32cV32cV32cUi", "", "avx512vl,avx512bw") +TARGET_BUILTIN(__builtin_ia32_paddsw128_mask, "V8sV8sV8sV8sUc", "", "avx512vl,avx512bw") +TARGET_BUILTIN(__builtin_ia32_paddsw256_mask, "V16sV16sV16sV16sUs", "", "avx512vl,avx512bw") +TARGET_BUILTIN(__builtin_ia32_paddusb128_mask, "V16cV16cV16cV16cUs", "", "avx512vl,avx512bw") +TARGET_BUILTIN(__builtin_ia32_paddusb256_mask, "V32cV32cV32cV32cUi", "", "avx512vl,avx512bw") +TARGET_BUILTIN(__builtin_ia32_paddusw128_mask, "V8sV8sV8sV8sUc", "", "avx512vl,avx512bw") +TARGET_BUILTIN(__builtin_ia32_paddusw256_mask, "V16sV16sV16sV16sUs", "", "avx512vl,avx512bw") +TARGET_BUILTIN(__builtin_ia32_pavgb128_mask, "V16cV16cV16cV16cUs", "", "avx512vl,avx512bw") +TARGET_BUILTIN(__builtin_ia32_pavgb256_mask, "V32cV32cV32cV32cUi", "", "avx512vl,avx512bw") +TARGET_BUILTIN(__builtin_ia32_pavgw128_mask, "V8sV8sV8sV8sUc", "", "avx512vl,avx512bw") +TARGET_BUILTIN(__builtin_ia32_pavgw256_mask, "V16sV16sV16sV16sUs", "", "avx512vl,avx512bw") +TARGET_BUILTIN(__builtin_ia32_pmaxsb128_mask, "V16cV16cV16cV16cUs", "", "avx512vl,avx512bw") +TARGET_BUILTIN(__builtin_ia32_pmaxsb256_mask, "V32cV32cV32cV32cUi", "", "avx512vl,avx512bw") +TARGET_BUILTIN(__builtin_ia32_pmaxsw128_mask, "V8sV8sV8sV8sUc", "", "avx512vl,avx512bw") +TARGET_BUILTIN(__builtin_ia32_pmaxsw256_mask, "V16sV16sV16sV16sUs", "", "avx512vl,avx512bw") +TARGET_BUILTIN(__builtin_ia32_pmaxub128_mask, "V16cV16cV16cV16cUs", "", "avx512vl,avx512bw") +TARGET_BUILTIN(__builtin_ia32_pmaxub256_mask, "V32cV32cV32cV32cUi", "", "avx512vl,avx512bw") +TARGET_BUILTIN(__builtin_ia32_pmaxuw128_mask, "V8sV8sV8sV8sUc", "", "avx512vl,avx512bw") +TARGET_BUILTIN(__builtin_ia32_pmaxuw256_mask, "V16sV16sV16sV16sUs", "", "avx512vl,avx512bw") +TARGET_BUILTIN(__builtin_ia32_pminsb128_mask, "V16cV16cV16cV16cUs", "", "avx512vl,avx512bw") +TARGET_BUILTIN(__builtin_ia32_pminsb256_mask, "V32cV32cV32cV32cUi", "", "avx512vl,avx512bw") +TARGET_BUILTIN(__builtin_ia32_pminsw128_mask, "V8sV8sV8sV8sUc", "", "avx512vl,avx512bw") +TARGET_BUILTIN(__builtin_ia32_pminsw256_mask, "V16sV16sV16sV16sUs", "", "avx512vl,avx512bw") +TARGET_BUILTIN(__builtin_ia32_pminub128_mask, "V16cV16cV16cV16cUs", "", "avx512vl,avx512bw") +TARGET_BUILTIN(__builtin_ia32_pminub256_mask, "V32cV32cV32cV32cUi", "", "avx512vl,avx512bw") +TARGET_BUILTIN(__builtin_ia32_pminuw128_mask, "V8sV8sV8sV8sUc", "", "avx512vl,avx512bw") +TARGET_BUILTIN(__builtin_ia32_pminuw256_mask, "V16sV16sV16sV16sUs", "", "avx512vl,avx512bw") +TARGET_BUILTIN(__builtin_ia32_pshufb128_mask, "V16cV16cV16cV16cUs", "", "avx512vl,avx512bw") +TARGET_BUILTIN(__builtin_ia32_pshufb256_mask, "V32cV32cV32cV32cUi", "", "avx512vl,avx512bw") +TARGET_BUILTIN(__builtin_ia32_psubsb128_mask, "V16cV16cV16cV16cUs", "", "avx512vl,avx512bw") +TARGET_BUILTIN(__builtin_ia32_psubsb256_mask, "V32cV32cV32cV32cUi", "", "avx512vl,avx512bw") +TARGET_BUILTIN(__builtin_ia32_psubsw128_mask, "V8sV8sV8sV8sUc", "", "avx512vl,avx512bw") +TARGET_BUILTIN(__builtin_ia32_psubsw256_mask, "V16sV16sV16sV16sUs", "", "avx512vl,avx512bw") +TARGET_BUILTIN(__builtin_ia32_psubusb128_mask, "V16cV16cV16cV16cUs", "", "avx512vl,avx512bw") +TARGET_BUILTIN(__builtin_ia32_psubusb256_mask, "V32cV32cV32cV32cUi", "", "avx512vl,avx512bw") +TARGET_BUILTIN(__builtin_ia32_psubusw128_mask, "V8sV8sV8sV8sUc", "", "avx512vl,avx512bw") +TARGET_BUILTIN(__builtin_ia32_psubusw256_mask, "V16sV16sV16sV16sUs", "", "avx512vl,avx512bw") + +TARGET_BUILTIN(__builtin_ia32_vpermi2varhi128_mask, "V8sV8sV8sV8sUc", "", "avx512vl,avx512bw") +TARGET_BUILTIN(__builtin_ia32_vpermi2varhi256_mask, "V16sV16sV16sV16sUs", "", "avx512vl,avx512bw") +TARGET_BUILTIN(__builtin_ia32_vpermt2varhi128_mask, "V8sV8sV8sV8sUc", "", "avx512vl,avx512bw") +TARGET_BUILTIN(__builtin_ia32_vpermt2varhi128_maskz, "V8sV8sV8sV8sUc", "", "avx512vl,avx512bw") +TARGET_BUILTIN(__builtin_ia32_vpermt2varhi256_mask, "V16sV16sV16sV16sUs", "", "avx512vl,avx512bw") +TARGET_BUILTIN(__builtin_ia32_vpermt2varhi256_maskz, "V16sV16sV16sV16sUs", "", "avx512vl,avx512bw") + +TARGET_BUILTIN(__builtin_ia32_pmulhrsw512_mask, "V32sV32sV32sV32sUi", "", "avx512bw") +TARGET_BUILTIN(__builtin_ia32_pmulhuw512_mask, "V32sV32sV32sV32sUi", "", "avx512bw") +TARGET_BUILTIN(__builtin_ia32_pmulhw512_mask, "V32sV32sV32sV32sUi", "", "avx512bw") + +TARGET_BUILTIN(__builtin_ia32_addpd512_mask, "V8dV8dV8dV8dUcIi", "", "avx512f") +TARGET_BUILTIN(__builtin_ia32_addps512_mask, "V16fV16fV16fV16fUsIi", "", "avx512f") +TARGET_BUILTIN(__builtin_ia32_divpd512_mask, "V8dV8dV8dV8dUcIi", "", "avx512f") +TARGET_BUILTIN(__builtin_ia32_divps512_mask, "V16fV16fV16fV16fUsIi", "", "avx512f") +TARGET_BUILTIN(__builtin_ia32_mulpd512_mask, "V8dV8dV8dV8dUcIi", "", "avx512f") +TARGET_BUILTIN(__builtin_ia32_mulps512_mask, "V16fV16fV16fV16fUsIi", "", "avx512f") +TARGET_BUILTIN(__builtin_ia32_subpd512_mask, "V8dV8dV8dV8dUcIi", "", "avx512f") +TARGET_BUILTIN(__builtin_ia32_subps512_mask, "V16fV16fV16fV16fUsIi", "", "avx512f") + +TARGET_BUILTIN(__builtin_ia32_pmaddubsw512_mask, "V32sV64cV64cV32sUi", "", "avx512bw") +TARGET_BUILTIN(__builtin_ia32_pmaddwd512_mask, "V16iV32sV32sV16iUs", "", "avx512bw") + +TARGET_BUILTIN(__builtin_ia32_addss_mask, "V4fV4fV4fV4fUcIi", "", "avx512f") +TARGET_BUILTIN(__builtin_ia32_divss_mask, "V4fV4fV4fV4fUcIi", "", "avx512f") +TARGET_BUILTIN(__builtin_ia32_mulss_mask, "V4fV4fV4fV4fUcIi", "", "avx512f") +TARGET_BUILTIN(__builtin_ia32_subss_mask, "V4fV4fV4fV4fUcIi", "", "avx512f") +TARGET_BUILTIN(__builtin_ia32_maxss_mask, "V4fV4fV4fV4fUcIi", "", "avx512f") +TARGET_BUILTIN(__builtin_ia32_minss_mask, "V4fV4fV4fV4fUcIi", "", "avx512f") +TARGET_BUILTIN(__builtin_ia32_addsd_mask, "V2dV2dV2dV2dUcIi", "", "avx512f") +TARGET_BUILTIN(__builtin_ia32_divsd_mask, "V2dV2dV2dV2dUcIi", "", "avx512f") +TARGET_BUILTIN(__builtin_ia32_mulsd_mask, "V2dV2dV2dV2dUcIi", "", "avx512f") +TARGET_BUILTIN(__builtin_ia32_subsd_mask, "V2dV2dV2dV2dUcIi", "", "avx512f") +TARGET_BUILTIN(__builtin_ia32_maxsd_mask, "V2dV2dV2dV2dUcIi", "", "avx512f") +TARGET_BUILTIN(__builtin_ia32_minsd_mask, "V2dV2dV2dV2dUcIi", "", "avx512f") + +TARGET_BUILTIN(__builtin_ia32_addpd128_mask, "V2dV2dV2dV2dUc", "", "avx512vl") +TARGET_BUILTIN(__builtin_ia32_addpd256_mask, "V4dV4dV4dV4dUc", "", "avx512vl") +TARGET_BUILTIN(__builtin_ia32_addps128_mask, "V4fV4fV4fV4fUc", "", "avx512vl") +TARGET_BUILTIN(__builtin_ia32_addps256_mask, "V8fV8fV8fV8fUc", "", "avx512vl") +TARGET_BUILTIN(__builtin_ia32_blendmd_128_mask, "V4iV4iV4iUc", "", "avx512vl") +TARGET_BUILTIN(__builtin_ia32_blendmd_256_mask, "V8iV8iV8iUc", "", "avx512vl") +TARGET_BUILTIN(__builtin_ia32_blendmpd_128_mask, "V2dV2dV2dUc", "", "avx512vl") +TARGET_BUILTIN(__builtin_ia32_blendmpd_256_mask, "V4dV4dV4dUc", "", "avx512vl") +TARGET_BUILTIN(__builtin_ia32_blendmps_128_mask, "V4fV4fV4fUc", "", "avx512vl") +TARGET_BUILTIN(__builtin_ia32_blendmps_256_mask, "V8fV8fV8fUc", "", "avx512vl") +TARGET_BUILTIN(__builtin_ia32_blendmq_128_mask, "V2LLiV2LLiV2LLiUc", "", "avx512vl") +TARGET_BUILTIN(__builtin_ia32_blendmq_256_mask, "V4LLiV4LLiV4LLiUc", "", "avx512vl") +TARGET_BUILTIN(__builtin_ia32_compressdf128_mask, "V2dV2dV2dUc", "", "avx512vl") +TARGET_BUILTIN(__builtin_ia32_compressdf256_mask, "V4dV4dV4dUc", "", "avx512vl") +TARGET_BUILTIN(__builtin_ia32_compressdi128_mask, "V2LLiV2LLiV2LLiUc", "", "avx512vl") +TARGET_BUILTIN(__builtin_ia32_compressdi256_mask, "V4LLiV4LLiV4LLiUc", "", "avx512vl") +TARGET_BUILTIN(__builtin_ia32_compresssf128_mask, "V4fV4fV4fUc", "", "avx512vl") +TARGET_BUILTIN(__builtin_ia32_compresssf256_mask, "V8fV8fV8fUc", "", "avx512vl") +TARGET_BUILTIN(__builtin_ia32_compresssi128_mask, "V4iV4iV4iUc", "", "avx512vl") +TARGET_BUILTIN(__builtin_ia32_compresssi256_mask, "V8iV8iV8iUc", "", "avx512vl") +TARGET_BUILTIN(__builtin_ia32_compressstoredf128_mask, "vV2d*V2dUc", "", "avx512vl") +TARGET_BUILTIN(__builtin_ia32_compressstoredf256_mask, "vV4d*V4dUc", "", "avx512vl") +TARGET_BUILTIN(__builtin_ia32_compressstoredi128_mask, "vV2LLi*V2LLiUc", "", "avx512vl") +TARGET_BUILTIN(__builtin_ia32_compressstoredi256_mask, "vV4LLi*V4LLiUc", "", "avx512vl") +TARGET_BUILTIN(__builtin_ia32_compressstoresf128_mask, "vV4f*V4fUc", "", "avx512vl") +TARGET_BUILTIN(__builtin_ia32_compressstoresf256_mask, "vV8f*V8fUc", "", "avx512vl") +TARGET_BUILTIN(__builtin_ia32_compressstoresi128_mask, "vV4i*V4iUc", "", "avx512vl") +TARGET_BUILTIN(__builtin_ia32_compressstoresi256_mask, "vV8i*V8iUc", "", "avx512vl") +TARGET_BUILTIN(__builtin_ia32_cvtdq2pd128_mask, "V2dV4iV2dUc", "", "avx512vl") +TARGET_BUILTIN(__builtin_ia32_cvtdq2pd256_mask, "V4dV4iV4dUc", "", "avx512vl") +TARGET_BUILTIN(__builtin_ia32_cvtdq2ps128_mask, "V4fV4iV4fUc", "", "avx512vl") +TARGET_BUILTIN(__builtin_ia32_cvtdq2ps256_mask, "V8fV8iV8fUc", "", "avx512vl") +TARGET_BUILTIN(__builtin_ia32_cvtpd2dq128_mask, "V4iV2dV4iUc", "", "avx512vl") +TARGET_BUILTIN(__builtin_ia32_cvtpd2dq256_mask, "V4iV4dV4iUc", "", "avx512vl") +TARGET_BUILTIN(__builtin_ia32_cvtpd2ps_mask, "V4fV2dV4fUc", "", "avx512vl") +TARGET_BUILTIN(__builtin_ia32_cvtpd2ps256_mask, "V4fV4dV4fUc", "", "avx512vl") +TARGET_BUILTIN(__builtin_ia32_cvtpd2udq128_mask, "V4iV2dV4iUc", "", "avx512vl") +TARGET_BUILTIN(__builtin_ia32_cvtpd2udq256_mask, "V4iV4dV4iUc", "", "avx512vl") +TARGET_BUILTIN(__builtin_ia32_cvtps2dq128_mask, "V4iV4fV4iUc", "", "avx512vl") +TARGET_BUILTIN(__builtin_ia32_cvtps2dq256_mask, "V8iV8fV8iUc", "", "avx512vl") +TARGET_BUILTIN(__builtin_ia32_cvtps2pd128_mask, "V2dV4fV2dUc", "", "avx512vl") +TARGET_BUILTIN(__builtin_ia32_cvtps2pd256_mask, "V4dV4fV4dUc", "", "avx512vl") +TARGET_BUILTIN(__builtin_ia32_cvtps2udq128_mask, "V4iV4fV4iUc", "", "avx512vl") +TARGET_BUILTIN(__builtin_ia32_cvtps2udq256_mask, "V8iV8fV8iUc", "", "avx512vl") +TARGET_BUILTIN(__builtin_ia32_cvttpd2dq128_mask, "V4iV2dV4iUc", "", "avx512vl") +TARGET_BUILTIN(__builtin_ia32_cvttpd2dq256_mask, "V4iV4dV4iUc", "", "avx512vl") +TARGET_BUILTIN(__builtin_ia32_cvttpd2udq128_mask, "V4iV2dV4iUc", "", "avx512vl") +TARGET_BUILTIN(__builtin_ia32_cvttpd2udq256_mask, "V4iV4dV4iUc", "", "avx512vl") +TARGET_BUILTIN(__builtin_ia32_cvttps2dq128_mask, "V4iV4fV4iUc", "", "avx512vl") +TARGET_BUILTIN(__builtin_ia32_cvttps2dq256_mask, "V8iV8fV8iUc", "", "avx512vl") +TARGET_BUILTIN(__builtin_ia32_cvttps2udq128_mask, "V4iV4fV4iUc", "", "avx512vl") +TARGET_BUILTIN(__builtin_ia32_cvttps2udq256_mask, "V8iV8fV8iUc", "", "avx512vl") +TARGET_BUILTIN(__builtin_ia32_cvtudq2pd128_mask, "V2dV4iV2dUc", "", "avx512vl") +TARGET_BUILTIN(__builtin_ia32_cvtudq2pd256_mask, "V4dV4iV4dUc", "", "avx512vl") +TARGET_BUILTIN(__builtin_ia32_cvtudq2ps128_mask, "V4fV4iV4fUc", "", "avx512vl") +TARGET_BUILTIN(__builtin_ia32_cvtudq2ps256_mask, "V8fV8iV8fUc", "", "avx512vl") +TARGET_BUILTIN(__builtin_ia32_divpd_mask, "V2dV2dV2dV2dUc", "", "avx512vl") +TARGET_BUILTIN(__builtin_ia32_divpd256_mask, "V4dV4dV4dV4dUc", "", "avx512vl") +TARGET_BUILTIN(__builtin_ia32_divps_mask, "V4fV4fV4fV4fUc", "", "avx512vl") +TARGET_BUILTIN(__builtin_ia32_divps256_mask, "V8fV8fV8fV8fUc", "", "avx512vl") +TARGET_BUILTIN(__builtin_ia32_expanddf128_mask, "V2dV2dV2dUc", "", "avx512vl") +TARGET_BUILTIN(__builtin_ia32_expanddf256_mask, "V4dV4dV4dUc", "", "avx512vl") +TARGET_BUILTIN(__builtin_ia32_expanddi128_mask, "V2LLiV2LLiV2LLiUc", "", "avx512vl") +TARGET_BUILTIN(__builtin_ia32_expanddi256_mask, "V4LLiV4LLiV4LLiUc", "", "avx512vl") +TARGET_BUILTIN(__builtin_ia32_expandloaddf128_mask, "V2dV2d*V2dUc", "", "avx512vl") +TARGET_BUILTIN(__builtin_ia32_expandloaddf256_mask, "V4dV4d*V4dUc", "", "avx512vl") +TARGET_BUILTIN(__builtin_ia32_expandloaddi128_mask, "V4iV2LLi*V2LLiUc", "", "avx512vl") +TARGET_BUILTIN(__builtin_ia32_expandloaddi256_mask, "V4LLiV4LLi*V4LLiUc", "", "avx512vl") +TARGET_BUILTIN(__builtin_ia32_expandloadsf128_mask, "V4fV4f*V4fUc", "", "avx512vl") +TARGET_BUILTIN(__builtin_ia32_expandloadsf256_mask, "V8fV8f*V8fUc", "", "avx512vl") +TARGET_BUILTIN(__builtin_ia32_expandloadsi128_mask, "V4iV4i*V4iUc", "", "avx512vl") +TARGET_BUILTIN(__builtin_ia32_expandloadsi256_mask, "V8iV8i*V8iUc", "", "avx512vl") +TARGET_BUILTIN(__builtin_ia32_expandsf128_mask, "V4fV4fV4fUc", "", "avx512vl") +TARGET_BUILTIN(__builtin_ia32_expandsf256_mask, "V8fV8fV8fUc", "", "avx512vl") +TARGET_BUILTIN(__builtin_ia32_expandsi128_mask, "V4iV4iV4iUc", "", "avx512vl") +TARGET_BUILTIN(__builtin_ia32_expandsi256_mask, "V8iV8iV8iUc", "", "avx512vl") +TARGET_BUILTIN(__builtin_ia32_getexppd128_mask, "V2dV2dV2dUc", "", "avx512vl") +TARGET_BUILTIN(__builtin_ia32_getexppd256_mask, "V4dV4dV4dUc", "", "avx512vl") +TARGET_BUILTIN(__builtin_ia32_getexpps128_mask, "V4fV4fV4fUc", "", "avx512vl") +TARGET_BUILTIN(__builtin_ia32_getexpps256_mask, "V8fV8fV8fUc", "", "avx512vl") +TARGET_BUILTIN(__builtin_ia32_maxpd_mask, "V2dV2dV2dV2dUc", "", "avx512vl") +TARGET_BUILTIN(__builtin_ia32_maxpd256_mask, "V4dV4dV4dV4dUc", "", "avx512vl") +TARGET_BUILTIN(__builtin_ia32_maxps_mask, "V4fV4fV4fV4fUc", "", "avx512vl") +TARGET_BUILTIN(__builtin_ia32_maxps256_mask, "V8fV8fV8fV8fUc", "", "avx512vl") +TARGET_BUILTIN(__builtin_ia32_minpd_mask, "V2dV2dV2dV2dUc", "", "avx512vl") +TARGET_BUILTIN(__builtin_ia32_minpd256_mask, "V4dV4dV4dV4dUc", "", "avx512vl") +TARGET_BUILTIN(__builtin_ia32_minps_mask, "V4fV4fV4fV4fUc", "", "avx512vl") +TARGET_BUILTIN(__builtin_ia32_minps256_mask, "V8fV8fV8fV8fUc", "", "avx512vl") +TARGET_BUILTIN(__builtin_ia32_mulpd_mask, "V2dV2dV2dV2dUc", "", "avx512vl") +TARGET_BUILTIN(__builtin_ia32_mulpd256_mask, "V4dV4dV4dV4dUc", "", "avx512vl") +TARGET_BUILTIN(__builtin_ia32_mulps_mask, "V4fV4fV4fV4fUc", "", "avx512vl") +TARGET_BUILTIN(__builtin_ia32_mulps256_mask, "V8fV8fV8fV8fUc", "", "avx512vl") +TARGET_BUILTIN(__builtin_ia32_pabsd128_mask, "V4iV4iV4iUc", "", "avx512vl") +TARGET_BUILTIN(__builtin_ia32_pabsd256_mask, "V8iV8iV8iUc", "", "avx512vl") +TARGET_BUILTIN(__builtin_ia32_pabsq128_mask, "V2LLiV2LLiV2LLiUc", "", "avx512vl") +TARGET_BUILTIN(__builtin_ia32_pabsq256_mask, "V4LLiV4LLiV4LLiUc", "", "avx512vl") +TARGET_BUILTIN(__builtin_ia32_pmaxsd128_mask, "V4iV4iV4iV4iUc", "", "avx512vl") +TARGET_BUILTIN(__builtin_ia32_pmaxsd256_mask, "V8iV8iV8iV8iUc", "", "avx512vl") +TARGET_BUILTIN(__builtin_ia32_pmaxsq128_mask, "V2LLiV2LLiV2LLiV2LLiUc", "", "avx512vl") +TARGET_BUILTIN(__builtin_ia32_pmaxsq256_mask, "V4LLiV4LLiV4LLiV4LLiUc", "", "avx512vl") +TARGET_BUILTIN(__builtin_ia32_pmaxud128_mask, "V4iV4iV4iV4iUc", "", "avx512vl") +TARGET_BUILTIN(__builtin_ia32_pmaxud256_mask, "V8iV8iV8iV8iUc", "", "avx512vl") +TARGET_BUILTIN(__builtin_ia32_pmaxuq128_mask, "V2LLiV2LLiV2LLiV2LLiUc", "", "avx512vl") +TARGET_BUILTIN(__builtin_ia32_pmaxuq256_mask, "V4LLiV4LLiV4LLiV4LLiUc", "", "avx512vl") +TARGET_BUILTIN(__builtin_ia32_pminsd128_mask, "V4iV4iV4iV4iUc", "", "avx512vl") +TARGET_BUILTIN(__builtin_ia32_pminsd256_mask, "V8iV8iV8iV8iUc", "", "avx512vl") +TARGET_BUILTIN(__builtin_ia32_pminsq128_mask, "V2LLiV2LLiV2LLiV2LLiUc", "", "avx512vl") +TARGET_BUILTIN(__builtin_ia32_pminsq256_mask, "V4LLiV4LLiV4LLiV4LLiUc", "", "avx512vl") +TARGET_BUILTIN(__builtin_ia32_pminud128_mask, "V4iV4iV4iV4iUc", "", "avx512vl") +TARGET_BUILTIN(__builtin_ia32_pminud256_mask, "V8iV8iV8iV8iUc", "", "avx512vl") +TARGET_BUILTIN(__builtin_ia32_pminuq128_mask, "V2LLiV2LLiV2LLiV2LLiUc", "", "avx512vl") +TARGET_BUILTIN(__builtin_ia32_pminuq256_mask, "V4LLiV4LLiV4LLiV4LLiUc", "", "avx512vl") +TARGET_BUILTIN(__builtin_ia32_rndscalepd_128_mask, "V2dV2dIiV2dUc", "", "avx512vl") +TARGET_BUILTIN(__builtin_ia32_rndscalepd_256_mask, "V4dV4dIiV4dUc", "", "avx512vl") +TARGET_BUILTIN(__builtin_ia32_rndscaleps_128_mask, "V4fV4fIiV4fUc", "", "avx512vl") +TARGET_BUILTIN(__builtin_ia32_rndscaleps_256_mask, "V8fV8fIiV8fUc", "", "avx512vl") +TARGET_BUILTIN(__builtin_ia32_scalefpd128_mask, "V2dV2dV2dV2dUc", "", "avx512vl") +TARGET_BUILTIN(__builtin_ia32_scalefpd256_mask, "V4dV4dV4dV4dUc", "", "avx512vl") +TARGET_BUILTIN(__builtin_ia32_scalefps128_mask, "V4fV4fV4fV4fUc", "", "avx512vl") +TARGET_BUILTIN(__builtin_ia32_scalefps256_mask, "V8fV8fV8fV8fUc", "", "avx512vl") + +TARGET_BUILTIN(__builtin_ia32_scatterdiv2df, "vv*UcV2LLiV2dIi", "", "avx512vl") +TARGET_BUILTIN(__builtin_ia32_scatterdiv2di, "vv*UcV2LLiV2LLiIi", "", "avx512vl") +TARGET_BUILTIN(__builtin_ia32_scatterdiv4df, "vv*UcV4LLiV4dIi", "", "avx512vl") +TARGET_BUILTIN(__builtin_ia32_scatterdiv4di, "vv*UcV4LLiV4LLiIi", "", "avx512vl") +TARGET_BUILTIN(__builtin_ia32_scatterdiv4sf, "vv*UcV2LLiV4fIi", "", "avx512vl") +TARGET_BUILTIN(__builtin_ia32_scatterdiv4si, "vv*UcV2LLiV4iIi", "", "avx512vl") +TARGET_BUILTIN(__builtin_ia32_scatterdiv8sf, "vv*UcV4LLiV4fIi", "", "avx512vl") +TARGET_BUILTIN(__builtin_ia32_scatterdiv8si, "vv*UcV4LLiV4iIi", "", "avx512vl") +TARGET_BUILTIN(__builtin_ia32_scattersiv2df, "vv*UcV4iV2dIi", "", "avx512vl") +TARGET_BUILTIN(__builtin_ia32_scattersiv2di, "vv*UcV4iV2LLiIi", "", "avx512vl") +TARGET_BUILTIN(__builtin_ia32_scattersiv4df, "vv*UcV4iV4dIi", "", "avx512vl") +TARGET_BUILTIN(__builtin_ia32_scattersiv4di, "vv*UcV4iV4LLiIi", "", "avx512vl") +TARGET_BUILTIN(__builtin_ia32_scattersiv4sf, "vv*UcV4iV4fIi", "", "avx512vl") +TARGET_BUILTIN(__builtin_ia32_scattersiv4si, "vv*UcV4iV4iIi", "", "avx512vl") +TARGET_BUILTIN(__builtin_ia32_scattersiv8sf, "vv*UcV8iV8fIi", "", "avx512vl") +TARGET_BUILTIN(__builtin_ia32_scattersiv8si, "vv*UcV8iV8iIi", "", "avx512vl") + +TARGET_BUILTIN(__builtin_ia32_sqrtpd128_mask, "V2dV2dV2dUc", "", "avx512vl") +TARGET_BUILTIN(__builtin_ia32_sqrtpd256_mask, "V4dV4dV4dUc", "", "avx512vl") +TARGET_BUILTIN(__builtin_ia32_sqrtps128_mask, "V4fV4fV4fUc", "", "avx512vl") +TARGET_BUILTIN(__builtin_ia32_sqrtps256_mask, "V8fV8fV8fUc", "", "avx512vl") +TARGET_BUILTIN(__builtin_ia32_subpd128_mask, "V2dV2dV2dV2dUc", "", "avx512vl") +TARGET_BUILTIN(__builtin_ia32_subpd256_mask, "V4dV4dV4dV4dUc", "", "avx512vl") +TARGET_BUILTIN(__builtin_ia32_subps128_mask, "V4fV4fV4fV4fUc", "", "avx512vl") +TARGET_BUILTIN(__builtin_ia32_subps256_mask, "V8fV8fV8fV8fUc", "", "avx512vl") +TARGET_BUILTIN(__builtin_ia32_vpermi2vard128_mask, "V4iV4iV4iV4iUc", "", "avx512vl") +TARGET_BUILTIN(__builtin_ia32_vpermi2vard256_mask, "V8iV8iV8iV8iUc", "", "avx512vl") +TARGET_BUILTIN(__builtin_ia32_vpermi2varpd128_mask, "V2dV2dV2LLiV2dUc", "", "avx512vl") +TARGET_BUILTIN(__builtin_ia32_vpermi2varpd256_mask, "V4dV4dV4LLiV4dUc", "", "avx512vl") +TARGET_BUILTIN(__builtin_ia32_vpermi2varps128_mask, "V4fV4fV4iV4fUc", "", "avx512vl") +TARGET_BUILTIN(__builtin_ia32_vpermi2varps256_mask, "V8fV8fV8iV8fUc", "", "avx512vl") +TARGET_BUILTIN(__builtin_ia32_vpermi2varq128_mask, "V2LLiV2LLiV2LLiV2LLiUc", "", "avx512vl") +TARGET_BUILTIN(__builtin_ia32_vpermi2varq256_mask, "V4LLiV4LLiV4LLiV4LLiUc", "", "avx512vl") +TARGET_BUILTIN(__builtin_ia32_vpermt2vard128_mask, "V4iV4iV4iV4iUc", "", "avx512vl") +TARGET_BUILTIN(__builtin_ia32_vpermt2vard128_maskz, "V4iV4iV4iV4iUc", "", "avx512vl") +TARGET_BUILTIN(__builtin_ia32_vpermt2vard256_mask, "V8iV8iV8iV8iUc", "", "avx512vl") +TARGET_BUILTIN(__builtin_ia32_vpermt2vard256_maskz, "V8iV8iV8iV8iUc", "", "avx512vl") +TARGET_BUILTIN(__builtin_ia32_vpermt2varpd128_mask, "V2dV2LLiV2dV2dUc", "", "avx512vl") +TARGET_BUILTIN(__builtin_ia32_vpermt2varpd128_maskz, "V2dV2LLiV2dV2dUc", "", "avx512vl") +TARGET_BUILTIN(__builtin_ia32_vpermt2varpd256_mask, "V4dV4LLiV4dV4dUc", "", "avx512vl") +TARGET_BUILTIN(__builtin_ia32_vpermt2varpd256_maskz, "V4dV4LLiV4dV4dUc", "", "avx512vl") +TARGET_BUILTIN(__builtin_ia32_vpermt2varps128_mask, "V4fV4iV4fV4fUc", "", "avx512vl") +TARGET_BUILTIN(__builtin_ia32_vpermt2varps128_maskz, "V4fV4iV4fV4fUc", "", "avx512vl") +TARGET_BUILTIN(__builtin_ia32_vpermt2varps256_mask, "V8fV8iV8fV8fUc", "", "avx512vl") +TARGET_BUILTIN(__builtin_ia32_vpermt2varps256_maskz, "V8fV8iV8fV8fUc", "", "avx512vl") +TARGET_BUILTIN(__builtin_ia32_vpermt2varq128_mask, "V2LLiV2LLiV2LLiV2LLiUc", "", "avx512vl") +TARGET_BUILTIN(__builtin_ia32_vpermt2varq128_maskz, "V2LLiV2LLiV2LLiV2LLiUc", "", "avx512vl") +TARGET_BUILTIN(__builtin_ia32_vpermt2varq256_mask, "V4LLiV4LLiV4LLiV4LLiUc", "", "avx512vl") +TARGET_BUILTIN(__builtin_ia32_vpermt2varq256_maskz, "V4LLiV4LLiV4LLiV4LLiUc", "", "avx512vl") + +TARGET_BUILTIN(__builtin_ia32_pmovswb512_mask, "V32cV32sV32cUi", "", "avx512bw") +TARGET_BUILTIN(__builtin_ia32_pmovuswb512_mask, "V32cV32sV32cUi", "", "avx512bw") +TARGET_BUILTIN(__builtin_ia32_pmovwb512_mask, "V32cV32sV32cUi", "", "avx512bw") +TARGET_BUILTIN(__builtin_ia32_punpckhbw512_mask, "V64cV64cV64cV64cULLi", "", "avx512bw") +TARGET_BUILTIN(__builtin_ia32_punpckhwd512_mask, "V32sV32sV32sV32sUi", "", "avx512bw") +TARGET_BUILTIN(__builtin_ia32_punpcklbw512_mask, "V64cV64cV64cV64cULLi", "", "avx512bw") +TARGET_BUILTIN(__builtin_ia32_punpcklwd512_mask, "V32sV32sV32sV32sUi", "", "avx512bw") + +TARGET_BUILTIN(__builtin_ia32_cvtpd2qq128_mask, "V2LLiV2dV2LLiUc", "", "avx512vl,avx512dq") +TARGET_BUILTIN(__builtin_ia32_cvtpd2qq256_mask, "V4LLiV4dV4LLiUc", "", "avx512vl,avx512dq") +TARGET_BUILTIN(__builtin_ia32_cvtpd2uqq128_mask, "V2LLiV2dV2LLiUc", "", "avx512vl,avx512dq") +TARGET_BUILTIN(__builtin_ia32_cvtpd2uqq256_mask, "V4LLiV4dV4LLiUc", "", "avx512vl,avx512dq") +TARGET_BUILTIN(__builtin_ia32_cvtps2qq128_mask, "V2LLiV4fV2LLiUc", "", "avx512vl,avx512dq") +TARGET_BUILTIN(__builtin_ia32_cvtps2qq256_mask, "V4LLiV4fV4LLiUc", "", "avx512vl,avx512dq") +TARGET_BUILTIN(__builtin_ia32_cvtps2uqq128_mask, "V2LLiV4fV2LLiUc", "", "avx512vl,avx512dq") +TARGET_BUILTIN(__builtin_ia32_cvtps2uqq256_mask, "V4LLiV4fV4LLiUc", "", "avx512vl,avx512dq") +TARGET_BUILTIN(__builtin_ia32_cvtqq2pd128_mask, "V2dV2LLiV2dUc", "", "avx512vl,avx512dq") +TARGET_BUILTIN(__builtin_ia32_cvtqq2pd256_mask, "V4dV4LLiV4dUc", "", "avx512vl,avx512dq") +TARGET_BUILTIN(__builtin_ia32_cvtqq2ps128_mask, "V4fV2LLiV4fUc", "", "avx512vl,avx512dq") +TARGET_BUILTIN(__builtin_ia32_cvtqq2ps256_mask, "V4fV4LLiV4fUc", "", "avx512vl,avx512dq") +TARGET_BUILTIN(__builtin_ia32_cvttpd2qq128_mask, "V2LLiV2dV2LLiUc", "", "avx512vl,avx512dq") +TARGET_BUILTIN(__builtin_ia32_cvttpd2qq256_mask, "V4LLiV4dV4LLiUc", "", "avx512vl,avx512dq") +TARGET_BUILTIN(__builtin_ia32_cvttpd2uqq128_mask, "V2LLiV2dV2LLiUc", "", "avx512vl,avx512dq") +TARGET_BUILTIN(__builtin_ia32_cvttpd2uqq256_mask, "V4LLiV4dV4LLiUc", "", "avx512vl,avx512dq") +TARGET_BUILTIN(__builtin_ia32_cvttps2qq128_mask, "V2LLiV4fV2LLiUc", "", "avx512vl,avx512dq") +TARGET_BUILTIN(__builtin_ia32_cvttps2qq256_mask, "V4LLiV4fV4LLiUc", "", "avx512vl,avx512dq") +TARGET_BUILTIN(__builtin_ia32_cvttps2uqq128_mask, "V2LLiV4fV2LLiUc", "", "avx512vl,avx512dq") +TARGET_BUILTIN(__builtin_ia32_cvttps2uqq256_mask, "V4LLiV4fV4LLiUc", "", "avx512vl,avx512dq") +TARGET_BUILTIN(__builtin_ia32_cvtuqq2pd128_mask, "V2dV2LLiV2dUc", "", "avx512vl,avx512dq") +TARGET_BUILTIN(__builtin_ia32_cvtuqq2pd256_mask, "V4dV4LLiV4dUc", "", "avx512vl,avx512dq") +TARGET_BUILTIN(__builtin_ia32_cvtuqq2ps128_mask, "V4fV2LLiV4fUc", "", "avx512vl,avx512dq") +TARGET_BUILTIN(__builtin_ia32_cvtuqq2ps256_mask, "V4fV4LLiV4fUc", "", "avx512vl,avx512dq") +TARGET_BUILTIN(__builtin_ia32_rangepd128_mask, "V2dV2dV2dIiV2dUc", "", "avx512vl,avx512dq") +TARGET_BUILTIN(__builtin_ia32_rangepd256_mask, "V4dV4dV4dIiV4dUc", "", "avx512vl,avx512dq") +TARGET_BUILTIN(__builtin_ia32_rangeps128_mask, "V4fV4fV4fIiV4fUc", "", "avx512vl,avx512dq") +TARGET_BUILTIN(__builtin_ia32_rangeps256_mask, "V8fV8fV8fIiV8fUc", "", "avx512vl,avx512dq") +TARGET_BUILTIN(__builtin_ia32_reducepd128_mask, "V2dV2dIiV2dUc", "", "avx512vl,avx512dq") +TARGET_BUILTIN(__builtin_ia32_reducepd256_mask, "V4dV4dIiV4dUc", "", "avx512vl,avx512dq") +TARGET_BUILTIN(__builtin_ia32_reduceps128_mask, "V4fV4fIiV4fUc", "", "avx512vl,avx512dq") +TARGET_BUILTIN(__builtin_ia32_reduceps256_mask, "V8fV8fIiV8fUc", "", "avx512vl,avx512dq") + +TARGET_BUILTIN(__builtin_ia32_pmaddubsw128_mask, "V8sV16cV16cV8sUc", "", "avx512vl,avx512bw") +TARGET_BUILTIN(__builtin_ia32_pmaddubsw256_mask, "V16sV32cV32cV16sUs", "", "avx512vl,avx512bw") +TARGET_BUILTIN(__builtin_ia32_pmaddwd128_mask, "V4iV8sV8sV4iUc", "", "avx512vl,avx512bw") +TARGET_BUILTIN(__builtin_ia32_pmaddwd256_mask, "V8iV16sV16sV8iUc", "", "avx512vl,avx512bw") +TARGET_BUILTIN(__builtin_ia32_pmovswb128_mask, "V16cV8sV16cUc", "", "avx512vl,avx512bw") +TARGET_BUILTIN(__builtin_ia32_pmovswb256_mask, "V16cV16sV16cUs", "", "avx512vl,avx512bw") +TARGET_BUILTIN(__builtin_ia32_pmovuswb128_mask, "V16cV8sV16cUc", "", "avx512vl,avx512bw") +TARGET_BUILTIN(__builtin_ia32_pmovuswb256_mask, "V16cV16sV16cUs", "", "avx512vl,avx512bw") +TARGET_BUILTIN(__builtin_ia32_pmovwb128_mask, "V16cV8sV16cUc", "", "avx512vl,avx512bw") +TARGET_BUILTIN(__builtin_ia32_pmovwb256_mask, "V16cV16sV16cUs", "", "avx512vl,avx512bw") +TARGET_BUILTIN(__builtin_ia32_pmulhrsw128_mask, "V8sV8sV8sV8sUc", "", "avx512vl,avx512bw") +TARGET_BUILTIN(__builtin_ia32_pmulhrsw256_mask, "V16sV16sV16sV16sUs", "", "avx512vl,avx512bw") +TARGET_BUILTIN(__builtin_ia32_pmulhuw128_mask, "V8sV8sV8sV8sUc", "", "avx512vl,avx512bw") +TARGET_BUILTIN(__builtin_ia32_pmulhuw256_mask, "V16sV16sV16sV16sUs", "", "avx512vl,avx512bw") +TARGET_BUILTIN(__builtin_ia32_pmulhw128_mask, "V8sV8sV8sV8sUc", "", "avx512vl,avx512bw") +TARGET_BUILTIN(__builtin_ia32_pmulhw256_mask, "V16sV16sV16sV16sUs", "", "avx512vl,avx512bw") +TARGET_BUILTIN(__builtin_ia32_punpckhbw128_mask, "V16cV16cV16cV16cUs", "", "avx512vl,avx512bw") +TARGET_BUILTIN(__builtin_ia32_punpckhbw256_mask, "V32cV32cV32cV32cUi", "", "avx512vl,avx512bw") +TARGET_BUILTIN(__builtin_ia32_punpckhwd128_mask, "V8sV8sV8sV8sUc", "", "avx512vl,avx512bw") +TARGET_BUILTIN(__builtin_ia32_punpckhwd256_mask, "V16sV16sV16sV16sUs", "", "avx512vl,avx512bw") +TARGET_BUILTIN(__builtin_ia32_punpcklbw128_mask, "V16cV16cV16cV16cUs", "", "avx512vl,avx512bw") +TARGET_BUILTIN(__builtin_ia32_punpcklbw256_mask, "V32cV32cV32cV32cUi", "", "avx512vl,avx512bw") +TARGET_BUILTIN(__builtin_ia32_punpcklwd128_mask, "V8sV8sV8sV8sUc", "", "avx512vl,avx512bw") +TARGET_BUILTIN(__builtin_ia32_punpcklwd256_mask, "V16sV16sV16sV16sUs", "", "avx512vl,avx512bw") + #undef BUILTIN +#undef TARGET_BUILTIN From ccbefde95d2da751eae5660f55e978e42099d438 Mon Sep 17 00:00:00 2001 From: Naomi Musgrave Date: Mon, 3 Aug 2015 22:53:11 +0000 Subject: [PATCH 0019/1445] Dtor callback emitted when msan attribute not repressed for this function. Summary: In addition to checking compiler flags, the front-end also examines the attributes of the destructor definition to ensure that the SanitizeMemory attribute is attached. Reviewers: eugenis, kcc Subscribers: cfe-commits Differential Revision: http://reviews.llvm.org/D11727 refactored test into new file, revised how function attribute examined modified test to examine default dtor with and without attribute removed attribute check git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@243912 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/CodeGen/CGClass.cpp | 3 +- .../CodeGenCXX/sanitize-dtor-fn-attribute.cpp | 51 +++++++++++++++++++ 2 files changed, 53 insertions(+), 1 deletion(-) create mode 100644 test/CodeGenCXX/sanitize-dtor-fn-attribute.cpp diff --git a/lib/CodeGen/CGClass.cpp b/lib/CodeGen/CGClass.cpp index 0426f6992a2..740cd4ab4eb 100644 --- a/lib/CodeGen/CGClass.cpp +++ b/lib/CodeGen/CGClass.cpp @@ -1479,7 +1479,8 @@ void CodeGenFunction::EmitDestructorBody(FunctionArgList &Args) { ExitCXXTryStmt(*cast(Body), true); // Insert memory-poisoning instrumentation. - if (CGM.getCodeGenOpts().SanitizeMemoryUseAfterDtor) + if (CGM.getCodeGenOpts().SanitizeMemoryUseAfterDtor + && SanOpts.has(SanitizerKind::Memory)) EmitDtorSanitizerCallback(*this, Dtor); } diff --git a/test/CodeGenCXX/sanitize-dtor-fn-attribute.cpp b/test/CodeGenCXX/sanitize-dtor-fn-attribute.cpp new file mode 100644 index 00000000000..8a9e477cf1b --- /dev/null +++ b/test/CodeGenCXX/sanitize-dtor-fn-attribute.cpp @@ -0,0 +1,51 @@ +// Test -fsanitize-memory-use-after-dtor +// RUN: %clang_cc1 -fsanitize=memory -fsanitize-memory-use-after-dtor -std=c++11 -triple=x86_64-pc-linux -emit-llvm -o - %s | FileCheck %s +// RUN: %clang_cc1 -DATTRIBUTE -fsanitize=memory -fsanitize-memory-use-after-dtor -std=c++11 -triple=x86_64-pc-linux -emit-llvm -o - %s | FileCheck %s --check-prefix=CHECK-ATTR + +template class Vector { + public: + ~Vector() {} +}; + +struct No_San { + Vector v; + No_San() { } +#ifdef ATTRIBUTE + __attribute__((no_sanitize_memory)) ~No_San() = default; +#else + ~No_San() = default; +#endif +}; + +int main() { + No_San *ns = new No_San(); + ns->~No_San(); + return 0; +} + +// Repressing the sanitization attribute results in no msan +// instrumentation of the destructor +// CHECK: define {{.*}}No_SanD1Ev{{.*}} [[ATTRIBUTE:#[0-9]+]] +// CHECK: call void {{.*}}No_SanD2Ev +// CHECK: call void @__sanitizer_dtor_callback +// CHECK: ret void + +// CHECK-ATTR: define {{.*}}No_SanD1Ev{{.*}} [[ATTRIBUTE:#[0-9]+]] +// CHECK-ATTR: call void {{.*}}No_SanD2Ev +// CHECK-ATTR-NOT: call void @__sanitizer_dtor_callback +// CHECK-ATTR: ret void + + +// CHECK: define {{.*}}No_SanD2Ev{{.*}} [[ATTRIBUTE:#[0-9]+]] +// CHECK: call void {{.*}}Vector +// CHECK: call void @__sanitizer_dtor_callback +// CHECK: ret void + +// CHECK-ATTR: define {{.*}}No_SanD2Ev{{.*}} [[ATTRIBUTE:#[0-9]+]] +// CHECK-ATTR: call void {{.*}}Vector +// CHECK-ATTR-NOT: call void @__sanitizer_dtor_callback +// CHECK-ATTR: ret void + +// When attribute is repressed, the destructor does not emit any tail calls +// CHECK: attributes [[ATTRIBUTE]] = {{.*}} sanitize_memory +// CHECK-ATTR-NOT: attributes [[ATTRIBUTE]] = {{.*}} sanitize_memory From 43665b4d2e812d6b49a4236c1442afb1b097ca80 Mon Sep 17 00:00:00 2001 From: Argyrios Kyrtzidis Date: Tue, 4 Aug 2015 01:44:13 +0000 Subject: [PATCH 0020/1445] Remove unused header include. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@243938 91177308-0d34-0410-b5e6-96231b3b80d8 --- tools/libclang/CIndex.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/tools/libclang/CIndex.cpp b/tools/libclang/CIndex.cpp index 6a8a0c55c84..1241d97f24d 100644 --- a/tools/libclang/CIndex.cpp +++ b/tools/libclang/CIndex.cpp @@ -29,7 +29,6 @@ #include "clang/Basic/DiagnosticIDs.h" #include "clang/Basic/TargetInfo.h" #include "clang/Basic/Version.h" -#include "clang/CodeGen/ObjectFilePCHContainerOperations.h" #include "clang/Frontend/ASTUnit.h" #include "clang/Frontend/CompilerInstance.h" #include "clang/Frontend/FrontendDiagnostic.h" From 0128dc8835c73dac96aa100bd5664b426c95c0a6 Mon Sep 17 00:00:00 2001 From: Richard Smith Date: Tue, 4 Aug 2015 02:05:09 +0000 Subject: [PATCH 0021/1445] [modules] Make IndirectFieldDecl mergeable to avoid lookup ambiguity when the same anonymous union is defined across multiple modules. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@243940 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/clang/AST/Decl.h | 6 +++++- lib/Serialization/ASTReaderDecl.cpp | 9 +++++++++ test/Modules/Inputs/submodules-merge-defs/defs.h | 8 ++++++++ test/Modules/submodules-merge-defs.cpp | 1 + 4 files changed, 23 insertions(+), 1 deletion(-) diff --git a/include/clang/AST/Decl.h b/include/clang/AST/Decl.h index 76c05852f72..76fda1c0915 100644 --- a/include/clang/AST/Decl.h +++ b/include/clang/AST/Decl.h @@ -2499,7 +2499,8 @@ class EnumConstantDecl : public ValueDecl, public Mergeable { /// IndirectFieldDecl - An instance of this class is created to represent a /// field injected from an anonymous union/struct into the parent scope. /// IndirectFieldDecl are always implicit. -class IndirectFieldDecl : public ValueDecl { +class IndirectFieldDecl : public ValueDecl, + public Mergeable { void anchor() override; NamedDecl **Chaining; unsigned ChainingSize; @@ -2537,6 +2538,9 @@ class IndirectFieldDecl : public ValueDecl { return dyn_cast(*chain_begin()); } + IndirectFieldDecl *getCanonicalDecl() override { return getFirstDecl(); } + const IndirectFieldDecl *getCanonicalDecl() const { return getFirstDecl(); } + // Implement isa/cast/dyncast/etc. static bool classof(const Decl *D) { return classofKind(D->getKind()); } static bool classofKind(Kind K) { return K == IndirectField; } diff --git a/lib/Serialization/ASTReaderDecl.cpp b/lib/Serialization/ASTReaderDecl.cpp index 45a3e45bbcf..0242e7eed07 100644 --- a/lib/Serialization/ASTReaderDecl.cpp +++ b/lib/Serialization/ASTReaderDecl.cpp @@ -1178,6 +1178,8 @@ void ASTDeclReader::VisitIndirectFieldDecl(IndirectFieldDecl *FD) { for (unsigned I = 0; I != FD->ChainingSize; ++I) FD->Chaining[I] = ReadDeclAs(Record, Idx); + + mergeMergeable(FD); } ASTDeclReader::RedeclarableResult ASTDeclReader::VisitVarDeclImpl(VarDecl *VD) { @@ -2638,6 +2640,13 @@ static bool isSameEntity(NamedDecl *X, NamedDecl *Y) { return X->getASTContext().hasSameType(FDX->getType(), FDY->getType()); } + // Indirect fields with the same target field match. + if (auto *IFDX = dyn_cast(X)) { + auto *IFDY = cast(Y); + return IFDX->getAnonField()->getCanonicalDecl() == + IFDY->getAnonField()->getCanonicalDecl(); + } + // Enumerators with the same name match. if (isa(X)) // FIXME: Also check the value is odr-equivalent. diff --git a/test/Modules/Inputs/submodules-merge-defs/defs.h b/test/Modules/Inputs/submodules-merge-defs/defs.h index e4c86d80ba6..670c400ae3b 100644 --- a/test/Modules/Inputs/submodules-merge-defs/defs.h +++ b/test/Modules/Inputs/submodules-merge-defs/defs.h @@ -103,3 +103,11 @@ namespace RedeclDifferentDeclKind { typedef X X; using RedeclDifferentDeclKind::X; } + +namespace Anon { + struct X { + union { + int n; + }; + }; +} diff --git a/test/Modules/submodules-merge-defs.cpp b/test/Modules/submodules-merge-defs.cpp index 016b8a8f47a..62cbbd51098 100644 --- a/test/Modules/submodules-merge-defs.cpp +++ b/test/Modules/submodules-merge-defs.cpp @@ -104,6 +104,7 @@ template class K> struct J; J<> post_j2; FriendDefArg::Y friend_def_arg; FriendDefArg::D<> friend_def_arg_d; +int post_anon_x_n = Anon::X().n; MergeFunctionTemplateSpecializations::X::Q xiqc; From 25a74d705687776fb2bac34d518fd5ac4018ede3 Mon Sep 17 00:00:00 2001 From: Chandler Carruth Date: Tue, 4 Aug 2015 03:52:52 +0000 Subject: [PATCH 0022/1445] [UB] Fix two cases of UB in copy/pasted code from SmallVector. We should really stop copying and pasting code around. =/ Found by UBSan. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@243945 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/clang/AST/ASTVector.h | 17 +++++++++-------- include/clang/Analysis/Support/BumpVector.h | 17 +++++++++-------- 2 files changed, 18 insertions(+), 16 deletions(-) diff --git a/include/clang/AST/ASTVector.h b/include/clang/AST/ASTVector.h index 6ec054582e2..79453bf1087 100644 --- a/include/clang/AST/ASTVector.h +++ b/include/clang/AST/ASTVector.h @@ -384,14 +384,15 @@ void ASTVector::grow(const ASTContext &C, size_t MinSize) { T *NewElts = new (C, llvm::alignOf()) T[NewCapacity]; // Copy the elements over. - if (std::is_class::value) { - std::uninitialized_copy(Begin, End, NewElts); - // Destroy the original elements. - destroy_range(Begin, End); - } - else { - // Use memcpy for PODs (std::uninitialized_copy optimizes to memmove). - memcpy(NewElts, Begin, CurSize * sizeof(T)); + if (Begin != End) { + if (std::is_class::value) { + std::uninitialized_copy(Begin, End, NewElts); + // Destroy the original elements. + destroy_range(Begin, End); + } else { + // Use memcpy for PODs (std::uninitialized_copy optimizes to memmove). + memcpy(NewElts, Begin, CurSize * sizeof(T)); + } } // ASTContext never frees any memory. diff --git a/include/clang/Analysis/Support/BumpVector.h b/include/clang/Analysis/Support/BumpVector.h index 841adf64557..3abe32d79cc 100644 --- a/include/clang/Analysis/Support/BumpVector.h +++ b/include/clang/Analysis/Support/BumpVector.h @@ -223,14 +223,15 @@ void BumpVector::grow(BumpVectorContext &C, size_t MinSize) { T *NewElts = C.getAllocator().template Allocate(NewCapacity); // Copy the elements over. - if (std::is_class::value) { - std::uninitialized_copy(Begin, End, NewElts); - // Destroy the original elements. - destroy_range(Begin, End); - } - else { - // Use memcpy for PODs (std::uninitialized_copy optimizes to memmove). - memcpy(NewElts, Begin, CurSize * sizeof(T)); + if (Begin != End) { + if (std::is_class::value) { + std::uninitialized_copy(Begin, End, NewElts); + // Destroy the original elements. + destroy_range(Begin, End); + } else { + // Use memcpy for PODs (std::uninitialized_copy optimizes to memmove). + memcpy(NewElts, Begin, CurSize * sizeof(T)); + } } // For now, leak 'Begin'. We can add it back to a freelist in From 9bf4b5f6264515fde32523af77dbea5557b1ec7a Mon Sep 17 00:00:00 2001 From: Chandler Carruth Date: Tue, 4 Aug 2015 03:52:56 +0000 Subject: [PATCH 0023/1445] [UB] Fix the two ways that we would try to memcpy from a null buffer in the nested name specifier code. First, skip the entire thing when the input is empty. Next, handle the case where we started off with a null buffer and a zero capacity to skip copying and freeing. This was found with UBSan. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@243946 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/AST/NestedNameSpecifier.cpp | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/lib/AST/NestedNameSpecifier.cpp b/lib/AST/NestedNameSpecifier.cpp index 50a00502ca9..97425d001de 100644 --- a/lib/AST/NestedNameSpecifier.cpp +++ b/lib/AST/NestedNameSpecifier.cpp @@ -435,17 +435,19 @@ TypeLoc NestedNameSpecifierLoc::getTypeLoc() const { namespace { void Append(char *Start, char *End, char *&Buffer, unsigned &BufferSize, unsigned &BufferCapacity) { + if (Start == End) + return; + if (BufferSize + (End - Start) > BufferCapacity) { // Reallocate the buffer. - unsigned NewCapacity - = std::max((unsigned)(BufferCapacity? BufferCapacity * 2 - : sizeof(void*) * 2), - (unsigned)(BufferSize + (End - Start))); + unsigned NewCapacity = std::max( + (unsigned)(BufferCapacity ? BufferCapacity * 2 : sizeof(void *) * 2), + (unsigned)(BufferSize + (End - Start))); char *NewBuffer = static_cast(malloc(NewCapacity)); - memcpy(NewBuffer, Buffer, BufferSize); - - if (BufferCapacity) + if (BufferCapacity) { + memcpy(NewBuffer, Buffer, BufferSize); free(Buffer); + } Buffer = NewBuffer; BufferCapacity = NewCapacity; } From 9bf6d3458b05900ba9836e92b17081c7e0f01230 Mon Sep 17 00:00:00 2001 From: Chandler Carruth Date: Tue, 4 Aug 2015 03:52:58 +0000 Subject: [PATCH 0024/1445] [UB] When attaching empty strings to the AST, use an empty StringRef rather than forcing the bump pointer allocator to produce a viable pointer. This also fixes UB when we would try to memcpy from the null incoming StringRef. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@243947 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/AST/Stmt.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/lib/AST/Stmt.cpp b/lib/AST/Stmt.cpp index 7aab1371a28..181a3b4666b 100644 --- a/lib/AST/Stmt.cpp +++ b/lib/AST/Stmt.cpp @@ -724,6 +724,8 @@ MSAsmStmt::MSAsmStmt(const ASTContext &C, SourceLocation asmloc, } static StringRef copyIntoContext(const ASTContext &C, StringRef str) { + if (str.empty()) + return StringRef(); size_t size = str.size(); char *buffer = new (C) char[size]; memcpy(buffer, str.data(), size); From 35ae9a517d04331485e95059bd154c4a9932b482 Mon Sep 17 00:00:00 2001 From: Chandler Carruth Date: Tue, 4 Aug 2015 03:53:00 +0000 Subject: [PATCH 0025/1445] [UB] Another place where we were trying to put string data into a BumpPtrAllocator. This at least now handles the case where there is no concatentation without calling memcpy on a null pointer. It might be interesting to handle the case where everything is empty without round-tripping through the allocator, but it wasn't clear to me if the pointer returned is significant in any way, so I've left it in a conservatively more-correct state. Again, found with UBSan. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@243948 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/CodeGen/CGDebugInfo.h | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/lib/CodeGen/CGDebugInfo.h b/lib/CodeGen/CGDebugInfo.h index 72cdac3e93b..33204fb3622 100644 --- a/lib/CodeGen/CGDebugInfo.h +++ b/lib/CodeGen/CGDebugInfo.h @@ -485,8 +485,10 @@ class CGDebugInfo { /// are concatenated. StringRef internString(StringRef A, StringRef B = StringRef()) { char *Data = DebugInfoNames.Allocate(A.size() + B.size()); - std::memcpy(Data, A.data(), A.size()); - std::memcpy(Data + A.size(), B.data(), B.size()); + if (!A.empty()) + std::memcpy(Data, A.data(), A.size()); + if (!B.empty()) + std::memcpy(Data + A.size(), B.data(), B.size()); return StringRef(Data, A.size() + B.size()); } }; From 49ebe63bb6b31fd653ede4a5b8a8c74b082f433a Mon Sep 17 00:00:00 2001 From: Chandler Carruth Date: Tue, 4 Aug 2015 03:53:01 +0000 Subject: [PATCH 0026/1445] [UB] Guard two calls to memcpy in generated attribute code to handle null StringRef objects as inputs. Found by UBSan. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@243949 91177308-0d34-0410-b5e6-96231b3b80d8 --- utils/TableGen/ClangAttrEmitter.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/utils/TableGen/ClangAttrEmitter.cpp b/utils/TableGen/ClangAttrEmitter.cpp index d8ecd2b6500..14ffbe0115a 100644 --- a/utils/TableGen/ClangAttrEmitter.cpp +++ b/utils/TableGen/ClangAttrEmitter.cpp @@ -326,7 +326,8 @@ namespace { OS << " " << getLowerName() << "Length = S.size();\n"; OS << " this->" << getLowerName() << " = new (C, 1) char [" << getLowerName() << "Length];\n"; - OS << " std::memcpy(this->" << getLowerName() << ", S.data(), " + OS << " if (!S.empty())\n"; + OS << " std::memcpy(this->" << getLowerName() << ", S.data(), " << getLowerName() << "Length);\n"; OS << " }"; } @@ -337,7 +338,8 @@ namespace { OS << "A->get" << getUpperName() << "()"; } void writeCtorBody(raw_ostream &OS) const override { - OS << " std::memcpy(" << getLowerName() << ", " << getUpperName() + OS << " if (!" << getUpperName() << ".empty())\n"; + OS << " std::memcpy(" << getLowerName() << ", " << getUpperName() << ".data(), " << getLowerName() << "Length);"; } void writeCtorInitializers(raw_ostream &OS) const override { From 8fd59d7392e488f9deac24ddc3a59e2293b5897b Mon Sep 17 00:00:00 2001 From: Chandler Carruth Date: Tue, 4 Aug 2015 03:53:04 +0000 Subject: [PATCH 0027/1445] [UB] Avoid a really broken call to realloc that would later result in a bad call to memcpy. When we only have a buffer from one of the two reparse calls, we can just return that buffer rather than going through the realloc/memcpy dance. Found with UBsan. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@243950 91177308-0d34-0410-b5e6-96231b3b80d8 --- tools/c-index-test/c-index-test.c | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/tools/c-index-test/c-index-test.c b/tools/c-index-test/c-index-test.c index 980f341824f..eeeb832cd87 100644 --- a/tools/c-index-test/c-index-test.c +++ b/tools/c-index-test/c-index-test.c @@ -255,6 +255,17 @@ static int parse_remapped_files_with_try(int try_idx, if (ret) return ret; + if (num_unsaved_files_no_try_idx == 0) { + *unsaved_files = unsaved_files_try_idx; + *num_unsaved_files = num_unsaved_files_try_idx; + return 0; + } + if (num_unsaved_files_try_idx == 0) { + *unsaved_files = unsaved_files_no_try_idx; + *num_unsaved_files = num_unsaved_files_no_try_idx; + return 0; + } + *num_unsaved_files = num_unsaved_files_no_try_idx + num_unsaved_files_try_idx; *unsaved_files = (struct CXUnsavedFile *)realloc(unsaved_files_no_try_idx, From b3c1f1e83b8424558e198ac9b7c2156e3f51a693 Mon Sep 17 00:00:00 2001 From: Alexey Bataev Date: Tue, 4 Aug 2015 08:10:48 +0000 Subject: [PATCH 0028/1445] [OPENMP] Fix compiler crash during data-sharing attributes analysis. If a global variable is marked as private in OpenMP construct and then is used in of the private clauses of the same construct, it might cause compiler crash because of incorrect capturing. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@243964 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Sema/SemaOpenMP.cpp | 4 +++- test/OpenMP/simd_linear_messages.cpp | 3 +++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/lib/Sema/SemaOpenMP.cpp b/lib/Sema/SemaOpenMP.cpp index 422e0e4ca33..773cf00f408 100644 --- a/lib/Sema/SemaOpenMP.cpp +++ b/lib/Sema/SemaOpenMP.cpp @@ -657,7 +657,9 @@ void Sema::InitDataSharingAttributesStack() { bool Sema::IsOpenMPCapturedVar(VarDecl *VD) { assert(LangOpts.OpenMP && "OpenMP is not allowed"); VD = VD->getCanonicalDecl(); - if (DSAStack->getCurrentDirective() != OMPD_unknown) { + if (DSAStack->getCurrentDirective() != OMPD_unknown && + (!DSAStack->isClauseParsingMode() || + DSAStack->getParentDirective() != OMPD_unknown)) { if (DSAStack->isLoopControlVariable(VD) || (VD->hasLocalStorage() && isParallelOrTaskRegion(DSAStack->getCurrentDirective())) || diff --git a/test/OpenMP/simd_linear_messages.cpp b/test/OpenMP/simd_linear_messages.cpp index 78f905fd946..6fac26290b4 100644 --- a/test/OpenMP/simd_linear_messages.cpp +++ b/test/OpenMP/simd_linear_messages.cpp @@ -156,6 +156,7 @@ namespace C { using A::x; } +int f; int main(int argc, char **argv) { double darr[100]; // expected-note@+1 {{in instantiation of function template specialization 'test_template<-4, double, int>' requested here}} @@ -167,6 +168,8 @@ int main(int argc, char **argv) { S5 g(5); // expected-note {{'g' defined here}} int i; int &j = i; // expected-note {{'j' defined here}} + #pragma omp simd linear(f) linear(f) // expected-error {{linear variable cannot be linear}} expected-note {{defined as linear}} + for (int k = 0; k < argc; ++k) ++k; #pragma omp simd linear // expected-error {{expected '(' after 'linear'}} for (int k = 0; k < argc; ++k) ++k; #pragma omp simd linear ( // expected-error {{expected expression}} expected-error {{expected ')'}} expected-note {{to match this '('}} From 93d1180ecc880f59f1d44ed4fd56b48d36d2e516 Mon Sep 17 00:00:00 2001 From: Benjamin Kramer Date: Tue, 4 Aug 2015 10:22:38 +0000 Subject: [PATCH 0029/1445] [AST] Use StringRef's convenient copy method. No functionality change. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@243966 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/AST/Stmt.cpp | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/lib/AST/Stmt.cpp b/lib/AST/Stmt.cpp index 181a3b4666b..771aeefda74 100644 --- a/lib/AST/Stmt.cpp +++ b/lib/AST/Stmt.cpp @@ -724,12 +724,7 @@ MSAsmStmt::MSAsmStmt(const ASTContext &C, SourceLocation asmloc, } static StringRef copyIntoContext(const ASTContext &C, StringRef str) { - if (str.empty()) - return StringRef(); - size_t size = str.size(); - char *buffer = new (C) char[size]; - memcpy(buffer, str.data(), size); - return StringRef(buffer, size); + return str.copy(C.getAllocator()); } void MSAsmStmt::initialize(const ASTContext &C, StringRef asmstr, From 12e7db288637915b205aa7216ad5dc4d5224c638 Mon Sep 17 00:00:00 2001 From: Benjamin Kramer Date: Tue, 4 Aug 2015 11:18:09 +0000 Subject: [PATCH 0030/1445] [Edit] Use StringRef's copy method. No functional change intended. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@243968 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/clang/Edit/Commit.h | 6 ------ include/clang/Edit/EditedSource.h | 6 +----- lib/Edit/Commit.cpp | 2 +- 3 files changed, 2 insertions(+), 12 deletions(-) diff --git a/include/clang/Edit/Commit.h b/include/clang/Edit/Commit.h index 5cc5b9c6ff8..ac4bb471fe1 100644 --- a/include/clang/Edit/Commit.h +++ b/include/clang/Edit/Commit.h @@ -134,12 +134,6 @@ class Commit { SourceLocation *MacroBegin = nullptr) const; bool isAtEndOfMacroExpansion(SourceLocation loc, SourceLocation *MacroEnd = nullptr) const; - - StringRef copyString(StringRef str) { - char *buf = StrAlloc.Allocate(str.size()); - std::memcpy(buf, str.data(), str.size()); - return StringRef(buf, str.size()); - } }; } diff --git a/include/clang/Edit/EditedSource.h b/include/clang/Edit/EditedSource.h index 150a5b41b5a..8bc27e73bee 100644 --- a/include/clang/Edit/EditedSource.h +++ b/include/clang/Edit/EditedSource.h @@ -62,11 +62,7 @@ class EditedSource { void applyRewrites(EditsReceiver &receiver); void clearRewrites(); - StringRef copyString(StringRef str) { - char *buf = StrAlloc.Allocate(str.size()); - std::memcpy(buf, str.data(), str.size()); - return StringRef(buf, str.size()); - } + StringRef copyString(StringRef str) { return str.copy(StrAlloc); } StringRef copyString(const Twine &twine); private: diff --git a/lib/Edit/Commit.cpp b/lib/Edit/Commit.cpp index 9c08cc28ac9..cb7a784a41a 100644 --- a/lib/Edit/Commit.cpp +++ b/lib/Edit/Commit.cpp @@ -183,7 +183,7 @@ void Commit::addInsert(SourceLocation OrigLoc, FileOffset Offs, StringRef text, data.Kind = Act_Insert; data.OrigLoc = OrigLoc; data.Offset = Offs; - data.Text = copyString(text); + data.Text = text.copy(StrAlloc); data.BeforePrev = beforePreviousInsertions; CachedEdits.push_back(data); } From e77f872c9e6df55132bcdde21289fefdb87452e9 Mon Sep 17 00:00:00 2001 From: Alexey Bataev Date: Tue, 4 Aug 2015 11:18:19 +0000 Subject: [PATCH 0031/1445] [OPENMP 4.1] Support for 'linear' clause in loop directives. OpenMP 4.1 allows 'linear' clause in loop directives. Patch adds support for it. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@243969 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/clang/Basic/OpenMPKinds.def | 2 + lib/Sema/SemaOpenMP.cpp | 20 ++ test/OpenMP/for_ast_print.cpp | 52 ++-- test/OpenMP/for_firstprivate_messages.cpp | 4 - test/OpenMP/for_lastprivate_messages.cpp | 4 - test/OpenMP/for_linear_codegen.cpp | 263 +++++++++++++++++ test/OpenMP/for_linear_messages.cpp | 214 ++++++++++++++ test/OpenMP/for_loop_messages.cpp | 1 - test/OpenMP/for_misc_messages.c | 3 +- test/OpenMP/parallel_for_ast_print.cpp | 58 ++-- .../parallel_for_firstprivate_messages.cpp | 3 - .../parallel_for_lastprivate_messages.cpp | 3 - test/OpenMP/parallel_for_linear_codegen.cpp | 261 +++++++++++++++++ test/OpenMP/parallel_for_linear_messages.cpp | 269 ++++++++++++++++++ test/OpenMP/parallel_for_loop_messages.cpp | 1 - test/OpenMP/parallel_for_misc_messages.c | 5 - 16 files changed, 1085 insertions(+), 78 deletions(-) create mode 100644 test/OpenMP/for_linear_codegen.cpp create mode 100644 test/OpenMP/for_linear_messages.cpp create mode 100644 test/OpenMP/parallel_for_linear_codegen.cpp create mode 100644 test/OpenMP/parallel_for_linear_messages.cpp diff --git a/include/clang/Basic/OpenMPKinds.def b/include/clang/Basic/OpenMPKinds.def index e555833adaf..302a30d61a6 100644 --- a/include/clang/Basic/OpenMPKinds.def +++ b/include/clang/Basic/OpenMPKinds.def @@ -163,6 +163,7 @@ OPENMP_FOR_CLAUSE(collapse) OPENMP_FOR_CLAUSE(schedule) OPENMP_FOR_CLAUSE(ordered) OPENMP_FOR_CLAUSE(nowait) +OPENMP_FOR_CLAUSE(linear) // Clauses allowed for directive 'omp for simd'. OPENMP_FOR_SIMD_CLAUSE(private) @@ -224,6 +225,7 @@ OPENMP_PARALLEL_FOR_CLAUSE(lastprivate) OPENMP_PARALLEL_FOR_CLAUSE(collapse) OPENMP_PARALLEL_FOR_CLAUSE(schedule) OPENMP_PARALLEL_FOR_CLAUSE(ordered) +OPENMP_PARALLEL_FOR_CLAUSE(linear) // Clauses allowed for OpenMP directive 'parallel for simd'. OPENMP_PARALLEL_FOR_SIMD_CLAUSE(if) diff --git a/lib/Sema/SemaOpenMP.cpp b/lib/Sema/SemaOpenMP.cpp index 773cf00f408..ac2440cacd1 100644 --- a/lib/Sema/SemaOpenMP.cpp +++ b/lib/Sema/SemaOpenMP.cpp @@ -3384,6 +3384,16 @@ StmtResult Sema::ActOnOpenMPForDirective( assert((CurContext->isDependentContext() || B.builtAll()) && "omp for loop exprs were not built"); + if (!CurContext->isDependentContext()) { + // Finalize the clauses that need pre-built expressions for CodeGen. + for (auto C : Clauses) { + if (auto LC = dyn_cast(C)) + if (FinishOpenMPLinearClause(*LC, cast(B.IterationVarRef), + B.NumIterations, *this, CurScope)) + return StmtError(); + } + } + getCurFunction()->setHasBranchProtectedScope(); return OMPForDirective::Create(Context, StartLoc, EndLoc, NestedLoopCount, Clauses, AStmt, B); @@ -3540,6 +3550,16 @@ StmtResult Sema::ActOnOpenMPParallelForDirective( assert((CurContext->isDependentContext() || B.builtAll()) && "omp parallel for loop exprs were not built"); + if (!CurContext->isDependentContext()) { + // Finalize the clauses that need pre-built expressions for CodeGen. + for (auto C : Clauses) { + if (auto LC = dyn_cast(C)) + if (FinishOpenMPLinearClause(*LC, cast(B.IterationVarRef), + B.NumIterations, *this, CurScope)) + return StmtError(); + } + } + getCurFunction()->setHasBranchProtectedScope(); return OMPParallelForDirective::Create(Context, StartLoc, EndLoc, NestedLoopCount, Clauses, AStmt, B); diff --git a/test/OpenMP/for_ast_print.cpp b/test/OpenMP/for_ast_print.cpp index d87cece1762..1af391d2cf6 100644 --- a/test/OpenMP/for_ast_print.cpp +++ b/test/OpenMP/for_ast_print.cpp @@ -13,37 +13,37 @@ T tmain(T argc) { T b = argc, c, d, e, f, g; static T a; // CHECK: static T a; -#pragma omp for schedule(dynamic) - // CHECK-NEXT: #pragma omp for schedule(dynamic) +#pragma omp for schedule(dynamic) linear(a) + // CHECK-NEXT: #pragma omp for schedule(dynamic) linear(a) for (int i = 0; i < 2; ++i) a = 2; // CHECK-NEXT: for (int i = 0; i < 2; ++i) // CHECK-NEXT: a = 2; #pragma omp parallel -#pragma omp for private(argc, b), firstprivate(c, d), lastprivate(d, f) collapse(N) schedule(static, N) ordered(N) nowait - for (int i = 0; i < 10; ++i) - for (int j = 0; j < 10; ++j) - for (int j = 0; j < 10; ++j) - for (int j = 0; j < 10; ++j) - for (int j = 0; j < 10; ++j) - for (int i = 0; i < 10; ++i) - for (int j = 0; j < 10; ++j) - for (int j = 0; j < 10; ++j) - for (int j = 0; j < 10; ++j) - for (int j = 0; j < 10; ++j) +#pragma omp for private(argc, b), firstprivate(c, d), lastprivate(d, f) collapse(N) schedule(static, N) ordered(N) nowait linear(a : N) + for (int i = 0; i < 2; ++i) + for (int j = 0; j < 2; ++j) + for (int j = 0; j < 2; ++j) + for (int j = 0; j < 2; ++j) + for (int j = 0; j < 2; ++j) + for (int i = 0; i < 2; ++i) + for (int j = 0; j < 2; ++j) + for (int j = 0; j < 2; ++j) + for (int j = 0; j < 2; ++j) + for (int j = 0; j < 2; ++j) foo(); // CHECK-NEXT: #pragma omp parallel - // CHECK-NEXT: #pragma omp for private(argc,b) firstprivate(c,d) lastprivate(d,f) collapse(N) schedule(static, N) ordered(N) nowait - // CHECK-NEXT: for (int i = 0; i < 10; ++i) - // CHECK-NEXT: for (int j = 0; j < 10; ++j) - // CHECK-NEXT: for (int j = 0; j < 10; ++j) - // CHECK-NEXT: for (int j = 0; j < 10; ++j) - // CHECK-NEXT: for (int j = 0; j < 10; ++j) - // CHECK-NEXT: for (int i = 0; i < 10; ++i) - // CHECK-NEXT: for (int j = 0; j < 10; ++j) - // CHECK-NEXT: for (int j = 0; j < 10; ++j) - // CHECK-NEXT: for (int j = 0; j < 10; ++j) - // CHECK-NEXT: for (int j = 0; j < 10; ++j) + // CHECK-NEXT: #pragma omp for private(argc,b) firstprivate(c,d) lastprivate(d,f) collapse(N) schedule(static, N) ordered(N) nowait linear(a: N) + // CHECK-NEXT: for (int i = 0; i < 2; ++i) + // CHECK-NEXT: for (int j = 0; j < 2; ++j) + // CHECK-NEXT: for (int j = 0; j < 2; ++j) + // CHECK-NEXT: for (int j = 0; j < 2; ++j) + // CHECK-NEXT: for (int j = 0; j < 2; ++j) + // CHECK-NEXT: for (int i = 0; i < 2; ++i) + // CHECK-NEXT: for (int j = 0; j < 2; ++j) + // CHECK-NEXT: for (int j = 0; j < 2; ++j) + // CHECK-NEXT: for (int j = 0; j < 2; ++j) + // CHECK-NEXT: for (int j = 0; j < 2; ++j) // CHECK-NEXT: foo(); return T(); } @@ -59,12 +59,12 @@ int main(int argc, char **argv) { // CHECK-NEXT: for (int i = 0; i < 2; ++i) // CHECK-NEXT: a = 2; #pragma omp parallel -#pragma omp for private(argc, b), firstprivate(argv, c), lastprivate(d, f) collapse(2) schedule(auto) ordered nowait +#pragma omp for private(argc, b), firstprivate(argv, c), lastprivate(d, f) collapse(2) schedule(auto) ordered nowait linear(g:-1) for (int i = 0; i < 10; ++i) for (int j = 0; j < 10; ++j) foo(); // CHECK-NEXT: #pragma omp parallel - // CHECK-NEXT: #pragma omp for private(argc,b) firstprivate(argv,c) lastprivate(d,f) collapse(2) schedule(auto) ordered nowait + // CHECK-NEXT: #pragma omp for private(argc,b) firstprivate(argv,c) lastprivate(d,f) collapse(2) schedule(auto) ordered nowait linear(g: -1) // CHECK-NEXT: for (int i = 0; i < 10; ++i) // CHECK-NEXT: for (int j = 0; j < 10; ++j) // CHECK-NEXT: foo(); diff --git a/test/OpenMP/for_firstprivate_messages.cpp b/test/OpenMP/for_firstprivate_messages.cpp index 2ec81104e77..8caed3b722f 100644 --- a/test/OpenMP/for_firstprivate_messages.cpp +++ b/test/OpenMP/for_firstprivate_messages.cpp @@ -114,10 +114,6 @@ int foomain(int argc, char **argv) { #pragma omp for firstprivate(h) // expected-error {{threadprivate or thread local variable cannot be firstprivate}} for (int k = 0; k < argc; ++k) ++k; -#pragma omp parallel -#pragma omp for linear(i) // expected-error {{unexpected OpenMP clause 'linear' in directive '#pragma omp for'}} - for (int k = 0; k < argc; ++k) - ++k; #pragma omp parallel { int v = 0; diff --git a/test/OpenMP/for_lastprivate_messages.cpp b/test/OpenMP/for_lastprivate_messages.cpp index 2fa14b63bd1..63ee82c920c 100644 --- a/test/OpenMP/for_lastprivate_messages.cpp +++ b/test/OpenMP/for_lastprivate_messages.cpp @@ -116,10 +116,6 @@ int foomain(int argc, char **argv) { #pragma omp for lastprivate(h) // expected-error {{threadprivate or thread local variable cannot be lastprivate}} for (int k = 0; k < argc; ++k) ++k; -#pragma omp parallel -#pragma omp for linear(i) // expected-error {{unexpected OpenMP clause 'linear' in directive '#pragma omp for'}} - for (int k = 0; k < argc; ++k) - ++k; #pragma omp parallel { int v = 0; diff --git a/test/OpenMP/for_linear_codegen.cpp b/test/OpenMP/for_linear_codegen.cpp new file mode 100644 index 00000000000..0bd573d5dc1 --- /dev/null +++ b/test/OpenMP/for_linear_codegen.cpp @@ -0,0 +1,263 @@ +// RUN: %clang_cc1 -verify -fopenmp -x c++ -triple x86_64-apple-darwin10 -emit-llvm %s -o - | FileCheck %s +// RUN: %clang_cc1 -fopenmp -x c++ -std=c++11 -triple x86_64-apple-darwin10 -emit-pch -o %t %s +// RUN: %clang_cc1 -fopenmp -x c++ -triple x86_64-apple-darwin10 -std=c++11 -include-pch %t -verify %s -emit-llvm -o - | FileCheck %s +// RUN: %clang_cc1 -verify -fopenmp -x c++ -std=c++11 -DLAMBDA -triple x86_64-apple-darwin10 -emit-llvm %s -o - | FileCheck -check-prefix=LAMBDA %s +// RUN: %clang_cc1 -verify -fopenmp -x c++ -fblocks -DBLOCKS -triple x86_64-apple-darwin10 -emit-llvm %s -o - | FileCheck -check-prefix=BLOCKS %s +// expected-no-diagnostics +// REQUIRES: x86-registered-target +#ifndef HEADER +#define HEADER + +template +struct S { + T f; + S(T a) : f(a) {} + S() : f() {} + S &operator=(const S &); + operator T() { return T(); } + ~S() {} +}; + +volatile int g = 1212; +float f; +char cnt; + +// CHECK: [[S_FLOAT_TY:%.+]] = type { float } +// CHECK: [[CAP_MAIN_TY:%.+]] = type { float**, i64* } +// CHECK: [[S_INT_TY:%.+]] = type { i32 } +// CHECK: [[CAP_TMAIN_TY:%.+]] = type { i32**, i32* } +// CHECK-DAG: [[IMPLICIT_BARRIER_LOC:@.+]] = private unnamed_addr constant %{{.+}} { i32 0, i32 66, i32 0, i32 0, i8* +// CHECK-DAG: [[F:@.+]] = global float 0.0 +// CHECK-DAG: [[CNT:@.+]] = global i8 0 +template +T tmain() { + S test; + T *pvar = &test.f; + T lvar = T(); +#pragma omp parallel +#pragma omp for linear(pvar, lvar) + for (int i = 0; i < 2; ++i) { + ++pvar, ++lvar; + } + return T(); +} + +int main() { +#ifdef LAMBDA + // LAMBDA: [[G:@.+]] = global i{{[0-9]+}} 1212, + // LAMBDA-LABEL: @main + // LAMBDA: call void [[OUTER_LAMBDA:@.+]]( + [&]() { + // LAMBDA: define{{.*}} internal{{.*}} void [[OUTER_LAMBDA]]( + // LAMBDA: call void {{.+}} @__kmpc_fork_call({{.+}}, i32 1, {{.+}}* [[OMP_REGION:@.+]] to {{.+}}, i8* %{{.+}}) +#pragma omp parallel +#pragma omp for linear(g:5) + for (int i = 0; i < 2; ++i) { + // LAMBDA: define{{.*}} internal{{.*}} void [[OMP_REGION]](i32* %{{.+}}, i32* %{{.+}}, %{{.+}}* [[ARG:%.+]]) + // LAMBDA: alloca i{{[0-9]+}}, + // LAMBDA: [[G_START_ADDR:%.+]] = alloca i{{[0-9]+}}, + // LAMBDA: alloca i{{[0-9]+}}, + // LAMBDA: alloca i{{[0-9]+}}, + // LAMBDA: alloca i{{[0-9]+}}, + // LAMBDA: alloca i{{[0-9]+}}, + // LAMBDA: alloca i{{[0-9]+}}, + // LAMBDA: [[G_PRIVATE_ADDR:%.+]] = alloca i{{[0-9]+}}, + // LAMBDA: store %{{.+}}* [[ARG]], %{{.+}}** [[ARG_REF:%.+]], + // LAMBDA: [[GTID_REF:%.+]] = load i{{[0-9]+}}*, i{{[0-9]+}}** %{{.+}} + // LAMBDA: [[GTID:%.+]] = load i{{[0-9]+}}, i{{[0-9]+}}* [[GTID_REF]] + // LAMBDA: call {{.+}} @__kmpc_for_static_init_4(%{{.+}}* @{{.+}}, i32 [[GTID]], i32 34, i32* [[IS_LAST_ADDR:%.+]], i32* %{{.+}}, i32* %{{.+}}, i32* %{{.+}}, i32 1, i32 1) + // LAMBDA: [[VAL:%.+]] = load i32, i32* [[G_START_ADDR]] + // LAMBDA: [[CNT:%.+]] = load i32, i32* + // LAMBDA: [[MUL:%.+]] = mul nsw i32 [[CNT]], 5 + // LAMBDA: [[ADD:%.+]] = add nsw i32 [[VAL]], [[MUL]] + // LAMBDA: store i32 [[ADD]], i32* [[G_PRIVATE_ADDR]], + // LAMBDA: [[VAL:%.+]] = load i32, i32* [[G_PRIVATE_ADDR]], + // LAMBDA: [[ADD:%.+]] = add nsw i32 [[VAL]], 5 + // LAMBDA: store i32 [[ADD]], i32* [[G_PRIVATE_ADDR]], + // LAMBDA: [[G_PRIVATE_ADDR_REF:%.+]] = getelementptr inbounds %{{.+}}, %{{.+}}* [[ARG:%.+]], i{{[0-9]+}} 0, i{{[0-9]+}} 0 + // LAMBDA: store i{{[0-9]+}}* [[G_PRIVATE_ADDR]], i{{[0-9]+}}** [[G_PRIVATE_ADDR_REF]] + // LAMBDA: call void [[INNER_LAMBDA:@.+]](%{{.+}}* [[ARG]]) + // LAMBDA: call void @__kmpc_for_static_fini(%{{.+}}* @{{.+}}, i32 [[GTID]]) + g += 5; + // LAMBDA: call i32 @__kmpc_cancel_barrier(%{{.+}}* @{{.+}}, i{{[0-9]+}} [[GTID]]) + [&]() { + // LAMBDA: define {{.+}} void [[INNER_LAMBDA]](%{{.+}}* [[ARG_PTR:%.+]]) + // LAMBDA: store %{{.+}}* [[ARG_PTR]], %{{.+}}** [[ARG_PTR_REF:%.+]], + g = 2; + // LAMBDA: [[ARG_PTR:%.+]] = load %{{.+}}*, %{{.+}}** [[ARG_PTR_REF]] + // LAMBDA: [[G_PTR_REF:%.+]] = getelementptr inbounds %{{.+}}, %{{.+}}* [[ARG_PTR]], i{{[0-9]+}} 0, i{{[0-9]+}} 0 + // LAMBDA: [[G_REF:%.+]] = load i{{[0-9]+}}*, i{{[0-9]+}}** [[G_PTR_REF]] + // LAMBDA: store i{{[0-9]+}} 2, i{{[0-9]+}}* [[G_REF]] + }(); + } + }(); + return 0; +#elif defined(BLOCKS) + // BLOCKS: [[G:@.+]] = global i{{[0-9]+}} 1212, + // BLOCKS-LABEL: @main + // BLOCKS: call void {{%.+}}(i8 + ^{ + // BLOCKS: define{{.*}} internal{{.*}} void {{.+}}(i8* + // BLOCKS: call void {{.+}} @__kmpc_fork_call({{.+}}, i32 1, {{.+}}* [[OMP_REGION:@.+]] to {{.+}}, i8* %{{.+}}) +#pragma omp parallel +#pragma omp for linear(g:5) + for (int i = 0; i < 2; ++i) { + // BLOCKS: define{{.*}} internal{{.*}} void [[OMP_REGION]](i32* %{{.+}}, i32* %{{.+}}, %{{.+}}* [[ARG:%.+]]) + // BLOCKS: alloca i{{[0-9]+}}, + // BLOCKS: [[G_START_ADDR:%.+]] = alloca i{{[0-9]+}}, + // BLOCKS: alloca i{{[0-9]+}}, + // BLOCKS: alloca i{{[0-9]+}}, + // BLOCKS: alloca i{{[0-9]+}}, + // BLOCKS: alloca i{{[0-9]+}}, + // BLOCKS: alloca i{{[0-9]+}}, + // BLOCKS: [[G_PRIVATE_ADDR:%.+]] = alloca i{{[0-9]+}}, + // BLOCKS: store %{{.+}}* [[ARG]], %{{.+}}** [[ARG_REF:%.+]], + // BLOCKS: [[GTID_REF:%.+]] = load i{{[0-9]+}}*, i{{[0-9]+}}** %{{.+}} + // BLOCKS: [[GTID:%.+]] = load i{{[0-9]+}}, i{{[0-9]+}}* [[GTID_REF]] + // BLOCKS: call {{.+}} @__kmpc_for_static_init_4(%{{.+}}* @{{.+}}, i32 [[GTID]], i32 34, i32* [[IS_LAST_ADDR:%.+]], i32* %{{.+}}, i32* %{{.+}}, i32* %{{.+}}, i32 1, i32 1) + // BLOCKS: [[VAL:%.+]] = load i32, i32* [[G_START_ADDR]] + // BLOCKS: [[CNT:%.+]] = load i32, i32* + // BLOCKS: [[MUL:%.+]] = mul nsw i32 [[CNT]], 5 + // BLOCKS: [[ADD:%.+]] = add nsw i32 [[VAL]], [[MUL]] + // BLOCKS: store i32 [[ADD]], i32* [[G_PRIVATE_ADDR]], + // BLOCKS: [[VAL:%.+]] = load i32, i32* [[G_PRIVATE_ADDR]], + // BLOCKS: [[ADD:%.+]] = add nsw i32 [[VAL]], 5 + // BLOCKS: store i32 [[ADD]], i32* [[G_PRIVATE_ADDR]], + // BLOCKS-NOT: [[G]]{{[[^:word:]]}} + // BLOCKS: i{{[0-9]+}}* [[G_PRIVATE_ADDR]] + // BLOCKS-NOT: [[G]]{{[[^:word:]]}} + // BLOCKS: call void {{%.+}}(i8 + // BLOCKS: call void @__kmpc_for_static_fini(%{{.+}}* @{{.+}}, i32 [[GTID]]) + g += 5; + // BLOCKS: call i32 @__kmpc_cancel_barrier(%{{.+}}* @{{.+}}, i{{[0-9]+}} [[GTID]]) + g = 1; + ^{ + // BLOCKS: define {{.+}} void {{@.+}}(i8* + g = 2; + // BLOCKS-NOT: [[G]]{{[[^:word:]]}} + // BLOCKS: store i{{[0-9]+}} 2, i{{[0-9]+}}* + // BLOCKS-NOT: [[G]]{{[[^:word:]]}} + // BLOCKS: ret + }(); + } + }(); + return 0; +#else + S test; + float *pvar = &test.f; + long long lvar = 0; +#pragma omp parallel +#pragma omp for linear(pvar, lvar : 3) + for (int i = 0; i < 2; ++i) { + pvar += 3, lvar += 3; + } + return tmain(); +#endif +} + +// CHECK: define i{{[0-9]+}} @main() +// CHECK: [[TEST:%.+]] = alloca [[S_FLOAT_TY]], +// CHECK: call {{.*}} [[S_FLOAT_TY_DEF_CONSTR:@.+]]([[S_FLOAT_TY]]* [[TEST]]) +// CHECK: %{{.+}} = bitcast [[CAP_MAIN_TY]]* +// CHECK: call void (%{{.+}}*, i{{[0-9]+}}, void (i{{[0-9]+}}*, i{{[0-9]+}}*, ...)*, ...) @__kmpc_fork_call(%{{.+}}* @{{.+}}, i{{[0-9]+}} 1, void (i{{[0-9]+}}*, i{{[0-9]+}}*, ...)* bitcast (void (i{{[0-9]+}}*, i{{[0-9]+}}*, [[CAP_MAIN_TY]]*)* [[MAIN_MICROTASK:@.+]] to void +// CHECK: = call {{.+}} [[TMAIN_INT:@.+]]() +// CHECK: call void [[S_FLOAT_TY_DESTR:@.+]]([[S_FLOAT_TY]]* +// CHECK: ret + +// CHECK: define internal void [[MAIN_MICROTASK]](i{{[0-9]+}}* [[GTID_ADDR:%.+]], i{{[0-9]+}}* %{{.+}}, [[CAP_MAIN_TY]]* %{{.+}}) +// CHECK: alloca i{{[0-9]+}}, +// CHECK: [[PVAR_START:%.+]] = alloca float*, +// CHECK: [[LVAR_START:%.+]] = alloca i64, +// CHECK: alloca i{{[0-9]+}}, +// CHECK: alloca i{{[0-9]+}}, +// CHECK: alloca i{{[0-9]+}}, +// CHECK: alloca i{{[0-9]+}}, +// CHECK: alloca i{{[0-9]+}}, +// CHECK: [[PVAR_PRIV:%.+]] = alloca float*, +// CHECK: [[LVAR_PRIV:%.+]] = alloca i64, +// CHECK: store i{{[0-9]+}}* [[GTID_ADDR]], i{{[0-9]+}}** [[GTID_ADDR_REF:%.+]] + +// Check for default initialization. +// CHECK: [[PVAR_PTR_REF:%.+]] = getelementptr inbounds [[CAP_MAIN_TY]], [[CAP_MAIN_TY]]* %{{.+}}, i{{[0-9]+}} 0, i{{[0-9]+}} 0 +// CHECK: [[PVAR_REF:%.+]] = load float**, float*** [[PVAR_PTR_REF]], +// CHECK: [[PVAR_VAL:%.+]] = load float*, float** [[PVAR_REF]], +// CHECK: store float* [[PVAR_VAL]], float** [[PVAR_START]], +// CHECK: [[LVAR_PTR_REF:%.+]] = getelementptr inbounds [[CAP_MAIN_TY]], [[CAP_MAIN_TY]]* %{{.+}}, i{{[0-9]+}} 0, i{{[0-9]+}} 1 +// CHECK: [[LVAR_REF:%.+]] = load i64*, i64** [[LVAR_PTR_REF]], +// CHECK: [[LVAR_VAL:%.+]] = load i64, i64* [[LVAR_REF]], +// CHECK: store i64 [[LVAR_VAL]], i64* [[LVAR_START]], +// CHECK: call {{.+}} @__kmpc_for_static_init_4(%{{.+}}* @{{.+}}, i32 [[GTID:%.+]], i32 34, i32* [[IS_LAST_ADDR:%.+]], i32* %{{.+}}, i32* %{{.+}}, i32* %{{.+}}, i32 1, i32 1) +// CHECK: [[PVAR_VAL:%.+]] = load float*, float** [[PVAR_START]], +// CHECK: [[CNT:%.+]] = load i32, i32* +// CHECK: [[MUL:%.+]] = mul nsw i32 [[CNT]], 3 +// CHECK: [[IDX:%.+]] = sext i32 [[MUL]] to i64 +// CHECK: [[PTR:%.+]] = getelementptr inbounds float, float* [[PVAR_VAL]], i64 [[IDX]] +// CHECK: store float* [[PTR]], float** [[PVAR_PRIV]], +// CHECK: [[LVAR_VAL:%.+]] = load i64, i64* [[LVAR_START]], +// CHECK: [[CNT:%.+]] = load i32, i32* +// CHECK: [[MUL:%.+]] = mul nsw i32 [[CNT]], 3 +// CHECK: [[CONV:%.+]] = sext i32 [[MUL]] to i64 +// CHECK: [[VAL:%.+]] = add nsw i64 [[LVAR_VAL]], [[CONV]] +// CHECK: store i64 [[VAL]], i64* [[LVAR_PRIV]], +// CHECK: [[PVAR_VAL:%.+]] = load float*, float** [[PVAR_PRIV]] +// CHECK: [[PTR:%.+]] = getelementptr inbounds float, float* [[PVAR_VAL]], i64 3 +// CHECK: store float* [[PTR]], float** [[PVAR_PRIV]], +// CHECK: [[LVAR_VAL:%.+]] = load i64, i64* [[LVAR_PRIV]], +// CHECK: [[ADD:%.+]] = add nsw i64 [[LVAR_VAL]], 3 +// CHECK: store i64 [[ADD]], i64* [[LVAR_PRIV]], +// CHECK: call void @__kmpc_for_static_fini(%{{.+}}* @{{.+}}, i32 %{{.+}}) +// CHECK: call i32 @__kmpc_cancel_barrier(%{{.+}}* [[IMPLICIT_BARRIER_LOC]], i{{[0-9]+}} [[GTID]]) +// CHECK: ret void + +// CHECK: define {{.*}} i{{[0-9]+}} [[TMAIN_INT]]() +// CHECK: [[TEST:%.+]] = alloca [[S_INT_TY]], +// CHECK: call {{.*}} [[S_INT_TY_DEF_CONSTR:@.+]]([[S_INT_TY]]* [[TEST]]) +// CHECK: call void (%{{.+}}*, i{{[0-9]+}}, void (i{{[0-9]+}}*, i{{[0-9]+}}*, ...)*, ...) @__kmpc_fork_call(%{{.+}}* @{{.+}}, i{{[0-9]+}} 1, void (i{{[0-9]+}}*, i{{[0-9]+}}*, ...)* bitcast (void (i{{[0-9]+}}*, i{{[0-9]+}}*, [[CAP_TMAIN_TY]]*)* [[TMAIN_MICROTASK:@.+]] to void +// CHECK: call void [[S_INT_TY_DESTR:@.+]]([[S_INT_TY]]* +// CHECK: ret +// +// CHECK: define internal void [[TMAIN_MICROTASK]](i{{[0-9]+}}* [[GTID_ADDR:%.+]], i{{[0-9]+}}* %{{.+}}, [[CAP_TMAIN_TY]]* %{{.+}}) +// CHECK: alloca i{{[0-9]+}}, +// CHECK: [[PVAR_START:%.+]] = alloca i32*, +// CHECK: [[LVAR_START:%.+]] = alloca i32, +// CHECK: alloca i{{[0-9]+}}, +// CHECK: alloca i{{[0-9]+}}, +// CHECK: alloca i{{[0-9]+}}, +// CHECK: alloca i{{[0-9]+}}, +// CHECK: alloca i{{[0-9]+}}, +// CHECK: [[PVAR_PRIV:%.+]] = alloca i32*, +// CHECK: [[LVAR_PRIV:%.+]] = alloca i32, +// CHECK: store i{{[0-9]+}}* [[GTID_ADDR]], i{{[0-9]+}}** [[GTID_ADDR_REF:%.+]] + +// Check for default initialization. +// CHECK: [[PVAR_PTR_REF:%.+]] = getelementptr inbounds [[CAP_TMAIN_TY]], [[CAP_TMAIN_TY]]* %{{.+}}, i{{[0-9]+}} 0, i{{[0-9]+}} 0 +// CHECK: [[PVAR_REF:%.+]] = load i32**, i32*** [[PVAR_PTR_REF]], +// CHECK: [[PVAR_VAL:%.+]] = load i32*, i32** [[PVAR_REF]], +// CHECK: store i32* [[PVAR_VAL]], i32** [[PVAR_START]], +// CHECK: [[LVAR_PTR_REF:%.+]] = getelementptr inbounds [[CAP_TMAIN_TY]], [[CAP_TMAIN_TY]]* %{{.+}}, i{{[0-9]+}} 0, i{{[0-9]+}} 1 +// CHECK: [[LVAR_REF:%.+]] = load i32*, i32** [[LVAR_PTR_REF]], +// CHECK: [[LVAR_VAL:%.+]] = load i32, i32* [[LVAR_REF]], +// CHECK: store i32 [[LVAR_VAL]], i32* [[LVAR_START]], +// CHECK: call {{.+}} @__kmpc_for_static_init_4(%{{.+}}* @{{.+}}, i32 [[GTID:%.+]], i32 34, i32* [[IS_LAST_ADDR:%.+]], i32* %{{.+}}, i32* %{{.+}}, i32* %{{.+}}, i32 1, i32 1) +// CHECK: [[PVAR_VAL:%.+]] = load i32*, i32** [[PVAR_START]], +// CHECK: [[CNT:%.+]] = load i32, i32* +// CHECK: [[MUL:%.+]] = mul nsw i32 [[CNT]], 1 +// CHECK: [[IDX:%.+]] = sext i32 [[MUL]] to i64 +// CHECK: [[PTR:%.+]] = getelementptr inbounds i32, i32* [[PVAR_VAL]], i64 [[IDX]] +// CHECK: store i32* [[PTR]], i32** [[PVAR_PRIV]], +// CHECK: [[LVAR_VAL:%.+]] = load i32, i32* [[LVAR_START]], +// CHECK: [[CNT:%.+]] = load i32, i32* +// CHECK: [[MUL:%.+]] = mul nsw i32 [[CNT]], 1 +// CHECK: [[VAL:%.+]] = add nsw i32 [[LVAR_VAL]], [[MUL]] +// CHECK: store i32 [[VAL]], i32* [[LVAR_PRIV]], +// CHECK: [[PVAR_VAL:%.+]] = load i32*, i32** [[PVAR_PRIV]] +// CHECK: [[PTR:%.+]] = getelementptr inbounds i32, i32* [[PVAR_VAL]], i32 1 +// CHECK: store i32* [[PTR]], i32** [[PVAR_PRIV]], +// CHECK: [[LVAR_VAL:%.+]] = load i32, i32* [[LVAR_PRIV]], +// CHECK: [[ADD:%.+]] = add nsw i32 [[LVAR_VAL]], 1 +// CHECK: store i32 [[ADD]], i32* [[LVAR_PRIV]], +// CHECK: call void @__kmpc_for_static_fini(%{{.+}}* @{{.+}}, i32 %{{.+}}) +// CHECK: call i32 @__kmpc_cancel_barrier(%{{.+}}* [[IMPLICIT_BARRIER_LOC]], i{{[0-9]+}} [[GTID]]) +// CHECK: ret void +#endif + diff --git a/test/OpenMP/for_linear_messages.cpp b/test/OpenMP/for_linear_messages.cpp new file mode 100644 index 00000000000..7d8a3330e47 --- /dev/null +++ b/test/OpenMP/for_linear_messages.cpp @@ -0,0 +1,214 @@ +// RUN: %clang_cc1 -verify -fopenmp %s + +namespace X { + int x; +}; + +struct B { + static int ib; // expected-note {{'B::ib' declared here}} + static int bfoo() { return 8; } +}; + +int bfoo() { return 4; } + +int z; +const int C1 = 1; +const int C2 = 2; +void test_linear_colons() +{ + int B = 0; + #pragma omp for linear(B:bfoo()) + for (int i = 0; i < 10; ++i) ; + // expected-error@+1 {{unexpected ':' in nested name specifier; did you mean '::'}} + #pragma omp for linear(B::ib:B:bfoo()) + for (int i = 0; i < 10; ++i) ; + // expected-error@+1 {{use of undeclared identifier 'ib'; did you mean 'B::ib'}} + #pragma omp for linear(B:ib) + for (int i = 0; i < 10; ++i) ; + // expected-error@+1 {{unexpected ':' in nested name specifier; did you mean '::'?}} + #pragma omp for linear(z:B:ib) + for (int i = 0; i < 10; ++i) ; + #pragma omp for linear(B:B::bfoo()) + for (int i = 0; i < 10; ++i) ; + #pragma omp for linear(X::x : ::z) + for (int i = 0; i < 10; ++i) ; + #pragma omp for linear(B,::z, X::x) + for (int i = 0; i < 10; ++i) ; + #pragma omp for linear(::z) + for (int i = 0; i < 10; ++i) ; + // expected-error@+1 {{expected variable name}} + #pragma omp for linear(B::bfoo()) + for (int i = 0; i < 10; ++i) ; + #pragma omp for linear(B::ib,B:C1+C2) + for (int i = 0; i < 10; ++i) ; +} + +template T test_template(T* arr, N num) { + N i; + T sum = (T)0; + T ind2 = - num * L; // expected-note {{'ind2' defined here}} + // expected-error@+1 {{argument of a linear clause should be of integral or pointer type}} +#pragma omp for linear(ind2:L) + for (i = 0; i < num; ++i) { + T cur = arr[(int)ind2]; + ind2 += L; + sum += cur; + } + return T(); +} + +template int test_warn() { + int ind2 = 0; + // expected-warning@+1 {{zero linear step (ind2 should probably be const)}} + #pragma omp for linear(ind2:LEN) + for (int i = 0; i < 100; i++) { + ind2 += LEN; + } + return ind2; +} + +struct S1; // expected-note 2 {{declared here}} expected-note 2 {{forward declaration of 'S1'}} +extern S1 a; +class S2 { + mutable int a; +public: + S2():a(0) { } +}; +const S2 b; // expected-note 2 {{'b' defined here}} +const S2 ba[5]; +class S3 { + int a; +public: + S3():a(0) { } +}; +const S3 ca[5]; +class S4 { + int a; + S4(); +public: + S4(int v):a(v) { } +}; +class S5 { + int a; + S5():a(0) {} +public: + S5(int v):a(v) { } +}; + +S3 h; +#pragma omp threadprivate(h) // expected-note 2 {{defined as threadprivate or thread local}} + +template int foomain(I argc, C **argv) { + I e(4); + I g(5); + int i; + int &j = i; // expected-note {{'j' defined here}} + #pragma omp for linear // expected-error {{expected '(' after 'linear'}} + for (int k = 0; k < argc; ++k) ++k; + #pragma omp for linear ( // expected-error {{expected expression}} expected-error {{expected ')'}} expected-note {{to match this '('}} + for (int k = 0; k < argc; ++k) ++k; + #pragma omp for linear () // expected-error {{expected expression}} + for (int k = 0; k < argc; ++k) ++k; + #pragma omp for linear (argc // expected-error {{expected ')'}} expected-note {{to match this '('}} + for (int k = 0; k < argc; ++k) ++k; + #pragma omp for linear (argc, // expected-error {{expected expression}} expected-error {{expected ')'}} expected-note {{to match this '('}} + for (int k = 0; k < argc; ++k) ++k; + #pragma omp for linear (argc > 0 ? argv[1] : argv[2]) // expected-error {{expected variable name}} + for (int k = 0; k < argc; ++k) ++k; + #pragma omp for linear (argc : 5) + for (int k = 0; k < argc; ++k) ++k; + #pragma omp for linear (S1) // expected-error {{'S1' does not refer to a value}} + for (int k = 0; k < argc; ++k) ++k; + // expected-error@+2 {{linear variable with incomplete type 'S1'}} + // expected-error@+1 {{const-qualified variable cannot be linear}} + #pragma omp for linear (a, b:B::ib) + for (int k = 0; k < argc; ++k) ++k; + #pragma omp for linear (argv[1]) // expected-error {{expected variable name}} + for (int k = 0; k < argc; ++k) ++k; + #pragma omp for linear(e, g) + for (int k = 0; k < argc; ++k) ++k; + #pragma omp for linear(h) // expected-error {{threadprivate or thread local variable cannot be linear}} + for (int k = 0; k < argc; ++k) ++k; + #pragma omp for linear(i) + for (int k = 0; k < argc; ++k) ++k; + #pragma omp parallel + { + int v = 0; + int i; + #pragma omp for linear(v:i) + for (int k = 0; k < argc; ++k) { i = k; v += i; } + } + #pragma omp for linear(j) // expected-error {{arguments of OpenMP clause 'linear' cannot be of reference type}} + for (int k = 0; k < argc; ++k) ++k; + int v = 0; + #pragma omp for linear(v:j) + for (int k = 0; k < argc; ++k) { ++k; v += j; } + #pragma omp for linear(i) + for (int k = 0; k < argc; ++k) ++k; + return 0; +} + +namespace A { +double x; +#pragma omp threadprivate(x) // expected-note {{defined as threadprivate or thread local}} +} +namespace C { +using A::x; +} + +int main(int argc, char **argv) { + double darr[100]; + // expected-note@+1 {{in instantiation of function template specialization 'test_template<-4, double, int>' requested here}} + test_template<-4>(darr, 4); + // expected-note@+1 {{in instantiation of function template specialization 'test_warn<0>' requested here}} + test_warn<0>(); + + S4 e(4); // expected-note {{'e' defined here}} + S5 g(5); // expected-note {{'g' defined here}} + int i; + int &j = i; // expected-note {{'j' defined here}} + #pragma omp for linear // expected-error {{expected '(' after 'linear'}} + for (int k = 0; k < argc; ++k) ++k; + #pragma omp for linear ( // expected-error {{expected expression}} expected-error {{expected ')'}} expected-note {{to match this '('}} + for (int k = 0; k < argc; ++k) ++k; + #pragma omp for linear () // expected-error {{expected expression}} + for (int k = 0; k < argc; ++k) ++k; + #pragma omp for linear (argc // expected-error {{expected ')'}} expected-note {{to match this '('}} + for (int k = 0; k < argc; ++k) ++k; + #pragma omp for linear (argc, // expected-error {{expected expression}} expected-error {{expected ')'}} expected-note {{to match this '('}} + for (int k = 0; k < argc; ++k) ++k; + #pragma omp for linear (argc > 0 ? argv[1] : argv[2]) // expected-error {{expected variable name}} + for (int k = 0; k < argc; ++k) ++k; + #pragma omp for linear (argc) + for (int k = 0; k < argc; ++k) ++k; + #pragma omp for linear (S1) // expected-error {{'S1' does not refer to a value}} + for (int k = 0; k < argc; ++k) ++k; + // expected-error@+2 {{linear variable with incomplete type 'S1'}} + // expected-error@+1 {{const-qualified variable cannot be linear}} + #pragma omp for linear(a, b) + for (int k = 0; k < argc; ++k) ++k; + #pragma omp for linear (argv[1]) // expected-error {{expected variable name}} + for (int k = 0; k < argc; ++k) ++k; + // expected-error@+2 {{argument of a linear clause should be of integral or pointer type, not 'S4'}} + // expected-error@+1 {{argument of a linear clause should be of integral or pointer type, not 'S5'}} + #pragma omp for linear(e, g) + for (int k = 0; k < argc; ++k) ++k; + #pragma omp for linear(h, C::x) // expected-error 2 {{threadprivate or thread local variable cannot be linear}} + for (int k = 0; k < argc; ++k) ++k; + #pragma omp parallel + { + int i; + #pragma omp for linear(i) + for (int k = 0; k < argc; ++k) ++k; + #pragma omp for linear(i : 4) + for (int k = 0; k < argc; ++k) { ++k; i += 4; } + } + #pragma omp for linear(j) // expected-error {{arguments of OpenMP clause 'linear' cannot be of reference type 'int &'}} + for (int k = 0; k < argc; ++k) ++k; + #pragma omp for linear(i) + for (int k = 0; k < argc; ++k) ++k; + + foomain(argc,argv); + return 0; +} + diff --git a/test/OpenMP/for_loop_messages.cpp b/test/OpenMP/for_loop_messages.cpp index ba27934b11d..8dbd9a3bff4 100644 --- a/test/OpenMP/for_loop_messages.cpp +++ b/test/OpenMP/for_loop_messages.cpp @@ -289,7 +289,6 @@ int test_iteration_spaces() { c[ii] = a[ii]; #pragma omp parallel -// expected-error@+3 {{unexpected OpenMP clause 'linear' in directive '#pragma omp for'}} // expected-note@+2 {{defined as linear}} // expected-error@+2 {{loop iteration variable in the associated loop of 'omp for' directive may not be linear, predetermined as private}} #pragma omp for linear(ii) diff --git a/test/OpenMP/for_misc_messages.c b/test/OpenMP/for_misc_messages.c index f5b87514947..fa42d074b22 100644 --- a/test/OpenMP/for_misc_messages.c +++ b/test/OpenMP/for_misc_messages.c @@ -62,9 +62,8 @@ void test_non_identifiers() { #pragma omp for; for (i = 0; i < 16; ++i) ; +// expected-warning@+2 {{extra tokens at the end of '#pragma omp for' are ignored}} #pragma omp parallel -// expected-error@+2 {{unexpected OpenMP clause 'linear' in directive '#pragma omp for'}} -// expected-warning@+1 {{extra tokens at the end of '#pragma omp for' are ignored}} #pragma omp for linear(x); for (i = 0; i < 16; ++i) ; diff --git a/test/OpenMP/parallel_for_ast_print.cpp b/test/OpenMP/parallel_for_ast_print.cpp index f3025ced3b5..7450c7531de 100644 --- a/test/OpenMP/parallel_for_ast_print.cpp +++ b/test/OpenMP/parallel_for_ast_print.cpp @@ -15,35 +15,35 @@ T tmain(T argc) { // CHECK: static T a; static T g; #pragma omp threadprivate(g) -#pragma omp parallel for schedule(dynamic) default(none) copyin(g) - // CHECK: #pragma omp parallel for schedule(dynamic) default(none) copyin(g) +#pragma omp parallel for schedule(dynamic) default(none) copyin(g) linear(a) + // CHECK: #pragma omp parallel for schedule(dynamic) default(none) copyin(g) linear(a) for (int i = 0; i < 2; ++i) a = 2; // CHECK-NEXT: for (int i = 0; i < 2; ++i) // CHECK-NEXT: a = 2; -#pragma omp parallel for private(argc, b), firstprivate(c, d), lastprivate(d, f) collapse(N) schedule(static, N) ordered(N) if (argc) num_threads(N) default(shared) shared(e) reduction(+ : h) - for (int i = 0; i < 10; ++i) - for (int j = 0; j < 10; ++j) - for (int j = 0; j < 10; ++j) - for (int j = 0; j < 10; ++j) - for (int j = 0; j < 10; ++j) - for (int i = 0; i < 10; ++i) - for (int j = 0; j < 10; ++j) - for (int j = 0; j < 10; ++j) - for (int j = 0; j < 10; ++j) - for (int j = 0; j < 10; ++j) +#pragma omp parallel for private(argc, b), firstprivate(c, d), lastprivate(d, f) collapse(N) schedule(static, N) ordered(N) if (argc) num_threads(N) default(shared) shared(e) reduction(+ : h) linear(a:N) + for (int i = 0; i < 2; ++i) + for (int j = 0; j < 2; ++j) + for (int j = 0; j < 2; ++j) + for (int j = 0; j < 2; ++j) + for (int j = 0; j < 2; ++j) + for (int i = 0; i < 2; ++i) + for (int j = 0; j < 2; ++j) + for (int j = 0; j < 2; ++j) + for (int j = 0; j < 2; ++j) + for (int j = 0; j < 2; ++j) foo(); - // CHECK-NEXT: #pragma omp parallel for private(argc,b) firstprivate(c,d) lastprivate(d,f) collapse(N) schedule(static, N) ordered(N) if(argc) num_threads(N) default(shared) shared(e) reduction(+: h) - // CHECK-NEXT: for (int i = 0; i < 10; ++i) - // CHECK-NEXT: for (int j = 0; j < 10; ++j) - // CHECK-NEXT: for (int j = 0; j < 10; ++j) - // CHECK-NEXT: for (int j = 0; j < 10; ++j) - // CHECK-NEXT: for (int j = 0; j < 10; ++j) - // CHECK-NEXT: for (int i = 0; i < 10; ++i) - // CHECK-NEXT: for (int j = 0; j < 10; ++j) - // CHECK-NEXT: for (int j = 0; j < 10; ++j) - // CHECK-NEXT: for (int j = 0; j < 10; ++j) - // CHECK-NEXT: for (int j = 0; j < 10; ++j) + // CHECK-NEXT: #pragma omp parallel for private(argc,b) firstprivate(c,d) lastprivate(d,f) collapse(N) schedule(static, N) ordered(N) if(argc) num_threads(N) default(shared) shared(e) reduction(+: h) linear(a: N) + // CHECK-NEXT: for (int i = 0; i < 2; ++i) + // CHECK-NEXT: for (int j = 0; j < 2; ++j) + // CHECK-NEXT: for (int j = 0; j < 2; ++j) + // CHECK-NEXT: for (int j = 0; j < 2; ++j) + // CHECK-NEXT: for (int j = 0; j < 2; ++j) + // CHECK-NEXT: for (int i = 0; i < 2; ++i) + // CHECK-NEXT: for (int j = 0; j < 2; ++j) + // CHECK-NEXT: for (int j = 0; j < 2; ++j) + // CHECK-NEXT: for (int j = 0; j < 2; ++j) + // CHECK-NEXT: for (int j = 0; j < 2; ++j) // CHECK-NEXT: foo(); return T(); } @@ -54,18 +54,18 @@ int main(int argc, char **argv) { // CHECK: static int a; static float g; #pragma omp threadprivate(g) -#pragma omp parallel for schedule(guided, argc) default(none) copyin(g) - // CHECK: #pragma omp parallel for schedule(guided, argc) default(none) copyin(g) +#pragma omp parallel for schedule(guided, argc) default(none) copyin(g) linear(a) + // CHECK: #pragma omp parallel for schedule(guided, argc) default(none) copyin(g) linear(a) for (int i = 0; i < 2; ++i) a = 2; // CHECK-NEXT: for (int i = 0; i < 2; ++i) // CHECK-NEXT: a = 2; -#pragma omp parallel for private(argc, b), firstprivate(argv, c), lastprivate(d, f) collapse(2) schedule(auto) ordered if (argc) num_threads(a) default(shared) shared(e) reduction(+ : h) +#pragma omp parallel for private(argc, b), firstprivate(argv, c), lastprivate(d, f) collapse(2) schedule(auto) ordered if (argc) num_threads(a) default(shared) shared(e) reduction(+ : h) linear(a:-5) for (int i = 0; i < 10; ++i) for (int j = 0; j < 10; ++j) foo(); - // CHECK-NEXT: #pragma omp parallel for private(argc,b) firstprivate(argv,c) lastprivate(d,f) collapse(2) schedule(auto) ordered if(argc) num_threads(a) default(shared) shared(e) reduction(+: h) - // CHECK-NEXT: for (int i = 0; i < 10; ++i) + // CHECK-NEXT: #pragma omp parallel for private(argc,b) firstprivate(argv,c) lastprivate(d,f) collapse(2) schedule(auto) ordered if(argc) num_threads(a) default(shared) shared(e) reduction(+: h) linear(a: -5) + // CHECK-NEXT: for (int i = 0; i < 10; ++i) // CHECK-NEXT: for (int j = 0; j < 10; ++j) // CHECK-NEXT: foo(); return (tmain(argc) + tmain(argv[0][0])); diff --git a/test/OpenMP/parallel_for_firstprivate_messages.cpp b/test/OpenMP/parallel_for_firstprivate_messages.cpp index 2c762b49b39..1a9b0593b8d 100644 --- a/test/OpenMP/parallel_for_firstprivate_messages.cpp +++ b/test/OpenMP/parallel_for_firstprivate_messages.cpp @@ -102,9 +102,6 @@ int foomain(int argc, char **argv) { #pragma omp parallel for firstprivate(h) // expected-error {{threadprivate or thread local variable cannot be firstprivate}} for (int k = 0; k < argc; ++k) ++k; -#pragma omp parallel for linear(i) // expected-error {{unexpected OpenMP clause 'linear' in directive '#pragma omp parallel for'}} - for (int k = 0; k < argc; ++k) - ++k; #pragma omp parallel { int v = 0; diff --git a/test/OpenMP/parallel_for_lastprivate_messages.cpp b/test/OpenMP/parallel_for_lastprivate_messages.cpp index 09bed02a05f..cdc94964c95 100644 --- a/test/OpenMP/parallel_for_lastprivate_messages.cpp +++ b/test/OpenMP/parallel_for_lastprivate_messages.cpp @@ -104,9 +104,6 @@ int foomain(int argc, char **argv) { #pragma omp parallel for lastprivate(h) // expected-error {{threadprivate or thread local variable cannot be lastprivate}} for (int k = 0; k < argc; ++k) ++k; -#pragma omp parallel for linear(i) // expected-error {{unexpected OpenMP clause 'linear' in directive '#pragma omp parallel for'}} - for (int k = 0; k < argc; ++k) - ++k; #pragma omp parallel { int v = 0; diff --git a/test/OpenMP/parallel_for_linear_codegen.cpp b/test/OpenMP/parallel_for_linear_codegen.cpp new file mode 100644 index 00000000000..7d27efef7b6 --- /dev/null +++ b/test/OpenMP/parallel_for_linear_codegen.cpp @@ -0,0 +1,261 @@ +// RUN: %clang_cc1 -verify -fopenmp -x c++ -triple x86_64-apple-darwin10 -emit-llvm %s -o - | FileCheck %s +// RUN: %clang_cc1 -fopenmp -x c++ -std=c++11 -triple x86_64-apple-darwin10 -emit-pch -o %t %s +// RUN: %clang_cc1 -fopenmp -x c++ -triple x86_64-apple-darwin10 -std=c++11 -include-pch %t -verify %s -emit-llvm -o - | FileCheck %s +// RUN: %clang_cc1 -verify -fopenmp -x c++ -std=c++11 -DLAMBDA -triple x86_64-apple-darwin10 -emit-llvm %s -o - | FileCheck -check-prefix=LAMBDA %s +// RUN: %clang_cc1 -verify -fopenmp -x c++ -fblocks -DBLOCKS -triple x86_64-apple-darwin10 -emit-llvm %s -o - | FileCheck -check-prefix=BLOCKS %s +// expected-no-diagnostics +// REQUIRES: x86-registered-target +#ifndef HEADER +#define HEADER + +template +struct S { + T f; + S(T a) : f(a) {} + S() : f() {} + S &operator=(const S &); + operator T() { return T(); } + ~S() {} +}; + +volatile int g = 1212; +float f; +char cnt; + +// CHECK: [[S_FLOAT_TY:%.+]] = type { float } +// CHECK: [[CAP_MAIN_TY:%.+]] = type { float**, i64* } +// CHECK: [[S_INT_TY:%.+]] = type { i32 } +// CHECK: [[CAP_TMAIN_TY:%.+]] = type { i32**, i32* } +// CHECK-DAG: [[IMPLICIT_BARRIER_LOC:@.+]] = private unnamed_addr constant %{{.+}} { i32 0, i32 66, i32 0, i32 0, i8* +// CHECK-DAG: [[F:@.+]] = global float 0.0 +// CHECK-DAG: [[CNT:@.+]] = global i8 0 +template +T tmain() { + S test; + T *pvar = &test.f; + T lvar = T(); +#pragma omp parallel for linear(pvar, lvar) + for (int i = 0; i < 2; ++i) { + ++pvar, ++lvar; + } + return T(); +} + +int main() { +#ifdef LAMBDA + // LAMBDA: [[G:@.+]] = global i{{[0-9]+}} 1212, + // LAMBDA-LABEL: @main + // LAMBDA: call void [[OUTER_LAMBDA:@.+]]( + [&]() { + // LAMBDA: define{{.*}} internal{{.*}} void [[OUTER_LAMBDA]]( + // LAMBDA: call void {{.+}} @__kmpc_fork_call({{.+}}, i32 1, {{.+}}* [[OMP_REGION:@.+]] to {{.+}}, i8* %{{.+}}) +#pragma omp parallel for linear(g:5) + for (int i = 0; i < 2; ++i) { + // LAMBDA: define{{.*}} internal{{.*}} void [[OMP_REGION]](i32* %{{.+}}, i32* %{{.+}}, %{{.+}}* [[ARG:%.+]]) + // LAMBDA: alloca i{{[0-9]+}}, + // LAMBDA: [[G_START_ADDR:%.+]] = alloca i{{[0-9]+}}, + // LAMBDA: alloca i{{[0-9]+}}, + // LAMBDA: alloca i{{[0-9]+}}, + // LAMBDA: alloca i{{[0-9]+}}, + // LAMBDA: alloca i{{[0-9]+}}, + // LAMBDA: alloca i{{[0-9]+}}, + // LAMBDA: [[G_PRIVATE_ADDR:%.+]] = alloca i{{[0-9]+}}, + // LAMBDA: store %{{.+}}* [[ARG]], %{{.+}}** [[ARG_REF:%.+]], + // LAMBDA: store i32 0, + // LAMBDA: [[GTID_REF:%.+]] = load i{{[0-9]+}}*, i{{[0-9]+}}** %{{.+}} + // LAMBDA: [[GTID:%.+]] = load i{{[0-9]+}}, i{{[0-9]+}}* [[GTID_REF]] + // LAMBDA: call {{.+}} @__kmpc_for_static_init_4(%{{.+}}* @{{.+}}, i32 [[GTID]], i32 34, i32* [[IS_LAST_ADDR:%.+]], i32* %{{.+}}, i32* %{{.+}}, i32* %{{.+}}, i32 1, i32 1) + // LAMBDA: [[VAL:%.+]] = load i32, i32* [[G_START_ADDR]] + // LAMBDA: [[CNT:%.+]] = load i32, i32* + // LAMBDA: [[MUL:%.+]] = mul nsw i32 [[CNT]], 5 + // LAMBDA: [[ADD:%.+]] = add nsw i32 [[VAL]], [[MUL]] + // LAMBDA: store i32 [[ADD]], i32* [[G_PRIVATE_ADDR]], + // LAMBDA: [[VAL:%.+]] = load i32, i32* [[G_PRIVATE_ADDR]], + // LAMBDA: [[ADD:%.+]] = add nsw i32 [[VAL]], 5 + // LAMBDA: store i32 [[ADD]], i32* [[G_PRIVATE_ADDR]], + // LAMBDA: [[G_PRIVATE_ADDR_REF:%.+]] = getelementptr inbounds %{{.+}}, %{{.+}}* [[ARG:%.+]], i{{[0-9]+}} 0, i{{[0-9]+}} 0 + // LAMBDA: store i{{[0-9]+}}* [[G_PRIVATE_ADDR]], i{{[0-9]+}}** [[G_PRIVATE_ADDR_REF]] + // LAMBDA: call void [[INNER_LAMBDA:@.+]](%{{.+}}* [[ARG]]) + // LAMBDA: call void @__kmpc_for_static_fini(%{{.+}}* @{{.+}}, i32 [[GTID]]) + g += 5; + // LAMBDA: call void @__kmpc_barrier(%{{.+}}* @{{.+}}, i{{[0-9]+}} [[GTID]]) + [&]() { + // LAMBDA: define {{.+}} void [[INNER_LAMBDA]](%{{.+}}* [[ARG_PTR:%.+]]) + // LAMBDA: store %{{.+}}* [[ARG_PTR]], %{{.+}}** [[ARG_PTR_REF:%.+]], + g = 2; + // LAMBDA: [[ARG_PTR:%.+]] = load %{{.+}}*, %{{.+}}** [[ARG_PTR_REF]] + // LAMBDA: [[G_PTR_REF:%.+]] = getelementptr inbounds %{{.+}}, %{{.+}}* [[ARG_PTR]], i{{[0-9]+}} 0, i{{[0-9]+}} 0 + // LAMBDA: [[G_REF:%.+]] = load i{{[0-9]+}}*, i{{[0-9]+}}** [[G_PTR_REF]] + // LAMBDA: store i{{[0-9]+}} 2, i{{[0-9]+}}* [[G_REF]] + }(); + } + }(); + return 0; +#elif defined(BLOCKS) + // BLOCKS: [[G:@.+]] = global i{{[0-9]+}} 1212, + // BLOCKS-LABEL: @main + // BLOCKS: call void {{%.+}}(i8 + ^{ + // BLOCKS: define{{.*}} internal{{.*}} void {{.+}}(i8* + // BLOCKS: call void {{.+}} @__kmpc_fork_call({{.+}}, i32 1, {{.+}}* [[OMP_REGION:@.+]] to {{.+}}, i8* %{{.+}}) +#pragma omp parallel for linear(g:5) + for (int i = 0; i < 2; ++i) { + // BLOCKS: define{{.*}} internal{{.*}} void [[OMP_REGION]](i32* %{{.+}}, i32* %{{.+}}, %{{.+}}* [[ARG:%.+]]) + // BLOCKS: alloca i{{[0-9]+}}, + // BLOCKS: [[G_START_ADDR:%.+]] = alloca i{{[0-9]+}}, + // BLOCKS: alloca i{{[0-9]+}}, + // BLOCKS: alloca i{{[0-9]+}}, + // BLOCKS: alloca i{{[0-9]+}}, + // BLOCKS: alloca i{{[0-9]+}}, + // BLOCKS: alloca i{{[0-9]+}}, + // BLOCKS: [[G_PRIVATE_ADDR:%.+]] = alloca i{{[0-9]+}}, + // BLOCKS: store %{{.+}}* [[ARG]], %{{.+}}** [[ARG_REF:%.+]], + // BLOCKS: store i32 0, + // BLOCKS: [[GTID_REF:%.+]] = load i{{[0-9]+}}*, i{{[0-9]+}}** %{{.+}} + // BLOCKS: [[GTID:%.+]] = load i{{[0-9]+}}, i{{[0-9]+}}* [[GTID_REF]] + // BLOCKS: call {{.+}} @__kmpc_for_static_init_4(%{{.+}}* @{{.+}}, i32 [[GTID]], i32 34, i32* [[IS_LAST_ADDR:%.+]], i32* %{{.+}}, i32* %{{.+}}, i32* %{{.+}}, i32 1, i32 1) + // BLOCKS: [[VAL:%.+]] = load i32, i32* [[G_START_ADDR]] + // BLOCKS: [[CNT:%.+]] = load i32, i32* + // BLOCKS: [[MUL:%.+]] = mul nsw i32 [[CNT]], 5 + // BLOCKS: [[ADD:%.+]] = add nsw i32 [[VAL]], [[MUL]] + // BLOCKS: store i32 [[ADD]], i32* [[G_PRIVATE_ADDR]], + // BLOCKS: [[VAL:%.+]] = load i32, i32* [[G_PRIVATE_ADDR]], + // BLOCKS: [[ADD:%.+]] = add nsw i32 [[VAL]], 5 + // BLOCKS: store i32 [[ADD]], i32* [[G_PRIVATE_ADDR]], + // BLOCKS-NOT: [[G]]{{[[^:word:]]}} + // BLOCKS: i{{[0-9]+}}* [[G_PRIVATE_ADDR]] + // BLOCKS-NOT: [[G]]{{[[^:word:]]}} + // BLOCKS: call void {{%.+}}(i8 + // BLOCKS: call void @__kmpc_for_static_fini(%{{.+}}* @{{.+}}, i32 [[GTID]]) + g += 5; + // BLOCKS: call void @__kmpc_barrier(%{{.+}}* @{{.+}}, i{{[0-9]+}} [[GTID]]) + g = 1; + ^{ + // BLOCKS: define {{.+}} void {{@.+}}(i8* + g = 2; + // BLOCKS-NOT: [[G]]{{[[^:word:]]}} + // BLOCKS: store i{{[0-9]+}} 2, i{{[0-9]+}}* + // BLOCKS-NOT: [[G]]{{[[^:word:]]}} + // BLOCKS: ret + }(); + } + }(); + return 0; +#else + S test; + float *pvar = &test.f; + long long lvar = 0; +#pragma omp parallel for linear(pvar, lvar : 3) + for (int i = 0; i < 2; ++i) { + pvar += 3, lvar += 3; + } + return tmain(); +#endif +} + +// CHECK: define i{{[0-9]+}} @main() +// CHECK: [[TEST:%.+]] = alloca [[S_FLOAT_TY]], +// CHECK: call {{.*}} [[S_FLOAT_TY_DEF_CONSTR:@.+]]([[S_FLOAT_TY]]* [[TEST]]) +// CHECK: %{{.+}} = bitcast [[CAP_MAIN_TY]]* +// CHECK: call void (%{{.+}}*, i{{[0-9]+}}, void (i{{[0-9]+}}*, i{{[0-9]+}}*, ...)*, ...) @__kmpc_fork_call(%{{.+}}* @{{.+}}, i{{[0-9]+}} 1, void (i{{[0-9]+}}*, i{{[0-9]+}}*, ...)* bitcast (void (i{{[0-9]+}}*, i{{[0-9]+}}*, [[CAP_MAIN_TY]]*)* [[MAIN_MICROTASK:@.+]] to void +// CHECK: = call {{.+}} [[TMAIN_INT:@.+]]() +// CHECK: call void [[S_FLOAT_TY_DESTR:@.+]]([[S_FLOAT_TY]]* +// CHECK: ret + +// CHECK: define internal void [[MAIN_MICROTASK]](i{{[0-9]+}}* [[GTID_ADDR:%.+]], i{{[0-9]+}}* %{{.+}}, [[CAP_MAIN_TY]]* %{{.+}}) +// CHECK: alloca i{{[0-9]+}}, +// CHECK: [[PVAR_START:%.+]] = alloca float*, +// CHECK: [[LVAR_START:%.+]] = alloca i64, +// CHECK: alloca i{{[0-9]+}}, +// CHECK: alloca i{{[0-9]+}}, +// CHECK: alloca i{{[0-9]+}}, +// CHECK: alloca i{{[0-9]+}}, +// CHECK: alloca i{{[0-9]+}}, +// CHECK: [[PVAR_PRIV:%.+]] = alloca float*, +// CHECK: [[LVAR_PRIV:%.+]] = alloca i64, +// CHECK: store i{{[0-9]+}}* [[GTID_ADDR]], i{{[0-9]+}}** [[GTID_ADDR_REF:%.+]] + +// Check for default initialization. +// CHECK: [[PVAR_PTR_REF:%.+]] = getelementptr inbounds [[CAP_MAIN_TY]], [[CAP_MAIN_TY]]* %{{.+}}, i{{[0-9]+}} 0, i{{[0-9]+}} 0 +// CHECK: [[PVAR_REF:%.+]] = load float**, float*** [[PVAR_PTR_REF]], +// CHECK: [[PVAR_VAL:%.+]] = load float*, float** [[PVAR_REF]], +// CHECK: store float* [[PVAR_VAL]], float** [[PVAR_START]], +// CHECK: [[LVAR_PTR_REF:%.+]] = getelementptr inbounds [[CAP_MAIN_TY]], [[CAP_MAIN_TY]]* %{{.+}}, i{{[0-9]+}} 0, i{{[0-9]+}} 1 +// CHECK: [[LVAR_REF:%.+]] = load i64*, i64** [[LVAR_PTR_REF]], +// CHECK: [[LVAR_VAL:%.+]] = load i64, i64* [[LVAR_REF]], +// CHECK: store i64 [[LVAR_VAL]], i64* [[LVAR_START]], +// CHECK: call {{.+}} @__kmpc_for_static_init_4(%{{.+}}* @{{.+}}, i32 [[GTID:%.+]], i32 34, i32* [[IS_LAST_ADDR:%.+]], i32* %{{.+}}, i32* %{{.+}}, i32* %{{.+}}, i32 1, i32 1) +// CHECK: [[PVAR_VAL:%.+]] = load float*, float** [[PVAR_START]], +// CHECK: [[CNT:%.+]] = load i32, i32* +// CHECK: [[MUL:%.+]] = mul nsw i32 [[CNT]], 3 +// CHECK: [[IDX:%.+]] = sext i32 [[MUL]] to i64 +// CHECK: [[PTR:%.+]] = getelementptr inbounds float, float* [[PVAR_VAL]], i64 [[IDX]] +// CHECK: store float* [[PTR]], float** [[PVAR_PRIV]], +// CHECK: [[LVAR_VAL:%.+]] = load i64, i64* [[LVAR_START]], +// CHECK: [[CNT:%.+]] = load i32, i32* +// CHECK: [[MUL:%.+]] = mul nsw i32 [[CNT]], 3 +// CHECK: [[CONV:%.+]] = sext i32 [[MUL]] to i64 +// CHECK: [[VAL:%.+]] = add nsw i64 [[LVAR_VAL]], [[CONV]] +// CHECK: store i64 [[VAL]], i64* [[LVAR_PRIV]], +// CHECK: [[PVAR_VAL:%.+]] = load float*, float** [[PVAR_PRIV]] +// CHECK: [[PTR:%.+]] = getelementptr inbounds float, float* [[PVAR_VAL]], i64 3 +// CHECK: store float* [[PTR]], float** [[PVAR_PRIV]], +// CHECK: [[LVAR_VAL:%.+]] = load i64, i64* [[LVAR_PRIV]], +// CHECK: [[ADD:%.+]] = add nsw i64 [[LVAR_VAL]], 3 +// CHECK: store i64 [[ADD]], i64* [[LVAR_PRIV]], +// CHECK: call void @__kmpc_for_static_fini(%{{.+}}* @{{.+}}, i32 %{{.+}}) +// CHECK: call void @__kmpc_barrier(%{{.+}}* [[IMPLICIT_BARRIER_LOC]], i{{[0-9]+}} [[GTID]]) +// CHECK: ret void + +// CHECK: define {{.*}} i{{[0-9]+}} [[TMAIN_INT]]() +// CHECK: [[TEST:%.+]] = alloca [[S_INT_TY]], +// CHECK: call {{.*}} [[S_INT_TY_DEF_CONSTR:@.+]]([[S_INT_TY]]* [[TEST]]) +// CHECK: call void (%{{.+}}*, i{{[0-9]+}}, void (i{{[0-9]+}}*, i{{[0-9]+}}*, ...)*, ...) @__kmpc_fork_call(%{{.+}}* @{{.+}}, i{{[0-9]+}} 1, void (i{{[0-9]+}}*, i{{[0-9]+}}*, ...)* bitcast (void (i{{[0-9]+}}*, i{{[0-9]+}}*, [[CAP_TMAIN_TY]]*)* [[TMAIN_MICROTASK:@.+]] to void +// CHECK: call void [[S_INT_TY_DESTR:@.+]]([[S_INT_TY]]* +// CHECK: ret +// +// CHECK: define internal void [[TMAIN_MICROTASK]](i{{[0-9]+}}* [[GTID_ADDR:%.+]], i{{[0-9]+}}* %{{.+}}, [[CAP_TMAIN_TY]]* %{{.+}}) +// CHECK: alloca i{{[0-9]+}}, +// CHECK: [[PVAR_START:%.+]] = alloca i32*, +// CHECK: [[LVAR_START:%.+]] = alloca i32, +// CHECK: alloca i{{[0-9]+}}, +// CHECK: alloca i{{[0-9]+}}, +// CHECK: alloca i{{[0-9]+}}, +// CHECK: alloca i{{[0-9]+}}, +// CHECK: alloca i{{[0-9]+}}, +// CHECK: [[PVAR_PRIV:%.+]] = alloca i32*, +// CHECK: [[LVAR_PRIV:%.+]] = alloca i32, +// CHECK: store i{{[0-9]+}}* [[GTID_ADDR]], i{{[0-9]+}}** [[GTID_ADDR_REF:%.+]] + +// Check for default initialization. +// CHECK: [[PVAR_PTR_REF:%.+]] = getelementptr inbounds [[CAP_TMAIN_TY]], [[CAP_TMAIN_TY]]* %{{.+}}, i{{[0-9]+}} 0, i{{[0-9]+}} 0 +// CHECK: [[PVAR_REF:%.+]] = load i32**, i32*** [[PVAR_PTR_REF]], +// CHECK: [[PVAR_VAL:%.+]] = load i32*, i32** [[PVAR_REF]], +// CHECK: store i32* [[PVAR_VAL]], i32** [[PVAR_START]], +// CHECK: [[LVAR_PTR_REF:%.+]] = getelementptr inbounds [[CAP_TMAIN_TY]], [[CAP_TMAIN_TY]]* %{{.+}}, i{{[0-9]+}} 0, i{{[0-9]+}} 1 +// CHECK: [[LVAR_REF:%.+]] = load i32*, i32** [[LVAR_PTR_REF]], +// CHECK: [[LVAR_VAL:%.+]] = load i32, i32* [[LVAR_REF]], +// CHECK: store i32 [[LVAR_VAL]], i32* [[LVAR_START]], +// CHECK: call {{.+}} @__kmpc_for_static_init_4(%{{.+}}* @{{.+}}, i32 [[GTID:%.+]], i32 34, i32* [[IS_LAST_ADDR:%.+]], i32* %{{.+}}, i32* %{{.+}}, i32* %{{.+}}, i32 1, i32 1) +// CHECK: [[PVAR_VAL:%.+]] = load i32*, i32** [[PVAR_START]], +// CHECK: [[CNT:%.+]] = load i32, i32* +// CHECK: [[MUL:%.+]] = mul nsw i32 [[CNT]], 1 +// CHECK: [[IDX:%.+]] = sext i32 [[MUL]] to i64 +// CHECK: [[PTR:%.+]] = getelementptr inbounds i32, i32* [[PVAR_VAL]], i64 [[IDX]] +// CHECK: store i32* [[PTR]], i32** [[PVAR_PRIV]], +// CHECK: [[LVAR_VAL:%.+]] = load i32, i32* [[LVAR_START]], +// CHECK: [[CNT:%.+]] = load i32, i32* +// CHECK: [[MUL:%.+]] = mul nsw i32 [[CNT]], 1 +// CHECK: [[VAL:%.+]] = add nsw i32 [[LVAR_VAL]], [[MUL]] +// CHECK: store i32 [[VAL]], i32* [[LVAR_PRIV]], +// CHECK: [[PVAR_VAL:%.+]] = load i32*, i32** [[PVAR_PRIV]] +// CHECK: [[PTR:%.+]] = getelementptr inbounds i32, i32* [[PVAR_VAL]], i32 1 +// CHECK: store i32* [[PTR]], i32** [[PVAR_PRIV]], +// CHECK: [[LVAR_VAL:%.+]] = load i32, i32* [[LVAR_PRIV]], +// CHECK: [[ADD:%.+]] = add nsw i32 [[LVAR_VAL]], 1 +// CHECK: store i32 [[ADD]], i32* [[LVAR_PRIV]], +// CHECK: call void @__kmpc_for_static_fini(%{{.+}}* @{{.+}}, i32 %{{.+}}) +// CHECK: call void @__kmpc_barrier(%{{.+}}* [[IMPLICIT_BARRIER_LOC]], i{{[0-9]+}} [[GTID]]) +// CHECK: ret void +#endif + diff --git a/test/OpenMP/parallel_for_linear_messages.cpp b/test/OpenMP/parallel_for_linear_messages.cpp new file mode 100644 index 00000000000..528fa27dca3 --- /dev/null +++ b/test/OpenMP/parallel_for_linear_messages.cpp @@ -0,0 +1,269 @@ +// RUN: %clang_cc1 -verify -fopenmp %s + +namespace X { +int x; +}; + +struct B { + static int ib; // expected-note {{'B::ib' declared here}} + static int bfoo() { return 8; } +}; + +int bfoo() { return 4; } + +int z; +const int C1 = 1; +const int C2 = 2; +void test_linear_colons() { + int B = 0; +#pragma omp parallel for linear(B : bfoo()) + for (int i = 0; i < 10; ++i) + ; +// expected-error@+1 {{unexpected ':' in nested name specifier; did you mean '::'}} +#pragma omp parallel for linear(B::ib : B : bfoo()) + for (int i = 0; i < 10; ++i) + ; +// expected-error@+1 {{use of undeclared identifier 'ib'; did you mean 'B::ib'}} +#pragma omp parallel for linear(B : ib) + for (int i = 0; i < 10; ++i) + ; +// expected-error@+1 {{unexpected ':' in nested name specifier; did you mean '::'?}} +#pragma omp parallel for linear(z : B : ib) + for (int i = 0; i < 10; ++i) + ; +#pragma omp parallel for linear(B : B::bfoo()) + for (int i = 0; i < 10; ++i) + ; +#pragma omp parallel for linear(X::x : ::z) + for (int i = 0; i < 10; ++i) + ; +#pragma omp parallel for linear(B, ::z, X::x) + for (int i = 0; i < 10; ++i) + ; +#pragma omp parallel for linear(::z) + for (int i = 0; i < 10; ++i) + ; +// expected-error@+1 {{expected variable name}} +#pragma omp parallel for linear(B::bfoo()) + for (int i = 0; i < 10; ++i) + ; +#pragma omp parallel for linear(B::ib, B : C1 + C2) + for (int i = 0; i < 10; ++i) + ; +} + +template +T test_template(T *arr, N num) { + N i; + T sum = (T)0; + T ind2 = -num * L; // expected-note {{'ind2' defined here}} +// expected-error@+1 {{argument of a linear clause should be of integral or pointer type}} +#pragma omp parallel for linear(ind2 : L) + for (i = 0; i < num; ++i) { + T cur = arr[(int)ind2]; + ind2 += L; + sum += cur; + } + return T(); +} + +template +int test_warn() { + int ind2 = 0; +// expected-warning@+1 {{zero linear step (ind2 should probably be const)}} +#pragma omp parallel for linear(ind2 : LEN) + for (int i = 0; i < 100; i++) { + ind2 += LEN; + } + return ind2; +} + +struct S1; // expected-note 2 {{declared here}} expected-note 2 {{forward declaration of 'S1'}} +extern S1 a; +class S2 { + mutable int a; + +public: + S2() : a(0) {} +}; +const S2 b; // expected-note 2 {{'b' defined here}} +const S2 ba[5]; +class S3 { + int a; + +public: + S3() : a(0) {} +}; +const S3 ca[5]; +class S4 { + int a; + S4(); + +public: + S4(int v) : a(v) {} +}; +class S5 { + int a; + S5() : a(0) {} + +public: + S5(int v) : a(v) {} +}; + +S3 h; +#pragma omp threadprivate(h) // expected-note 2 {{defined as threadprivate or thread local}} + +template +int foomain(I argc, C **argv) { + I e(4); + I g(5); + int i; + int &j = i; // expected-note {{'j' defined here}} +#pragma omp parallel for linear // expected-error {{expected '(' after 'linear'}} + for (int k = 0; k < argc; ++k) + ++k; +#pragma omp parallel for linear( // expected-error {{expected expression}} expected-error {{expected ')'}} expected-note {{to match this '('}} + for (int k = 0; k < argc; ++k) + ++k; +#pragma omp parallel for linear() // expected-error {{expected expression}} + for (int k = 0; k < argc; ++k) + ++k; +#pragma omp parallel for linear(argc // expected-error {{expected ')'}} expected-note {{to match this '('}} + for (int k = 0; k < argc; ++k) + ++k; +#pragma omp parallel for linear(argc, // expected-error {{expected expression}} expected-error {{expected ')'}} expected-note {{to match this '('}} + for (int k = 0; k < argc; ++k) + ++k; +#pragma omp parallel for linear(argc > 0 ? argv[1] : argv[2]) // expected-error {{expected variable name}} + for (int k = 0; k < argc; ++k) + ++k; +#pragma omp parallel for linear(argc : 5) + for (int k = 0; k < argc; ++k) + ++k; +#pragma omp parallel for linear(S1) // expected-error {{'S1' does not refer to a value}} + for (int k = 0; k < argc; ++k) + ++k; +// expected-error@+2 {{linear variable with incomplete type 'S1'}} +// expected-error@+1 {{const-qualified variable cannot be linear}} +#pragma omp parallel for linear(a, b : B::ib) + for (int k = 0; k < argc; ++k) + ++k; +#pragma omp parallel for linear(argv[1]) // expected-error {{expected variable name}} + for (int k = 0; k < argc; ++k) + ++k; +#pragma omp parallel for linear(e, g) + for (int k = 0; k < argc; ++k) + ++k; +#pragma omp parallel for linear(h) // expected-error {{threadprivate or thread local variable cannot be linear}} + for (int k = 0; k < argc; ++k) + ++k; +#pragma omp parallel for linear(i) + for (int k = 0; k < argc; ++k) + ++k; +#pragma omp parallel + { + int v = 0; + int i; +#pragma omp parallel for linear(v : i) + for (int k = 0; k < argc; ++k) { + i = k; + v += i; + } + } +#pragma omp parallel for linear(j) // expected-error {{arguments of OpenMP clause 'linear' cannot be of reference type}} + for (int k = 0; k < argc; ++k) + ++k; + int v = 0; +#pragma omp parallel for linear(v : j) + for (int k = 0; k < argc; ++k) { + ++k; + v += j; + } +#pragma omp parallel for linear(i) + for (int k = 0; k < argc; ++k) + ++k; + return 0; +} + +namespace A { +double x; +#pragma omp threadprivate(x) // expected-note {{defined as threadprivate or thread local}} +} +namespace C { +using A::x; +} + +int main(int argc, char **argv) { + double darr[100]; + // expected-note@+1 {{in instantiation of function template specialization 'test_template<-4, double, int>' requested here}} + test_template<-4>(darr, 4); + // expected-note@+1 {{in instantiation of function template specialization 'test_warn<0>' requested here}} + test_warn<0>(); + + S4 e(4); // expected-note {{'e' defined here}} + S5 g(5); // expected-note {{'g' defined here}} + int i; + int &j = i; // expected-note {{'j' defined here}} +#pragma omp parallel for linear // expected-error {{expected '(' after 'linear'}} + for (int k = 0; k < argc; ++k) + ++k; +#pragma omp parallel for linear( // expected-error {{expected expression}} expected-error {{expected ')'}} expected-note {{to match this '('}} + for (int k = 0; k < argc; ++k) + ++k; +#pragma omp parallel for linear() // expected-error {{expected expression}} + for (int k = 0; k < argc; ++k) + ++k; +#pragma omp parallel for linear(argc // expected-error {{expected ')'}} expected-note {{to match this '('}} + for (int k = 0; k < argc; ++k) + ++k; +#pragma omp parallel for linear(argc, // expected-error {{expected expression}} expected-error {{expected ')'}} expected-note {{to match this '('}} + for (int k = 0; k < argc; ++k) + ++k; +#pragma omp parallel for linear(argc > 0 ? argv[1] : argv[2]) // expected-error {{expected variable name}} + for (int k = 0; k < argc; ++k) + ++k; +#pragma omp parallel for linear(argc) + for (int k = 0; k < argc; ++k) + ++k; +#pragma omp parallel for linear(S1) // expected-error {{'S1' does not refer to a value}} + for (int k = 0; k < argc; ++k) + ++k; +// expected-error@+2 {{linear variable with incomplete type 'S1'}} +// expected-error@+1 {{const-qualified variable cannot be linear}} +#pragma omp parallel for linear(a, b) + for (int k = 0; k < argc; ++k) + ++k; +#pragma omp parallel for linear(argv[1]) // expected-error {{expected variable name}} + for (int k = 0; k < argc; ++k) + ++k; +// expected-error@+2 {{argument of a linear clause should be of integral or pointer type, not 'S4'}} +// expected-error@+1 {{argument of a linear clause should be of integral or pointer type, not 'S5'}} +#pragma omp parallel for linear(e, g) + for (int k = 0; k < argc; ++k) + ++k; +#pragma omp parallel for linear(h, C::x) // expected-error 2 {{threadprivate or thread local variable cannot be linear}} + for (int k = 0; k < argc; ++k) + ++k; +#pragma omp parallel + { + int i; +#pragma omp parallel for linear(i) + for (int k = 0; k < argc; ++k) + ++k; +#pragma omp parallel for linear(i : 4) + for (int k = 0; k < argc; ++k) { + ++k; + i += 4; + } + } +#pragma omp parallel for linear(j) // expected-error {{arguments of OpenMP clause 'linear' cannot be of reference type 'int &'}} + for (int k = 0; k < argc; ++k) + ++k; +#pragma omp parallel for linear(i) + for (int k = 0; k < argc; ++k) + ++k; + + foomain(argc, argv); + return 0; +} + diff --git a/test/OpenMP/parallel_for_loop_messages.cpp b/test/OpenMP/parallel_for_loop_messages.cpp index 8c0cdf8e9ed..b33128a4a45 100644 --- a/test/OpenMP/parallel_for_loop_messages.cpp +++ b/test/OpenMP/parallel_for_loop_messages.cpp @@ -242,7 +242,6 @@ int test_iteration_spaces() { for (ii = 0; ii < 10; ii++) c[ii] = a[ii]; -// expected-error@+3 {{unexpected OpenMP clause 'linear' in directive '#pragma omp parallel for'}} // expected-note@+2 {{defined as linear}} // expected-error@+2 {{loop iteration variable in the associated loop of 'omp parallel for' directive may not be linear, predetermined as private}} #pragma omp parallel for linear(ii) diff --git a/test/OpenMP/parallel_for_misc_messages.c b/test/OpenMP/parallel_for_misc_messages.c index ee6f2e81bb8..819f571d4e1 100644 --- a/test/OpenMP/parallel_for_misc_messages.c +++ b/test/OpenMP/parallel_for_misc_messages.c @@ -59,11 +59,6 @@ void test_non_identifiers() { #pragma omp parallel for; for (i = 0; i < 16; ++i) ; -// expected-error@+2 {{unexpected OpenMP clause 'linear' in directive '#pragma omp parallel for'}} -// expected-warning@+1 {{extra tokens at the end of '#pragma omp parallel for' are ignored}} -#pragma omp parallel for linear(x); - for (i = 0; i < 16; ++i) - ; // expected-warning@+1 {{extra tokens at the end of '#pragma omp parallel for' are ignored}} #pragma omp parallel for private(x); From f1e213fcf8b61964887c502f2c33905ecc52e6ed Mon Sep 17 00:00:00 2001 From: Benjamin Kramer Date: Tue, 4 Aug 2015 11:27:08 +0000 Subject: [PATCH 0032/1445] [FileManager] Use StringRef::copy to store canonical paths. No functional change intended. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@243970 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Basic/FileManager.cpp | 12 +++--------- 1 file changed, 3 insertions(+), 9 deletions(-) diff --git a/lib/Basic/FileManager.cpp b/lib/Basic/FileManager.cpp index 034ebc5c88b..21e6ea3ab4b 100644 --- a/lib/Basic/FileManager.cpp +++ b/lib/Basic/FileManager.cpp @@ -570,12 +570,8 @@ StringRef FileManager::getCanonicalName(const DirectoryEntry *Dir) { #ifdef LLVM_ON_UNIX char CanonicalNameBuf[PATH_MAX]; - if (realpath(Dir->getName(), CanonicalNameBuf)) { - unsigned Len = strlen(CanonicalNameBuf); - char *Mem = static_cast(CanonicalNameStorage.Allocate(Len, 1)); - memcpy(Mem, CanonicalNameBuf, Len); - CanonicalName = StringRef(Mem, Len); - } + if (realpath(Dir->getName(), CanonicalNameBuf)) + CanonicalName = StringRef(CanonicalNameBuf).copy(CanonicalNameStorage); #else SmallString<256> CanonicalNameBuf(CanonicalName); llvm::sys::fs::make_absolute(CanonicalNameBuf); @@ -587,9 +583,7 @@ StringRef FileManager::getCanonicalName(const DirectoryEntry *Dir) { // Ideally we'd have an equivalent of `realpath` and could implement // sys::fs::canonical across all the platforms. removeDotPaths(CanonicalNameBuf, /*RemoveDotDot*/true); - char *Mem = CanonicalNameStorage.Allocate(CanonicalNameBuf.size()); - memcpy(Mem, CanonicalNameBuf.data(), CanonicalNameBuf.size()); - CanonicalName = StringRef(Mem, CanonicalNameBuf.size()); + CanonicalName = StringRef(CanonicalNameBuf).copy(CanonicalNameStorage); #endif CanonicalDirNames.insert(std::make_pair(Dir, CanonicalName)); From e7406a25aa29fa53623b15ad41c195ce46727427 Mon Sep 17 00:00:00 2001 From: Benjamin Kramer Date: Tue, 4 Aug 2015 12:34:23 +0000 Subject: [PATCH 0033/1445] [ASTContext] Add a templated convenience wrapper for Allocate. This brings ASTContext closer to LLVM's Allocator concept. Ideally we would just derive ASTContext from llvm::AllocatorBase, but that does not work because ASTContext's allocator is mutable and we allocate using const ASTContext& everywhere. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@243972 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/clang/AST/ASTContext.h | 3 +++ lib/AST/Stmt.cpp | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/include/clang/AST/ASTContext.h b/include/clang/AST/ASTContext.h index c67fa67ab6b..dc9bc29d8da 100644 --- a/include/clang/AST/ASTContext.h +++ b/include/clang/AST/ASTContext.h @@ -501,6 +501,9 @@ class ASTContext : public RefCountedBase { void *Allocate(size_t Size, unsigned Align = 8) const { return BumpAlloc.Allocate(Size, Align); } + template T *Allocate(size_t Num = 1) const { + return static_cast(Allocate(Num * sizeof(T), llvm::alignOf())); + } void Deallocate(void *Ptr) const { } /// Return the total amount of physical memory allocated for representing diff --git a/lib/AST/Stmt.cpp b/lib/AST/Stmt.cpp index 771aeefda74..46dce322875 100644 --- a/lib/AST/Stmt.cpp +++ b/lib/AST/Stmt.cpp @@ -724,7 +724,7 @@ MSAsmStmt::MSAsmStmt(const ASTContext &C, SourceLocation asmloc, } static StringRef copyIntoContext(const ASTContext &C, StringRef str) { - return str.copy(C.getAllocator()); + return str.copy(C); } void MSAsmStmt::initialize(const ASTContext &C, StringRef asmstr, From efe283dc5a615f582e98b9a9bf37ab546e3854b0 Mon Sep 17 00:00:00 2001 From: Benjamin Kramer Date: Tue, 4 Aug 2015 12:34:30 +0000 Subject: [PATCH 0034/1445] [CodeGen] Don't write into a SmallVector's uninitialized memory. That's just ugly and not needed in this case. No functionality change. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@243973 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/CodeGen/CGCleanup.cpp | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/lib/CodeGen/CGCleanup.cpp b/lib/CodeGen/CGCleanup.cpp index ef5a98ead98..5666a689af7 100644 --- a/lib/CodeGen/CGCleanup.cpp +++ b/lib/CodeGen/CGCleanup.cpp @@ -685,13 +685,10 @@ void CodeGenFunction::PopCleanupBlock(bool FallthroughIsBranchThrough) { // Copy the cleanup emission data out. Note that SmallVector // guarantees maximal alignment for its buffer regardless of its // type parameter. - SmallVector CleanupBuffer; - CleanupBuffer.reserve(Scope.getCleanupSize()); - memcpy(CleanupBuffer.data(), - Scope.getCleanupBuffer(), Scope.getCleanupSize()); - CleanupBuffer.set_size(Scope.getCleanupSize()); - EHScopeStack::Cleanup *Fn = - reinterpret_cast(CleanupBuffer.data()); + auto *CleanupSource = reinterpret_cast(Scope.getCleanupBuffer()); + SmallVector CleanupBuffer( + CleanupSource, CleanupSource + Scope.getCleanupSize()); + auto *Fn = reinterpret_cast(CleanupBuffer.data()); EHScopeStack::Cleanup::Flags cleanupFlags; if (Scope.isNormalCleanup()) From 95d534b9664194b8f407375715ca644c8ffc95b3 Mon Sep 17 00:00:00 2001 From: Benjamin Kramer Date: Tue, 4 Aug 2015 12:59:41 +0000 Subject: [PATCH 0035/1445] [AST] Simplify code by letting ArrayRef do the copying. No functionality change intended. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@243974 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/AST/Type.cpp | 14 ++++---------- 1 file changed, 4 insertions(+), 10 deletions(-) diff --git a/lib/AST/Type.cpp b/lib/AST/Type.cpp index cee5fee8391..eb81cc76407 100644 --- a/lib/AST/Type.cpp +++ b/lib/AST/Type.cpp @@ -836,11 +836,8 @@ struct SimpleTransformVisitor } if (exceptionChanged) { - unsigned size = sizeof(QualType) * exceptionTypes.size(); - void *mem = Ctx.Allocate(size, llvm::alignOf()); - memcpy(mem, exceptionTypes.data(), size); - info.ExceptionSpec.Exceptions - = llvm::makeArrayRef((QualType *)mem, exceptionTypes.size()); + info.ExceptionSpec.Exceptions = + llvm::makeArrayRef(exceptionTypes).copy(Ctx); } } @@ -1158,11 +1155,8 @@ QualType QualType::substObjCTypeArgs( } if (exceptionChanged) { - unsigned size = sizeof(QualType) * exceptionTypes.size(); - void *mem = ctx.Allocate(size, llvm::alignOf()); - memcpy(mem, exceptionTypes.data(), size); - info.ExceptionSpec.Exceptions - = llvm::makeArrayRef((QualType *)mem, exceptionTypes.size()); + info.ExceptionSpec.Exceptions = + llvm::makeArrayRef(exceptionTypes).copy(ctx); } } From 6bcb1609b940850f3b1ce660c9026ab7e0804bcf Mon Sep 17 00:00:00 2001 From: Benjamin Kramer Date: Tue, 4 Aug 2015 13:34:50 +0000 Subject: [PATCH 0036/1445] [AST] Really allocate a SmallVector to the right size. set_size only resets the end pointer and asserts if it is used to grow the buffer. This would crash when mangling a float with more than 80 bits, add a test with a ppc double double (128 bits). Found by inspection. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@243979 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/AST/ItaniumMangle.cpp | 3 +-- test/CodeGenCXX/mangle-literal-suffix.cpp | 6 ++++-- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/lib/AST/ItaniumMangle.cpp b/lib/AST/ItaniumMangle.cpp index dac803e5d2f..e51aad9ad83 100644 --- a/lib/AST/ItaniumMangle.cpp +++ b/lib/AST/ItaniumMangle.cpp @@ -700,8 +700,7 @@ void CXXNameMangler::mangleFloat(const llvm::APFloat &f) { assert(numCharacters != 0); // Allocate a buffer of the right number of characters. - SmallVector buffer; - buffer.set_size(numCharacters); + SmallVector buffer(numCharacters); // Fill the buffer left-to-right. for (unsigned stringIndex = 0; stringIndex != numCharacters; ++stringIndex) { diff --git a/test/CodeGenCXX/mangle-literal-suffix.cpp b/test/CodeGenCXX/mangle-literal-suffix.cpp index ab557d5a1bf..d3ca9ffc378 100644 --- a/test/CodeGenCXX/mangle-literal-suffix.cpp +++ b/test/CodeGenCXX/mangle-literal-suffix.cpp @@ -1,4 +1,5 @@ -// RUN: %clang_cc1 -triple mips-none-none -emit-llvm -o - %s | FileCheck %s +// RUN: %clang_cc1 -triple mips-none-none -emit-llvm -o - %s | FileCheck %s -check-prefix=CHECK -check-prefix=FP64 +// RUN: %clang_cc1 -triple powerpc64-none-none -emit-llvm -o - %s | FileCheck %s -check-prefix=CHECK -check-prefix=FP128 template void g3(char (&buffer)[sizeof(T() + 5.0)]) {} template void g3(char (&)[sizeof(double)]); @@ -6,7 +7,8 @@ template void g3(char (&)[sizeof(double)]); template void g4(char (&buffer)[sizeof(T() + 5.0L)]) {} template void g4(char (&)[sizeof(long double)]); -// CHECK: _Z2g4IiEvRAszplcvT__ELe4014000000000000E_c +// FP64: _Z2g4IiEvRAszplcvT__ELe4014000000000000E_c +// FP128: _Z2g4IiEvRAszplcvT__ELg00000000000000004014000000000000E_c template void g5(char (&buffer)[sizeof(T() + 5)]) {} template void g5(char (&)[sizeof(int)]); From 88776dab94bc765b51694da3bf3b7f5644a92e26 Mon Sep 17 00:00:00 2001 From: Benjamin Kramer Date: Tue, 4 Aug 2015 14:46:06 +0000 Subject: [PATCH 0037/1445] [Sema] Allocate SmallVector to the right size. SmallVector::set_size does not reallocate the vector. Sadly I have no idea how to test this. The vector never has more than one member in all of the regression tests. Found by inspection. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@243987 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Sema/SemaTemplateInstantiateDecl.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/Sema/SemaTemplateInstantiateDecl.cpp b/lib/Sema/SemaTemplateInstantiateDecl.cpp index aff2d1c9667..0fa7f42fa5c 100644 --- a/lib/Sema/SemaTemplateInstantiateDecl.cpp +++ b/lib/Sema/SemaTemplateInstantiateDecl.cpp @@ -1657,7 +1657,7 @@ TemplateDeclInstantiator::VisitCXXMethodDecl(CXXMethodDecl *D, SmallVector TempParamLists; unsigned NumTempParamLists = 0; if (isFriend && (NumTempParamLists = D->getNumTemplateParameterLists())) { - TempParamLists.set_size(NumTempParamLists); + TempParamLists.resize(NumTempParamLists); for (unsigned I = 0; I != NumTempParamLists; ++I) { TemplateParameterList *TempParams = D->getTemplateParameterList(I); TemplateParameterList *InstParams = SubstTemplateParams(TempParams); From 258d7f406146fb29b333516105dc285476b52297 Mon Sep 17 00:00:00 2001 From: Benjamin Kramer Date: Tue, 4 Aug 2015 15:18:16 +0000 Subject: [PATCH 0038/1445] [Sema] Add a crazy test case for r243987 It's not valid code (maybe it can be made valid, but I'm not sure how). To trigger the crash fixed in r243987 requires a friend function with more than four template parameter lists. With this test we have at least some coverage. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@243989 91177308-0d34-0410-b5e6-96231b3b80d8 --- .../SemaCXX/many-template-parameter-lists.cpp | 36 +++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 test/SemaCXX/many-template-parameter-lists.cpp diff --git a/test/SemaCXX/many-template-parameter-lists.cpp b/test/SemaCXX/many-template-parameter-lists.cpp new file mode 100644 index 00000000000..f98005c7e6f --- /dev/null +++ b/test/SemaCXX/many-template-parameter-lists.cpp @@ -0,0 +1,36 @@ +// RUN: %clang_cc1 -fsyntax-only -verify %s + +// This is not well-formed C++ but used to crash in sema. + +template +struct X { + template + struct A { // expected-note {{not-yet-instantiated member is declared here}} + template + struct B { + template + struct C { + template + struct D { + template + struct E { + template + void operator+=(Z); + }; + }; + }; + }; + }; + + template + template + template + template + template + template + friend void A::template B::template C::template D::template E::operator+=(Z); // expected-warning {{not supported}} expected-error {{no member 'A' in 'X'; it has not yet been instantiated}} +}; + +void test() { + X::A::B::C::D::E() += 1.0; // expected-note {{in instantiation of template class 'X' requested here}} +} From e770ba628e812d34afb8963672b174533bd7c158 Mon Sep 17 00:00:00 2001 From: Benjamin Kramer Date: Tue, 4 Aug 2015 15:38:49 +0000 Subject: [PATCH 0039/1445] [CodeGen] Fold memcpy into SmallVector initializer. No functionality change. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@243992 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/CodeGen/CGException.cpp | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/lib/CodeGen/CGException.cpp b/lib/CodeGen/CGException.cpp index 16dc7d16dd4..7f4d1c01a75 100644 --- a/lib/CodeGen/CGException.cpp +++ b/lib/CodeGen/CGException.cpp @@ -1008,9 +1008,8 @@ void CodeGenFunction::ExitCXXTryStmt(const CXXTryStmt &S, bool IsFnTryBlock) { // Copy the handler blocks off before we pop the EH stack. Emitting // the handlers might scribble on this memory. - SmallVector Handlers(NumHandlers); - memcpy(Handlers.data(), CatchScope.begin(), - NumHandlers * sizeof(EHCatchScope::Handler)); + SmallVector Handlers( + CatchScope.begin(), CatchScope.begin() + NumHandlers); EHStack.popCatch(); From 0103b5324e03fab7ea7ac52bc9ca8c309e5f37c7 Mon Sep 17 00:00:00 2001 From: Tanya Lattner Date: Wed, 5 Aug 2015 03:55:23 +0000 Subject: [PATCH 0040/1445] Update mailing list references to lists.llvm.org git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@244000 91177308-0d34-0410-b5e6-96231b3b80d8 --- README.txt | 2 +- docs/ExternalClangExamples.rst | 2 +- docs/InternalsManual.rst | 2 +- docs/ReleaseNotes.rst | 2 +- test/Analysis/dead-stores.m | 2 +- test/SemaObjC/comptypes-9.m | 2 +- www/analyzer/checker_dev_manual.html | 6 +++--- www/analyzer/installation.html | 2 +- www/analyzer/menu.html.incl | 4 ++-- www/analyzer/open_projects.html | 2 +- www/demo/index.cgi | 2 +- www/get_involved.html | 12 ++++++------ www/menu.html.incl | 6 +++--- 13 files changed, 23 insertions(+), 23 deletions(-) diff --git a/README.txt b/README.txt index 474c67cf59e..ada9ebc9e23 100644 --- a/README.txt +++ b/README.txt @@ -20,7 +20,7 @@ Information on the LLVM project: http://llvm.org/ If you have questions or comments about Clang, a great place to discuss them is on the Clang development mailing list: - http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev + http://lists.llvm.org/mailman/listinfo/cfe-dev If you find a bug in Clang, please file it in the LLVM bug tracker: http://llvm.org/bugs/ diff --git a/docs/ExternalClangExamples.rst b/docs/ExternalClangExamples.rst index 71d50c23fa1..e6076a5be6d 100644 --- a/docs/ExternalClangExamples.rst +++ b/docs/ExternalClangExamples.rst @@ -20,7 +20,7 @@ where Clang is used are: If you know of (or wrote!) a tool or project using Clang, please send an email to Clang's `development discussion mailing list -`_ to have it added. +`_ to have it added. (or if you are already a Clang contributor, feel free to directly commit additions). Since the primary purpose of this page is to provide examples that can help developers, generally they must have code available. diff --git a/docs/InternalsManual.rst b/docs/InternalsManual.rst index 7f2a8fafccc..7959179d491 100644 --- a/docs/InternalsManual.rst +++ b/docs/InternalsManual.rst @@ -508,7 +508,7 @@ token. This concept maps directly to the "spelling location" for the token. ``SourceRange`` and ``CharSourceRange`` --------------------------------------- -.. mostly taken from http://lists.cs.uiuc.edu/pipermail/cfe-dev/2010-August/010595.html +.. mostly taken from http://lists.llvm.org/pipermail/cfe-dev/2010-August/010595.html Clang represents most source ranges by [first, last], where "first" and "last" each point to the beginning of their respective tokens. For example consider diff --git a/docs/ReleaseNotes.rst b/docs/ReleaseNotes.rst index 77eb2e3db6f..fc3f9fc2822 100644 --- a/docs/ReleaseNotes.rst +++ b/docs/ReleaseNotes.rst @@ -156,4 +156,4 @@ tree. If you have any questions or comments about Clang, please feel free to contact us via the `mailing -list `_. +list `_. diff --git a/test/Analysis/dead-stores.m b/test/Analysis/dead-stores.m index 5ad2569cee7..8bc6b2e84d0 100644 --- a/test/Analysis/dead-stores.m +++ b/test/Analysis/dead-stores.m @@ -28,7 +28,7 @@ - (NSArray *)exposedBindings; // This test case was reported as a false positive due to a bug in the // LiveVariables <-> deadcode.DeadStores interplay. We should not flag a warning // here. The test case was reported in: -// http://lists.cs.uiuc.edu/pipermail/cfe-dev/2008-July/002157.html +// http://lists.llvm.org/pipermail/cfe-dev/2008-July/002157.html void DeadStoreTest(NSObject *anObject) { NSArray *keys; if ((keys = [anObject exposedBindings]) && // no-warning diff --git a/test/SemaObjC/comptypes-9.m b/test/SemaObjC/comptypes-9.m index cc6932dcdbf..7064f167aaf 100644 --- a/test/SemaObjC/comptypes-9.m +++ b/test/SemaObjC/comptypes-9.m @@ -1,5 +1,5 @@ // RUN: %clang_cc1 -fsyntax-only %s -// FIXME: This test case tests the patch applied in: http://lists.cs.uiuc.edu/pipermail/cfe-commits/Week-of-Mon-20080602/006017.html +// FIXME: This test case tests the patch applied in: http://lists.llvm.org/pipermail/cfe-commits/Week-of-Mon-20080602/006017.html // Eventually that logic should be treated as an extension. typedef signed char BOOL; diff --git a/www/analyzer/checker_dev_manual.html b/www/analyzer/checker_dev_manual.html index c2606f92ee5..c674a74284b 100644 --- a/www/analyzer/checker_dev_manual.html +++ b/www/analyzer/checker_dev_manual.html @@ -28,7 +28,7 @@

Checker Developer Manual

part of the Clang project, so consult Hacking on Clang and LLVM Programmer's Manual for developer guidelines and send your questions and proposals to -cfe-dev mailing list. +cfe-dev mailing list.

diff --git a/www/analyzer/open_projects.html b/www/analyzer/open_projects.html index 4c3429da1f9..f354015c3f3 100644 --- a/www/analyzer/open_projects.html +++ b/www/analyzer/open_projects.html @@ -19,7 +19,7 @@

Open Projects

power. Most of the projects listed here are infrastructure-related so this list is an addition to the potential checkers list. If you are interested in tackling one of these, please send an email -to the cfe-dev +to the cfe-dev mailing list to notify other members of the community.