Account for calling convention specifiers in function definitions in IR test cases

Several tests wouldn't pass when executed on an armv7a_pc_linux triple
due to the non-default arm_aapcs calling convention produced on the
function definitions in the IR output. Account for this with the
application of a little regex.

Patch by Ying Yi.

llvm-svn: 240971
This commit is contained in:
David Blaikie 2015-06-29 17:29:50 +00:00
parent 117a94ff9d
commit ea3e51d73f
81 changed files with 366 additions and 366 deletions

View File

@ -6,7 +6,7 @@
// This is PR244 // This is PR244
// CHECK-LABEL: define void @bar( // CHECK-LABEL: define {{.*}}void @bar(
// CHECK: call {{.*}} @func // CHECK: call {{.*}} @func
// CHECK: define internal {{.*}}i32 @func( // CHECK: define internal {{.*}}i32 @func(
static int func(); static int func();

View File

@ -3,7 +3,7 @@
extern int printf(const char*, ...); extern int printf(const char*, ...);
// CHECK: define void {{.*}}foo( // CHECK: define {{.*}}void {{.*}}foo(
void foo(const char *msg) { void foo(const char *msg) {
// CHECK: call {{.*}}printf // CHECK: call {{.*}}printf
printf("%s\n",msg); printf("%s\n",msg);

View File

@ -1,7 +1,7 @@
// RUN: %clang_cc1 -Wno-gcc-compat -emit-llvm -o - %s | FileCheck %s // RUN: %clang_cc1 -Wno-gcc-compat -emit-llvm -o - %s | FileCheck %s
void pr8880_cg_1(int *iptr) { void pr8880_cg_1(int *iptr) {
// CHECK-LABEL: define void @pr8880_cg_1( // CHECK-LABEL: define {{.*}}void @pr8880_cg_1(
int i, j; int i, j;
// CHECK: br label %[[OUTER_COND:[0-9A-Za-z$._]+]] // CHECK: br label %[[OUTER_COND:[0-9A-Za-z$._]+]]
for (i = 2; i != 10 ; i++ ) for (i = 2; i != 10 ; i++ )
@ -31,7 +31,7 @@ void pr8880_cg_1(int *iptr) {
} }
void pr8880_cg_2(int *iptr) { void pr8880_cg_2(int *iptr) {
// CHECK-LABEL: define void @pr8880_cg_2( // CHECK-LABEL: define {{.*}}void @pr8880_cg_2(
int i, j; int i, j;
// CHECK: br label %[[OUTER_COND:[0-9A-Za-z$._]+]] // CHECK: br label %[[OUTER_COND:[0-9A-Za-z$._]+]]
for (i = 2; i != 10 ; i++ ) for (i = 2; i != 10 ; i++ )
@ -61,7 +61,7 @@ void pr8880_cg_2(int *iptr) {
} }
void pr8880_cg_3(int *iptr) { void pr8880_cg_3(int *iptr) {
// CHECK-LABEL: define void @pr8880_cg_3( // CHECK-LABEL: define {{.*}}void @pr8880_cg_3(
int i, j; int i, j;
// CHECK: br label %[[OUTER_COND:[0-9A-Za-z$._]+]] // CHECK: br label %[[OUTER_COND:[0-9A-Za-z$._]+]]
for (i = 2 ; i != 10 ; i++ ) for (i = 2 ; i != 10 ; i++ )
@ -92,7 +92,7 @@ void pr8880_cg_3(int *iptr) {
} }
void pr8880_cg_4(int *iptr) { void pr8880_cg_4(int *iptr) {
// CHECK-LABEL: define void @pr8880_cg_4( // CHECK-LABEL: define {{.*}}void @pr8880_cg_4(
int i, j; int i, j;
// CHECK: br label %[[OUTER_COND:[0-9A-Za-z$._]+]] // CHECK: br label %[[OUTER_COND:[0-9A-Za-z$._]+]]
for (i = 2 ; i != 10 ; i++ ) for (i = 2 ; i != 10 ; i++ )
@ -123,7 +123,7 @@ void pr8880_cg_4(int *iptr) {
} }
void pr8880_cg_5(int x, int *iptr) { void pr8880_cg_5(int x, int *iptr) {
// CHECK-LABEL: define void @pr8880_cg_5( // CHECK-LABEL: define {{.*}}void @pr8880_cg_5(
int y = 5; int y = 5;
// CHECK: br label %[[OUTER_COND:[0-9A-Za-z$._]+]] // CHECK: br label %[[OUTER_COND:[0-9A-Za-z$._]+]]
// CHECK: [[OUTER_COND]] // CHECK: [[OUTER_COND]]
@ -148,7 +148,7 @@ void pr8880_cg_5(int x, int *iptr) {
} }
void pr8880_cg_6(int x, int *iptr) { void pr8880_cg_6(int x, int *iptr) {
// CHECK-LABEL: define void @pr8880_cg_6( // CHECK-LABEL: define {{.*}}void @pr8880_cg_6(
int y = 5; int y = 5;
// CHECK: br label %[[OUTER_COND:[0-9A-Za-z$._]+]] // CHECK: br label %[[OUTER_COND:[0-9A-Za-z$._]+]]
// CHECK: [[OUTER_COND]] // CHECK: [[OUTER_COND]]

View File

@ -3,7 +3,7 @@
typedef float float4 __attribute__((ext_vector_type(4))); typedef float float4 __attribute__((ext_vector_type(4)));
typedef unsigned int uint4 __attribute__((ext_vector_type(4))); typedef unsigned int uint4 __attribute__((ext_vector_type(4)));
// CHECK-LABEL: define void @clang_shufflevector_v_v( // CHECK-LABEL: define {{.*}}void @clang_shufflevector_v_v(
void clang_shufflevector_v_v( float4* A, float4 x, uint4 mask ) { void clang_shufflevector_v_v( float4* A, float4 x, uint4 mask ) {
// CHECK: [[MASK:%.*]] = and <4 x i32> {{%.*}}, <i32 3, i32 3, i32 3, i32 3> // CHECK: [[MASK:%.*]] = and <4 x i32> {{%.*}}, <i32 3, i32 3, i32 3, i32 3>
// CHECK: [[I:%.*]] = extractelement <4 x i32> [[MASK]], i{{[0-9]+}} 0 // CHECK: [[I:%.*]] = extractelement <4 x i32> [[MASK]], i{{[0-9]+}} 0
@ -27,14 +27,14 @@ void clang_shufflevector_v_v( float4* A, float4 x, uint4 mask ) {
*A = __builtin_shufflevector( x, mask ); *A = __builtin_shufflevector( x, mask );
} }
// CHECK-LABEL: define void @clang_shufflevector_v_v_c( // CHECK-LABEL: define {{.*}}void @clang_shufflevector_v_v_c(
void clang_shufflevector_v_v_c( float4* A, float4 x, float4 y) { void clang_shufflevector_v_v_c( float4* A, float4 x, float4 y) {
// CHECK: [[V:%.*]] = shufflevector <4 x float> {{%.*}}, <4 x float> {{%.*}}, <4 x i32> <i32 0, i32 4, i32 1, i32 5> // CHECK: [[V:%.*]] = shufflevector <4 x float> {{%.*}}, <4 x float> {{%.*}}, <4 x i32> <i32 0, i32 4, i32 1, i32 5>
// CHECK: store <4 x float> [[V]], <4 x float>* {{%.*}} // CHECK: store <4 x float> [[V]], <4 x float>* {{%.*}}
*A = __builtin_shufflevector( x, y, 0, 4, 1, 5 ); *A = __builtin_shufflevector( x, y, 0, 4, 1, 5 );
} }
// CHECK-LABEL: define void @clang_shufflevector_v_v_undef( // CHECK-LABEL: define {{.*}}void @clang_shufflevector_v_v_undef(
void clang_shufflevector_v_v_undef( float4* A, float4 x, float4 y) { void clang_shufflevector_v_v_undef( float4* A, float4 x, float4 y) {
// CHECK: [[V:%.*]] = shufflevector <4 x float> {{%.*}}, <4 x float> {{%.*}}, <4 x i32> <i32 0, i32 4, i32 undef, i32 5> // CHECK: [[V:%.*]] = shufflevector <4 x float> {{%.*}}, <4 x float> {{%.*}}, <4 x i32> <i32 0, i32 4, i32 undef, i32 5>
// CHECK: store <4 x float> [[V]], <4 x float>* {{%.*}} // CHECK: store <4 x float> [[V]], <4 x float>* {{%.*}}

View File

@ -23,44 +23,44 @@ unsigned char align = 1;
void bar(const char *); void bar(const char *);
// CHECK-LABEL: define void @f0() // CHECK-LABEL: define {{.*}}void @f0()
void f0() { void f0() {
bar("hello"); bar("hello");
// ITANIUM: call void @bar({{.*}} @.str // ITANIUM: call {{.*}}void @bar({{.*}} @.str
// MSABI: call void @bar({{.*}} @"\01??_C@_05CJBACGMB@hello?$AA@" // MSABI: call {{.*}}void @bar({{.*}} @"\01??_C@_05CJBACGMB@hello?$AA@"
} }
// CHECK-LABEL: define void @f1() // CHECK-LABEL: define {{.*}}void @f1()
void f1() { void f1() {
static char *x = "hello"; static char *x = "hello";
bar(x); bar(x);
// CHECK: [[T1:%.*]] = load i8*, i8** @f1.x // CHECK: [[T1:%.*]] = load i8*, i8** @f1.x
// CHECK: call void @bar(i8* [[T1:%.*]]) // CHECK: call {{.*}}void @bar(i8* [[T1:%.*]])
} }
// CHECK-LABEL: define void @f2() // CHECK-LABEL: define {{.*}}void @f2()
void f2() { void f2() {
static char x[] = "hello"; static char x[] = "hello";
bar(x); bar(x);
// CHECK: call void @bar({{.*}} @f2.x // CHECK: call {{.*}}void @bar({{.*}} @f2.x
} }
// CHECK-LABEL: define void @f3() // CHECK-LABEL: define {{.*}}void @f3()
void f3() { void f3() {
static char x[8] = "hello"; static char x[8] = "hello";
bar(x); bar(x);
// CHECK: call void @bar({{.*}} @f3.x // CHECK: call {{.*}}void @bar({{.*}} @f3.x
} }
void gaz(void *); void gaz(void *);
// CHECK-LABEL: define void @f4() // CHECK-LABEL: define {{.*}}void @f4()
void f4() { void f4() {
static struct s { static struct s {
char *name; char *name;
} x = { "hello" }; } x = { "hello" };
gaz(&x); gaz(&x);
// CHECK: call void @gaz({{.*}} @f4.x // CHECK: call {{.*}}void @gaz({{.*}} @f4.x
} }
char x[3] = "ola"; char x[3] = "ola";

View File

@ -18,7 +18,7 @@ void JS_ReportErrorNumber(JSErrorCallback errorCallback, ...);
void Interpret() { void Interpret() {
JS_ReportErrorNumber(js_GetErrorMessage, 0); JS_ReportErrorNumber(js_GetErrorMessage, 0);
// CHECK: call void ({{.*}}, ...) @JS_ReportErrorNumber({{.*}}@js_GetErrorMessage // CHECK: call {{.*}}void ({{.*}}, ...) @JS_ReportErrorNumber({{.*}}@js_GetErrorMessage
} }

View File

@ -30,7 +30,7 @@ void test_nest_captured_stmt(int param, int size, int param_arr[size]) {
param_arr[size - 1] = 2; param_arr[size - 1] = 2;
arr[10][z.a] = 12; arr[10][z.a] = 12;
// CHECK1: define internal void @__captured_stmt{{.*}}([[T]] // CHECK1: define internal {{.*}}void @__captured_stmt{{.*}}([[T]]
// CHECK1: [[PARAM_ARR_SIZE_REF:%.+]] = getelementptr inbounds [[T]], [[T]]* {{.+}}, i{{[0-9]+}} 0, i{{[0-9]+}} 5 // CHECK1: [[PARAM_ARR_SIZE_REF:%.+]] = getelementptr inbounds [[T]], [[T]]* {{.+}}, i{{[0-9]+}} 0, i{{[0-9]+}} 5
// CHECK1: [[PARAM_ARR_SIZE:%.+]] = load [[SIZE_TYPE]], [[SIZE_TYPE]]* [[PARAM_ARR_SIZE_REF]] // CHECK1: [[PARAM_ARR_SIZE:%.+]] = load [[SIZE_TYPE]], [[SIZE_TYPE]]* [[PARAM_ARR_SIZE_REF]]
// CHECK1: [[ARR_SIZE1_REF:%.+]] = getelementptr inbounds [[T]], [[T]]* {{.+}}, i{{[0-9]+}} 0, i{{[0-9]+}} 8 // CHECK1: [[ARR_SIZE1_REF:%.+]] = getelementptr inbounds [[T]], [[T]]* {{.+}}, i{{[0-9]+}} 0, i{{[0-9]+}} 8
@ -106,7 +106,7 @@ void test_nest_block() {
} }
}(); }();
// CHECK2: define internal void @{{.*}}test_nest_block_block_invoke // CHECK2: define internal {{.*}}void @{{.*}}test_nest_block_block_invoke
// //
// CHECK2: [[Z:%[0-9a-z_]*]] = alloca i{{[0-9]+}}, // CHECK2: [[Z:%[0-9a-z_]*]] = alloca i{{[0-9]+}},
// CHECK2: alloca %struct.anon{{.*}} // CHECK2: alloca %struct.anon{{.*}}

View File

@ -28,7 +28,7 @@ void test1() {
// CHECK-1: call void @[[HelperName:__captured_stmt[\.0-9]+]] // CHECK-1: call void @[[HelperName:__captured_stmt[\.0-9]+]]
} }
// CHECK-1: define internal void @[[HelperName]](%struct.anon // CHECK-1: define internal {{.*}}void @[[HelperName]](%struct.anon
// CHECK-1: getelementptr inbounds %struct.anon{{.*}}, i32 0, i32 0 // CHECK-1: getelementptr inbounds %struct.anon{{.*}}, i32 0, i32 0
// CHECK-1: load i32*, i32** // CHECK-1: load i32*, i32**
// CHECK-1: load i32, i32* // CHECK-1: load i32, i32*
@ -48,7 +48,7 @@ void test2(int x) {
// CHECK-2: call void @[[HelperName:__captured_stmt[\.0-9]+]] // CHECK-2: call void @[[HelperName:__captured_stmt[\.0-9]+]]
} }
// CHECK-2: define internal void @[[HelperName]] // CHECK-2: define internal {{.*}}void @[[HelperName]]
// CHECK-2-NOT: } // CHECK-2-NOT: }
// CHECK-2: %i = alloca i32 // CHECK-2: %i = alloca i32
@ -93,7 +93,7 @@ void dont_capture_global() {
// CHECK-GLOBALS: call void @__captured_stmt[[HelperName:[\.0-9]+]](%[[Capture]] // CHECK-GLOBALS: call void @__captured_stmt[[HelperName:[\.0-9]+]](%[[Capture]]
} }
// CHECK-GLOBALS: define internal void @__captured_stmt[[HelperName]] // CHECK-GLOBALS: define internal {{.*}}void @__captured_stmt[[HelperName]]
// CHECK-GLOBALS-NOT: ret // CHECK-GLOBALS-NOT: ret
// CHECK-GLOBALS: load i32, i32* @global // CHECK-GLOBALS: load i32, i32* @global
// CHECK-GLOBALS: load i32, i32* @ // CHECK-GLOBALS: load i32, i32* @

View File

@ -21,7 +21,7 @@ void foo(signed char sc, unsigned char uc, signed long long sll,
_Complex unsigned char cuc1; _Complex unsigned char cuc1;
_Complex signed long long csll1; _Complex signed long long csll1;
_Complex unsigned long long cull1; _Complex unsigned long long cull1;
// CHECK-LABEL: define void @foo( // CHECK-LABEL: define {{.*}}void @foo(
// Match the prototype to pick up the size of sc and sll. // Match the prototype to pick up the size of sc and sll.
// CHECK: i[[CHSIZE:[0-9]+]]{{[^,]*}}, // CHECK: i[[CHSIZE:[0-9]+]]{{[^,]*}},
// CHECK: i[[CHSIZE]]{{[^,]*}}, // CHECK: i[[CHSIZE]]{{[^,]*}},

View File

@ -71,6 +71,6 @@ void test6f(void);
void test6() { void test6() {
do { do {
} while (test6f(), 0); } while (test6f(), 0);
// CHECK: call void @test6f() // CHECK: call {{.*}}void @test6f()
} }

View File

@ -2,7 +2,7 @@
float f0, f1, f2; float f0, f1, f2;
void foo(void) { void foo(void) {
// CHECK-LABEL: define void @foo() // CHECK-LABEL: define {{.*}}void @foo()
// CHECK: fadd fast // CHECK: fadd fast
f0 = f1 + f2; f0 = f1 + f2;

View File

@ -5,7 +5,7 @@
float f0, f1, f2; float f0, f1, f2;
void foo(void) { void foo(void) {
// CHECK-LABEL: define void @foo() // CHECK-LABEL: define {{.*}}void @foo()
// FINITE: fadd nnan ninf // FINITE: fadd nnan ninf
// NSZ: fadd nsz // NSZ: fadd nsz

View File

@ -16,4 +16,4 @@ void g0() {
} }
extern void f(int x) { } // still has internal linkage extern void f(int x) { } // still has internal linkage
// CHECK-LABEL: define internal void @f // CHECK-LABEL: define internal {{.*}}void @f

View File

@ -7,6 +7,6 @@ double pow(double, double);
double foo(double a, double b) { double foo(double a, double b) {
return pow(a, b); return pow(a, b);
// CHECK: call double @pow // CHECK: call {{.*}}double @pow
} }

View File

@ -1,13 +1,13 @@
// RUN: %clang_cc1 -emit-llvm -o - %s -stack-protector 0 | FileCheck -check-prefix=NOSSP %s // RUN: %clang_cc1 -emit-llvm -o - %s -stack-protector 0 | FileCheck -check-prefix=NOSSP %s
// NOSSP: define void @test1(i8* %msg) #0 { // NOSSP: define {{.*}}void @test1(i8* %msg) #0 {
// RUN: %clang_cc1 -emit-llvm -o - %s -stack-protector 1 | FileCheck -check-prefix=WITHSSP %s // RUN: %clang_cc1 -emit-llvm -o - %s -stack-protector 1 | FileCheck -check-prefix=WITHSSP %s
// WITHSSP: define void @test1(i8* %msg) #0 { // WITHSSP: define {{.*}}void @test1(i8* %msg) #0 {
// RUN: %clang_cc1 -emit-llvm -o - %s -stack-protector 2 | FileCheck -check-prefix=SSPSTRONG %s // RUN: %clang_cc1 -emit-llvm -o - %s -stack-protector 2 | FileCheck -check-prefix=SSPSTRONG %s
// SSPSTRONG: define void @test1(i8* %msg) #0 { // SSPSTRONG: define {{.*}}void @test1(i8* %msg) #0 {
// RUN: %clang_cc1 -emit-llvm -o - %s -stack-protector 3 | FileCheck -check-prefix=SSPREQ %s // RUN: %clang_cc1 -emit-llvm -o - %s -stack-protector 3 | FileCheck -check-prefix=SSPREQ %s
// SSPREQ: define void @test1(i8* %msg) #0 { // SSPREQ: define {{.*}}void @test1(i8* %msg) #0 {
// RUN: %clang_cc1 -emit-llvm -o - %s -fsanitize=safe-stack | FileCheck -check-prefix=SAFESTACK %s // RUN: %clang_cc1 -emit-llvm -o - %s -fsanitize=safe-stack | FileCheck -check-prefix=SAFESTACK %s
// SAFESTACK: define void @test1(i8* %msg) #0 { // SAFESTACK: define {{.*}}void @test1(i8* %msg) #0 {
typedef __SIZE_TYPE__ size_t; typedef __SIZE_TYPE__ size_t;

View File

@ -1,7 +1,7 @@
// RUN: %clang_cc1 -emit-llvm -o - %s | FileCheck %s // RUN: %clang_cc1 -emit-llvm -o - %s | FileCheck %s
// CHECK: ModuleID // CHECK: ModuleID
// CHECK-NOT: zeroinitializer // CHECK-NOT: zeroinitializer
// CHECK-LABEL: define i8* @f // CHECK-LABEL: define {{.*}}i8* @f
struct s { struct s {
int a; int a;

View File

@ -14,9 +14,9 @@ unsigned i;
// FUNC: @hash // FUNC: @hash
// FILE: @hash // FILE: @hash
unsigned hash() { unsigned hash() {
// DEFAULT: call void @__ubsan // DEFAULT: call {{.*}}void @__ubsan
// FUNC-NOT: call void @__ubsan // FUNC-NOT: call {{.*}}void @__ubsan
// FILE-NOT: call void @__ubsan // FILE-NOT: call {{.*}}void @__ubsan
return i * 37; return i * 37;
} }
@ -24,8 +24,8 @@ unsigned hash() {
// FUNC: @add // FUNC: @add
// FILE: @add // FILE: @add
unsigned add() { unsigned add() {
// DEFAULT: call void @__ubsan // DEFAULT: call {{.*}}void @__ubsan
// FUNC: call void @__ubsan // FUNC: call {{.*}}void @__ubsan
// FILE-NOT: call void @__ubsan // FILE-NOT: call {{.*}}void @__ubsan
return i + 1; return i + 1;
} }

View File

@ -22,7 +22,7 @@ int printf(const char *, ...);
// that do implicit lvalue-to-rvalue conversion are substantially // that do implicit lvalue-to-rvalue conversion are substantially
// reduced. // reduced.
// CHECK-LABEL: define void @test() // CHECK-LABEL: define {{.*}}void @test()
void test() { void test() {
// CHECK: load volatile [[INT]], [[INT]]* @i // CHECK: load volatile [[INT]], [[INT]]* @i
i; i;
@ -303,11 +303,11 @@ void test() {
} }
extern volatile enum X x; extern volatile enum X x;
// CHECK-LABEL: define void @test1() // CHECK-LABEL: define {{.*}}void @test1()
void test1() { void test1() {
extern void test1_helper(void); extern void test1_helper(void);
test1_helper(); test1_helper();
// CHECK: call void @test1_helper() // CHECK: call {{.*}}void @test1_helper()
// CHECK-NEXT: ret void // CHECK-NEXT: ret void
x; x;
(void) x; (void) x;

View File

@ -4,6 +4,6 @@ struct a {
}; };
void g(a *a) { void g(a *a) {
// CHECK: call void @_ZN1a1fEv() // CHECK: call {{.*}}void @_ZN1a1fEv()
a->f(); a->f();
} }

View File

@ -9,8 +9,8 @@ void test() {
// CHECK: @_Z1fIiEvv // CHECK: @_Z1fIiEvv
void (*p2)() = f<int>; void (*p2)() = f<int>;
} }
// CHECK-LABEL: define linkonce_odr void @_Z1fIiEvT_ // CHECK-LABEL: define linkonce_odr {{.*}}void @_Z1fIiEvT_
// CHECK-LABEL: define linkonce_odr void @_Z1fIiEvv // CHECK-LABEL: define linkonce_odr {{.*}}void @_Z1fIiEvv
namespace PR6973 { namespace PR6973 {
template<typename T> template<typename T>

View File

@ -5,7 +5,7 @@ namespace N {
} }
int main(void) { int main(void) {
// CHECK: call void @_ZN1N4freeEPv // CHECK: call {{.*}}void @_ZN1N4freeEPv
void *fp __attribute__((cleanup(N::free))); void *fp __attribute__((cleanup(N::free)));
return 0; return 0;
} }

View File

@ -20,9 +20,9 @@ int main()
// CHECK-LABEL: define internal void @__Block_byref_object_dispose_ // CHECK-LABEL: define internal void @__Block_byref_object_dispose_
// CHECK: call {{.*}} @_ZN1AD1Ev // CHECK: call {{.*}} @_ZN1AD1Ev
// CHECK-LABEL: define internal void @__copy_helper_block_ // CHECK-LABEL: define internal void @__copy_helper_block_
// CHECK: call void @_Block_object_assign // CHECK: call {{.*}}void @_Block_object_assign
// CHECK-LABEL: define internal void @__destroy_helper_block_ // CHECK-LABEL: define internal void @__destroy_helper_block_
// CHECK: call void @_Block_object_dispose // CHECK: call {{.*}}void @_Block_object_dispose
// rdar://problem/11135650 // rdar://problem/11135650
namespace test1 { namespace test1 {

View File

@ -15,10 +15,10 @@ extern "C" {
extern "C" { extern "C" {
static void test2_f() { static void test2_f() {
} }
// CHECK-LABEL: define internal void @_Z7test2_fv // CHECK-LABEL: define internal {{.*}}void @_Z7test2_fv
static void test2_f(int x) { static void test2_f(int x) {
} }
// CHECK-LABEL: define internal void @_Z7test2_fi // CHECK-LABEL: define internal {{.*}}void @_Z7test2_fi
void test2_use() { void test2_use() {
test2_f(); test2_f();
test2_f(42); test2_f(42);

View File

@ -44,11 +44,11 @@ void test1() {
// CHECK-1: ret // CHECK-1: ret
} }
// CHECK-1: define internal void @[[HelperName]] // CHECK-1: define internal {{.*}}void @[[HelperName]]
// CHECK-1: getelementptr inbounds %[[Capture]], %[[Capture]]* {{[^,]*}}, i32 0, i32 0 // CHECK-1: getelementptr inbounds %[[Capture]], %[[Capture]]* {{[^,]*}}, i32 0, i32 0
// CHECK-1: call i32 @__cxa_guard_acquire( // CHECK-1: call {{.*}}i32 @__cxa_guard_acquire(
// CHECK-1: store double %{{.+}}, double* [[INNER]], // CHECK-1: store double %{{.+}}, double* [[INNER]],
// CHECK-1: call void @__cxa_guard_release( // CHECK-1: call {{.*}}void @__cxa_guard_release(
// CHECK-1: getelementptr inbounds %struct.TestClass, %struct.TestClass* {{[^,]*}}, i32 0, i32 0 // CHECK-1: getelementptr inbounds %struct.TestClass, %struct.TestClass* {{[^,]*}}, i32 0, i32 0
// CHECK-1: getelementptr inbounds %[[Capture]], %[[Capture]]* {{[^,]*}}, i32 0, i32 1 // CHECK-1: getelementptr inbounds %[[Capture]], %[[Capture]]* {{[^,]*}}, i32 0, i32 1
@ -61,13 +61,13 @@ void test2(int x) {
return x; return x;
}(); }();
// CHECK-2-LABEL: define void @_Z5test2i // CHECK-2-LABEL: define {{.*}}void @_Z5test2i
// CHECK-2: call {{.*}} @[[Lambda:["$\w]+]] // CHECK-2: call {{.*}} @[[Lambda:["$\w]+]]
// //
// CHECK-2: define internal {{.*}} @[[Lambda]] // CHECK-2: define internal {{.*}} @[[Lambda]]
// CHECK-2: call void @[[HelperName:["$_A-Za-z0-9]+]](%[[Capture:.*]]* // CHECK-2: call void @[[HelperName:["$_A-Za-z0-9]+]](%[[Capture:.*]]*
// //
// CHECK-2: define internal void @[[HelperName]] // CHECK-2: define internal {{.*}}void @[[HelperName]]
// CHECK-2: getelementptr inbounds %[[Capture]], %[[Capture]]* // CHECK-2: getelementptr inbounds %[[Capture]], %[[Capture]]*
// CHECK-2: load i32*, i32** // CHECK-2: load i32*, i32**
// CHECK-2: load i32, i32* // CHECK-2: load i32, i32*
@ -81,7 +81,7 @@ void test3(int x) {
// CHECK-3: %[[Capture:struct\.anon[\.0-9]*]] = type { i32* } // CHECK-3: %[[Capture:struct\.anon[\.0-9]*]] = type { i32* }
// CHECK-3-LABEL: define void @_Z5test3i // CHECK-3-LABEL: define {{.*}}void @_Z5test3i
// CHECK-3: store i32* // CHECK-3: store i32*
// CHECK-3: call void @{{.*}}__captured_stmt // CHECK-3: call void @{{.*}}__captured_stmt
// CHECK-3: ret void // CHECK-3: ret void
@ -93,11 +93,11 @@ void test4() {
Foo f; Foo f;
f.x = 5; f.x = 5;
} }
// CHECK-4-LABEL: define void @_Z5test4v // CHECK-4-LABEL: define {{.*}}void @_Z5test4v
// CHECK-4: call void @[[HelperName:[\."$_A-Za-z0-9]+]](%[[Capture:.*]]* // CHECK-4: call void @[[HelperName:[\."$_A-Za-z0-9]+]](%[[Capture:.*]]*
// CHECK-4: ret void // CHECK-4: ret void
// //
// CHECK-4: define internal void @[[HelperName]] // CHECK-4: define internal {{.*}}void @[[HelperName]]
// CHECK-4: store i32 5, i32* // CHECK-4: store i32 5, i32*
// CHECK-4: call {{.*}}FooD1Ev // CHECK-4: call {{.*}}FooD1Ev
} }

View File

@ -5,7 +5,7 @@
// PR6521 // PR6521
void bar(); void bar();
struct Foo { struct Foo {
// CHECK-LABEL: define linkonce_odr void @_ZN3Foo3fooEv // CHECK-LABEL: define linkonce_odr {{.*}}void @_ZN3Foo3fooEv
static void foo() __attribute__((constructor)) { static void foo() __attribute__((constructor)) {
bar(); bar();
} }

View File

@ -11,8 +11,8 @@
// CHECK: @llvm.global_ctors = appending global [1 x { i32, void ()*, i8* }] // CHECK: @llvm.global_ctors = appending global [1 x { i32, void ()*, i8* }]
// CHECK: [{ i32, void ()*, i8* } { i32 65535, void ()* @_GLOBAL__sub_I_ctor_globalopt.cpp, i8* null }] // CHECK: [{ i32, void ()*, i8* } { i32 65535, void ()* @_GLOBAL__sub_I_ctor_globalopt.cpp, i8* null }]
// CHECK-LABEL: define internal void @_GLOBAL__sub_I_ctor_globalopt.cpp() // CHECK-LABEL: define internal {{.*}}void @_GLOBAL__sub_I_ctor_globalopt.cpp()
// CHECK: call void @ // CHECK: call {{.*}}void @
// CHECK-NOT: call{{ }} // CHECK-NOT: call{{ }}
// O1: @llvm.global_ctors = appending global [0 x { i32, void ()*, i8* }] zeroinitializer // O1: @llvm.global_ctors = appending global [0 x { i32, void ()*, i8* }] zeroinitializer

View File

@ -158,7 +158,7 @@ __complex double f11() {
void f12() { void f12() {
int f12_1(); int f12_1();
void f12_2(int = f12_1()); void f12_2(int = f12_1());
// CHECK: call {{(signext )?}}i32 {{.*}} !dbg [[DBG_F12:!.*]] // CHECK: call {{.*}}{{(signext )?}}i32 {{.*}} !dbg [[DBG_F12:!.*]]
#line 1400 #line 1400
f12_2(); f12_2();
} }

View File

@ -7,10 +7,10 @@ void* bar() { return a; }
// CHECK: @_ZL1a = internal global i8* null // CHECK: @_ZL1a = internal global i8* null
// CHECK-LABEL: define internal void @__cxx_global_var_init // CHECK-LABEL: define internal {{.*}}void @__cxx_global_var_init
// CHECK: load i8*, i8** @foo // CHECK: load i8*, i8** @foo
// CHECK: ret void // CHECK: ret void
// CHECK-LABEL: define internal void @_GLOBAL__sub_I_deferred_global_init.cpp // CHECK-LABEL: define internal {{.*}}void @_GLOBAL__sub_I_deferred_global_init.cpp
// CHECK: call void @__cxx_global_var_init() // CHECK: call {{.*}}void @__cxx_global_var_init()
// CHECK: ret void // CHECK: ret void

View File

@ -9,7 +9,7 @@ struct D final : virtual C {
virtual void f(); virtual void f();
}; };
// CHECK-LABEL: define dereferenceable({{[0-9]+}}) %struct.B* @_Z1fR1D // CHECK-LABEL: define {{.*}}dereferenceable({{[0-9]+}}) %struct.B* @_Z1fR1D
B &f(D &d) { B &f(D &d) {
// CHECK-NOT: load i8*, i8** // CHECK-NOT: load i8*, i8**
return d; return d;

View File

@ -13,14 +13,14 @@ struct B : public A {
// does not use runtime support. // does not use runtime support.
A *upcast(B *b) { A *upcast(B *b) {
return dynamic_cast<A *>(b); return dynamic_cast<A *>(b);
// CHECK-LABEL: define %struct.A* @_Z6upcastP1B // CHECK-LABEL: define {{.*}}%struct.A* @_Z6upcastP1B
// CHECK-NOT: call i8* @__dynamic_cast // CHECK-NOT: call {{.*}}i8* @__dynamic_cast
} }
// A NoOp dynamic_cast can be used with -fno-rtti iff it does not use // A NoOp dynamic_cast can be used with -fno-rtti iff it does not use
// runtime support. // runtime support.
B *samecast(B *b) { B *samecast(B *b) {
return dynamic_cast<B *>(b); return dynamic_cast<B *>(b);
// CHECK-LABEL: define %struct.B* @_Z8samecastP1B // CHECK-LABEL: define {{.*}}%struct.B* @_Z8samecastP1B
// CHECK-NOT: call i8* @__dynamic_cast // CHECK-NOT: call {{.*}}i8* @__dynamic_cast
} }

View File

@ -71,5 +71,5 @@ namespace PR19411 {
struct A { void f(); }; struct A { void f(); };
extern "C" void A::f() { void g(); g(); } extern "C" void A::f() { void g(); g(); }
// CHECK-LABEL: @_ZN7PR194111A1fEv( // CHECK-LABEL: @_ZN7PR194111A1fEv(
// CHECK: call void @g() // CHECK: call {{.*}}void @g()
} }

View File

@ -3,11 +3,11 @@
template<typename T> void a(T); template<typename T> void a(T);
template<> void a(int) {} template<> void a(int) {}
// CHECK-LABEL: define void @_Z1aIiEvT_ // CHECK-LABEL: define {{.*}}void @_Z1aIiEvT_
namespace X { namespace X {
template<typename T> void b(T); template<typename T> void b(T);
template<> void b(int) {} template<> void b(int) {}
} }
// CHECK-LABEL: define void @_ZN1X1bIiEEvT_ // CHECK-LABEL: define {{.*}}void @_ZN1X1bIiEEvT_

View File

@ -4,7 +4,7 @@
// Verify that the global init helper function does not get associated // Verify that the global init helper function does not get associated
// with any source location. // with any source location.
// //
// CHECK: define internal void @_GLOBAL__sub_I_globalinit_loc.cpp // CHECK: define internal {{.*}}void @_GLOBAL__sub_I_globalinit_loc.cpp
// CHECK: !dbg ![[DBG:.*]] // CHECK: !dbg ![[DBG:.*]]
// CHECK: !DISubprogram(linkageName: "_GLOBAL__sub_I_globalinit_loc.cpp" // CHECK: !DISubprogram(linkageName: "_GLOBAL__sub_I_globalinit_loc.cpp"
// CHECK-NOT: line: // CHECK-NOT: line:

View File

@ -1,12 +1,12 @@
// RUN: %clang_cc1 -emit-llvm -triple %itanium_abi_triple -o - %s | FileCheck %s // RUN: %clang_cc1 -emit-llvm -triple %itanium_abi_triple -o - %s | FileCheck %s
// CHECK-LABEL: define void @_Z2f0Pc // CHECK-LABEL: define {{.*}}void @_Z2f0Pc
void f0(char *p) { } void f0(char *p) { }
// CHECK-LABEL: define void @_Z2f0PU3AS1c // CHECK-LABEL: define {{.*}}void @_Z2f0PU3AS1c
void f0(char __attribute__((address_space(1))) *p) { } void f0(char __attribute__((address_space(1))) *p) { }
struct OpaqueType; struct OpaqueType;
typedef OpaqueType __attribute__((address_space(100))) * OpaqueTypePtr; typedef OpaqueType __attribute__((address_space(100))) * OpaqueTypePtr;
// CHECK-LABEL: define void @_Z2f0PU5AS10010OpaqueType // CHECK-LABEL: define {{.*}}void @_Z2f0PU5AS10010OpaqueType
void f0(OpaqueTypePtr) { } void f0(OpaqueTypePtr) { }

View File

@ -2,15 +2,15 @@
template<int *ip> struct IP {}; template<int *ip> struct IP {};
// CHECK-LABEL: define void @_Z5test12IPILPi0EE // CHECK-LABEL: define {{.*}}void @_Z5test12IPILPi0EE
void test1(IP<nullptr>) {} void test1(IP<nullptr>) {}
struct X{ }; struct X{ };
template<int X::*pm> struct PM {}; template<int X::*pm> struct PM {};
// CHECK-LABEL: define void @_Z5test22PMILM1Xi0EE // CHECK-LABEL: define {{.*}}void @_Z5test22PMILM1Xi0EE
void test2(PM<nullptr>) { } void test2(PM<nullptr>) { }
// CHECK-LABEL: define void @_Z5test316DependentTypePtrIPiLS0_0EE // CHECK-LABEL: define {{.*}}void @_Z5test316DependentTypePtrIPiLS0_0EE
template<typename T, T x> struct DependentTypePtr {}; template<typename T, T x> struct DependentTypePtr {};
void test3(DependentTypePtr<int*,nullptr>) { } void test3(DependentTypePtr<int*,nullptr>) { }

View File

@ -98,7 +98,7 @@ namespace test8 {
template<typename T> template<typename T>
void f(int_c<meta<T>::type::value>) { } void f(int_c<meta<T>::type::value>) { }
// CHECK-LABEL: define weak_odr void @_ZN5test81fIiEEvNS_5int_cIXsr4metaIT_E4typeE5valueEEE( // CHECK-LABEL: define weak_odr {{.*}}void @_ZN5test81fIiEEvNS_5int_cIXsr4metaIT_E4typeE5valueEEE(
template void f<int>(int_c<sizeof(int)>); template void f<int>(int_c<sizeof(int)>);
} }
@ -157,13 +157,13 @@ namespace test12 {
const int n = 10; const int n = 10;
template<typename T, T v> void test() {} template<typename T, T v> void test() {}
void use() { void use() {
// CHECK-LABEL: define internal void @_ZN6test124testIFivEXadL_ZNS_L1fEvEEEEvv( // CHECK-LABEL: define internal {{.*}}void @_ZN6test124testIFivEXadL_ZNS_L1fEvEEEEvv(
test<int(), &f>(); test<int(), &f>();
// CHECK-LABEL: define internal void @_ZN6test124testIRFivEL_ZNS_L1fEvEEEvv( // CHECK-LABEL: define internal {{.*}}void @_ZN6test124testIRFivEL_ZNS_L1fEvEEEvv(
test<int(&)(), f>(); test<int(&)(), f>();
// CHECK-LABEL: define internal void @_ZN6test124testIPKiXadL_ZNS_L1nEEEEEvv( // CHECK-LABEL: define internal {{.*}}void @_ZN6test124testIPKiXadL_ZNS_L1nEEEEEvv(
test<const int*, &n>(); test<const int*, &n>();
// CHECK-LABEL: define internal void @_ZN6test124testIRKiL_ZNS_L1nEEEEvv( // CHECK-LABEL: define internal {{.*}}void @_ZN6test124testIRKiL_ZNS_L1nEEEEvv(
test<const int&, n>(); test<const int&, n>();
} }
} }

View File

@ -5,4 +5,4 @@ namespace std __attribute__ ((__visibility__ ("default"))) {}
void foo() { void foo() {
} }
#pragma GCC visibility pop #pragma GCC visibility pop
// CHECK-LABEL: define void @_Z3foov() // CHECK-LABEL: define {{.*}}void @_Z3foov()

View File

@ -11,4 +11,4 @@ extern "C" {
// PR18661: Clang would fail to emit function definition with mismatching // PR18661: Clang would fail to emit function definition with mismatching
// exception specification, even though it was just treated as a warning. // exception specification, even though it was just treated as a warning.
// CHECK: define void @f() // CHECK: define {{.*}}void @f()

View File

@ -8,7 +8,7 @@ struct X : A // default constructor is not trivial
}; };
X<int> x; X<int> x;
// CHECK-LABEL: define internal void @__cxx_global_var_init() // CHECK-LABEL: define internal {{.*}}void @__cxx_global_var_init()
// CHECK: call {{.*}} @_ZN1XIiEC1Ev // CHECK: call {{.*}} @_ZN1XIiEC1Ev
// CHECK: define linkonce_odr {{.*}} @_ZN1XIiEC1Ev // CHECK: define linkonce_odr {{.*}} @_ZN1XIiEC1Ev
// CHECK: define linkonce_odr {{.*}} @_ZN1XIiEC2Ev // CHECK: define linkonce_odr {{.*}} @_ZN1XIiEC2Ev

View File

@ -14,18 +14,18 @@ void S::foo() {}
#pragma weak zed #pragma weak zed
namespace bar { void zed() {} } namespace bar { void zed() {} }
// CHECK-LABEL: define void @_ZN3bar3zedEv( // CHECK-LABEL: define {{.*}}void @_ZN3bar3zedEv(
#pragma weak bah #pragma weak bah
void bah() {} void bah() {}
// CHECK-LABEL: define void @_Z3bahv( // CHECK-LABEL: define {{.*}}void @_Z3bahv(
#pragma weak baz #pragma weak baz
extern "C" void baz() {} extern "C" void baz() {}
// CHECK-LABEL: define weak void @baz( // CHECK-LABEL: define weak {{.*}}void @baz(
#pragma weak _Z3baxv #pragma weak _Z3baxv
void bax() {} void bax() {}
// GCC produces a weak symbol for this one, but it doesn't look like a good // GCC produces a weak symbol for this one, but it doesn't look like a good
// idea to expose the mangling to the pragma unless we really have to. // idea to expose the mangling to the pragma unless we really have to.
// CHECK-LABEL: define void @_Z3baxv( // CHECK-LABEL: define {{.*}}void @_Z3baxv(

View File

@ -559,11 +559,11 @@ XXX::XXX()
_dispatch_once(^{ notify_register_dispatch( ^(int token) { XXLog(__FUNCTION__); }); _dispatch_once(^{ notify_register_dispatch( ^(int token) { XXLog(__FUNCTION__); });
}); });
} }
// CHECK: define internal void @___ZN3XXXC2Ev_block_invoke_ // CHECK: define internal {{.*}}void @___ZN3XXXC2Ev_block_invoke_
XXX::~XXX() XXX::~XXX()
{ {
_dispatch_once(^{ notify_register_dispatch( ^(int token) { XXLog(__FUNCTION__); }); _dispatch_once(^{ notify_register_dispatch( ^(int token) { XXLog(__FUNCTION__); });
}); });
} }
// CHECK: define internal void @___ZN3XXXD2Ev_block_invoke_ // CHECK: define internal {{.*}}void @___ZN3XXXD2Ev_block_invoke_

View File

@ -18,7 +18,7 @@ void IntToString(T a)
} }
int main() { int main() {
// CHECK-LABEL: define linkonce_odr void @_Z11IntToStringIcEvT_( // CHECK-LABEL: define linkonce_odr {{.*}}void @_Z11IntToStringIcEvT_(
IntToString('a'); IntToString('a');
} }

View File

@ -10,73 +10,73 @@ struct A {
struct B : A {}; struct B : A {};
void f1(A *x) { typeid(false, *x); } void f1(A *x) { typeid(false, *x); }
// CHECK-LABEL: define void @_Z2f1P1A // CHECK-LABEL: define {{.*}}void @_Z2f1P1A
// CHECK: icmp eq {{.*}}, null // CHECK: icmp eq {{.*}}, null
// CHECK-NEXT: br i1 // CHECK-NEXT: br i1
void f2(bool b, A *x, A *y) { typeid(b ? *x : *y); } void f2(bool b, A *x, A *y) { typeid(b ? *x : *y); }
// CHECK-LABEL: define void @_Z2f2bP1AS0_ // CHECK-LABEL: define {{.*}}void @_Z2f2bP1AS0_
// CHECK: icmp eq {{.*}}, null // CHECK: icmp eq {{.*}}, null
// CHECK-NEXT: br i1 // CHECK-NEXT: br i1
void f3(bool b, A *x, A &y) { typeid(b ? *x : y); } void f3(bool b, A *x, A &y) { typeid(b ? *x : y); }
// CHECK-LABEL: define void @_Z2f3bP1ARS_ // CHECK-LABEL: define {{.*}}void @_Z2f3bP1ARS_
// CHECK: icmp eq {{.*}}, null // CHECK: icmp eq {{.*}}, null
// CHECK-NEXT: br i1 // CHECK-NEXT: br i1
void f4(bool b, A &x, A *y) { typeid(b ? x : *y); } void f4(bool b, A &x, A *y) { typeid(b ? x : *y); }
// CHECK-LABEL: define void @_Z2f4bR1APS_ // CHECK-LABEL: define {{.*}}void @_Z2f4bR1APS_
// CHECK: icmp eq {{.*}}, null // CHECK: icmp eq {{.*}}, null
// CHECK-NEXT: br i1 // CHECK-NEXT: br i1
void f5(volatile A *x) { typeid(*x); } void f5(volatile A *x) { typeid(*x); }
// CHECK-LABEL: define void @_Z2f5PV1A // CHECK-LABEL: define {{.*}}void @_Z2f5PV1A
// CHECK: icmp eq {{.*}}, null // CHECK: icmp eq {{.*}}, null
// CHECK-NEXT: br i1 // CHECK-NEXT: br i1
void f6(A *x) { typeid((B &)*(B *)x); } void f6(A *x) { typeid((B &)*(B *)x); }
// CHECK-LABEL: define void @_Z2f6P1A // CHECK-LABEL: define {{.*}}void @_Z2f6P1A
// CHECK: icmp eq {{.*}}, null // CHECK: icmp eq {{.*}}, null
// CHECK-NEXT: br i1 // CHECK-NEXT: br i1
void f7(A *x) { typeid((*x)); } void f7(A *x) { typeid((*x)); }
// CHECK-LABEL: define void @_Z2f7P1A // CHECK-LABEL: define {{.*}}void @_Z2f7P1A
// CHECK: icmp eq {{.*}}, null // CHECK: icmp eq {{.*}}, null
// CHECK-NEXT: br i1 // CHECK-NEXT: br i1
void f8(A *x) { typeid(x[0]); } void f8(A *x) { typeid(x[0]); }
// CHECK-LABEL: define void @_Z2f8P1A // CHECK-LABEL: define {{.*}}void @_Z2f8P1A
// CHECK: icmp eq {{.*}}, null // CHECK: icmp eq {{.*}}, null
// CHECK-NEXT: br i1 // CHECK-NEXT: br i1
void f9(A *x) { typeid(0[x]); } void f9(A *x) { typeid(0[x]); }
// CHECK-LABEL: define void @_Z2f9P1A // CHECK-LABEL: define {{.*}}void @_Z2f9P1A
// CHECK: icmp eq {{.*}}, null // CHECK: icmp eq {{.*}}, null
// CHECK-NEXT: br i1 // CHECK-NEXT: br i1
void f10(A *x, A *y) { typeid(*y ?: *x); } void f10(A *x, A *y) { typeid(*y ?: *x); }
// CHECK-LABEL: define void @_Z3f10P1AS0_ // CHECK-LABEL: define {{.*}}void @_Z3f10P1AS0_
// CHECK: icmp eq {{.*}}, null // CHECK: icmp eq {{.*}}, null
// CHECK-NEXT: br i1 // CHECK-NEXT: br i1
void f11(A *x, A &y) { typeid(*x ?: y); } void f11(A *x, A &y) { typeid(*x ?: y); }
// CHECK-LABEL: define void @_Z3f11P1ARS_ // CHECK-LABEL: define {{.*}}void @_Z3f11P1ARS_
// CHECK: icmp eq {{.*}}, null // CHECK: icmp eq {{.*}}, null
// CHECK-NEXT: br i1 // CHECK-NEXT: br i1
void f12(A &x, A *y) { typeid(x ?: *y); } void f12(A &x, A *y) { typeid(x ?: *y); }
// CHECK-LABEL: define void @_Z3f12R1APS_ // CHECK-LABEL: define {{.*}}void @_Z3f12R1APS_
// CHECK: icmp eq {{.*}}, null // CHECK: icmp eq {{.*}}, null
// CHECK-NEXT: br i1 // CHECK-NEXT: br i1
void f13(A &x, A &y) { typeid(x ?: y); } void f13(A &x, A &y) { typeid(x ?: y); }
// CHECK-LABEL: define void @_Z3f13R1AS0_ // CHECK-LABEL: define {{.*}}void @_Z3f13R1AS0_
// CHECK-NOT: icmp eq {{.*}}, null // CHECK-NOT: icmp eq {{.*}}, null
void f14(A *x) { typeid((const A &)(A)*x); } void f14(A *x) { typeid((const A &)(A)*x); }
// CHECK-LABEL: define void @_Z3f14P1A // CHECK-LABEL: define {{.*}}void @_Z3f14P1A
// CHECK-NOT: icmp eq {{.*}}, null // CHECK-NOT: icmp eq {{.*}}, null
void f15(A *x) { typeid((A &&)*(A *)nullptr); } void f15(A *x) { typeid((A &&)*(A *)nullptr); }
// CHECK-LABEL: define void @_Z3f15P1A // CHECK-LABEL: define {{.*}}void @_Z3f15P1A
// CHECK-NOT: icmp eq {{.*}}, null // CHECK-NOT: icmp eq {{.*}}, null

View File

@ -8,7 +8,7 @@ struct X {
void vararg(...); void vararg(...);
// CHECK-LABEL: define void @_Z4test1X // CHECK-LABEL: define {{.*}}void @_Z4test1X
void test(X x) { void test(X x) {
// CHECK: call void @llvm.trap() // CHECK: call void @llvm.trap()
vararg(x); vararg(x);

View File

@ -12,5 +12,5 @@ pile_box::pile_box(box *pp)
{ {
} }
// CHECK: call void @_ZdlPv // CHECK: call {{.*}}void @_ZdlPv

View File

@ -12,7 +12,7 @@ typedef __INTPTR_TYPE__ intptr_t;
// CHECK-DAG: [[CAP_TYPE3:%.+]] = type { [[INTPTR_T]]*, [[INTPTR_T]], [[INTPTR_T]], [[INTPTR_T]]*, [[INTPTR_T]]* } // CHECK-DAG: [[CAP_TYPE3:%.+]] = type { [[INTPTR_T]]*, [[INTPTR_T]], [[INTPTR_T]], [[INTPTR_T]]*, [[INTPTR_T]]* }
// CHECK-DAG: [[CAP_TYPE4:%.+]] = type { [[INTPTR_T]]*, [[INTPTR_T]], [[INTPTR_T]]*, [[INTPTR_T]], [[INTPTR_T]]* } // CHECK-DAG: [[CAP_TYPE4:%.+]] = type { [[INTPTR_T]]*, [[INTPTR_T]], [[INTPTR_T]]*, [[INTPTR_T]], [[INTPTR_T]]* }
// CHECK: define void [[G:@.+]]( // CHECK: define {{.*}}void [[G:@.+]](
// CHECK: [[N_ADDR:%.+]] = alloca [[INTPTR_T]] // CHECK: [[N_ADDR:%.+]] = alloca [[INTPTR_T]]
// CHECK: store [[INTPTR_T]] %{{.+}}, [[INTPTR_T]]* [[N_ADDR]] // CHECK: store [[INTPTR_T]] %{{.+}}, [[INTPTR_T]]* [[N_ADDR]]
// CHECK: [[N_VAL:%.+]] = load [[INTPTR_T]], [[INTPTR_T]]* [[N_ADDR]] // CHECK: [[N_VAL:%.+]] = load [[INTPTR_T]], [[INTPTR_T]]* [[N_ADDR]]
@ -22,7 +22,7 @@ typedef __INTPTR_TYPE__ intptr_t;
// CHECK: store [[INTPTR_T]]* %{{.+}}, [[INTPTR_T]]** [[CAP_BUFFER_ADDR]] // CHECK: store [[INTPTR_T]]* %{{.+}}, [[INTPTR_T]]** [[CAP_BUFFER_ADDR]]
// CHECK: [[CAP_N_REF:%.+]] = getelementptr inbounds [[CAP_TYPE1]], [[CAP_TYPE1]]* [[CAP_ARG:%.+]], i{{.+}} 0, i{{.+}} 2 // CHECK: [[CAP_N_REF:%.+]] = getelementptr inbounds [[CAP_TYPE1]], [[CAP_TYPE1]]* [[CAP_ARG:%.+]], i{{.+}} 0, i{{.+}} 2
// CHECK: store [[INTPTR_T]]* [[N_ADDR]], [[INTPTR_T]]** [[CAP_N_REF]] // CHECK: store [[INTPTR_T]]* [[N_ADDR]], [[INTPTR_T]]** [[CAP_N_REF]]
// CHECK: call{{( x86_thiscallcc)?}} void [[G_LAMBDA:@.+]]([[CAP_TYPE1]]* [[CAP_ARG]]) // CHECK: call{{.*}} void [[G_LAMBDA:@.+]]([[CAP_TYPE1]]* [[CAP_ARG]])
// CHECK: ret void // CHECK: ret void
void g(intptr_t n) { void g(intptr_t n) {
intptr_t buffer[n]; intptr_t buffer[n];
@ -70,17 +70,17 @@ void b(intptr_t n, T arg) {
// CHECK-LABEL: @main // CHECK-LABEL: @main
int main() { int main() {
// CHECK: call void [[G]]([[INTPTR_T]] [[INTPTR_T_ATTR:(signext )?]]1) // CHECK: call {{.*}}void [[G]]([[INTPTR_T]] [[INTPTR_T_ATTR:(signext )?]]1)
g((intptr_t)1); g((intptr_t)1);
// CHECK: call void [[F_INT:@.+]]([[INTPTR_T]] [[INTPTR_T_ATTR]]1, [[INTPTR_T]] [[INTPTR_T_ATTR]]2) // CHECK: call {{.*}}void [[F_INT:@.+]]([[INTPTR_T]] [[INTPTR_T_ATTR]]1, [[INTPTR_T]] [[INTPTR_T_ATTR]]2)
f((intptr_t)1, (intptr_t)2); f((intptr_t)1, (intptr_t)2);
// CHECK: call void [[B_INT:@.+]]([[INTPTR_T]] [[INTPTR_T_ATTR]]12, [[INTPTR_T]] [[INTPTR_T_ATTR]]13) // CHECK: call {{.*}}void [[B_INT:@.+]]([[INTPTR_T]] [[INTPTR_T_ATTR]]12, [[INTPTR_T]] [[INTPTR_T_ATTR]]13)
b((intptr_t)12, (intptr_t)13); b((intptr_t)12, (intptr_t)13);
// CHECK: ret i32 0 // CHECK: ret i32 0
return 0; return 0;
} }
// CHECK: define linkonce_odr void [[F_INT]]([[INTPTR_T]] // CHECK: define linkonce_odr {{.*}}void [[F_INT]]([[INTPTR_T]]
// CHECK: [[SIZE:%.+]] = add // CHECK: [[SIZE:%.+]] = add
// CHECK: call i{{.+}}* @llvm.stacksave() // CHECK: call i{{.+}}* @llvm.stacksave()
// CHECK: [[BUFFER_ADDR:%.+]] = alloca [[INTPTR_T]], [[INTPTR_T]] [[SIZE]] // CHECK: [[BUFFER_ADDR:%.+]] = alloca [[INTPTR_T]], [[INTPTR_T]] [[SIZE]]
@ -88,11 +88,11 @@ int main() {
// CHECK: store [[INTPTR_T]] [[SIZE]], [[INTPTR_T]]* [[CAP_SIZE_REF]] // CHECK: store [[INTPTR_T]] [[SIZE]], [[INTPTR_T]]* [[CAP_SIZE_REF]]
// CHECK: [[CAP_BUFFER_ADDR_REF:%.+]] = getelementptr inbounds [[CAP_TYPE2]], [[CAP_TYPE2]]* [[CAP_ARG]], i{{.+}} 0, i{{.+}} 1 // CHECK: [[CAP_BUFFER_ADDR_REF:%.+]] = getelementptr inbounds [[CAP_TYPE2]], [[CAP_TYPE2]]* [[CAP_ARG]], i{{.+}} 0, i{{.+}} 1
// CHECK: store [[INTPTR_T]]* [[BUFFER_ADDR]], [[INTPTR_T]]** [[CAP_BUFFER_ADDR_REF]] // CHECK: store [[INTPTR_T]]* [[BUFFER_ADDR]], [[INTPTR_T]]** [[CAP_BUFFER_ADDR_REF]]
// CHECK: call{{( x86_thiscallcc)?}} void [[F_INT_LAMBDA:@.+]]([[CAP_TYPE2]]* [[CAP_ARG]]) // CHECK: call{{.*}} void [[F_INT_LAMBDA:@.+]]([[CAP_TYPE2]]* [[CAP_ARG]])
// CHECK: call void @llvm.stackrestore( // CHECK: call void @llvm.stackrestore(
// CHECK: ret void // CHECK: ret void
// CHECK: void [[B_INT]]([[INTPTR_T]] // CHECK: void [[B_INT]]([[INTPTR_T]]
// CHECK: [[SIZE1:%.+]] = call [[INTPTR_T]] // CHECK: [[SIZE1:%.+]] = call {{.*}}[[INTPTR_T]]
// CHECK: call i{{.+}}* @llvm.stacksave() // CHECK: call i{{.+}}* @llvm.stacksave()
// CHECK: [[BUFFER2_ADDR:%.+]] = alloca [[INTPTR_T]], [[INTPTR_T]] [[SIZE1]] // CHECK: [[BUFFER2_ADDR:%.+]] = alloca [[INTPTR_T]], [[INTPTR_T]] [[SIZE1]]
// CHECK: [[SIZE2:%.+]] = add // CHECK: [[SIZE2:%.+]] = add
@ -107,11 +107,11 @@ int main() {
// CHECK: store [[INTPTR_T]]* [[BUFFER1_ADDR]], [[INTPTR_T]]** [[CAP_BUFFER1_ADDR_REF]] // CHECK: store [[INTPTR_T]]* [[BUFFER1_ADDR]], [[INTPTR_T]]** [[CAP_BUFFER1_ADDR_REF]]
// CHECK: [[CAP_BUFFER2_ADDR_REF:%.+]] = getelementptr inbounds [[CAP_TYPE3]], [[CAP_TYPE3]]* [[CAP_ARG]], i{{.+}} 0, i{{.+}} 4 // CHECK: [[CAP_BUFFER2_ADDR_REF:%.+]] = getelementptr inbounds [[CAP_TYPE3]], [[CAP_TYPE3]]* [[CAP_ARG]], i{{.+}} 0, i{{.+}} 4
// CHECK: store [[INTPTR_T]]* [[BUFFER2_ADDR]], [[INTPTR_T]]** [[CAP_BUFFER2_ADDR_REF]] // CHECK: store [[INTPTR_T]]* [[BUFFER2_ADDR]], [[INTPTR_T]]** [[CAP_BUFFER2_ADDR_REF]]
// CHECK: call{{( x86_thiscallcc)?}} void [[B_INT_LAMBDA:@.+]]([[CAP_TYPE3]]* [[CAP_ARG]]) // CHECK: call{{.*}} void [[B_INT_LAMBDA:@.+]]([[CAP_TYPE3]]* [[CAP_ARG]])
// CHECK: call void @llvm.stackrestore( // CHECK: call void @llvm.stackrestore(
// CHECK: ret void // CHECK: ret void
// CHECK: define linkonce_odr{{( x86_thiscallcc)?}} void [[F_INT_LAMBDA]]([[CAP_TYPE2]]* // CHECK: define linkonce_odr{{.*}} void [[F_INT_LAMBDA]]([[CAP_TYPE2]]*
// CHECK: [[THIS:%.+]] = load [[CAP_TYPE2]]*, [[CAP_TYPE2]]** // CHECK: [[THIS:%.+]] = load [[CAP_TYPE2]]*, [[CAP_TYPE2]]**
// CHECK: [[SIZE_REF:%.+]] = getelementptr inbounds [[CAP_TYPE2]], [[CAP_TYPE2]]* [[THIS]], i{{.+}} 0, i{{.+}} 0 // CHECK: [[SIZE_REF:%.+]] = getelementptr inbounds [[CAP_TYPE2]], [[CAP_TYPE2]]* [[THIS]], i{{.+}} 0, i{{.+}} 0
// CHECK: [[SIZE:%.+]] = load [[INTPTR_T]], [[INTPTR_T]]* [[SIZE_REF]] // CHECK: [[SIZE:%.+]] = load [[INTPTR_T]], [[INTPTR_T]]* [[SIZE_REF]]
@ -120,7 +120,7 @@ int main() {
// CHECK: call void @llvm.stackrestore( // CHECK: call void @llvm.stackrestore(
// CHECK: ret void // CHECK: ret void
// CHECK: define linkonce_odr{{( x86_thiscallcc)?}} void [[B_INT_LAMBDA]]([[CAP_TYPE3]]* // CHECK: define linkonce_odr{{.*}} void [[B_INT_LAMBDA]]([[CAP_TYPE3]]*
// CHECK: [[SIZE2_REF:%.+]] = getelementptr inbounds [[CAP_TYPE3]], [[CAP_TYPE3]]* [[THIS:%.+]], i{{[0-9]+}} 0, i{{[0-9]+}} 1 // CHECK: [[SIZE2_REF:%.+]] = getelementptr inbounds [[CAP_TYPE3]], [[CAP_TYPE3]]* [[THIS:%.+]], i{{[0-9]+}} 0, i{{[0-9]+}} 1
// CHECK: [[SIZE2:%.+]] = load i{{[0-9]+}}, i{{[0-9]+}}* [[SIZE2_REF]] // CHECK: [[SIZE2:%.+]] = load i{{[0-9]+}}, i{{[0-9]+}}* [[SIZE2_REF]]
// CHECK: [[SIZE1_REF:%.+]] = getelementptr inbounds [[CAP_TYPE3]], [[CAP_TYPE3]]* [[THIS]], i{{[0-9]+}} 0, i{{[0-9]+}} 2 // CHECK: [[SIZE1_REF:%.+]] = getelementptr inbounds [[CAP_TYPE3]], [[CAP_TYPE3]]* [[THIS]], i{{[0-9]+}} 0, i{{[0-9]+}} 2
@ -152,10 +152,10 @@ int main() {
// CHECK: [[BUFFER1_ADDR_REF_ORIG:%.+]] = getelementptr inbounds [[CAP_TYPE3]], [[CAP_TYPE3]]* [[THIS]], i{{[0-9]+}} 0, i{{[0-9]+}} 3 // CHECK: [[BUFFER1_ADDR_REF_ORIG:%.+]] = getelementptr inbounds [[CAP_TYPE3]], [[CAP_TYPE3]]* [[THIS]], i{{[0-9]+}} 0, i{{[0-9]+}} 3
// CHECK: [[BUFFER1_ADDR_ORIG:%.+]] = load [[INTPTR_T]]*, [[INTPTR_T]]** [[BUFFER1_ADDR_REF_ORIG]] // CHECK: [[BUFFER1_ADDR_ORIG:%.+]] = load [[INTPTR_T]]*, [[INTPTR_T]]** [[BUFFER1_ADDR_REF_ORIG]]
// CHECK: store [[INTPTR_T]]* [[BUFFER1_ADDR_ORIG]], [[INTPTR_T]]** [[BUFFER1_ADDR_REF]] // CHECK: store [[INTPTR_T]]* [[BUFFER1_ADDR_ORIG]], [[INTPTR_T]]** [[BUFFER1_ADDR_REF]]
// CHECK: call{{( x86_thiscallcc)?}} void [[B_INT_LAMBDA_LAMBDA:@.+]]([[CAP_TYPE4]]* [[CAP]]) // CHECK: call{{.*}} void [[B_INT_LAMBDA_LAMBDA:@.+]]([[CAP_TYPE4]]* [[CAP]])
// CHECK: ret void // CHECK: ret void
// CHECK: define linkonce_odr{{( x86_thiscallcc)?}} void [[B_INT_LAMBDA_LAMBDA]]([[CAP_TYPE4]]* // CHECK: define linkonce_odr{{.*}} void [[B_INT_LAMBDA_LAMBDA]]([[CAP_TYPE4]]*
// CHECK: [[SIZE1_REF:%.+]] = getelementptr inbounds [[CAP_TYPE4]], [[CAP_TYPE4]]* [[THIS:%.+]], i{{[0-9]+}} 0, i{{[0-9]+}} 1 // CHECK: [[SIZE1_REF:%.+]] = getelementptr inbounds [[CAP_TYPE4]], [[CAP_TYPE4]]* [[THIS:%.+]], i{{[0-9]+}} 0, i{{[0-9]+}} 1
// CHECK: [[SIZE1:%.+]] = load i{{[0-9]+}}, i{{[0-9]+}}* [[SIZE1_REF]] // CHECK: [[SIZE1:%.+]] = load i{{[0-9]+}}, i{{[0-9]+}}* [[SIZE1_REF]]
// CHECK: [[SIZE2_REF:%.+]] = getelementptr inbounds [[CAP_TYPE4]], [[CAP_TYPE4]]* [[THIS]], i{{[0-9]+}} 0, i{{[0-9]+}} 3 // CHECK: [[SIZE2_REF:%.+]] = getelementptr inbounds [[CAP_TYPE4]], [[CAP_TYPE4]]* [[THIS]], i{{[0-9]+}} 0, i{{[0-9]+}} 3

View File

@ -17,7 +17,7 @@ volatile struct S {
int printf(const char *, ...); int printf(const char *, ...);
// CHECK: define void @{{.*}}test // CHECK: define {{.*}}void @{{.*}}test
void test() { void test() {
asm("nop"); // CHECK: call void asm asm("nop"); // CHECK: call void asm

View File

@ -8,15 +8,15 @@ void use_int(int);
void test0(int i) { void test0(int i) {
block_t block = ^{ use_int(i); }; block_t block = ^{ use_int(i); };
// CHECK-LABEL: define void @test0( // CHECK-LABEL: define {{.*}}void @test0(
// CHECK: call i8* @objc_retainBlock(i8* {{%.*}}) [[NUW:#[0-9]+]], !clang.arc.copy_on_escape // CHECK: call {{.*}}i8* @objc_retainBlock(i8* {{%.*}}) [[NUW:#[0-9]+]], !clang.arc.copy_on_escape
// CHECK: ret void // CHECK: ret void
} }
void test1(int i) { void test1(int i) {
id block = ^{ use_int(i); }; id block = ^{ use_int(i); };
// CHECK-LABEL: define void @test1( // CHECK-LABEL: define {{.*}}void @test1(
// CHECK: call i8* @objc_retainBlock(i8* {{%.*}}) [[NUW]] // CHECK: call {{.*}}i8* @objc_retainBlock(i8* {{%.*}}) [[NUW]]
// CHECK-NOT: !clang.arc.copy_on_escape // CHECK-NOT: !clang.arc.copy_on_escape
// CHECK: ret void // CHECK: ret void
} }

View File

@ -7,9 +7,9 @@
// //
// RUN: %clang_cc1 -fobjc-dispatch-method=legacy -emit-llvm -o - %s | FileCheck -check-prefix=CHECK_OLD_DISPATCH %s // RUN: %clang_cc1 -fobjc-dispatch-method=legacy -emit-llvm -o - %s | FileCheck -check-prefix=CHECK_OLD_DISPATCH %s
// //
// CHECK_OLD_DISPATCH-LABEL: define void @f0 // CHECK_OLD_DISPATCH-LABEL: define {{.*}}void @f0
// CHECK_OLD_DISPATCH: load {{.*}}OBJC_SELECTOR_REFERENCES // CHECK_OLD_DISPATCH: load {{.*}}OBJC_SELECTOR_REFERENCES
// CHECK_OLD_DISPATCH-LABEL: define void @f1 // CHECK_OLD_DISPATCH-LABEL: define {{.*}}void @f1
// CHECK_OLD_DISPATCH: load {{.*}}OBJC_SELECTOR_REFERENCES // CHECK_OLD_DISPATCH: load {{.*}}OBJC_SELECTOR_REFERENCES
@interface A @interface A

View File

@ -9,7 +9,7 @@
@interface NSString : NSObject @interface NSString : NSObject
@end @end
// CHECK-LABEL: define void @test1() // CHECK-LABEL: define {{.*}}void @test1()
void test1() { void test1() {
// CHECK: {{call.*@objc_msgSend}} // CHECK: {{call.*@objc_msgSend}}
// CHECK: {{call.*@objc_msgSend}} // CHECK: {{call.*@objc_msgSend}}
@ -18,7 +18,7 @@ void test1() {
NSString *str1 = [[[NSString alloc] init] retain]; NSString *str1 = [[[NSString alloc] init] retain];
} }
// CHECK-LABEL: define void @test2() // CHECK-LABEL: define {{.*}}void @test2()
void test2() { void test2() {
// CHECK: {{call.*@objc_msgSend}} // CHECK: {{call.*@objc_msgSend}}
// CHECK: {{call.*@objc_msgSend}} // CHECK: {{call.*@objc_msgSend}}
@ -32,7 +32,7 @@ void test2() {
@end @end
@implementation Test2 @implementation Test2
// CHECK: define internal i8* @"\01-[Test2 init]" // CHECK: define internal {{.*}}i8* @"\01-[Test2 init]"
- (id)init { - (id)init {
// CHECK: {{call.*@objc_msgSendSuper}} // CHECK: {{call.*@objc_msgSendSuper}}
// CHECK-NEXT: bitcast i8* // CHECK-NEXT: bitcast i8*
@ -45,7 +45,7 @@ void test2() {
@end @end
@implementation Test3 @implementation Test3
// CHECK: define internal i8* @"\01-[Test3 init]" // CHECK: define internal {{.*}}i8* @"\01-[Test3 init]"
- (id)init { - (id)init {
// CHECK: {{call.*@objc_msgSendSuper}} // CHECK: {{call.*@objc_msgSendSuper}}
// CHECK-NEXT: bitcast i8* // CHECK-NEXT: bitcast i8*

View File

@ -1,25 +1,25 @@
// RUN: %clang_cc1 -fobjc-arc -fobjc-runtime-has-weak -triple %itanium_abi_triple -emit-llvm -o - %s | FileCheck %s // RUN: %clang_cc1 -fobjc-arc -fobjc-runtime-has-weak -triple %itanium_abi_triple -emit-llvm -o - %s | FileCheck %s
// CHECK-LABEL: define void @_Z1fPU8__strongP11objc_object(i8**) // CHECK-LABEL: define {{.*}}void @_Z1fPU8__strongP11objc_object(i8**)
void f(__strong id *) {} void f(__strong id *) {}
// CHECK-LABEL: define void @_Z1fPU6__weakP11objc_object(i8**) // CHECK-LABEL: define {{.*}}void @_Z1fPU6__weakP11objc_object(i8**)
void f(__weak id *) {} void f(__weak id *) {}
// CHECK-LABEL: define void @_Z1fPU15__autoreleasingP11objc_object(i8**) // CHECK-LABEL: define {{.*}}void @_Z1fPU15__autoreleasingP11objc_object(i8**)
void f(__autoreleasing id *) {} void f(__autoreleasing id *) {}
// CHECK-LABEL: define void @_Z1fPP11objc_object(i8**) // CHECK-LABEL: define {{.*}}void @_Z1fPP11objc_object(i8**)
void f(__unsafe_unretained id *) {} void f(__unsafe_unretained id *) {}
// CHECK-LABEL: define void @_Z1fPKU8__strongP11objc_object(i8**) // CHECK-LABEL: define {{.*}}void @_Z1fPKU8__strongP11objc_object(i8**)
void f(const __strong id *) {} void f(const __strong id *) {}
// CHECK-LABEL: define void @_Z1fPKU6__weakP11objc_object(i8**) // CHECK-LABEL: define {{.*}}void @_Z1fPKU6__weakP11objc_object(i8**)
void f(const __weak id *) {} void f(const __weak id *) {}
// CHECK-LABEL: define void @_Z1fPKU15__autoreleasingP11objc_object(i8**) // CHECK-LABEL: define {{.*}}void @_Z1fPKU15__autoreleasingP11objc_object(i8**)
void f(const __autoreleasing id *) {} void f(const __autoreleasing id *) {}
// CHECK-LABEL: define void @_Z1fPKP11objc_object(i8**) // CHECK-LABEL: define {{.*}}void @_Z1fPKP11objc_object(i8**)
void f(const __unsafe_unretained id *) {} void f(const __unsafe_unretained id *) {}
template<unsigned N> struct unsigned_c { }; template<unsigned N> struct unsigned_c { };
// CHECK-LABEL: define weak_odr void @_Z1gIKvEvP10unsigned_cIXplszv1U8__bridgecvPT_v1U8__bridgecvP11objc_objectcvS3_Li0ELi1EEE // CHECK-LABEL: define weak_odr {{.*}}void @_Z1gIKvEvP10unsigned_cIXplszv1U8__bridgecvPT_v1U8__bridgecvP11objc_objectcvS3_Li0ELi1EEE
template<typename T>void g(unsigned_c<sizeof((__bridge T*)(__bridge id)(T*)0) + 1>*) {} template<typename T>void g(unsigned_c<sizeof((__bridge T*)(__bridge id)(T*)0) + 1>*) {}
template void g<const void>(unsigned_c<sizeof(id) + 1> *); template void g<const void>(unsigned_c<sizeof(id) + 1> *);

View File

@ -15,7 +15,7 @@ void f1() {
}(); }();
} }
// CHECK-LABEL: define internal i8* @"\01-[TNSObject init]" // CHECK-LABEL: define internal {{.*}}i8* @"\01-[TNSObject init]"
@implementation TNSObject @implementation TNSObject
- (id)init - (id)init
{ {

View File

@ -6,7 +6,7 @@ void kernel ker() {
event_t e; event_t e;
// CHECK: alloca %opencl.event_t*, // CHECK: alloca %opencl.event_t*,
foo(e); foo(e);
// CHECK: call void @foo(%opencl.event_t* % // CHECK: call {{.*}}void @foo(%opencl.event_t* %
foo(0); foo(0);
// CHECK: call void @foo(%opencl.event_t* null) // CHECK: call {{.*}}void @foo(%opencl.event_t* null)
} }

View File

@ -8,7 +8,7 @@ __kernel void foo(void) {
func(&i); func(&i);
} }
// CHECK-LABEL: define void @_Z3barPU7CLlocali // CHECK-LABEL: define {{.*}}void @_Z3barPU7CLlocali
__kernel void __attribute__((__overloadable__)) bar(local int *x) { __kernel void __attribute__((__overloadable__)) bar(local int *x) {
*x = 5; *x = 5;
} }

View File

@ -22,7 +22,7 @@ void fnc3(image3d_t img) {}
// CHECK: @fnc3(%opencl.image3d_t* // CHECK: @fnc3(%opencl.image3d_t*
void fnc4smp(sampler_t s) {} void fnc4smp(sampler_t s) {}
// CHECK-LABEL: define void @fnc4smp(i32 // CHECK-LABEL: define {{.*}}void @fnc4smp(i32
kernel void foo(image1d_t img) { kernel void foo(image1d_t img) {
sampler_t smp = 5; sampler_t smp = 5;
@ -31,9 +31,9 @@ kernel void foo(image1d_t img) {
// CHECK: alloca %opencl.event_t* // CHECK: alloca %opencl.event_t*
// CHECK: store i32 5, // CHECK: store i32 5,
fnc4smp(smp); fnc4smp(smp);
// CHECK: call void @fnc4smp(i32 // CHECK: call {{.*}}void @fnc4smp(i32
fnc4smp(glb_smp); fnc4smp(glb_smp);
// CHECK: call void @fnc4smp(i32 // CHECK: call {{.*}}void @fnc4smp(i32
} }
void __attribute__((overloadable)) bad1(image1d_t *b, image2d_t *c, image2d_t *d) {} void __attribute__((overloadable)) bad1(image1d_t *b, image2d_t *c, image2d_t *d) {}

View File

@ -12,7 +12,7 @@ CtorInit<int> x;
// Keep these two namespace definitions separate; merging them hides the bug. // Keep these two namespace definitions separate; merging them hides the bug.
namespace EmitInlineMethods { namespace EmitInlineMethods {
// CHECK-DAG: define linkonce_odr [[CC:(x86_thiscallcc[ ]+)?]]void @_ZN17EmitInlineMethods1C1fEPNS_1AE( // CHECK-DAG: define linkonce_odr [[CC:([a-z\_\d]*[ ]+)?]]void @_ZN17EmitInlineMethods1C1fEPNS_1AE(
// CHECK-DAG: declare [[CC]]void @_ZN17EmitInlineMethods1A1gEv( // CHECK-DAG: declare [[CC]]void @_ZN17EmitInlineMethods1A1gEv(
struct C { struct C {
__attribute__((used)) void f(A *p) { p->g(); } __attribute__((used)) void f(A *p) { p->g(); }
@ -26,14 +26,14 @@ namespace EmitInlineMethods {
}; };
} }
// CHECK-DAG: define available_externally hidden {{signext i32|i32}} @_ZN1SIiE1gEv({{.*}} #[[ALWAYS_INLINE:.*]] align // CHECK-DAG: define available_externally hidden {{.*}}{{signext i32|i32}} @_ZN1SIiE1gEv({{.*}} #[[ALWAYS_INLINE:.*]] align
int a = S<int>::g(); int a = S<int>::g();
int b = h(); int b = h();
// CHECK-DAG: define linkonce_odr {{signext i32|i32}} @_Z3minIiET_S0_S0_(i32 // CHECK-DAG: define linkonce_odr {{.*}}{{signext i32|i32}} @_Z3minIiET_S0_S0_(i32
int c = min(1, 2); int c = min(1, 2);
// CHECK: define available_externally {{signext i32|i32}} @_ZN1SIiE1fEv({{.*}} #[[ALWAYS_INLINE]] align // CHECK: define available_externally {{.*}}{{signext i32|i32}} @_ZN1SIiE1fEv({{.*}} #[[ALWAYS_INLINE]] align
namespace ImplicitSpecialMembers { namespace ImplicitSpecialMembers {
// CHECK-LABEL: define {{.*}} @_ZN22ImplicitSpecialMembers1BC2ERKS0_( // CHECK-LABEL: define {{.*}} @_ZN22ImplicitSpecialMembers1BC2ERKS0_(
@ -49,9 +49,9 @@ namespace ImplicitSpecialMembers {
// CHECK-LABEL: define {{.*}} @_ZN22ImplicitSpecialMembers1DC2EOS0_( // CHECK-LABEL: define {{.*}} @_ZN22ImplicitSpecialMembers1DC2EOS0_(
// CHECK: call {{.*}} @_ZN22ImplicitSpecialMembers1AC1ERKS0_( // CHECK: call {{.*}} @_ZN22ImplicitSpecialMembers1AC1ERKS0_(
// CHECK-LABEL: define {{.*}} @_ZN20OperatorDeleteLookup1AD0Ev( // CHECK-LABEL: define {{.*}} @_ZN20OperatorDeleteLookup1AD0Ev(
// CHECK: call void @_ZN20OperatorDeleteLookup1AdlEPv( // CHECK: call {{.*}}void @_ZN20OperatorDeleteLookup1AdlEPv(
// CHECK-DAG: call {{[a-z]*[ ]?i32}} @_ZN8CtorInitIiE1fEv( // CHECK-DAG: call {{[a-z\_\d]*[ ]?i32}} @_ZN8CtorInitIiE1fEv(
extern B b1; extern B b1;
B b2(b1); B b2(b1);

View File

@ -1,7 +1,7 @@
// RUN: rm -rf %t // RUN: rm -rf %t
// RUN: %clang_cc1 -fmodules-cache-path=%t -fmodules -fimplicit-module-maps -F %S/Inputs -include Module/Module.h %s -emit-llvm -o - | FileCheck %s // RUN: %clang_cc1 -fmodules-cache-path=%t -fmodules -fimplicit-module-maps -F %S/Inputs -include Module/Module.h %s -emit-llvm -o - | FileCheck %s
// CHECK: call i8* @getModuleVersion // CHECK: call {{.*}}i8* @getModuleVersion
const char* getVer(void) { const char* getVer(void) {
return getModuleVersion(); return getModuleVersion();
} }

View File

@ -6,4 +6,4 @@
void f() { SPXTrace(); } void f() { SPXTrace(); }
void g() { double x = DBL_MAX; } void g() { double x = DBL_MAX; }
// CHECK: define internal void @SPXTrace // CHECK: define internal {{.*}}void @SPXTrace

View File

@ -11,7 +11,7 @@
// CHECK: [[UNNAMED_LOCK:@.+]] = common global [8 x i32] zeroinitializer // CHECK: [[UNNAMED_LOCK:@.+]] = common global [8 x i32] zeroinitializer
// CHECK: [[THE_NAME_LOCK:@.+]] = common global [8 x i32] zeroinitializer // CHECK: [[THE_NAME_LOCK:@.+]] = common global [8 x i32] zeroinitializer
// CHECK: define void [[FOO:@.+]]() // CHECK: define {{.*}}void [[FOO:@.+]]()
void foo() {} void foo() {}
@ -21,15 +21,15 @@ int main() {
// CHECK: [[A_ADDR:%.+]] = alloca i8 // CHECK: [[A_ADDR:%.+]] = alloca i8
char a; char a;
// CHECK: [[GTID:%.+]] = call i32 @__kmpc_global_thread_num([[IDENT_T_TY]]* [[DEFAULT_LOC:@.+]]) // CHECK: [[GTID:%.+]] = call {{.*}}i32 @__kmpc_global_thread_num([[IDENT_T_TY]]* [[DEFAULT_LOC:@.+]])
// CHECK: call void @__kmpc_critical([[IDENT_T_TY]]* [[DEFAULT_LOC]], i32 [[GTID]], [8 x i32]* [[UNNAMED_LOCK]]) // CHECK: call {{.*}}void @__kmpc_critical([[IDENT_T_TY]]* [[DEFAULT_LOC]], i32 [[GTID]], [8 x i32]* [[UNNAMED_LOCK]])
// CHECK-NEXT: store i8 2, i8* [[A_ADDR]] // CHECK-NEXT: store i8 2, i8* [[A_ADDR]]
// CHECK-NEXT: call void @__kmpc_end_critical([[IDENT_T_TY]]* [[DEFAULT_LOC]], i32 [[GTID]], [8 x i32]* [[UNNAMED_LOCK]]) // CHECK-NEXT: call {{.*}}void @__kmpc_end_critical([[IDENT_T_TY]]* [[DEFAULT_LOC]], i32 [[GTID]], [8 x i32]* [[UNNAMED_LOCK]])
#pragma omp critical #pragma omp critical
a = 2; a = 2;
// CHECK: call void @__kmpc_critical([[IDENT_T_TY]]* [[DEFAULT_LOC]], i32 [[GTID]], [8 x i32]* [[THE_NAME_LOCK]]) // CHECK: call {{.*}}void @__kmpc_critical([[IDENT_T_TY]]* [[DEFAULT_LOC]], i32 [[GTID]], [8 x i32]* [[THE_NAME_LOCK]])
// CHECK-NEXT: invoke void [[FOO]]() // CHECK-NEXT: invoke {{.*}}void [[FOO]]()
// CHECK: call void @__kmpc_end_critical([[IDENT_T_TY]]* [[DEFAULT_LOC]], i32 [[GTID]], [8 x i32]* [[THE_NAME_LOCK]]) // CHECK: call {{.*}}void @__kmpc_end_critical([[IDENT_T_TY]]* [[DEFAULT_LOC]], i32 [[GTID]], [8 x i32]* [[THE_NAME_LOCK]])
#pragma omp critical(the_name) #pragma omp critical(the_name)
foo(); foo();
// CHECK-NOT: call void @__kmpc_critical // CHECK-NOT: call void @__kmpc_critical

View File

@ -19,16 +19,16 @@ int main() {
static int a; static int a;
#pragma omp flush #pragma omp flush
#pragma omp flush(a) #pragma omp flush(a)
// CHECK: call void @__kmpc_flush(%{{.+}}* {{(@|%).+}}) // CHECK: call {{.*}}void @__kmpc_flush(%{{.+}}* {{(@|%).+}})
// CHECK: call void @__kmpc_flush(%{{.+}}* {{(@|%).+}}) // CHECK: call {{.*}}void @__kmpc_flush(%{{.+}}* {{(@|%).+}})
return tmain(a); return tmain(a);
// CHECK: call {{.*}} [[TMAIN:@.+]]( // CHECK: call {{.*}} [[TMAIN:@.+]](
// CHECK: ret // CHECK: ret
} }
// CHECK: [[TMAIN]] // CHECK: [[TMAIN]]
// CHECK: call void @__kmpc_flush(%{{.+}}* {{(@|%).+}}) // CHECK: call {{.*}}void @__kmpc_flush(%{{.+}}* {{(@|%).+}})
// CHECK: call void @__kmpc_flush(%{{.+}}* {{(@|%).+}}) // CHECK: call {{.*}}void @__kmpc_flush(%{{.+}}* {{(@|%).+}})
// CHECK: ret // CHECK: ret
#endif #endif

View File

@ -43,10 +43,10 @@ int main() {
#ifdef LAMBDA #ifdef LAMBDA
// LAMBDA: [[G:@.+]] = global double // LAMBDA: [[G:@.+]] = global double
// LAMBDA-LABEL: @main // LAMBDA-LABEL: @main
// LAMBDA: call{{( x86_thiscallcc)?}} void [[OUTER_LAMBDA:@.+]]( // LAMBDA: call{{.*}} void [[OUTER_LAMBDA:@.+]](
[&]() { [&]() {
// LAMBDA: define{{.*}} internal{{.*}} void [[OUTER_LAMBDA]]( // LAMBDA: define{{.*}} internal{{.*}} void [[OUTER_LAMBDA]](
// LAMBDA: call void {{.+}} @__kmpc_fork_call({{.+}}, i32 1, {{.+}}* [[OMP_REGION:@.+]] to {{.+}}, i8* %{{.+}}) // LAMBDA: call {{.*}}void {{.+}} @__kmpc_fork_call({{.+}}, i32 1, {{.+}}* [[OMP_REGION:@.+]] to {{.+}}, i8* %{{.+}})
#pragma omp parallel #pragma omp parallel
#pragma omp for private(g) #pragma omp for private(g)
for (int i = 0; i < 2; ++i) { for (int i = 0; i < 2; ++i) {
@ -54,12 +54,12 @@ int main() {
// LAMBDA: [[G_PRIVATE_ADDR:%.+]] = alloca double, // LAMBDA: [[G_PRIVATE_ADDR:%.+]] = alloca double,
// LAMBDA: store %{{.+}}* [[ARG]], %{{.+}}** [[ARG_REF:%.+]], // LAMBDA: store %{{.+}}* [[ARG]], %{{.+}}** [[ARG_REF:%.+]],
g = 1; g = 1;
// LAMBDA: call void @__kmpc_for_static_init_4( // LAMBDA: call {{.*}}void @__kmpc_for_static_init_4(
// LAMBDA: store volatile double 1.0{{.+}}, double* [[G_PRIVATE_ADDR]], // LAMBDA: store volatile double 1.0{{.+}}, double* [[G_PRIVATE_ADDR]],
// LAMBDA: [[G_PRIVATE_ADDR_REF:%.+]] = getelementptr inbounds %{{.+}}, %{{.+}}* [[ARG:%.+]], i{{[0-9]+}} 0, i{{[0-9]+}} 0 // LAMBDA: [[G_PRIVATE_ADDR_REF:%.+]] = getelementptr inbounds %{{.+}}, %{{.+}}* [[ARG:%.+]], i{{[0-9]+}} 0, i{{[0-9]+}} 0
// LAMBDA: store double* [[G_PRIVATE_ADDR]], double** [[G_PRIVATE_ADDR_REF]] // LAMBDA: store double* [[G_PRIVATE_ADDR]], double** [[G_PRIVATE_ADDR_REF]]
// LAMBDA: call{{( x86_thiscallcc)?}} void [[INNER_LAMBDA:@.+]](%{{.+}}* [[ARG]]) // LAMBDA: call{{.*}} void [[INNER_LAMBDA:@.+]](%{{.+}}* [[ARG]])
// LAMBDA: call void @__kmpc_for_static_fini( // LAMBDA: call {{.*}}void @__kmpc_for_static_fini(
[&]() { [&]() {
// LAMBDA: define {{.+}} void [[INNER_LAMBDA]](%{{.+}}* [[ARG_PTR:%.+]]) // LAMBDA: define {{.+}} void [[INNER_LAMBDA]](%{{.+}}* [[ARG_PTR:%.+]])
// LAMBDA: store %{{.+}}* [[ARG_PTR]], %{{.+}}** [[ARG_PTR_REF:%.+]], // LAMBDA: store %{{.+}}* [[ARG_PTR]], %{{.+}}** [[ARG_PTR_REF:%.+]],
@ -75,10 +75,10 @@ int main() {
#elif defined(BLOCKS) #elif defined(BLOCKS)
// BLOCKS: [[G:@.+]] = global double // BLOCKS: [[G:@.+]] = global double
// BLOCKS-LABEL: @main // BLOCKS-LABEL: @main
// BLOCKS: call void {{%.+}}(i8 // BLOCKS: call {{.*}}void {{%.+}}(i8
^{ ^{
// BLOCKS: define{{.*}} internal{{.*}} void {{.+}}(i8* // BLOCKS: define{{.*}} internal{{.*}} void {{.+}}(i8*
// BLOCKS: call void {{.+}} @__kmpc_fork_call({{.+}}, i32 1, {{.+}}* [[OMP_REGION:@.+]] to {{.+}}, i8* {{.+}}) // BLOCKS: call {{.*}}void {{.+}} @__kmpc_fork_call({{.+}}, i32 1, {{.+}}* [[OMP_REGION:@.+]] to {{.+}}, i8* {{.+}})
#pragma omp parallel #pragma omp parallel
#pragma omp for private(g) #pragma omp for private(g)
for (int i = 0; i < 2; ++i) { for (int i = 0; i < 2; ++i) {
@ -86,13 +86,13 @@ int main() {
// BLOCKS: [[G_PRIVATE_ADDR:%.+]] = alloca double, // BLOCKS: [[G_PRIVATE_ADDR:%.+]] = alloca double,
// BLOCKS: store %{{.+}}* [[ARG]], %{{.+}}** [[ARG_REF:%.+]], // BLOCKS: store %{{.+}}* [[ARG]], %{{.+}}** [[ARG_REF:%.+]],
g = 1; g = 1;
// BLOCKS: call void @__kmpc_for_static_init_4( // BLOCKS: call {{.*}}void @__kmpc_for_static_init_4(
// BLOCKS: store volatile double 1.0{{.+}}, double* [[G_PRIVATE_ADDR]], // BLOCKS: store volatile double 1.0{{.+}}, double* [[G_PRIVATE_ADDR]],
// BLOCKS-NOT: [[G]]{{[[^:word:]]}} // BLOCKS-NOT: [[G]]{{[[^:word:]]}}
// BLOCKS: double* [[G_PRIVATE_ADDR]] // BLOCKS: double* [[G_PRIVATE_ADDR]]
// BLOCKS-NOT: [[G]]{{[[^:word:]]}} // BLOCKS-NOT: [[G]]{{[[^:word:]]}}
// BLOCKS: call void {{%.+}}(i8 // BLOCKS: call {{.*}}void {{%.+}}(i8
// BLOCKS: call void @__kmpc_for_static_fini( // BLOCKS: call {{.*}}void @__kmpc_for_static_fini(
^{ ^{
// BLOCKS: define {{.+}} void {{@.+}}(i8* // BLOCKS: define {{.+}} void {{@.+}}(i8*
g = 2; g = 2;

View File

@ -9,7 +9,7 @@
// CHECK: [[IDENT_T_TY:%.+]] = type { i32, i32, i32, i32, i8* } // CHECK: [[IDENT_T_TY:%.+]] = type { i32, i32, i32, i32, i8* }
// CHECK: define void [[FOO:@.+]]() // CHECK: define {{.*}}void [[FOO:@.+]]()
void foo() {} void foo() {}
@ -19,23 +19,23 @@ int main() {
// CHECK: [[A_ADDR:%.+]] = alloca i8 // CHECK: [[A_ADDR:%.+]] = alloca i8
char a; char a;
// CHECK: [[GTID:%.+]] = call i32 @__kmpc_global_thread_num([[IDENT_T_TY]]* [[DEFAULT_LOC:@.+]]) // CHECK: [[GTID:%.+]] = call {{.*}}i32 @__kmpc_global_thread_num([[IDENT_T_TY]]* [[DEFAULT_LOC:@.+]])
// CHECK: [[RES:%.+]] = call i32 @__kmpc_master([[IDENT_T_TY]]* [[DEFAULT_LOC]], i32 [[GTID]]) // CHECK: [[RES:%.+]] = call {{.*}}i32 @__kmpc_master([[IDENT_T_TY]]* [[DEFAULT_LOC]], i32 [[GTID]])
// CHECK-NEXT: [[IS_MASTER:%.+]] = icmp ne i32 [[RES]], 0 // CHECK-NEXT: [[IS_MASTER:%.+]] = icmp ne i32 [[RES]], 0
// CHECK-NEXT: br i1 [[IS_MASTER]], label {{%?}}[[THEN:.+]], label {{%?}}[[EXIT:.+]] // CHECK-NEXT: br i1 [[IS_MASTER]], label {{%?}}[[THEN:.+]], label {{%?}}[[EXIT:.+]]
// CHECK: [[THEN]] // CHECK: [[THEN]]
// CHECK-NEXT: store i8 2, i8* [[A_ADDR]] // CHECK-NEXT: store i8 2, i8* [[A_ADDR]]
// CHECK-NEXT: call void @__kmpc_end_master([[IDENT_T_TY]]* [[DEFAULT_LOC]], i32 [[GTID]]) // CHECK-NEXT: call {{.*}}void @__kmpc_end_master([[IDENT_T_TY]]* [[DEFAULT_LOC]], i32 [[GTID]])
// CHECK-NEXT: br label {{%?}}[[EXIT]] // CHECK-NEXT: br label {{%?}}[[EXIT]]
// CHECK: [[EXIT]] // CHECK: [[EXIT]]
#pragma omp master #pragma omp master
a = 2; a = 2;
// CHECK: [[RES:%.+]] = call i32 @__kmpc_master([[IDENT_T_TY]]* [[DEFAULT_LOC]], i32 [[GTID]]) // CHECK: [[RES:%.+]] = call {{.*}}i32 @__kmpc_master([[IDENT_T_TY]]* [[DEFAULT_LOC]], i32 [[GTID]])
// CHECK-NEXT: [[IS_MASTER:%.+]] = icmp ne i32 [[RES]], 0 // CHECK-NEXT: [[IS_MASTER:%.+]] = icmp ne i32 [[RES]], 0
// CHECK-NEXT: br i1 [[IS_MASTER]], label {{%?}}[[THEN:.+]], label {{%?}}[[EXIT:.+]] // CHECK-NEXT: br i1 [[IS_MASTER]], label {{%?}}[[THEN:.+]], label {{%?}}[[EXIT:.+]]
// CHECK: [[THEN]] // CHECK: [[THEN]]
// CHECK-NEXT: invoke void [[FOO]]() // CHECK-NEXT: invoke {{.*}}void [[FOO]]()
// CHECK: call void @__kmpc_end_master([[IDENT_T_TY]]* [[DEFAULT_LOC]], i32 [[GTID]]) // CHECK: call {{.*}}void @__kmpc_end_master([[IDENT_T_TY]]* [[DEFAULT_LOC]], i32 [[GTID]])
// CHECK-NEXT: br label {{%?}}[[EXIT]] // CHECK-NEXT: br label {{%?}}[[EXIT]]
// CHECK: [[EXIT]] // CHECK: [[EXIT]]
#pragma omp master #pragma omp master

View File

@ -34,14 +34,14 @@ int main (int argc, char **argv) {
return tmain(argv); return tmain(argv);
} }
// CHECK-LABEL: define {{[a-z]*[ ]?i32}} @main({{i32[ ]?[a-z]*}} %argc, i8** %argv) // CHECK-LABEL: define {{[a-z\_\b]*[ ]?i32}} @main({{i32[ ]?[a-z]*}} %argc, i8** %argv)
// CHECK: [[AGG_CAPTURED:%.+]] = alloca %struct.anon // CHECK: [[AGG_CAPTURED:%.+]] = alloca %struct.anon
// CHECK: [[ARGC_REF:%.+]] = getelementptr inbounds %struct.anon, %struct.anon* [[AGG_CAPTURED]], i32 0, i32 0 // CHECK: [[ARGC_REF:%.+]] = getelementptr inbounds %struct.anon, %struct.anon* [[AGG_CAPTURED]], i32 0, i32 0
// CHECK-NEXT: store i32* {{%[a-z0-9.]+}}, i32** [[ARGC_REF]] // CHECK-NEXT: store i32* {{%[a-z0-9.]+}}, i32** [[ARGC_REF]]
// CHECK-NEXT: [[BITCAST:%.+]] = bitcast %struct.anon* [[AGG_CAPTURED]] to i8* // CHECK-NEXT: [[BITCAST:%.+]] = bitcast %struct.anon* [[AGG_CAPTURED]] to i8*
// CHECK-NEXT: call void (%ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%ident_t* [[DEF_LOC_2]], i32 1, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, %struct.anon*)* [[OMP_OUTLINED:@.+]] to void (i32*, i32*, ...)*), i8* [[BITCAST]]) // CHECK-NEXT: call {{.*}}void (%ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%ident_t* [[DEF_LOC_2]], i32 1, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, %struct.anon*)* [[OMP_OUTLINED:@.+]] to void (i32*, i32*, ...)*), i8* [[BITCAST]])
// CHECK-NEXT: [[ARGV:%.+]] = load i8**, i8*** {{%[a-z0-9.]+}} // CHECK-NEXT: [[ARGV:%.+]] = load i8**, i8*** {{%[a-z0-9.]+}}
// CHECK-NEXT: [[RET:%.+]] = call {{[a-z]*[ ]?i32}} [[TMAIN:@.+tmain.+]](i8** [[ARGV]]) // CHECK-NEXT: [[RET:%.+]] = call {{[a-z\_\b]*[ ]?i32}} [[TMAIN:@.+tmain.+]](i8** [[ARGV]])
// CHECK-NEXT: ret i32 [[RET]] // CHECK-NEXT: ret i32 [[RET]]
// CHECK-NEXT: } // CHECK-NEXT: }
// CHECK-DEBUG-LABEL: define i32 @main(i32 %argc, i8** %argv) // CHECK-DEBUG-LABEL: define i32 @main(i32 %argc, i8** %argv)
@ -61,7 +61,7 @@ int main (int argc, char **argv) {
// CHECK-DEBUG-NEXT: ret i32 [[RET]] // CHECK-DEBUG-NEXT: ret i32 [[RET]]
// CHECK-DEBUG-NEXT: } // CHECK-DEBUG-NEXT: }
// CHECK: define internal void [[OMP_OUTLINED]](i32* %.global_tid., i32* %.bound_tid., %struct.anon* %__context) // CHECK: define internal {{.*}}void [[OMP_OUTLINED]](i32* %.global_tid., i32* %.bound_tid., %struct.anon* %__context)
// CHECK: #[[FN_ATTRS:[0-9]+]] // CHECK: #[[FN_ATTRS:[0-9]+]]
// CHECK: [[CONTEXT_ADDR:%.+]] = alloca %struct.anon* // CHECK: [[CONTEXT_ADDR:%.+]] = alloca %struct.anon*
// CHECK: store %struct.anon* %__context, %struct.anon** [[CONTEXT_ADDR]] // CHECK: store %struct.anon* %__context, %struct.anon** [[CONTEXT_ADDR]]
@ -69,10 +69,10 @@ int main (int argc, char **argv) {
// CHECK-NEXT: [[ARGC_PTR_REF:%.+]] = getelementptr inbounds %struct.anon, %struct.anon* [[CONTEXT_PTR]], i32 0, i32 0 // CHECK-NEXT: [[ARGC_PTR_REF:%.+]] = getelementptr inbounds %struct.anon, %struct.anon* [[CONTEXT_PTR]], i32 0, i32 0
// CHECK-NEXT: [[ARGC_REF:%.+]] = load i32*, i32** [[ARGC_PTR_REF]] // CHECK-NEXT: [[ARGC_REF:%.+]] = load i32*, i32** [[ARGC_PTR_REF]]
// CHECK-NEXT: [[ARGC:%.+]] = load i32, i32* [[ARGC_REF]] // CHECK-NEXT: [[ARGC:%.+]] = load i32, i32* [[ARGC_REF]]
// CHECK-NEXT: invoke void [[FOO:@.+foo.+]](i32{{[ ]?[a-z]*}} [[ARGC]]) // CHECK-NEXT: invoke {{.*}}void [[FOO:@.+foo.+]](i32{{[ ]?[a-z]*}} [[ARGC]])
// CHECK: call {{.+}} @__kmpc_cancel_barrier( // CHECK: call {{.+}} @__kmpc_cancel_barrier(
// CHECK: ret void // CHECK: ret void
// CHECK: call void @{{.+terminate.*|abort}}( // CHECK: call {{.*}}void @{{.+terminate.*|abort}}(
// CHECK-NEXT: unreachable // CHECK-NEXT: unreachable
// CHECK-NEXT: } // CHECK-NEXT: }
// CHECK-DEBUG: define internal void [[OMP_OUTLINED]](i32* %.global_tid., i32* %.bound_tid., %struct.anon* %__context) // CHECK-DEBUG: define internal void [[OMP_OUTLINED]](i32* %.global_tid., i32* %.bound_tid., %struct.anon* %__context)
@ -90,17 +90,17 @@ int main (int argc, char **argv) {
// CHECK-DEBUG-NEXT: unreachable // CHECK-DEBUG-NEXT: unreachable
// CHECK-DEBUG-NEXT: } // CHECK-DEBUG-NEXT: }
// CHECK-DAG: define linkonce_odr void [[FOO]]({{i32[ ]?[a-z]*}} %argc) // CHECK-DAG: define linkonce_odr {{.*}}void [[FOO]]({{i32[ ]?[a-z]*}} %argc)
// CHECK-DAG: declare void @__kmpc_fork_call(%ident_t*, i32, void (i32*, i32*, ...)*, ...) // CHECK-DAG: declare {{.*}}void @__kmpc_fork_call(%ident_t*, i32, void (i32*, i32*, ...)*, ...)
// CHECK-DEBUG-DAG: define linkonce_odr void [[FOO]](i32 %argc) // CHECK-DEBUG-DAG: define linkonce_odr void [[FOO]](i32 %argc)
// CHECK-DEBUG-DAG: declare void @__kmpc_fork_call(%ident_t*, i32, void (i32*, i32*, ...)*, ...) // CHECK-DEBUG-DAG: declare void @__kmpc_fork_call(%ident_t*, i32, void (i32*, i32*, ...)*, ...)
// CHECK: define linkonce_odr {{[a-z]*[ ]?i32}} [[TMAIN]](i8** %argc) // CHECK: define linkonce_odr {{[a-z\_\b]*[ ]?i32}} [[TMAIN]](i8** %argc)
// CHECK: [[AGG_CAPTURED:%.+]] = alloca %struct.anon.0 // CHECK: [[AGG_CAPTURED:%.+]] = alloca %struct.anon.0
// CHECK: [[ARGC_REF:%.+]] = getelementptr inbounds %struct.anon.0, %struct.anon.0* [[AGG_CAPTURED]], i32 0, i32 0 // CHECK: [[ARGC_REF:%.+]] = getelementptr inbounds %struct.anon.0, %struct.anon.0* [[AGG_CAPTURED]], i32 0, i32 0
// CHECK-NEXT: store i8*** {{%[a-z0-9.]+}}, i8**** [[ARGC_REF]] // CHECK-NEXT: store i8*** {{%[a-z0-9.]+}}, i8**** [[ARGC_REF]]
// CHECK-NEXT: [[BITCAST:%.+]] = bitcast %struct.anon.0* [[AGG_CAPTURED]] to i8* // CHECK-NEXT: [[BITCAST:%.+]] = bitcast %struct.anon.0* [[AGG_CAPTURED]] to i8*
// CHECK-NEXT: call void (%ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%ident_t* [[DEF_LOC_2]], i32 1, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, %struct.anon.0*)* [[OMP_OUTLINED:@.+]] to void (i32*, i32*, ...)*), i8* [[BITCAST]]) // CHECK-NEXT: call {{.*}}void (%ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%ident_t* [[DEF_LOC_2]], i32 1, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, %struct.anon.0*)* [[OMP_OUTLINED:@.+]] to void (i32*, i32*, ...)*), i8* [[BITCAST]])
// CHECK-NEXT: ret i32 0 // CHECK-NEXT: ret i32 0
// CHECK-NEXT: } // CHECK-NEXT: }
// CHECK-DEBUG: define linkonce_odr i32 [[TMAIN]](i8** %argc) // CHECK-DEBUG: define linkonce_odr i32 [[TMAIN]](i8** %argc)
@ -118,17 +118,17 @@ int main (int argc, char **argv) {
// CHECK-DEBUG-NEXT: ret i32 0 // CHECK-DEBUG-NEXT: ret i32 0
// CHECK-DEBUG-NEXT: } // CHECK-DEBUG-NEXT: }
// CHECK: define internal void [[OMP_OUTLINED]](i32* %.global_tid., i32* %.bound_tid., %struct.anon.0* %__context) // CHECK: define internal {{.*}}void [[OMP_OUTLINED]](i32* %.global_tid., i32* %.bound_tid., %struct.anon.0* %__context)
// CHECK: [[CONTEXT_ADDR:%.+]] = alloca %struct.anon.0* // CHECK: [[CONTEXT_ADDR:%.+]] = alloca %struct.anon.0*
// CHECK: store %struct.anon.0* %__context, %struct.anon.0** [[CONTEXT_ADDR]] // CHECK: store %struct.anon.0* %__context, %struct.anon.0** [[CONTEXT_ADDR]]
// CHECK: [[CONTEXT_PTR:%.+]] = load %struct.anon.0*, %struct.anon.0** [[CONTEXT_ADDR]] // CHECK: [[CONTEXT_PTR:%.+]] = load %struct.anon.0*, %struct.anon.0** [[CONTEXT_ADDR]]
// CHECK-NEXT: [[ARGC_PTR_REF:%.+]] = getelementptr inbounds %struct.anon.0, %struct.anon.0* [[CONTEXT_PTR]], i32 0, i32 0 // CHECK-NEXT: [[ARGC_PTR_REF:%.+]] = getelementptr inbounds %struct.anon.0, %struct.anon.0* [[CONTEXT_PTR]], i32 0, i32 0
// CHECK-NEXT: [[ARGC_REF:%.+]] = load i8***, i8**** [[ARGC_PTR_REF]] // CHECK-NEXT: [[ARGC_REF:%.+]] = load i8***, i8**** [[ARGC_PTR_REF]]
// CHECK-NEXT: [[ARGC:%.+]] = load i8**, i8*** [[ARGC_REF]] // CHECK-NEXT: [[ARGC:%.+]] = load i8**, i8*** [[ARGC_REF]]
// CHECK-NEXT: invoke void [[FOO1:@.+foo.+]](i8** [[ARGC]]) // CHECK-NEXT: invoke {{.*}}void [[FOO1:@.+foo.+]](i8** [[ARGC]])
// CHECK: call {{.+}} @__kmpc_cancel_barrier( // CHECK: call {{.+}} @__kmpc_cancel_barrier(
// CHECK: ret void // CHECK: ret void
// CHECK: call void @{{.+terminate.*|abort}}( // CHECK: call {{.*}}void @{{.+terminate.*|abort}}(
// CHECK-NEXT: unreachable // CHECK-NEXT: unreachable
// CHECK-NEXT: } // CHECK-NEXT: }
// CHECK-DEBUG: define internal void [[OMP_OUTLINED]](i32* %.global_tid., i32* %.bound_tid., %struct.anon.0* %__context) // CHECK-DEBUG: define internal void [[OMP_OUTLINED]](i32* %.global_tid., i32* %.bound_tid., %struct.anon.0* %__context)
@ -145,7 +145,7 @@ int main (int argc, char **argv) {
// CHECK-DEBUG-NEXT: unreachable // CHECK-DEBUG-NEXT: unreachable
// CHECK-DEBUG-NEXT: } // CHECK-DEBUG-NEXT: }
// CHECK: define linkonce_odr void [[FOO1]](i8** %argc) // CHECK: define linkonce_odr {{.*}}void [[FOO1]](i8** %argc)
// CHECK-DEBUG: define linkonce_odr void [[FOO1]](i8** %argc) // CHECK-DEBUG: define linkonce_odr void [[FOO1]](i8** %argc)
// CHECK: attributes #[[FN_ATTRS]] = {{.+}} nounwind // CHECK: attributes #[[FN_ATTRS]] = {{.+}} nounwind

View File

@ -58,16 +58,16 @@ int main() {
#ifdef LAMBDA #ifdef LAMBDA
// LAMBDA: [[G:@.+]] = global i{{[0-9]+}} 1212, // LAMBDA: [[G:@.+]] = global i{{[0-9]+}} 1212,
// LAMBDA-LABEL: @main // LAMBDA-LABEL: @main
// LAMBDA: call{{( x86_thiscallcc)?}} void [[OUTER_LAMBDA:@.+]]( // LAMBDA: call{{.*}} void [[OUTER_LAMBDA:@.+]](
[&]() { [&]() {
// LAMBDA: define{{.*}} internal{{.*}} void [[OUTER_LAMBDA]]( // LAMBDA: define{{.*}} internal{{.*}} void [[OUTER_LAMBDA]](
// LAMBDA: call void {{.+}} @__kmpc_fork_call({{.+}}, i32 1, {{.+}}* [[OMP_REGION:@.+]] to {{.+}}, i8* // LAMBDA: call {{.*}}void {{.+}} @__kmpc_fork_call({{.+}}, i32 1, {{.+}}* [[OMP_REGION:@.+]] to {{.+}}, i8*
#pragma omp parallel copyin(g) #pragma omp parallel copyin(g)
{ {
// LAMBDA: define{{.*}} internal{{.*}} void [[OMP_REGION]](i32* %{{.+}}, i32* %{{.+}}, %{{.+}}* [[ARG:%.+]]) // LAMBDA: define{{.*}} internal{{.*}} void [[OMP_REGION]](i32* %{{.+}}, i32* %{{.+}}, %{{.+}}* [[ARG:%.+]])
// threadprivate_g = g; // threadprivate_g = g;
// LAMBDA: call i8* @__kmpc_threadprivate_cached({{.+}} [[G]] // LAMBDA: call {{.*}}i8* @__kmpc_threadprivate_cached({{.+}} [[G]]
// LAMBDA: ptrtoint i{{[0-9]+}}* %{{.+}} to i{{[0-9]+}} // LAMBDA: ptrtoint i{{[0-9]+}}* %{{.+}} to i{{[0-9]+}}
// LAMBDA: icmp ne i{{[0-9]+}} ptrtoint (i{{[0-9]+}}* [[G]] to i{{[0-9]+}}), %{{.+}} // LAMBDA: icmp ne i{{[0-9]+}} ptrtoint (i{{[0-9]+}}* [[G]] to i{{[0-9]+}}), %{{.+}}
// LAMBDA: br i1 %{{.+}}, label %[[NOT_MASTER:.+]], label %[[DONE:.+]] // LAMBDA: br i1 %{{.+}}, label %[[NOT_MASTER:.+]], label %[[DONE:.+]]
@ -76,9 +76,9 @@ int main() {
// LAMBDA: store volatile i{{[0-9]+}} %{{.+}}, i{{[0-9]+}}* %{{.+}}, // LAMBDA: store volatile i{{[0-9]+}} %{{.+}}, i{{[0-9]+}}* %{{.+}},
// LAMBDA: [[DONE]] // LAMBDA: [[DONE]]
// LAMBDA: call i32 @__kmpc_cancel_barrier( // LAMBDA: call {{.*}}i32 @__kmpc_cancel_barrier(
g = 1; g = 1;
// LAMBDA: call{{( x86_thiscallcc)?}} void [[INNER_LAMBDA:@.+]](%{{.+}}* // LAMBDA: call{{.*}} void [[INNER_LAMBDA:@.+]](%{{.+}}*
[&]() { [&]() {
// LAMBDA: define {{.+}} void [[INNER_LAMBDA]](%{{.+}}* [[ARG_PTR:%.+]]) // LAMBDA: define {{.+}} void [[INNER_LAMBDA]](%{{.+}}* [[ARG_PTR:%.+]])
// LAMBDA: store %{{.+}}* [[ARG_PTR]], %{{.+}}** [[ARG_PTR_REF:%.+]], // LAMBDA: store %{{.+}}* [[ARG_PTR]], %{{.+}}** [[ARG_PTR_REF:%.+]],
@ -91,16 +91,16 @@ int main() {
#elif defined(BLOCKS) #elif defined(BLOCKS)
// BLOCKS: [[G:@.+]] = global i{{[0-9]+}} 1212, // BLOCKS: [[G:@.+]] = global i{{[0-9]+}} 1212,
// BLOCKS-LABEL: @main // BLOCKS-LABEL: @main
// BLOCKS: call void {{%.+}}(i8 // BLOCKS: call {{.*}}void {{%.+}}(i8
^{ ^{
// BLOCKS: define{{.*}} internal{{.*}} void {{.+}}(i8* // BLOCKS: define{{.*}} internal{{.*}} void {{.+}}(i8*
// BLOCKS: call void {{.+}} @__kmpc_fork_call({{.+}}, i32 1, {{.+}}* [[OMP_REGION:@.+]] to {{.+}}, i8* // BLOCKS: call {{.*}}void {{.+}} @__kmpc_fork_call({{.+}}, i32 1, {{.+}}* [[OMP_REGION:@.+]] to {{.+}}, i8*
#pragma omp parallel copyin(g) #pragma omp parallel copyin(g)
{ {
// BLOCKS: define{{.*}} internal{{.*}} void [[OMP_REGION]](i32* %{{.+}}, i32* %{{.+}}, %{{.+}}* [[ARG:%.+]]) // BLOCKS: define{{.*}} internal{{.*}} void [[OMP_REGION]](i32* %{{.+}}, i32* %{{.+}}, %{{.+}}* [[ARG:%.+]])
// threadprivate_g = g; // threadprivate_g = g;
// BLOCKS: call i8* @__kmpc_threadprivate_cached({{.+}} [[G]] // BLOCKS: call {{.*}}i8* @__kmpc_threadprivate_cached({{.+}} [[G]]
// BLOCKS: ptrtoint i{{[0-9]+}}* %{{.+}} to i{{[0-9]+}} // BLOCKS: ptrtoint i{{[0-9]+}}* %{{.+}} to i{{[0-9]+}}
// BLOCKS: icmp ne i{{[0-9]+}} ptrtoint (i{{[0-9]+}}* [[G]] to i{{[0-9]+}}), %{{.+}} // BLOCKS: icmp ne i{{[0-9]+}} ptrtoint (i{{[0-9]+}}* [[G]] to i{{[0-9]+}}), %{{.+}}
// BLOCKS: br i1 %{{.+}}, label %[[NOT_MASTER:.+]], label %[[DONE:.+]] // BLOCKS: br i1 %{{.+}}, label %[[NOT_MASTER:.+]], label %[[DONE:.+]]
@ -109,16 +109,16 @@ int main() {
// BLOCKS: store volatile i{{[0-9]+}} %{{.+}}, i{{[0-9]+}}* %{{.+}}, // BLOCKS: store volatile i{{[0-9]+}} %{{.+}}, i{{[0-9]+}}* %{{.+}},
// BLOCKS: [[DONE]] // BLOCKS: [[DONE]]
// BLOCKS: call i32 @__kmpc_cancel_barrier( // BLOCKS: call {{.*}}i32 @__kmpc_cancel_barrier(
g = 1; g = 1;
// BLOCKS: store volatile i{{[0-9]+}} 1, i{{[0-9]+}}* // BLOCKS: store volatile i{{[0-9]+}} 1, i{{[0-9]+}}*
// BLOCKS-NOT: [[G]]{{[[^:word:]]}} // BLOCKS-NOT: [[G]]{{[[^:word:]]}}
// BLOCKS: call void {{%.+}}(i8 // BLOCKS: call {{.*}}void {{%.+}}(i8
^{ ^{
// BLOCKS: define {{.+}} void {{@.+}}(i8* // BLOCKS: define {{.+}} void {{@.+}}(i8*
g = 2; g = 2;
// BLOCKS-NOT: [[G]]{{[[^:word:]]}} // BLOCKS-NOT: [[G]]{{[[^:word:]]}}
// BLOCKS: call i8* @__kmpc_threadprivate_cached({{.+}} [[G]] // BLOCKS: call {{.*}}i8* @__kmpc_threadprivate_cached({{.+}} [[G]]
// BLOCKS: store volatile i{{[0-9]+}} 2, i{{[0-9]+}}* // BLOCKS: store volatile i{{[0-9]+}} 2, i{{[0-9]+}}*
// BLOCKS-NOT: [[G]]{{[[^:word:]]}} // BLOCKS-NOT: [[G]]{{[[^:word:]]}}
// BLOCKS: ret // BLOCKS: ret
@ -148,19 +148,19 @@ int main() {
// CHECK-LABEL: @main // CHECK-LABEL: @main
// CHECK: [[TEST:%.+]] = alloca [[S_FLOAT_TY]], // CHECK: [[TEST:%.+]] = alloca [[S_FLOAT_TY]],
// CHECK: call {{.*}} [[S_FLOAT_TY_COPY_ASSIGN:@.+]]([[S_FLOAT_TY]]* [[TEST]], [[S_FLOAT_TY]]* // CHECK: call {{.*}} [[S_FLOAT_TY_COPY_ASSIGN:@.+]]([[S_FLOAT_TY]]* [[TEST]], [[S_FLOAT_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]+}}*, {{%.+}}*)* [[MAIN_MICROTASK:@.+]] to void (i32*, i32*, ...)*), i8* %{{.+}}) // 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]+}}*, {{%.+}}*)* [[MAIN_MICROTASK:@.+]] to void (i32*, i32*, ...)*), i8* %{{.+}})
// 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]+}}*, {{%.+}}*)* [[MAIN_MICROTASK1:@.+]] to void (i32*, i32*, ...)*), i8* %{{.+}}) // 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]+}}*, {{%.+}}*)* [[MAIN_MICROTASK1:@.+]] to void (i32*, i32*, ...)*), i8* %{{.+}})
// CHECK: = call {{.*}}i{{.+}} [[TMAIN_INT:@.+]]() // CHECK: = call {{.*}}i{{.+}} [[TMAIN_INT:@.+]]()
// CHECK: call {{.*}} [[S_FLOAT_TY_DESTR:@.+]]([[S_FLOAT_TY]]* // CHECK: call {{.*}} [[S_FLOAT_TY_DESTR:@.+]]([[S_FLOAT_TY]]*
// CHECK: ret // CHECK: ret
// //
// CHECK: define internal void [[MAIN_MICROTASK]](i{{[0-9]+}}* [[GTID_ADDR:%.+]], i{{[0-9]+}}* %{{.+}}, {{%.+}}* %{{.+}}) // CHECK: define internal {{.*}}void [[MAIN_MICROTASK]](i{{[0-9]+}}* [[GTID_ADDR:%.+]], i{{[0-9]+}}* %{{.+}}, {{%.+}}* %{{.+}})
// CHECK: store i{{[0-9]+}}* [[GTID_ADDR]], i{{[0-9]+}}** [[GTID_ADDR_ADDR:%.+]], // CHECK: store i{{[0-9]+}}* [[GTID_ADDR]], i{{[0-9]+}}** [[GTID_ADDR_ADDR:%.+]],
// CHECK: [[GTID_ADDR:%.+]] = load i32*, i32** [[GTID_ADDR_ADDR]], // CHECK: [[GTID_ADDR:%.+]] = load i32*, i32** [[GTID_ADDR_ADDR]],
// CHECK: [[GTID:%.+]] = load i32, i32* [[GTID_ADDR]], // CHECK: [[GTID:%.+]] = load i32, i32* [[GTID_ADDR]],
// threadprivate_t_var = t_var; // threadprivate_t_var = t_var;
// CHECK: call i8* @__kmpc_threadprivate_cached({{.+}} [[T_VAR]] // CHECK: call {{.*}}i8* @__kmpc_threadprivate_cached({{.+}} [[T_VAR]]
// CHECK: ptrtoint i{{[0-9]+}}* %{{.+}} to i{{[0-9]+}} // CHECK: ptrtoint i{{[0-9]+}}* %{{.+}} to i{{[0-9]+}}
// CHECK: icmp ne i{{[0-9]+}} ptrtoint (i{{[0-9]+}}* [[T_VAR]] to i{{[0-9]+}}), %{{.+}} // CHECK: icmp ne i{{[0-9]+}} ptrtoint (i{{[0-9]+}}* [[T_VAR]] to i{{[0-9]+}}), %{{.+}}
// CHECK: br i1 %{{.+}}, label %[[NOT_MASTER:.+]], label %[[DONE:.+]] // CHECK: br i1 %{{.+}}, label %[[NOT_MASTER:.+]], label %[[DONE:.+]]
@ -169,11 +169,11 @@ int main() {
// CHECK: store i{{[0-9]+}} %{{.+}}, i{{[0-9]+}}* %{{.+}}, // CHECK: store i{{[0-9]+}} %{{.+}}, i{{[0-9]+}}* %{{.+}},
// threadprivate_vec = vec; // threadprivate_vec = vec;
// CHECK: call i8* @__kmpc_threadprivate_cached({{.+}} [[VEC]] // CHECK: call {{.*}}i8* @__kmpc_threadprivate_cached({{.+}} [[VEC]]
// CHECK: call void @llvm.memcpy{{.*}}(i8* %{{.+}}, i8* bitcast ([2 x i{{[0-9]+}}]* [[VEC]] to i8*), // CHECK: call void @llvm.memcpy{{.*}}(i8* %{{.+}}, i8* bitcast ([2 x i{{[0-9]+}}]* [[VEC]] to i8*),
// threadprivate_s_arr = s_arr; // threadprivate_s_arr = s_arr;
// CHECK: call i8* @__kmpc_threadprivate_cached({{.+}} [[S_ARR]] // CHECK: call {{.*}}i8* @__kmpc_threadprivate_cached({{.+}} [[S_ARR]]
// CHECK: [[S_ARR_PRIV_BEGIN:%.+]] = getelementptr inbounds [2 x [[S_FLOAT_TY]]], [2 x [[S_FLOAT_TY]]]* {{%.+}}, i{{[0-9]+}} 0, i{{[0-9]+}} 0 // CHECK: [[S_ARR_PRIV_BEGIN:%.+]] = getelementptr inbounds [2 x [[S_FLOAT_TY]]], [2 x [[S_FLOAT_TY]]]* {{%.+}}, i{{[0-9]+}} 0, i{{[0-9]+}} 0
// CHECK: [[S_ARR_PRIV_END:%.+]] = getelementptr [[S_FLOAT_TY]], [[S_FLOAT_TY]]* [[S_ARR_PRIV_BEGIN]], i{{[0-9]+}} 2 // CHECK: [[S_ARR_PRIV_END:%.+]] = getelementptr [[S_FLOAT_TY]], [[S_FLOAT_TY]]* [[S_ARR_PRIV_BEGIN]], i{{[0-9]+}} 2
// CHECK: [[IS_EMPTY:%.+]] = icmp eq [[S_FLOAT_TY]]* [[S_ARR_PRIV_BEGIN]], [[S_ARR_PRIV_END]] // CHECK: [[IS_EMPTY:%.+]] = icmp eq [[S_FLOAT_TY]]* [[S_ARR_PRIV_BEGIN]], [[S_ARR_PRIV_END]]
@ -183,20 +183,20 @@ int main() {
// CHECK: br i1 {{.+}}, label %{{.+}}, label %[[S_ARR_BODY]] // CHECK: br i1 {{.+}}, label %{{.+}}, label %[[S_ARR_BODY]]
// threadprivate_var = var; // threadprivate_var = var;
// CHECK: call i8* @__kmpc_threadprivate_cached({{.+}} [[VAR]] // CHECK: call {{.*}}i8* @__kmpc_threadprivate_cached({{.+}} [[VAR]]
// CHECK: call {{.*}} [[S_FLOAT_TY_COPY_ASSIGN]]([[S_FLOAT_TY]]* {{%.+}}, [[S_FLOAT_TY]]* {{.*}}[[VAR]]) // CHECK: call {{.*}} [[S_FLOAT_TY_COPY_ASSIGN]]([[S_FLOAT_TY]]* {{%.+}}, [[S_FLOAT_TY]]* {{.*}}[[VAR]])
// CHECK: [[DONE]] // CHECK: [[DONE]]
// CHECK: call i32 @__kmpc_cancel_barrier(%{{.+}}* [[IMPLICIT_BARRIER_LOC]], i32 [[GTID]]) // CHECK: call {{.*}}i32 @__kmpc_cancel_barrier(%{{.+}}* [[IMPLICIT_BARRIER_LOC]], i32 [[GTID]])
// CHECK: ret void // CHECK: ret void
// CHECK: define internal void [[MAIN_MICROTASK1]](i{{[0-9]+}}* [[GTID_ADDR:%.+]], i{{[0-9]+}}* %{{.+}}, {{%.+}}* %{{.+}}) // CHECK: define internal {{.*}}void [[MAIN_MICROTASK1]](i{{[0-9]+}}* [[GTID_ADDR:%.+]], i{{[0-9]+}}* %{{.+}}, {{%.+}}* %{{.+}})
// CHECK: store i{{[0-9]+}}* [[GTID_ADDR]], i{{[0-9]+}}** [[GTID_ADDR_ADDR:%.+]], // CHECK: store i{{[0-9]+}}* [[GTID_ADDR]], i{{[0-9]+}}** [[GTID_ADDR_ADDR:%.+]],
// CHECK: [[GTID_ADDR:%.+]] = load i32*, i32** [[GTID_ADDR_ADDR]], // CHECK: [[GTID_ADDR:%.+]] = load i32*, i32** [[GTID_ADDR_ADDR]],
// CHECK: [[GTID:%.+]] = load i32, i32* [[GTID_ADDR]], // CHECK: [[GTID:%.+]] = load i32, i32* [[GTID_ADDR]],
// threadprivate_t_var = t_var; // threadprivate_t_var = t_var;
// CHECK: call i8* @__kmpc_threadprivate_cached({{.+}} [[T_VAR]] // CHECK: call {{.*}}i8* @__kmpc_threadprivate_cached({{.+}} [[T_VAR]]
// CHECK: ptrtoint i{{[0-9]+}}* %{{.+}} to i{{[0-9]+}} // CHECK: ptrtoint i{{[0-9]+}}* %{{.+}} to i{{[0-9]+}}
// CHECK: icmp ne i{{[0-9]+}} ptrtoint (i{{[0-9]+}}* [[T_VAR]] to i{{[0-9]+}}), %{{.+}} // CHECK: icmp ne i{{[0-9]+}} ptrtoint (i{{[0-9]+}}* [[T_VAR]] to i{{[0-9]+}}), %{{.+}}
// CHECK: br i1 %{{.+}}, label %[[NOT_MASTER:.+]], label %[[DONE:.+]] // CHECK: br i1 %{{.+}}, label %[[NOT_MASTER:.+]], label %[[DONE:.+]]
@ -205,24 +205,24 @@ int main() {
// CHECK: store i{{[0-9]+}} %{{.+}}, i{{[0-9]+}}* %{{.+}}, // CHECK: store i{{[0-9]+}} %{{.+}}, i{{[0-9]+}}* %{{.+}},
// CHECK: [[DONE]] // CHECK: [[DONE]]
// CHECK: call i32 @__kmpc_cancel_barrier(%{{.+}}* [[IMPLICIT_BARRIER_LOC]], i32 [[GTID]]) // CHECK: call {{.*}}i32 @__kmpc_cancel_barrier(%{{.+}}* [[IMPLICIT_BARRIER_LOC]], i32 [[GTID]])
// CHECK: ret void // CHECK: ret void
// CHECK: define {{.*}} i{{[0-9]+}} [[TMAIN_INT]]() // CHECK: define {{.*}} i{{[0-9]+}} [[TMAIN_INT]]()
// CHECK: [[TEST:%.+]] = alloca [[S_INT_TY]], // CHECK: [[TEST:%.+]] = alloca [[S_INT_TY]],
// CHECK: call {{.*}} [[S_INT_TY_COPY_ASSIGN:@.+]]([[S_INT_TY]]* [[TEST]], [[S_INT_TY]]* // CHECK: call {{.*}} [[S_INT_TY_COPY_ASSIGN:@.+]]([[S_INT_TY]]* [[TEST]], [[S_INT_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]+}}*, {{%.+}}*)* [[TMAIN_MICROTASK:@.+]] to void (i32*, i32*, ...)*), i8* %{{.+}}) // 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]+}}*, {{%.+}}*)* [[TMAIN_MICROTASK:@.+]] to void (i32*, i32*, ...)*), i8* %{{.+}})
// 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]+}}*, {{%.+}}*)* [[TMAIN_MICROTASK1:@.+]] to void (i32*, i32*, ...)*), i8* %{{.+}}) // 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]+}}*, {{%.+}}*)* [[TMAIN_MICROTASK1:@.+]] to void (i32*, i32*, ...)*), i8* %{{.+}})
// CHECK: call {{.*}} [[S_INT_TY_DESTR:@.+]]([[S_INT_TY]]* // CHECK: call {{.*}} [[S_INT_TY_DESTR:@.+]]([[S_INT_TY]]*
// CHECK: ret // CHECK: ret
// //
// CHECK: define internal void [[TMAIN_MICROTASK]](i{{[0-9]+}}* [[GTID_ADDR:%.+]], i{{[0-9]+}}* %{{.+}}, {{%.+}}* %{{.+}}) // CHECK: define internal {{.*}}void [[TMAIN_MICROTASK]](i{{[0-9]+}}* [[GTID_ADDR:%.+]], i{{[0-9]+}}* %{{.+}}, {{%.+}}* %{{.+}})
// CHECK: store i{{[0-9]+}}* [[GTID_ADDR]], i{{[0-9]+}}** [[GTID_ADDR_ADDR:%.+]], // CHECK: store i{{[0-9]+}}* [[GTID_ADDR]], i{{[0-9]+}}** [[GTID_ADDR_ADDR:%.+]],
// CHECK: [[GTID_ADDR:%.+]] = load i32*, i32** [[GTID_ADDR_ADDR]], // CHECK: [[GTID_ADDR:%.+]] = load i32*, i32** [[GTID_ADDR_ADDR]],
// CHECK: [[GTID:%.+]] = load i32, i32* [[GTID_ADDR]], // CHECK: [[GTID:%.+]] = load i32, i32* [[GTID_ADDR]],
// threadprivate_t_var = t_var; // threadprivate_t_var = t_var;
// CHECK: call i8* @__kmpc_threadprivate_cached({{.+}} [[TMAIN_T_VAR]] // CHECK: call {{.*}}i8* @__kmpc_threadprivate_cached({{.+}} [[TMAIN_T_VAR]]
// CHECK: ptrtoint i{{[0-9]+}}* %{{.+}} to i{{[0-9]+}} // CHECK: ptrtoint i{{[0-9]+}}* %{{.+}} to i{{[0-9]+}}
// CHECK: icmp ne i{{[0-9]+}} ptrtoint (i{{[0-9]+}}* [[TMAIN_T_VAR]] to i{{[0-9]+}}), %{{.+}} // CHECK: icmp ne i{{[0-9]+}} ptrtoint (i{{[0-9]+}}* [[TMAIN_T_VAR]] to i{{[0-9]+}}), %{{.+}}
// CHECK: br i1 %{{.+}}, label %[[NOT_MASTER:.+]], label %[[DONE:.+]] // CHECK: br i1 %{{.+}}, label %[[NOT_MASTER:.+]], label %[[DONE:.+]]
@ -231,11 +231,11 @@ int main() {
// CHECK: store i{{[0-9]+}} %{{.+}}, i{{[0-9]+}}* %{{.+}}, // CHECK: store i{{[0-9]+}} %{{.+}}, i{{[0-9]+}}* %{{.+}},
// threadprivate_vec = vec; // threadprivate_vec = vec;
// CHECK: call i8* @__kmpc_threadprivate_cached({{.+}} [[TMAIN_VEC]] // CHECK: call {{.*}}i8* @__kmpc_threadprivate_cached({{.+}} [[TMAIN_VEC]]
// CHECK: call void @llvm.memcpy{{.*}}(i8* %{{.+}}, i8* bitcast ([2 x i{{[0-9]+}}]* [[TMAIN_VEC]] to i8*), // CHECK: call {{.*}}void @llvm.memcpy{{.*}}(i8* %{{.+}}, i8* bitcast ([2 x i{{[0-9]+}}]* [[TMAIN_VEC]] to i8*),
// threadprivate_s_arr = s_arr; // threadprivate_s_arr = s_arr;
// CHECK: call i8* @__kmpc_threadprivate_cached({{.+}} [[TMAIN_S_ARR]] // CHECK: call {{.*}}i8* @__kmpc_threadprivate_cached({{.+}} [[TMAIN_S_ARR]]
// CHECK: [[S_ARR_PRIV_BEGIN:%.+]] = getelementptr inbounds [2 x [[S_INT_TY]]], [2 x [[S_INT_TY]]]* {{%.+}}, i{{[0-9]+}} 0, i{{[0-9]+}} 0 // CHECK: [[S_ARR_PRIV_BEGIN:%.+]] = getelementptr inbounds [2 x [[S_INT_TY]]], [2 x [[S_INT_TY]]]* {{%.+}}, i{{[0-9]+}} 0, i{{[0-9]+}} 0
// CHECK: [[S_ARR_PRIV_END:%.+]] = getelementptr [[S_INT_TY]], [[S_INT_TY]]* [[S_ARR_PRIV_BEGIN]], i{{[0-9]+}} 2 // CHECK: [[S_ARR_PRIV_END:%.+]] = getelementptr [[S_INT_TY]], [[S_INT_TY]]* [[S_ARR_PRIV_BEGIN]], i{{[0-9]+}} 2
// CHECK: [[IS_EMPTY:%.+]] = icmp eq [[S_INT_TY]]* [[S_ARR_PRIV_BEGIN]], [[S_ARR_PRIV_END]] // CHECK: [[IS_EMPTY:%.+]] = icmp eq [[S_INT_TY]]* [[S_ARR_PRIV_BEGIN]], [[S_ARR_PRIV_END]]
@ -245,20 +245,20 @@ int main() {
// CHECK: br i1 {{.+}}, label %{{.+}}, label %[[S_ARR_BODY]] // CHECK: br i1 {{.+}}, label %{{.+}}, label %[[S_ARR_BODY]]
// threadprivate_var = var; // threadprivate_var = var;
// CHECK: call i8* @__kmpc_threadprivate_cached({{.+}} [[TMAIN_VAR]] // CHECK: call {{.*}}i8* @__kmpc_threadprivate_cached({{.+}} [[TMAIN_VAR]]
// CHECK: call {{.*}} [[S_INT_TY_COPY_ASSIGN]]([[S_INT_TY]]* {{%.+}}, [[S_INT_TY]]* {{.*}}[[TMAIN_VAR]]) // CHECK: call {{.*}} [[S_INT_TY_COPY_ASSIGN]]([[S_INT_TY]]* {{%.+}}, [[S_INT_TY]]* {{.*}}[[TMAIN_VAR]])
// CHECK: [[DONE]] // CHECK: [[DONE]]
// CHECK: call i32 @__kmpc_cancel_barrier(%{{.+}}* [[IMPLICIT_BARRIER_LOC]], i32 [[GTID]]) // CHECK: call {{.*}}i32 @__kmpc_cancel_barrier(%{{.+}}* [[IMPLICIT_BARRIER_LOC]], i32 [[GTID]])
// CHECK: ret void // CHECK: ret void
// CHECK: define internal void [[TMAIN_MICROTASK1]](i{{[0-9]+}}* [[GTID_ADDR:%.+]], i{{[0-9]+}}* %{{.+}}, {{%.+}}* %{{.+}}) // CHECK: define internal {{.*}}void [[TMAIN_MICROTASK1]](i{{[0-9]+}}* [[GTID_ADDR:%.+]], i{{[0-9]+}}* %{{.+}}, {{%.+}}* %{{.+}})
// CHECK: store i{{[0-9]+}}* [[GTID_ADDR]], i{{[0-9]+}}** [[GTID_ADDR_ADDR:%.+]], // CHECK: store i{{[0-9]+}}* [[GTID_ADDR]], i{{[0-9]+}}** [[GTID_ADDR_ADDR:%.+]],
// CHECK: [[GTID_ADDR:%.+]] = load i32*, i32** [[GTID_ADDR_ADDR]], // CHECK: [[GTID_ADDR:%.+]] = load i32*, i32** [[GTID_ADDR_ADDR]],
// CHECK: [[GTID:%.+]] = load i32, i32* [[GTID_ADDR]], // CHECK: [[GTID:%.+]] = load i32, i32* [[GTID_ADDR]],
// threadprivate_t_var = t_var; // threadprivate_t_var = t_var;
// CHECK: call i8* @__kmpc_threadprivate_cached({{.+}} [[TMAIN_T_VAR]] // CHECK: call {{.*}}i8* @__kmpc_threadprivate_cached({{.+}} [[TMAIN_T_VAR]]
// CHECK: ptrtoint i{{[0-9]+}}* %{{.+}} to i{{[0-9]+}} // CHECK: ptrtoint i{{[0-9]+}}* %{{.+}} to i{{[0-9]+}}
// CHECK: icmp ne i{{[0-9]+}} ptrtoint (i{{[0-9]+}}* [[TMAIN_T_VAR]] to i{{[0-9]+}}), %{{.+}} // CHECK: icmp ne i{{[0-9]+}} ptrtoint (i{{[0-9]+}}* [[TMAIN_T_VAR]] to i{{[0-9]+}}), %{{.+}}
// CHECK: br i1 %{{.+}}, label %[[NOT_MASTER:.+]], label %[[DONE:.+]] // CHECK: br i1 %{{.+}}, label %[[NOT_MASTER:.+]], label %[[DONE:.+]]
@ -267,7 +267,7 @@ int main() {
// CHECK: store i{{[0-9]+}} %{{.+}}, i{{[0-9]+}}* %{{.+}}, // CHECK: store i{{[0-9]+}} %{{.+}}, i{{[0-9]+}}* %{{.+}},
// CHECK: [[DONE]] // CHECK: [[DONE]]
// CHECK: call i32 @__kmpc_cancel_barrier(%{{.+}}* [[IMPLICIT_BARRIER_LOC]], i32 [[GTID]]) // CHECK: call {{.*}}i32 @__kmpc_cancel_barrier(%{{.+}}* [[IMPLICIT_BARRIER_LOC]], i32 [[GTID]])
// CHECK: ret void // CHECK: ret void
#endif #endif

View File

@ -56,13 +56,13 @@ int main() {
#ifdef LAMBDA #ifdef LAMBDA
// LAMBDA: [[G:@.+]] = global i{{[0-9]+}} 1212, // LAMBDA: [[G:@.+]] = global i{{[0-9]+}} 1212,
// LAMBDA-LABEL: @main // LAMBDA-LABEL: @main
// LAMBDA: call{{( x86_thiscallcc)?}} void [[OUTER_LAMBDA:@.+]]( // LAMBDA: call{{.*}} void [[OUTER_LAMBDA:@.+]](
[&]() { [&]() {
// LAMBDA: define{{.*}} internal{{.*}} void [[OUTER_LAMBDA]]( // LAMBDA: define{{.*}} internal{{.*}} void [[OUTER_LAMBDA]](
// LAMBDA: [[G_LOCAL_REF:%.+]] = getelementptr inbounds %{{.+}}, %{{.+}}* [[AGG_CAPTURED:%.+]], i{{[0-9]+}} 0, i{{[0-9]+}} 0 // LAMBDA: [[G_LOCAL_REF:%.+]] = getelementptr inbounds %{{.+}}, %{{.+}}* [[AGG_CAPTURED:%.+]], i{{[0-9]+}} 0, i{{[0-9]+}} 0
// LAMBDA: store i{{[0-9]+}}* [[G]], i{{[0-9]+}}** [[G_LOCAL_REF]] // LAMBDA: store i{{[0-9]+}}* [[G]], i{{[0-9]+}}** [[G_LOCAL_REF]]
// LAMBDA: [[ARG:%.+]] = bitcast %{{.+}}* [[AGG_CAPTURED]] to i8* // LAMBDA: [[ARG:%.+]] = bitcast %{{.+}}* [[AGG_CAPTURED]] to i8*
// LAMBDA: call void {{.+}} @__kmpc_fork_call({{.+}}, i32 1, {{.+}}* [[OMP_REGION:@.+]] to {{.+}}, i8* [[ARG]]) // LAMBDA: call {{.*}}void {{.+}} @__kmpc_fork_call({{.+}}, i32 1, {{.+}}* [[OMP_REGION:@.+]] to {{.+}}, i8* [[ARG]])
#pragma omp parallel firstprivate(g) #pragma omp parallel firstprivate(g)
{ {
// LAMBDA: define{{.*}} internal{{.*}} void [[OMP_REGION]](i32* %{{.+}}, i32* %{{.+}}, %{{.+}}* [[ARG:%.+]]) // LAMBDA: define{{.*}} internal{{.*}} void [[OMP_REGION]](i32* %{{.+}}, i32* %{{.+}}, %{{.+}}* [[ARG:%.+]])
@ -73,12 +73,12 @@ int main() {
// LAMBDA: [[G_REF:%.+]] = load i{{[0-9]+}}*, i{{[0-9]+}}** [[G_REF_ADDR]] // LAMBDA: [[G_REF:%.+]] = load i{{[0-9]+}}*, i{{[0-9]+}}** [[G_REF_ADDR]]
// LAMBDA: [[G_VAL:%.+]] = load volatile i{{[0-9]+}}, i{{[0-9]+}}* [[G_REF]] // LAMBDA: [[G_VAL:%.+]] = load volatile i{{[0-9]+}}, i{{[0-9]+}}* [[G_REF]]
// LAMBDA: store i{{[0-9]+}} [[G_VAL]], i{{[0-9]+}}* [[G_PRIVATE_ADDR]] // LAMBDA: store i{{[0-9]+}} [[G_VAL]], i{{[0-9]+}}* [[G_PRIVATE_ADDR]]
// LAMBDA: call i32 @__kmpc_cancel_barrier( // LAMBDA: call {{.*}}i32 @__kmpc_cancel_barrier(
g = 1; g = 1;
// LAMBDA: store volatile i{{[0-9]+}} 1, i{{[0-9]+}}* [[G_PRIVATE_ADDR]], // LAMBDA: store volatile i{{[0-9]+}} 1, i{{[0-9]+}}* [[G_PRIVATE_ADDR]],
// LAMBDA: [[G_PRIVATE_ADDR_REF:%.+]] = getelementptr inbounds %{{.+}}, %{{.+}}* [[ARG:%.+]], i{{[0-9]+}} 0, i{{[0-9]+}} 0 // 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: store i{{[0-9]+}}* [[G_PRIVATE_ADDR]], i{{[0-9]+}}** [[G_PRIVATE_ADDR_REF]]
// LAMBDA: call{{( x86_thiscallcc)?}} void [[INNER_LAMBDA:@.+]](%{{.+}}* [[ARG]]) // LAMBDA: call{{.*}} void [[INNER_LAMBDA:@.+]](%{{.+}}* [[ARG]])
[&]() { [&]() {
// LAMBDA: define {{.+}} void [[INNER_LAMBDA]](%{{.+}}* [[ARG_PTR:%.+]]) // LAMBDA: define {{.+}} void [[INNER_LAMBDA]](%{{.+}}* [[ARG_PTR:%.+]])
// LAMBDA: store %{{.+}}* [[ARG_PTR]], %{{.+}}** [[ARG_PTR_REF:%.+]], // LAMBDA: store %{{.+}}* [[ARG_PTR]], %{{.+}}** [[ARG_PTR_REF:%.+]],
@ -94,13 +94,13 @@ int main() {
#elif defined(BLOCKS) #elif defined(BLOCKS)
// BLOCKS: [[G:@.+]] = global i{{[0-9]+}} 1212, // BLOCKS: [[G:@.+]] = global i{{[0-9]+}} 1212,
// BLOCKS-LABEL: @main // BLOCKS-LABEL: @main
// BLOCKS: call void {{%.+}}(i8 // BLOCKS: call {{.*}}void {{%.+}}(i8
^{ ^{
// BLOCKS: define{{.*}} internal{{.*}} void {{.+}}(i8* // BLOCKS: define{{.*}} internal{{.*}} void {{.+}}(i8*
// BLOCKS: [[G_LOCAL_REF:%.+]] = getelementptr inbounds %{{.+}}, %{{.+}}* [[AGG_CAPTURED:%.+]], i{{[0-9]+}} 0, i{{[0-9]+}} 0 // BLOCKS: [[G_LOCAL_REF:%.+]] = getelementptr inbounds %{{.+}}, %{{.+}}* [[AGG_CAPTURED:%.+]], i{{[0-9]+}} 0, i{{[0-9]+}} 0
// BLOCKS: store i{{[0-9]+}}* [[G]], i{{[0-9]+}}** [[G_LOCAL_REF]] // BLOCKS: store i{{[0-9]+}}* [[G]], i{{[0-9]+}}** [[G_LOCAL_REF]]
// BLOCKS: [[ARG:%.+]] = bitcast %{{.+}}* [[AGG_CAPTURED]] to i8* // BLOCKS: [[ARG:%.+]] = bitcast %{{.+}}* [[AGG_CAPTURED]] to i8*
// BLOCKS: call void {{.+}} @__kmpc_fork_call({{.+}}, i32 1, {{.+}}* [[OMP_REGION:@.+]] to {{.+}}, i8* [[ARG]]) // BLOCKS: call {{.*}}void {{.+}} @__kmpc_fork_call({{.+}}, i32 1, {{.+}}* [[OMP_REGION:@.+]] to {{.+}}, i8* [[ARG]])
#pragma omp parallel firstprivate(g) #pragma omp parallel firstprivate(g)
{ {
// BLOCKS: define{{.*}} internal{{.*}} void [[OMP_REGION]](i32* %{{.+}}, i32* %{{.+}}, %{{.+}}* [[ARG:%.+]]) // BLOCKS: define{{.*}} internal{{.*}} void [[OMP_REGION]](i32* %{{.+}}, i32* %{{.+}}, %{{.+}}* [[ARG:%.+]])
@ -111,13 +111,13 @@ int main() {
// BLOCKS: [[G_REF:%.+]] = load i{{[0-9]+}}*, i{{[0-9]+}}** [[G_REF_ADDR]] // BLOCKS: [[G_REF:%.+]] = load i{{[0-9]+}}*, i{{[0-9]+}}** [[G_REF_ADDR]]
// BLOCKS: [[G_VAL:%.+]] = load volatile i{{[0-9]+}}, i{{[0-9]+}}* [[G_REF]] // BLOCKS: [[G_VAL:%.+]] = load volatile i{{[0-9]+}}, i{{[0-9]+}}* [[G_REF]]
// BLOCKS: store i{{[0-9]+}} [[G_VAL]], i{{[0-9]+}}* [[G_PRIVATE_ADDR]] // BLOCKS: store i{{[0-9]+}} [[G_VAL]], i{{[0-9]+}}* [[G_PRIVATE_ADDR]]
// BLOCKS: call i32 @__kmpc_cancel_barrier( // BLOCKS: call {{.*}}i32 @__kmpc_cancel_barrier(
g = 1; g = 1;
// BLOCKS: store volatile i{{[0-9]+}} 1, i{{[0-9]+}}* [[G_PRIVATE_ADDR]], // BLOCKS: store volatile i{{[0-9]+}} 1, i{{[0-9]+}}* [[G_PRIVATE_ADDR]],
// BLOCKS-NOT: [[G]]{{[[^:word:]]}} // BLOCKS-NOT: [[G]]{{[[^:word:]]}}
// BLOCKS: i{{[0-9]+}}* [[G_PRIVATE_ADDR]] // BLOCKS: i{{[0-9]+}}* [[G_PRIVATE_ADDR]]
// BLOCKS-NOT: [[G]]{{[[^:word:]]}} // BLOCKS-NOT: [[G]]{{[[^:word:]]}}
// BLOCKS: call void {{%.+}}(i8 // BLOCKS: call {{.*}}void {{%.+}}(i8
^{ ^{
// BLOCKS: define {{.+}} void {{@.+}}(i8* // BLOCKS: define {{.+}} void {{@.+}}(i8*
g = 2; g = 2;
@ -150,12 +150,12 @@ int main() {
// CHECK: [[TEST:%.+]] = alloca [[S_FLOAT_TY]], // CHECK: [[TEST:%.+]] = alloca [[S_FLOAT_TY]],
// CHECK: call {{.*}} [[S_FLOAT_TY_DEF_CONSTR:@.+]]([[S_FLOAT_TY]]* [[TEST]]) // CHECK: call {{.*}} [[S_FLOAT_TY_DEF_CONSTR:@.+]]([[S_FLOAT_TY]]* [[TEST]])
// CHECK: %{{.+}} = bitcast [[CAP_MAIN_TY]]* // 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 {{.*}}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 {{.*}}i{{.+}} [[TMAIN_INT:@.+]]() // CHECK: = call {{.*}}i{{.+}} [[TMAIN_INT:@.+]]()
// CHECK: call {{.*}} [[S_FLOAT_TY_DESTR:@.+]]([[S_FLOAT_TY]]* // CHECK: call {{.*}} [[S_FLOAT_TY_DESTR:@.+]]([[S_FLOAT_TY]]*
// CHECK: ret // CHECK: ret
// //
// CHECK: define internal void [[MAIN_MICROTASK]](i{{[0-9]+}}* [[GTID_ADDR:%.+]], i{{[0-9]+}}* %{{.+}}, [[CAP_MAIN_TY]]* %{{.+}}) // CHECK: define internal {{.*}}void [[MAIN_MICROTASK]](i{{[0-9]+}}* [[GTID_ADDR:%.+]], i{{[0-9]+}}* %{{.+}}, [[CAP_MAIN_TY]]* %{{.+}})
// CHECK: [[T_VAR_PRIV:%.+]] = alloca i{{[0-9]+}}, // CHECK: [[T_VAR_PRIV:%.+]] = alloca i{{[0-9]+}},
// CHECK: [[VEC_PRIV:%.+]] = alloca [2 x i{{[0-9]+}}], // CHECK: [[VEC_PRIV:%.+]] = alloca [2 x i{{[0-9]+}}],
// CHECK: [[S_ARR_PRIV:%.+]] = alloca [2 x [[S_FLOAT_TY]]], // CHECK: [[S_ARR_PRIV:%.+]] = alloca [2 x [[S_FLOAT_TY]]],
@ -189,7 +189,7 @@ int main() {
// CHECK: call {{.*}} [[ST_TY_DESTR]]([[ST_TY]]* [[ST_TY_TEMP]]) // CHECK: call {{.*}} [[ST_TY_DESTR]]([[ST_TY]]* [[ST_TY_TEMP]])
// CHECK: [[GTID_REF:%.+]] = load i{{[0-9]+}}*, i{{[0-9]+}}** [[GTID_ADDR_ADDR]] // CHECK: [[GTID_REF:%.+]] = load i{{[0-9]+}}*, i{{[0-9]+}}** [[GTID_ADDR_ADDR]]
// CHECK: [[GTID:%.+]] = load i{{[0-9]+}}, i{{[0-9]+}}* [[GTID_REF]] // CHECK: [[GTID:%.+]] = load i{{[0-9]+}}, i{{[0-9]+}}* [[GTID_REF]]
// CHECK: call i32 @__kmpc_cancel_barrier(%{{.+}}* [[IMPLICIT_BARRIER_LOC]], i{{[0-9]+}} [[GTID]]) // CHECK: call {{.*}}i32 @__kmpc_cancel_barrier(%{{.+}}* [[IMPLICIT_BARRIER_LOC]], i{{[0-9]+}} [[GTID]])
// CHECK-DAG: call {{.*}} [[S_FLOAT_TY_DESTR]]([[S_FLOAT_TY]]* [[VAR_PRIV]]) // CHECK-DAG: call {{.*}} [[S_FLOAT_TY_DESTR]]([[S_FLOAT_TY]]* [[VAR_PRIV]])
// CHECK-DAG: call {{.*}} [[S_FLOAT_TY_DESTR]]([[S_FLOAT_TY]]* // CHECK-DAG: call {{.*}} [[S_FLOAT_TY_DESTR]]([[S_FLOAT_TY]]*
// CHECK: ret void // CHECK: ret void
@ -197,11 +197,11 @@ int main() {
// CHECK: define {{.*}} i{{[0-9]+}} [[TMAIN_INT]]() // CHECK: define {{.*}} i{{[0-9]+}} [[TMAIN_INT]]()
// CHECK: [[TEST:%.+]] = alloca [[S_INT_TY]], // CHECK: [[TEST:%.+]] = alloca [[S_INT_TY]],
// CHECK: call {{.*}} [[S_INT_TY_DEF_CONSTR:@.+]]([[S_INT_TY]]* [[TEST]]) // 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 (%{{.+}}*, 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 {{.*}} [[S_INT_TY_DESTR:@.+]]([[S_INT_TY]]* // CHECK: call {{.*}} [[S_INT_TY_DESTR:@.+]]([[S_INT_TY]]*
// CHECK: ret // CHECK: ret
// //
// CHECK: define internal void [[TMAIN_MICROTASK]](i{{[0-9]+}}* [[GTID_ADDR:%.+]], i{{[0-9]+}}* %{{.+}}, [[CAP_TMAIN_TY]]* %{{.+}}) // CHECK: define internal {{.*}}void [[TMAIN_MICROTASK]](i{{[0-9]+}}* [[GTID_ADDR:%.+]], i{{[0-9]+}}* %{{.+}}, [[CAP_TMAIN_TY]]* %{{.+}})
// CHECK: [[T_VAR_PRIV:%.+]] = alloca i{{[0-9]+}}, // CHECK: [[T_VAR_PRIV:%.+]] = alloca i{{[0-9]+}},
// CHECK: [[VEC_PRIV:%.+]] = alloca [2 x i{{[0-9]+}}], // CHECK: [[VEC_PRIV:%.+]] = alloca [2 x i{{[0-9]+}}],
// CHECK: [[S_ARR_PRIV:%.+]] = alloca [2 x [[S_INT_TY]]], // CHECK: [[S_ARR_PRIV:%.+]] = alloca [2 x [[S_INT_TY]]],
@ -235,7 +235,7 @@ int main() {
// CHECK: call {{.*}} [[ST_TY_DESTR]]([[ST_TY]]* [[ST_TY_TEMP]]) // CHECK: call {{.*}} [[ST_TY_DESTR]]([[ST_TY]]* [[ST_TY_TEMP]])
// CHECK: [[GTID_REF:%.+]] = load i{{[0-9]+}}*, i{{[0-9]+}}** [[GTID_ADDR_ADDR]] // CHECK: [[GTID_REF:%.+]] = load i{{[0-9]+}}*, i{{[0-9]+}}** [[GTID_ADDR_ADDR]]
// CHECK: [[GTID:%.+]] = load i{{[0-9]+}}, i{{[0-9]+}}* [[GTID_REF]] // CHECK: [[GTID:%.+]] = load i{{[0-9]+}}, i{{[0-9]+}}* [[GTID_REF]]
// CHECK: call i32 @__kmpc_cancel_barrier(%{{.+}}* [[IMPLICIT_BARRIER_LOC]], i{{[0-9]+}} [[GTID]]) // CHECK: call {{.*}}i32 @__kmpc_cancel_barrier(%{{.+}}* [[IMPLICIT_BARRIER_LOC]], i{{[0-9]+}} [[GTID]])
// CHECK-DAG: call {{.*}} [[S_INT_TY_DESTR]]([[S_INT_TY]]* [[VAR_PRIV]]) // CHECK-DAG: call {{.*}} [[S_INT_TY_DESTR]]([[S_INT_TY]]* [[VAR_PRIV]])
// CHECK-DAG: call {{.*}} [[S_INT_TY_DESTR]]([[S_INT_TY]]* // CHECK-DAG: call {{.*}} [[S_INT_TY_DESTR]]([[S_INT_TY]]*
// CHECK: ret void // CHECK: ret void

View File

@ -14,27 +14,27 @@ void fn6();
int Arg; int Arg;
// CHECK-LABEL: define void @{{.+}}gtid_test // CHECK-LABEL: define {{.*}}void @{{.+}}gtid_test
void gtid_test() { void gtid_test() {
// CHECK: call void {{.+}} @__kmpc_fork_call(%{{.+}}* @{{.+}}, i{{.+}} 1, {{.+}}* [[GTID_TEST_REGION1:@.+]] to void // CHECK: call {{.*}}void {{.+}} @__kmpc_fork_call(%{{.+}}* @{{.+}}, i{{.+}} 1, {{.+}}* [[GTID_TEST_REGION1:@.+]] to void
#pragma omp parallel #pragma omp parallel
#pragma omp parallel if (false) #pragma omp parallel if (false)
gtid_test(); gtid_test();
// CHECK: ret void // CHECK: ret void
} }
// CHECK: define internal void [[GTID_TEST_REGION1]](i{{.+}}* [[GTID_PARAM:%.+]], i // CHECK: define internal {{.*}}void [[GTID_TEST_REGION1]](i{{.+}}* [[GTID_PARAM:%.+]], i
// CHECK: store i{{[0-9]+}}* [[GTID_PARAM]], i{{[0-9]+}}** [[GTID_ADDR_REF:%.+]], // CHECK: store i{{[0-9]+}}* [[GTID_PARAM]], i{{[0-9]+}}** [[GTID_ADDR_REF:%.+]],
// CHECK: [[GTID_ADDR:%.+]] = load i{{[0-9]+}}*, i{{[0-9]+}}** [[GTID_ADDR_REF]] // CHECK: [[GTID_ADDR:%.+]] = load i{{[0-9]+}}*, i{{[0-9]+}}** [[GTID_ADDR_REF]]
// CHECK: [[GTID:%.+]] = load i{{[0-9]+}}, i{{[0-9]+}}* [[GTID_ADDR]] // CHECK: [[GTID:%.+]] = load i{{[0-9]+}}, i{{[0-9]+}}* [[GTID_ADDR]]
// CHECK: call void @__kmpc_serialized_parallel(%{{.+}}* @{{.+}}, i{{.+}} [[GTID]]) // CHECK: call {{.*}}void @__kmpc_serialized_parallel(%{{.+}}* @{{.+}}, i{{.+}} [[GTID]])
// CHECK: [[GTID_ADDR:%.+]] = load i{{[0-9]+}}*, i{{[0-9]+}}** [[GTID_ADDR_REF]] // CHECK: [[GTID_ADDR:%.+]] = load i{{[0-9]+}}*, i{{[0-9]+}}** [[GTID_ADDR_REF]]
// CHECK: call void [[GTID_TEST_REGION2:@.+]](i{{[0-9]+}}* [[GTID_ADDR]] // CHECK: call void [[GTID_TEST_REGION2:@.+]](i{{[0-9]+}}* [[GTID_ADDR]]
// CHECK: call void @__kmpc_end_serialized_parallel(%{{.+}}* @{{.+}}, i{{.+}} [[GTID]]) // CHECK: call {{.*}}void @__kmpc_end_serialized_parallel(%{{.+}}* @{{.+}}, i{{.+}} [[GTID]])
// CHECK: ret void // CHECK: ret void
// CHECK: define internal void [[GTID_TEST_REGION2]]( // CHECK: define internal {{.*}}void [[GTID_TEST_REGION2]](
// CHECK: call void @{{.+}}gtid_test // CHECK: call {{.*}}void @{{.+}}gtid_test
// CHECK: ret void // CHECK: ret void
template <typename T> template <typename T>
@ -50,26 +50,26 @@ int tmain(T Arg) {
// CHECK-LABEL: define {{.*}}i{{[0-9]+}} @main() // CHECK-LABEL: define {{.*}}i{{[0-9]+}} @main()
int main() { int main() {
// CHECK: [[GTID:%.+]] = call i32 @__kmpc_global_thread_num( // CHECK: [[GTID:%.+]] = call {{.*}}i32 @__kmpc_global_thread_num(
// CHECK: call void {{.+}} @__kmpc_fork_call(%{{.+}}* @{{.+}}, i{{.+}} 1, void {{.+}}* [[CAP_FN4:@.+]] to void // CHECK: call {{.*}}void {{.+}} @__kmpc_fork_call(%{{.+}}* @{{.+}}, i{{.+}} 1, void {{.+}}* [[CAP_FN4:@.+]] to void
#pragma omp parallel if (true) #pragma omp parallel if (true)
fn4(); fn4();
// CHECK: call void @__kmpc_serialized_parallel(%{{.+}}* @{{.+}}, i32 [[GTID]]) // CHECK: call {{.*}}void @__kmpc_serialized_parallel(%{{.+}}* @{{.+}}, i32 [[GTID]])
// CHECK: store i32 [[GTID]], i32* [[GTID_ADDR:%.+]], // CHECK: store i32 [[GTID]], i32* [[GTID_ADDR:%.+]],
// CHECK: call void [[CAP_FN5:@.+]](i32* [[GTID_ADDR]], // CHECK: call void [[CAP_FN5:@.+]](i32* [[GTID_ADDR]],
// CHECK: call void @__kmpc_end_serialized_parallel(%{{.+}}* @{{.+}}, i32 [[GTID]]) // CHECK: call {{.*}}void @__kmpc_end_serialized_parallel(%{{.+}}* @{{.+}}, i32 [[GTID]])
#pragma omp parallel if (false) #pragma omp parallel if (false)
fn5(); fn5();
// CHECK: br i1 %{{.+}}, label %[[OMP_THEN:.+]], label %[[OMP_ELSE:.+]] // CHECK: br i1 %{{.+}}, label %[[OMP_THEN:.+]], label %[[OMP_ELSE:.+]]
// CHECK: [[OMP_THEN]] // CHECK: [[OMP_THEN]]
// CHECK: call void {{.+}} @__kmpc_fork_call(%{{.+}}* @{{.+}}, i{{.+}} 1, void {{.+}}* [[CAP_FN6:@.+]] to void // CHECK: call {{.*}}void {{.+}} @__kmpc_fork_call(%{{.+}}* @{{.+}}, i{{.+}} 1, void {{.+}}* [[CAP_FN6:@.+]] to void
// CHECK: br label %[[OMP_END:.+]] // CHECK: br label %[[OMP_END:.+]]
// CHECK: [[OMP_ELSE]] // CHECK: [[OMP_ELSE]]
// CHECK: call void @__kmpc_serialized_parallel(%{{.+}}* @{{.+}}, i32 [[GTID]]) // CHECK: call {{.*}}void @__kmpc_serialized_parallel(%{{.+}}* @{{.+}}, i32 [[GTID]])
// CHECK: store i32 [[GTID]], i32* [[GTID_ADDR:%.+]], // CHECK: store i32 [[GTID]], i32* [[GTID_ADDR:%.+]],
// CHECK: call void [[CAP_FN6]](i32* [[GTID_ADDR]], // CHECK: call void [[CAP_FN6]](i32* [[GTID_ADDR]],
// CHECK: call void @__kmpc_end_serialized_parallel(%{{.+}}* @{{.+}}, i32 [[GTID]]) // CHECK: call {{.*}}void @__kmpc_end_serialized_parallel(%{{.+}}* @{{.+}}, i32 [[GTID]])
// CHECK: br label %[[OMP_END]] // CHECK: br label %[[OMP_END]]
// CHECK: [[OMP_END]] // CHECK: [[OMP_END]]
#pragma omp parallel if (Arg) #pragma omp parallel if (Arg)
@ -78,47 +78,47 @@ int main() {
return tmain(Arg); return tmain(Arg);
} }
// CHECK: define internal void [[CAP_FN4]] // CHECK: define internal {{.*}}void [[CAP_FN4]]
// CHECK: call void @{{.+}}fn4 // CHECK: call {{.*}}void @{{.+}}fn4
// CHECK: ret void // CHECK: ret void
// CHECK: define internal void [[CAP_FN5]] // CHECK: define internal {{.*}}void [[CAP_FN5]]
// CHECK: call void @{{.+}}fn5 // CHECK: call {{.*}}void @{{.+}}fn5
// CHECK: ret void // CHECK: ret void
// CHECK: define internal void [[CAP_FN6]] // CHECK: define internal {{.*}}void [[CAP_FN6]]
// CHECK: call void @{{.+}}fn6 // CHECK: call {{.*}}void @{{.+}}fn6
// CHECK: ret void // CHECK: ret void
// CHECK-LABEL: define {{.+}} @{{.+}}tmain // CHECK-LABEL: define {{.+}} @{{.+}}tmain
// CHECK: [[GTID:%.+]] = call i32 @__kmpc_global_thread_num( // CHECK: [[GTID:%.+]] = call {{.*}}i32 @__kmpc_global_thread_num(
// CHECK: call void {{.+}} @__kmpc_fork_call(%{{.+}}* @{{.+}}, i{{.+}} 1, void {{.+}}* [[CAP_FN1:@.+]] to void // CHECK: call {{.*}}void {{.+}} @__kmpc_fork_call(%{{.+}}* @{{.+}}, i{{.+}} 1, void {{.+}}* [[CAP_FN1:@.+]] to void
// CHECK: call void @__kmpc_serialized_parallel(%{{.+}}* @{{.+}}, i32 [[GTID]]) // CHECK: call {{.*}}void @__kmpc_serialized_parallel(%{{.+}}* @{{.+}}, i32 [[GTID]])
// CHECK: store i32 [[GTID]], i32* [[GTID_ADDR:%.+]], // CHECK: store i32 [[GTID]], i32* [[GTID_ADDR:%.+]],
// CHECK: call void [[CAP_FN2:@.+]](i32* [[GTID_ADDR]], // CHECK: call void [[CAP_FN2:@.+]](i32* [[GTID_ADDR]],
// CHECK: call void @__kmpc_end_serialized_parallel(%{{.+}}* @{{.+}}, i32 [[GTID]]) // CHECK: call {{.*}}void @__kmpc_end_serialized_parallel(%{{.+}}* @{{.+}}, i32 [[GTID]])
// CHECK: br i1 %{{.+}}, label %[[OMP_THEN:.+]], label %[[OMP_ELSE:.+]] // CHECK: br i1 %{{.+}}, label %[[OMP_THEN:.+]], label %[[OMP_ELSE:.+]]
// CHECK: [[OMP_THEN]] // CHECK: [[OMP_THEN]]
// CHECK: call void {{.+}} @__kmpc_fork_call(%{{.+}}* @{{.+}}, i{{.+}} 1, void {{.+}}* [[CAP_FN3:@.+]] to void // CHECK: call {{.*}}void {{.+}} @__kmpc_fork_call(%{{.+}}* @{{.+}}, i{{.+}} 1, void {{.+}}* [[CAP_FN3:@.+]] to void
// CHECK: br label %[[OMP_END:.+]] // CHECK: br label %[[OMP_END:.+]]
// CHECK: [[OMP_ELSE]] // CHECK: [[OMP_ELSE]]
// CHECK: call void @__kmpc_serialized_parallel(%{{.+}}* @{{.+}}, i32 [[GTID]]) // CHECK: call {{.*}}void @__kmpc_serialized_parallel(%{{.+}}* @{{.+}}, i32 [[GTID]])
// CHECK: store i32 [[GTID]], i32* [[GTID_ADDR:%.+]], // CHECK: store i32 [[GTID]], i32* [[GTID_ADDR:%.+]],
// CHECK: call void [[CAP_FN3]](i32* [[GTID_ADDR]], // CHECK: call void [[CAP_FN3]](i32* [[GTID_ADDR]],
// CHECK: call void @__kmpc_end_serialized_parallel(%{{.+}}* @{{.+}}, i32 [[GTID]]) // CHECK: call {{.*}}void @__kmpc_end_serialized_parallel(%{{.+}}* @{{.+}}, i32 [[GTID]])
// CHECK: br label %[[OMP_END]] // CHECK: br label %[[OMP_END]]
// CHECK: [[OMP_END]] // CHECK: [[OMP_END]]
// CHECK: define internal void [[CAP_FN1]] // CHECK: define internal {{.*}}void [[CAP_FN1]]
// CHECK: call void @{{.+}}fn1 // CHECK: call {{.*}}void @{{.+}}fn1
// CHECK: ret void // CHECK: ret void
// CHECK: define internal void [[CAP_FN2]] // CHECK: define internal {{.*}}void [[CAP_FN2]]
// CHECK: call void @{{.+}}fn2 // CHECK: call {{.*}}void @{{.+}}fn2
// CHECK: ret void // CHECK: ret void
// CHECK: define internal void [[CAP_FN3]] // CHECK: define internal {{.*}}void [[CAP_FN3]]
// CHECK: call void @{{.+}}fn3 // CHECK: call {{.*}}void @{{.+}}fn3
// CHECK: ret void // CHECK: ret void
#endif #endif

View File

@ -43,16 +43,16 @@ int main() {
// CHECK-LABEL: define {{.*}}i{{[0-9]+}} @main() // CHECK-LABEL: define {{.*}}i{{[0-9]+}} @main()
// CHECK-DAG: [[S_ADDR:%.+]] = alloca [[S_TY]] // CHECK-DAG: [[S_ADDR:%.+]] = alloca [[S_TY]]
// CHECK-DAG: [[A_ADDR:%.+]] = alloca i8 // CHECK-DAG: [[A_ADDR:%.+]] = alloca i8
// CHECK-DAG: [[GTID:%.+]] = call i32 @__kmpc_global_thread_num([[IDENT_T_TY]]* [[DEF_LOC_2]]) // CHECK-DAG: [[GTID:%.+]] = call {{.*}}i32 @__kmpc_global_thread_num([[IDENT_T_TY]]* [[DEF_LOC_2]])
// CHECK-DAG: call {{.*}} [[S_TY_CONSTR:@.+]]([[S_TY]]* [[S_ADDR]], [[INTPTR_T_TY]] [[INTPTR_T_TY_ATTR:(signext )?]]0) // CHECK-DAG: call {{.*}} [[S_TY_CONSTR:@.+]]([[S_TY]]* [[S_ADDR]], [[INTPTR_T_TY]] [[INTPTR_T_TY_ATTR:(signext )?]]0)
// CHECK: [[S_CHAR_OP:%.+]] = invoke{{.*}} i8 [[S_TY_CHAR_OP:@.+]]([[S_TY]]* [[S_ADDR]]) // CHECK: [[S_CHAR_OP:%.+]] = invoke{{.*}} i8 [[S_TY_CHAR_OP:@.+]]([[S_TY]]* [[S_ADDR]])
// CHECK: store i8 [[S_CHAR_OP]], i8* [[A_ADDR]] // CHECK: store i8 [[S_CHAR_OP]], i8* [[A_ADDR]]
// CHECK: call void @__kmpc_push_num_threads([[IDENT_T_TY]]* [[DEF_LOC_2]], i32 [[GTID]], i32 2) // CHECK: call {{.*}}void @__kmpc_push_num_threads([[IDENT_T_TY]]* [[DEF_LOC_2]], i32 [[GTID]], i32 2)
// CHECK: call void {{.*}} @__kmpc_fork_call( // CHECK: call {{.*}}void {{.*}} @__kmpc_fork_call(
// CHECK: [[A_VAL:%.+]] = load i8, i8* [[A_ADDR]] // CHECK: [[A_VAL:%.+]] = load i8, i8* [[A_ADDR]]
// CHECK: [[RES:%.+]] = sext i8 [[A_VAL]] to i32 // CHECK: [[RES:%.+]] = sext i8 [[A_VAL]] to i32
// CHECK: call void @__kmpc_push_num_threads([[IDENT_T_TY]]* [[DEF_LOC_2]], i32 [[GTID]], i32 [[RES]]) // CHECK: call {{.*}}void @__kmpc_push_num_threads([[IDENT_T_TY]]* [[DEF_LOC_2]], i32 [[GTID]], i32 [[RES]])
// CHECK: call void {{.*}} @__kmpc_fork_call( // CHECK: call {{.*}}void {{.*}} @__kmpc_fork_call(
// CHECK: invoke{{.*}} [[INT_TY:i[0-9]+]] [[TMAIN_CHAR_5:@.+]]() // CHECK: invoke{{.*}} [[INT_TY:i[0-9]+]] [[TMAIN_CHAR_5:@.+]]()
// CHECK: invoke{{.*}} [[INT_TY]] [[TMAIN_S_1:@.+]]() // CHECK: invoke{{.*}} [[INT_TY]] [[TMAIN_S_1:@.+]]()
// CHECK: call {{.*}} [[S_TY_DESTR:@.+]]([[S_TY]]* [[S_ADDR]]) // CHECK: call {{.*}} [[S_TY_DESTR:@.+]]([[S_TY]]* [[S_ADDR]])
@ -60,24 +60,24 @@ int main() {
// CHECK: } // CHECK: }
// CHECK: define{{.*}} [[INT_TY]] [[TMAIN_CHAR_5]]() // CHECK: define{{.*}} [[INT_TY]] [[TMAIN_CHAR_5]]()
// CHECK: [[GTID:%.+]] = call i32 @__kmpc_global_thread_num([[IDENT_T_TY]]* [[DEF_LOC_2]]) // CHECK: [[GTID:%.+]] = call {{.*}}i32 @__kmpc_global_thread_num([[IDENT_T_TY]]* [[DEF_LOC_2]])
// CHECK: call void @__kmpc_push_num_threads([[IDENT_T_TY]]* [[DEF_LOC_2]], i32 [[GTID]], i32 5) // CHECK: call {{.*}}void @__kmpc_push_num_threads([[IDENT_T_TY]]* [[DEF_LOC_2]], i32 [[GTID]], i32 5)
// CHECK: call void {{.*}} @__kmpc_fork_call( // CHECK: call {{.*}}void {{.*}} @__kmpc_fork_call(
// CHECK: call void @__kmpc_push_num_threads([[IDENT_T_TY]]* [[DEF_LOC_2]], i32 [[GTID]], i32 23) // CHECK: call {{.*}}void @__kmpc_push_num_threads([[IDENT_T_TY]]* [[DEF_LOC_2]], i32 [[GTID]], i32 23)
// CHECK: call void {{.*}} @__kmpc_fork_call( // CHECK: call {{.*}}void {{.*}} @__kmpc_fork_call(
// CHECK: ret [[INT_TY]] 0 // CHECK: ret [[INT_TY]] 0
// CHECK-NEXT: } // CHECK-NEXT: }
// CHECK: define{{.*}} [[INT_TY]] [[TMAIN_S_1]]() // CHECK: define{{.*}} [[INT_TY]] [[TMAIN_S_1]]()
// CHECK: [[GTID:%.+]] = call i32 @__kmpc_global_thread_num([[IDENT_T_TY]]* [[DEF_LOC_2]]) // CHECK: [[GTID:%.+]] = call {{.*}}i32 @__kmpc_global_thread_num([[IDENT_T_TY]]* [[DEF_LOC_2]])
// CHECK: call void @__kmpc_push_num_threads([[IDENT_T_TY]]* [[DEF_LOC_2]], i32 [[GTID]], i32 1) // CHECK: call {{.*}}void @__kmpc_push_num_threads([[IDENT_T_TY]]* [[DEF_LOC_2]], i32 [[GTID]], i32 1)
// CHECK: call void {{.*}} @__kmpc_fork_call( // CHECK: call {{.*}}void {{.*}} @__kmpc_fork_call(
// CHECK: call {{.*}} [[S_TY_CONSTR]]([[S_TY]]* [[S_TEMP:%.+]], [[INTPTR_T_TY]] [[INTPTR_T_TY_ATTR]]23) // CHECK: call {{.*}} [[S_TY_CONSTR]]([[S_TY]]* [[S_TEMP:%.+]], [[INTPTR_T_TY]] [[INTPTR_T_TY_ATTR]]23)
// CHECK: [[S_CHAR_OP:%.+]] = invoke{{.*}} i8 [[S_TY_CHAR_OP]]([[S_TY]]* [[S_TEMP]]) // CHECK: [[S_CHAR_OP:%.+]] = invoke{{.*}} i8 [[S_TY_CHAR_OP]]([[S_TY]]* [[S_TEMP]])
// CHECK: [[RES:%.+]] = sext {{.*}}i8 [[S_CHAR_OP]] to i32 // CHECK: [[RES:%.+]] = sext {{.*}}i8 [[S_CHAR_OP]] to i32
// CHECK: call void @__kmpc_push_num_threads([[IDENT_T_TY]]* [[DEF_LOC_2]], i32 [[GTID]], i32 [[RES]]) // CHECK: call {{.*}}void @__kmpc_push_num_threads([[IDENT_T_TY]]* [[DEF_LOC_2]], i32 [[GTID]], i32 [[RES]])
// CHECK: call {{.*}} [[S_TY_DESTR]]([[S_TY]]* [[S_TEMP]]) // CHECK: call {{.*}} [[S_TY_DESTR]]([[S_TY]]* [[S_TEMP]])
// CHECK: call void {{.*}} @__kmpc_fork_call( // CHECK: call {{.*}}void {{.*}} @__kmpc_fork_call(
// CHECK: ret [[INT_TY]] 0 // CHECK: ret [[INT_TY]] 0
// CHECK: } // CHECK: }

View File

@ -41,12 +41,12 @@ int main() {
#ifdef LAMBDA #ifdef LAMBDA
// LAMBDA: [[G:@.+]] = global i{{[0-9]+}} 1212, // LAMBDA: [[G:@.+]] = global i{{[0-9]+}} 1212,
// LAMBDA-LABEL: @main // LAMBDA-LABEL: @main
// LAMBDA: call{{( x86_thiscallcc)?}} void [[OUTER_LAMBDA:@.+]]( // LAMBDA: call{{.*}} void [[OUTER_LAMBDA:@.+]](
[&]() { [&]() {
// LAMBDA: define{{.*}} internal{{.*}} void [[OUTER_LAMBDA]]( // LAMBDA: define{{.*}} internal{{.*}} void [[OUTER_LAMBDA]](
// LAMBDA-NOT: = getelementptr inbounds %{{.+}}, // LAMBDA-NOT: = getelementptr inbounds %{{.+}},
// LAMBDA: [[ARG:%.+]] = bitcast %{{.+}}* %{{.+}} to i8* // LAMBDA: [[ARG:%.+]] = bitcast %{{.+}}* %{{.+}} to i8*
// LAMBDA: call void {{.+}} @__kmpc_fork_call({{.+}}, i32 1, {{.+}}* [[OMP_REGION:@.+]] to {{.+}}, i8* [[ARG]]) // LAMBDA: call{{.*}} void {{.+}} @__kmpc_fork_call({{.+}}, i32 1, {{.+}}* [[OMP_REGION:@.+]] to {{.+}}, i8* [[ARG]])
#pragma omp parallel private(g) #pragma omp parallel private(g)
{ {
// LAMBDA: define{{.*}} internal{{.*}} void [[OMP_REGION]](i32* %{{.+}}, i32* %{{.+}}, %{{.+}}* [[ARG:%.+]]) // LAMBDA: define{{.*}} internal{{.*}} void [[OMP_REGION]](i32* %{{.+}}, i32* %{{.+}}, %{{.+}}* [[ARG:%.+]])
@ -56,7 +56,7 @@ int main() {
// LAMBDA: store volatile i{{[0-9]+}} 1, i{{[0-9]+}}* [[G_PRIVATE_ADDR]], // LAMBDA: store volatile i{{[0-9]+}} 1, i{{[0-9]+}}* [[G_PRIVATE_ADDR]],
// LAMBDA: [[G_PRIVATE_ADDR_REF:%.+]] = getelementptr inbounds %{{.+}}, %{{.+}}* [[ARG:%.+]], i{{[0-9]+}} 0, i{{[0-9]+}} 0 // 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: store i{{[0-9]+}}* [[G_PRIVATE_ADDR]], i{{[0-9]+}}** [[G_PRIVATE_ADDR_REF]]
// LAMBDA: call{{( x86_thiscallcc)?}} void [[INNER_LAMBDA:@.+]](%{{.+}}* [[ARG]]) // LAMBDA: call{{.*}} void [[INNER_LAMBDA:@.+]](%{{.+}}* [[ARG]])
[&]() { [&]() {
// LAMBDA: define {{.+}} void [[INNER_LAMBDA]](%{{.+}}* [[ARG_PTR:%.+]]) // LAMBDA: define {{.+}} void [[INNER_LAMBDA]](%{{.+}}* [[ARG_PTR:%.+]])
// LAMBDA: store %{{.+}}* [[ARG_PTR]], %{{.+}}** [[ARG_PTR_REF:%.+]], // LAMBDA: store %{{.+}}* [[ARG_PTR]], %{{.+}}** [[ARG_PTR_REF:%.+]],
@ -72,12 +72,12 @@ int main() {
#elif defined(BLOCKS) #elif defined(BLOCKS)
// BLOCKS: [[G:@.+]] = global i{{[0-9]+}} 1212, // BLOCKS: [[G:@.+]] = global i{{[0-9]+}} 1212,
// BLOCKS-LABEL: @main // BLOCKS-LABEL: @main
// BLOCKS: call void {{%.+}}(i8 // BLOCKS: call{{.*}} void {{%.+}}(i8
^{ ^{
// BLOCKS: define{{.*}} internal{{.*}} void {{.+}}(i8* // BLOCKS: define{{.*}} internal{{.*}} void {{.+}}(i8*
// BLOCKS-NOT: = getelementptr inbounds %{{.+}}, // BLOCKS-NOT: = getelementptr inbounds %{{.+}},
// BLOCKS: [[ARG:%.+]] = bitcast %{{.+}}* %{{.+}} to i8* // BLOCKS: [[ARG:%.+]] = bitcast %{{.+}}* %{{.+}} to i8*
// BLOCKS: call void {{.+}} @__kmpc_fork_call({{.+}}, i32 1, {{.+}}* [[OMP_REGION:@.+]] to {{.+}}, i8* [[ARG]]) // BLOCKS: call{{.*}} void {{.+}} @__kmpc_fork_call({{.+}}, i32 1, {{.+}}* [[OMP_REGION:@.+]] to {{.+}}, i8* [[ARG]])
#pragma omp parallel private(g) #pragma omp parallel private(g)
{ {
// BLOCKS: define{{.*}} internal{{.*}} void [[OMP_REGION]](i32* %{{.+}}, i32* %{{.+}}, %{{.+}}* [[ARG:%.+]]) // BLOCKS: define{{.*}} internal{{.*}} void [[OMP_REGION]](i32* %{{.+}}, i32* %{{.+}}, %{{.+}}* [[ARG:%.+]])
@ -88,7 +88,7 @@ int main() {
// BLOCKS-NOT: [[G]]{{[[^:word:]]}} // BLOCKS-NOT: [[G]]{{[[^:word:]]}}
// BLOCKS: i{{[0-9]+}}* [[G_PRIVATE_ADDR]] // BLOCKS: i{{[0-9]+}}* [[G_PRIVATE_ADDR]]
// BLOCKS-NOT: [[G]]{{[[^:word:]]}} // BLOCKS-NOT: [[G]]{{[[^:word:]]}}
// BLOCKS: call void {{%.+}}(i8 // BLOCKS: call{{.*}} void {{%.+}}(i8
^{ ^{
// BLOCKS: define {{.+}} void {{@.+}}(i8* // BLOCKS: define {{.+}} void {{@.+}}(i8*
g = 2; g = 2;

View File

@ -36,16 +36,16 @@ int main() {
} }
// CHECK-LABEL: @main // CHECK-LABEL: @main
// CHECK: [[GTID:%.+]] = call i32 @__kmpc_global_thread_num([[IDENT_T_TY]]* [[DEF_LOC_2]]) // CHECK: [[GTID:%.+]] = call {{.*}}i32 @__kmpc_global_thread_num([[IDENT_T_TY]]* [[DEF_LOC_2]])
// CHECK: call void @__kmpc_push_proc_bind([[IDENT_T_TY]]* [[DEF_LOC_2]], i32 [[GTID]], i32 4) // CHECK: call {{.*}}void @__kmpc_push_proc_bind([[IDENT_T_TY]]* [[DEF_LOC_2]], i32 [[GTID]], i32 4)
// CHECK: call void (%ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call( // CHECK: call {{.*}}void (%ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(
// CHECK: call void @__kmpc_push_proc_bind([[IDENT_T_TY]]* [[DEF_LOC_2]], i32 [[GTID]], i32 3) // CHECK: call {{.*}}void @__kmpc_push_proc_bind([[IDENT_T_TY]]* [[DEF_LOC_2]], i32 [[GTID]], i32 3)
// CHECK: call void (%ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call( // CHECK: call {{.*}}void (%ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(
// CHECK-LABEL: @{{.+}}tmain // CHECK-LABEL: @{{.+}}tmain
// CHECK: [[GTID:%.+]] = call i32 @__kmpc_global_thread_num([[IDENT_T_TY]]* [[DEF_LOC_2]]) // CHECK: [[GTID:%.+]] = call {{.*}}i32 @__kmpc_global_thread_num([[IDENT_T_TY]]* [[DEF_LOC_2]])
// CHECK: call void @__kmpc_push_proc_bind([[IDENT_T_TY]]* [[DEF_LOC_2]], i32 [[GTID]], i32 2) // CHECK: call {{.*}}void @__kmpc_push_proc_bind([[IDENT_T_TY]]* [[DEF_LOC_2]], i32 [[GTID]], i32 2)
// CHECK: call void (%ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call( // CHECK: call {{.*}}void (%ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(
// CHECK: ret i32 0 // CHECK: ret i32 0
// CHECK-NEXT: } // CHECK-NEXT: }

View File

@ -43,10 +43,10 @@ int main() {
#ifdef LAMBDA #ifdef LAMBDA
// LAMBDA: [[G:@.+]] = global double // LAMBDA: [[G:@.+]] = global double
// LAMBDA-LABEL: @main // LAMBDA-LABEL: @main
// LAMBDA: call{{( x86_thiscallcc)?}} void [[OUTER_LAMBDA:@.+]]( // LAMBDA: call{{.*}} void [[OUTER_LAMBDA:@.+]](
[&]() { [&]() {
// LAMBDA: define{{.*}} internal{{.*}} void [[OUTER_LAMBDA]]( // LAMBDA: define{{.*}} internal{{.*}} void [[OUTER_LAMBDA]](
// LAMBDA: call void {{.+}} @__kmpc_fork_call({{.+}}, i32 1, {{.+}}* [[OMP_REGION:@.+]] to {{.+}}, i8* %{{.+}}) // LAMBDA: call {{.*}}void {{.+}} @__kmpc_fork_call({{.+}}, i32 1, {{.+}}* [[OMP_REGION:@.+]] to {{.+}}, i8* %{{.+}})
#pragma omp parallel #pragma omp parallel
#pragma omp sections private(g) #pragma omp sections private(g)
{ {
@ -54,12 +54,12 @@ int main() {
// LAMBDA: [[G_PRIVATE_ADDR:%.+]] = alloca double, // LAMBDA: [[G_PRIVATE_ADDR:%.+]] = alloca double,
// LAMBDA: store %{{.+}}* [[ARG]], %{{.+}}** [[ARG_REF:%.+]], // LAMBDA: store %{{.+}}* [[ARG]], %{{.+}}** [[ARG_REF:%.+]],
g = 1; g = 1;
// LAMBDA: call void @__kmpc_for_static_init_4( // LAMBDA: call {{.*}}void @__kmpc_for_static_init_4(
// LAMBDA: store volatile double 1.0{{.+}}, double* [[G_PRIVATE_ADDR]], // LAMBDA: store volatile double 1.0{{.+}}, double* [[G_PRIVATE_ADDR]],
// LAMBDA: [[G_PRIVATE_ADDR_REF:%.+]] = getelementptr inbounds %{{.+}}, %{{.+}}* [[ARG:%.+]], i{{[0-9]+}} 0, i{{[0-9]+}} 0 // LAMBDA: [[G_PRIVATE_ADDR_REF:%.+]] = getelementptr inbounds %{{.+}}, %{{.+}}* [[ARG:%.+]], i{{[0-9]+}} 0, i{{[0-9]+}} 0
// LAMBDA: store double* [[G_PRIVATE_ADDR]], double** [[G_PRIVATE_ADDR_REF]] // LAMBDA: store double* [[G_PRIVATE_ADDR]], double** [[G_PRIVATE_ADDR_REF]]
// LAMBDA: call{{( x86_thiscallcc)?}} void [[INNER_LAMBDA:@.+]](%{{.+}}* [[ARG]]) // LAMBDA: call{{.*}} void [[INNER_LAMBDA:@.+]](%{{.+}}* [[ARG]])
// LAMBDA: call void @__kmpc_for_static_fini( // LAMBDA: call {{.*}}void @__kmpc_for_static_fini(
#pragma omp section #pragma omp section
[&]() { [&]() {
// LAMBDA: define {{.+}} void [[INNER_LAMBDA]](%{{.+}}* [[ARG_PTR:%.+]]) // LAMBDA: define {{.+}} void [[INNER_LAMBDA]](%{{.+}}* [[ARG_PTR:%.+]])
@ -76,10 +76,10 @@ int main() {
#elif defined(BLOCKS) #elif defined(BLOCKS)
// BLOCKS: [[G:@.+]] = global double // BLOCKS: [[G:@.+]] = global double
// BLOCKS-LABEL: @main // BLOCKS-LABEL: @main
// BLOCKS: call void {{%.+}}(i8 // BLOCKS: call {{.*}}void {{%.+}}(i8
^{ ^{
// BLOCKS: define{{.*}} internal{{.*}} void {{.+}}(i8* // BLOCKS: define{{.*}} internal{{.*}} void {{.+}}(i8*
// BLOCKS: call void {{.+}} @__kmpc_fork_call({{.+}}, i32 1, {{.+}}* [[OMP_REGION:@.+]] to {{.+}}, i8* {{.+}}) // BLOCKS: call {{.*}}void {{.+}} @__kmpc_fork_call({{.+}}, i32 1, {{.+}}* [[OMP_REGION:@.+]] to {{.+}}, i8* {{.+}})
#pragma omp parallel #pragma omp parallel
#pragma omp sections private(g) #pragma omp sections private(g)
{ {
@ -87,13 +87,13 @@ int main() {
// BLOCKS: [[G_PRIVATE_ADDR:%.+]] = alloca double, // BLOCKS: [[G_PRIVATE_ADDR:%.+]] = alloca double,
// BLOCKS: store %{{.+}}* [[ARG]], %{{.+}}** [[ARG_REF:%.+]], // BLOCKS: store %{{.+}}* [[ARG]], %{{.+}}** [[ARG_REF:%.+]],
g = 1; g = 1;
// BLOCKS: call void @__kmpc_for_static_init_4( // BLOCKS: call {{.*}}void @__kmpc_for_static_init_4(
// BLOCKS: store volatile double 1.0{{.+}}, double* [[G_PRIVATE_ADDR]], // BLOCKS: store volatile double 1.0{{.+}}, double* [[G_PRIVATE_ADDR]],
// BLOCKS-NOT: [[G]]{{[[^:word:]]}} // BLOCKS-NOT: [[G]]{{[[^:word:]]}}
// BLOCKS: double* [[G_PRIVATE_ADDR]] // BLOCKS: double* [[G_PRIVATE_ADDR]]
// BLOCKS-NOT: [[G]]{{[[^:word:]]}} // BLOCKS-NOT: [[G]]{{[[^:word:]]}}
// BLOCKS: call void {{%.+}}(i8 // BLOCKS: call {{.*}}void {{%.+}}(i8
// BLOCKS: call void @__kmpc_for_static_fini( // BLOCKS: call {{.*}}void @__kmpc_for_static_fini(
#pragma omp section #pragma omp section
^{ ^{
// BLOCKS: define {{.+}} void {{@.+}}(i8* // BLOCKS: define {{.+}} void {{@.+}}(i8*

View File

@ -42,10 +42,10 @@ int main() {
#ifdef LAMBDA #ifdef LAMBDA
// LAMBDA: [[G:@.+]] = global double // LAMBDA: [[G:@.+]] = global double
// LAMBDA-LABEL: @main // LAMBDA-LABEL: @main
// LAMBDA: call{{( x86_thiscallcc)?}} void [[OUTER_LAMBDA:@.+]]( // LAMBDA: call{{.*}} void [[OUTER_LAMBDA:@.+]](
[&]() { [&]() {
// LAMBDA: define{{.*}} internal{{.*}} void [[OUTER_LAMBDA]]( // LAMBDA: define{{.*}} internal{{.*}} void [[OUTER_LAMBDA]](
// LAMBDA: call void {{.+}} @__kmpc_fork_call({{.+}}, i32 1, {{.+}}* [[OMP_REGION:@.+]] to {{.+}}, i8* %{{.+}}) // LAMBDA: call {{.*}}void {{.+}} @__kmpc_fork_call({{.+}}, i32 1, {{.+}}* [[OMP_REGION:@.+]] to {{.+}}, i8* %{{.+}})
#pragma omp parallel #pragma omp parallel
#pragma omp single private(g) #pragma omp single private(g)
{ {
@ -53,12 +53,12 @@ int main() {
// LAMBDA: [[G_PRIVATE_ADDR:%.+]] = alloca double, // LAMBDA: [[G_PRIVATE_ADDR:%.+]] = alloca double,
// LAMBDA: store %{{.+}}* [[ARG]], %{{.+}}** [[ARG_REF:%.+]], // LAMBDA: store %{{.+}}* [[ARG]], %{{.+}}** [[ARG_REF:%.+]],
g = 1; g = 1;
// LAMBDA: call i32 @__kmpc_single( // LAMBDA: call {{.*}}i32 @__kmpc_single(
// LAMBDA: store volatile double 1.0{{.+}}, double* [[G_PRIVATE_ADDR]], // LAMBDA: store volatile double 1.0{{.+}}, double* [[G_PRIVATE_ADDR]],
// LAMBDA: [[G_PRIVATE_ADDR_REF:%.+]] = getelementptr inbounds %{{.+}}, %{{.+}}* [[ARG:%.+]], i{{[0-9]+}} 0, i{{[0-9]+}} 0 // LAMBDA: [[G_PRIVATE_ADDR_REF:%.+]] = getelementptr inbounds %{{.+}}, %{{.+}}* [[ARG:%.+]], i{{[0-9]+}} 0, i{{[0-9]+}} 0
// LAMBDA: store double* [[G_PRIVATE_ADDR]], double** [[G_PRIVATE_ADDR_REF]] // LAMBDA: store double* [[G_PRIVATE_ADDR]], double** [[G_PRIVATE_ADDR_REF]]
// LAMBDA: call{{( x86_thiscallcc)?}} void [[INNER_LAMBDA:@.+]](%{{.+}}* [[ARG]]) // LAMBDA: call{{.*}} void [[INNER_LAMBDA:@.+]](%{{.+}}* [[ARG]])
// LAMBDA: call void @__kmpc_end_single( // LAMBDA: call {{.*}}void @__kmpc_end_single(
[&]() { [&]() {
// LAMBDA: define {{.+}} void [[INNER_LAMBDA]](%{{.+}}* [[ARG_PTR:%.+]]) // LAMBDA: define {{.+}} void [[INNER_LAMBDA]](%{{.+}}* [[ARG_PTR:%.+]])
// LAMBDA: store %{{.+}}* [[ARG_PTR]], %{{.+}}** [[ARG_PTR_REF:%.+]], // LAMBDA: store %{{.+}}* [[ARG_PTR]], %{{.+}}** [[ARG_PTR_REF:%.+]],
@ -74,10 +74,10 @@ int main() {
#elif defined(BLOCKS) #elif defined(BLOCKS)
// BLOCKS: [[G:@.+]] = global double // BLOCKS: [[G:@.+]] = global double
// BLOCKS-LABEL: @main // BLOCKS-LABEL: @main
// BLOCKS: call void {{%.+}}(i8 // BLOCKS: call {{.*}}void {{%.+}}(i8
^{ ^{
// BLOCKS: define{{.*}} internal{{.*}} void {{.+}}(i8* // BLOCKS: define{{.*}} internal{{.*}} void {{.+}}(i8*
// BLOCKS: call void {{.+}} @__kmpc_fork_call({{.+}}, i32 1, {{.+}}* [[OMP_REGION:@.+]] to {{.+}}, i8* {{.+}}) // BLOCKS: call {{.*}}void {{.+}} @__kmpc_fork_call({{.+}}, i32 1, {{.+}}* [[OMP_REGION:@.+]] to {{.+}}, i8* {{.+}})
#pragma omp parallel #pragma omp parallel
#pragma omp single private(g) #pragma omp single private(g)
{ {
@ -85,13 +85,13 @@ int main() {
// BLOCKS: [[G_PRIVATE_ADDR:%.+]] = alloca double, // BLOCKS: [[G_PRIVATE_ADDR:%.+]] = alloca double,
// BLOCKS: store %{{.+}}* [[ARG]], %{{.+}}** [[ARG_REF:%.+]], // BLOCKS: store %{{.+}}* [[ARG]], %{{.+}}** [[ARG_REF:%.+]],
g = 1; g = 1;
// BLOCKS: call i32 @__kmpc_single( // BLOCKS: call {{.*}}i32 @__kmpc_single(
// BLOCKS: store volatile double 1.0{{.+}}, double* [[G_PRIVATE_ADDR]], // BLOCKS: store volatile double 1.0{{.+}}, double* [[G_PRIVATE_ADDR]],
// BLOCKS-NOT: [[G]]{{[[^:word:]]}} // BLOCKS-NOT: [[G]]{{[[^:word:]]}}
// BLOCKS: double* [[G_PRIVATE_ADDR]] // BLOCKS: double* [[G_PRIVATE_ADDR]]
// BLOCKS-NOT: [[G]]{{[[^:word:]]}} // BLOCKS-NOT: [[G]]{{[[^:word:]]}}
// BLOCKS: call void {{%.+}}(i8 // BLOCKS: call {{.*}}void {{%.+}}(i8
// BLOCKS: call void @__kmpc_end_single( // BLOCKS: call {{.*}}void @__kmpc_end_single(
^{ ^{
// BLOCKS: define {{.+}} void {{@.+}}(i8* // BLOCKS: define {{.+}} void {{@.+}}(i8*
g = 2; g = 2;

View File

@ -9,7 +9,7 @@
// CHECK: [[IDENT_T_TY:%.+]] = type { i32, i32, i32, i32, i8* } // CHECK: [[IDENT_T_TY:%.+]] = type { i32, i32, i32, i32, i8* }
// CHECK: define void [[FOO:@.+]]() // CHECK: define {{.*}}void [[FOO:@.+]]()
void foo() {} void foo() {}
@ -19,19 +19,19 @@ int main() {
// CHECK: [[A_ADDR:%.+]] = alloca i8 // CHECK: [[A_ADDR:%.+]] = alloca i8
char a; char a;
// CHECK: [[GTID:%.+]] = call i32 @__kmpc_global_thread_num([[IDENT_T_TY]]* [[DEFAULT_LOC:@.+]]) // CHECK: [[GTID:%.+]] = call {{.*}}i32 @__kmpc_global_thread_num([[IDENT_T_TY]]* [[DEFAULT_LOC:@.+]])
// CHECK: call void @__kmpc_taskgroup([[IDENT_T_TY]]* [[DEFAULT_LOC]], i32 [[GTID]]) // CHECK: call {{.*}}void @__kmpc_taskgroup([[IDENT_T_TY]]* [[DEFAULT_LOC]], i32 [[GTID]])
// CHECK-NEXT: store i8 2, i8* [[A_ADDR]] // CHECK-NEXT: store i8 2, i8* [[A_ADDR]]
// CHECK-NEXT: call void @__kmpc_end_taskgroup([[IDENT_T_TY]]* [[DEFAULT_LOC]], i32 [[GTID]]) // CHECK-NEXT: call {{.*}}void @__kmpc_end_taskgroup([[IDENT_T_TY]]* [[DEFAULT_LOC]], i32 [[GTID]])
#pragma omp taskgroup #pragma omp taskgroup
a = 2; a = 2;
// CHECK: call void @__kmpc_taskgroup([[IDENT_T_TY]]* [[DEFAULT_LOC]], i32 [[GTID]]) // CHECK: call {{.*}}void @__kmpc_taskgroup([[IDENT_T_TY]]* [[DEFAULT_LOC]], i32 [[GTID]])
// CHECK-NEXT: invoke void [[FOO]]() // CHECK-NEXT: invoke {{.*}}void [[FOO]]()
// CHECK: call void @__kmpc_end_taskgroup([[IDENT_T_TY]]* [[DEFAULT_LOC]], i32 [[GTID]]) // CHECK: call {{.*}}void @__kmpc_end_taskgroup([[IDENT_T_TY]]* [[DEFAULT_LOC]], i32 [[GTID]])
#pragma omp taskgroup #pragma omp taskgroup
foo(); foo();
// CHECK-NOT: call void @__kmpc_taskgroup // CHECK-NOT: call {{.*}}void @__kmpc_taskgroup
// CHECK-NOT: call void @__kmpc_end_taskgroup // CHECK-NOT: call {{.*}}void @__kmpc_end_taskgroup
return a; return a;
} }

View File

@ -17,11 +17,11 @@ struct A {
template<typename T> void f(T) {} template<typename T> void f(T) {}
// CHECK-LABEL: define void @_Z1g1A( // CHECK-LABEL: define {{.*}}void @_Z1g1A(
void g(A a) { void g(A a) {
// CHECK: call void @_Z1fIN1AUt0_EEvT_( // CHECK: call {{.*}}void @_Z1fIN1AUt0_EEvT_(
f(a.b); f(a.b);
// CHECK: call void @_Z1fIN1AUt_EEvT_( // CHECK: call {{.*}}void @_Z1fIN1AUt_EEvT_(
f(a.a); f(a.a);
} }

View File

@ -14,7 +14,7 @@
// CHECK-PRINT: oldObject = dictionary[key]; // CHECK-PRINT: oldObject = dictionary[key];
// CHECK-PRINT: dictionary[key] = newObject; // CHECK-PRINT: dictionary[key] = newObject;
// CHECK-IR: define void @all() #0 // CHECK-IR: define {{.*}}void @all() #0
// CHECK-IR: {{call.*objc_msgSend}} // CHECK-IR: {{call.*objc_msgSend}}
// CHECK-IR: {{call.*objc_msgSend}} // CHECK-IR: {{call.*objc_msgSend}}
// CHECK-IR: {{call.*objc_msgSend}} // CHECK-IR: {{call.*objc_msgSend}}

View File

@ -39,7 +39,7 @@ typedef unsigned char BOOL;
+ (id)dictionaryWithObjects:(const id [])objects forKeys:(const id [])keys count:(unsigned long)cnt; + (id)dictionaryWithObjects:(const id [])objects forKeys:(const id [])keys count:(unsigned long)cnt;
@end @end
// CHECK-IR: define internal void @test_numeric_literals() // CHECK-IR: define internal {{.*}}void @test_numeric_literals()
static inline void test_numeric_literals() { static inline void test_numeric_literals() {
// CHECK-PRINT: id intlit = @17 // CHECK-PRINT: id intlit = @17
// CHECK-IR: {{call.*17}} // CHECK-IR: {{call.*17}}

View File

@ -50,7 +50,7 @@ pair<T, U> make_pair(const T& first, const U& second) {
return { first, second }; return { first, second };
} }
// CHECK-IR: define linkonce_odr void @_Z29variadic_dictionary_expansionIJP8NSStringS1_EJP8NSNumberS3_EEvDp4pairIT_T0_E // CHECK-IR: define linkonce_odr {{.*}}void @_Z29variadic_dictionary_expansionIJP8NSStringS1_EJP8NSNumberS3_EEvDp4pairIT_T0_E
template<typename ...Ts, typename ... Us> template<typename ...Ts, typename ... Us>
void variadic_dictionary_expansion(pair<Ts, Us>... key_values) { void variadic_dictionary_expansion(pair<Ts, Us>... key_values) {
// CHECK-PRINT: id dict = @{ key_values.first : key_values.second... }; // CHECK-PRINT: id dict = @{ key_values.first : key_values.second... };

View File

@ -13,14 +13,14 @@
// PGOGEN: @[[MAC:__llvm_profile_counters_main]] = private global [1 x i64] zeroinitializer // PGOGEN: @[[MAC:__llvm_profile_counters_main]] = private global [1 x i64] zeroinitializer
// LMBGEN: @[[LFC:"__llvm_profile_counters_cxx-lambda.cpp:_ZZ7lambdasvENK3\$_0clEi"]] = private global [3 x i64] zeroinitializer // LMBGEN: @[[LFC:"__llvm_profile_counters_cxx-lambda.cpp:_ZZ7lambdasvENK3\$_0clEi"]] = private global [3 x i64] zeroinitializer
// PGOGEN-LABEL: define void @_Z7lambdasv() // PGOGEN-LABEL: define {{.*}}void @_Z7lambdasv()
// PGOUSE-LABEL: define void @_Z7lambdasv() // PGOUSE-LABEL: define {{.*}}void @_Z7lambdasv()
// PGOGEN: store {{.*}} @[[LWC]], i64 0, i64 0 // PGOGEN: store {{.*}} @[[LWC]], i64 0, i64 0
void lambdas() { void lambdas() {
int i = 1; int i = 1;
// LMBGEN-LABEL: define internal{{( x86_thiscallcc)?( zeroext)?}} i1 @"_ZZ7lambdasvENK3$_0clEi"( // LMBGEN-LABEL: define internal{{( [a-z\_\b]*)?( zeroext)?}} i1 @"_ZZ7lambdasvENK3$_0clEi"(
// LMBUSE-LABEL: define internal{{( x86_thiscallcc)?( zeroext)?}} i1 @"_ZZ7lambdasvENK3$_0clEi"( // LMBUSE-LABEL: define internal{{( [a-z\_\b]*)?( zeroext)?}} i1 @"_ZZ7lambdasvENK3$_0clEi"(
// LMBGEN: store {{.*}} @[[LFC]], i64 0, i64 0 // LMBGEN: store {{.*}} @[[LFC]], i64 0, i64 0
auto f = [&i](int k) { auto f = [&i](int k) {
// LMBGEN: store {{.*}} @[[LFC]], i64 0, i64 1 // LMBGEN: store {{.*}} @[[LFC]], i64 0, i64 1

View File

@ -9,7 +9,7 @@
// PGOGEN: @[[RFC:__llvm_profile_counters__Z9range_forv]] = private global [5 x i64] zeroinitializer // PGOGEN: @[[RFC:__llvm_profile_counters__Z9range_forv]] = private global [5 x i64] zeroinitializer
// CHECK-LABEL: define void @_Z9range_forv() // CHECK-LABEL: define {{.*}}void @_Z9range_forv()
// PGOGEN: store {{.*}} @[[RFC]], i64 0, i64 0 // PGOGEN: store {{.*}} @[[RFC]], i64 0, i64 0
void range_for() { void range_for() {
int arr[] = {1, 2, 3, 4, 5}; int arr[] = {1, 2, 3, 4, 5};

View File

@ -13,10 +13,10 @@
// T0GEN: @[[T0C:__llvm_profile_counters__Z4loopILj0EEvv]] = linkonce_odr hidden global [2 x i64] zeroinitializer // T0GEN: @[[T0C:__llvm_profile_counters__Z4loopILj0EEvv]] = linkonce_odr hidden global [2 x i64] zeroinitializer
// T100GEN: @[[T100C:__llvm_profile_counters__Z4loopILj100EEvv]] = linkonce_odr hidden global [2 x i64] zeroinitializer // T100GEN: @[[T100C:__llvm_profile_counters__Z4loopILj100EEvv]] = linkonce_odr hidden global [2 x i64] zeroinitializer
// T0GEN-LABEL: define linkonce_odr void @_Z4loopILj0EEvv() // T0GEN-LABEL: define linkonce_odr {{.*}}void @_Z4loopILj0EEvv()
// T0USE-LABEL: define linkonce_odr void @_Z4loopILj0EEvv() // T0USE-LABEL: define linkonce_odr {{.*}}void @_Z4loopILj0EEvv()
// T100GEN-LABEL: define linkonce_odr void @_Z4loopILj100EEvv() // T100GEN-LABEL: define linkonce_odr {{.*}}void @_Z4loopILj100EEvv()
// T100USE-LABEL: define linkonce_odr void @_Z4loopILj100EEvv() // T100USE-LABEL: define linkonce_odr {{.*}}void @_Z4loopILj100EEvv()
template <unsigned N> void loop() { template <unsigned N> void loop() {
// ALL-NOT: ret // ALL-NOT: ret
// T0GEN: store {{.*}} @[[T0C]], i64 0, i64 0 // T0GEN: store {{.*}} @[[T0C]], i64 0, i64 0

View File

@ -19,10 +19,10 @@ __attribute((malloc)) int (*g)(); // expected-warning{{attribute only applies to
__attribute((malloc)) __attribute((malloc))
void * xalloc(unsigned n) { return malloc(n); } // no-warning void * xalloc(unsigned n) { return malloc(n); } // no-warning
// RUN: grep 'define noalias .* @xalloc(' %t // RUN: grep 'define .*noalias .* @xalloc(' %t %t
#define malloc_like __attribute((__malloc__)) #define malloc_like __attribute((__malloc__))
void * xalloc2(unsigned) malloc_like; void * xalloc2(unsigned) malloc_like;
void * xalloc2(unsigned n) { return malloc(n); } void * xalloc2(unsigned n) { return malloc(n); }
// RUN: grep 'define noalias .* @xalloc2(' %t // RUN: grep 'define .*noalias .* @xalloc2(' %t %t

View File

@ -49,7 +49,7 @@ size_t strnlen(const char *s, size_t maxlen) // expected-note{{candidate functi
__attribute__((unavailable("'maxlen' is larger than the buffer size"))); __attribute__((unavailable("'maxlen' is larger than the buffer size")));
void test2(const char *s, int i) { void test2(const char *s, int i) {
// CHECK: define void @test2 // CHECK: define {{.*}}void @test2
const char c[123]; const char c[123];
strnlen(s, i); strnlen(s, i);
// CHECK: call {{.*}}strnlen_real1 // CHECK: call {{.*}}strnlen_real1