mirror of https://github.com/microsoft/clang.git
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. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@240971 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
e224f9922d
commit
51b2a6bc7d
|
@ -6,7 +6,7 @@
|
|||
|
||||
// This is PR244
|
||||
|
||||
// CHECK-LABEL: define void @bar(
|
||||
// CHECK-LABEL: define {{.*}}void @bar(
|
||||
// CHECK: call {{.*}} @func
|
||||
// CHECK: define internal {{.*}}i32 @func(
|
||||
static int func();
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
|
||||
extern int printf(const char*, ...);
|
||||
|
||||
// CHECK: define void {{.*}}foo(
|
||||
// CHECK: define {{.*}}void {{.*}}foo(
|
||||
void foo(const char *msg) {
|
||||
// CHECK: call {{.*}}printf
|
||||
printf("%s\n",msg);
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
// RUN: %clang_cc1 -Wno-gcc-compat -emit-llvm -o - %s | FileCheck %s
|
||||
|
||||
void pr8880_cg_1(int *iptr) {
|
||||
// CHECK-LABEL: define void @pr8880_cg_1(
|
||||
// CHECK-LABEL: define {{.*}}void @pr8880_cg_1(
|
||||
int i, j;
|
||||
// CHECK: br label %[[OUTER_COND:[0-9A-Za-z$._]+]]
|
||||
for (i = 2; i != 10 ; i++ )
|
||||
|
@ -31,7 +31,7 @@ void pr8880_cg_1(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;
|
||||
// CHECK: br label %[[OUTER_COND:[0-9A-Za-z$._]+]]
|
||||
for (i = 2; i != 10 ; i++ )
|
||||
|
@ -61,7 +61,7 @@ void pr8880_cg_2(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;
|
||||
// CHECK: br label %[[OUTER_COND:[0-9A-Za-z$._]+]]
|
||||
for (i = 2 ; i != 10 ; i++ )
|
||||
|
@ -92,7 +92,7 @@ void pr8880_cg_3(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;
|
||||
// CHECK: br label %[[OUTER_COND:[0-9A-Za-z$._]+]]
|
||||
for (i = 2 ; i != 10 ; i++ )
|
||||
|
@ -123,7 +123,7 @@ void pr8880_cg_4(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;
|
||||
// CHECK: br label %[[OUTER_COND:[0-9A-Za-z$._]+]]
|
||||
// CHECK: [[OUTER_COND]]
|
||||
|
@ -148,7 +148,7 @@ void pr8880_cg_5(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;
|
||||
// CHECK: br label %[[OUTER_COND:[0-9A-Za-z$._]+]]
|
||||
// CHECK: [[OUTER_COND]]
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
typedef float float4 __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 ) {
|
||||
// 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
|
||||
|
@ -27,14 +27,14 @@ void clang_shufflevector_v_v( float4* A, float4 x, uint4 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) {
|
||||
// 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>* {{%.*}}
|
||||
*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) {
|
||||
// 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>* {{%.*}}
|
||||
|
|
|
@ -23,44 +23,44 @@ unsigned char align = 1;
|
|||
|
||||
void bar(const char *);
|
||||
|
||||
// CHECK-LABEL: define void @f0()
|
||||
// CHECK-LABEL: define {{.*}}void @f0()
|
||||
void f0() {
|
||||
bar("hello");
|
||||
// ITANIUM: call void @bar({{.*}} @.str
|
||||
// MSABI: call void @bar({{.*}} @"\01??_C@_05CJBACGMB@hello?$AA@"
|
||||
// ITANIUM: call {{.*}}void @bar({{.*}} @.str
|
||||
// MSABI: call {{.*}}void @bar({{.*}} @"\01??_C@_05CJBACGMB@hello?$AA@"
|
||||
}
|
||||
|
||||
// CHECK-LABEL: define void @f1()
|
||||
// CHECK-LABEL: define {{.*}}void @f1()
|
||||
void f1() {
|
||||
static char *x = "hello";
|
||||
bar(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() {
|
||||
static char x[] = "hello";
|
||||
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() {
|
||||
static char x[8] = "hello";
|
||||
bar(x);
|
||||
// CHECK: call void @bar({{.*}} @f3.x
|
||||
// CHECK: call {{.*}}void @bar({{.*}} @f3.x
|
||||
}
|
||||
|
||||
void gaz(void *);
|
||||
|
||||
// CHECK-LABEL: define void @f4()
|
||||
// CHECK-LABEL: define {{.*}}void @f4()
|
||||
void f4() {
|
||||
static struct s {
|
||||
char *name;
|
||||
} x = { "hello" };
|
||||
gaz(&x);
|
||||
// CHECK: call void @gaz({{.*}} @f4.x
|
||||
// CHECK: call {{.*}}void @gaz({{.*}} @f4.x
|
||||
}
|
||||
|
||||
char x[3] = "ola";
|
||||
|
|
|
@ -18,7 +18,7 @@ void JS_ReportErrorNumber(JSErrorCallback errorCallback, ...);
|
|||
void Interpret() {
|
||||
JS_ReportErrorNumber(js_GetErrorMessage, 0);
|
||||
|
||||
// CHECK: call void ({{.*}}, ...) @JS_ReportErrorNumber({{.*}}@js_GetErrorMessage
|
||||
// CHECK: call {{.*}}void ({{.*}}, ...) @JS_ReportErrorNumber({{.*}}@js_GetErrorMessage
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -30,7 +30,7 @@ void test_nest_captured_stmt(int param, int size, int param_arr[size]) {
|
|||
param_arr[size - 1] = 2;
|
||||
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:%.+]] = 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
|
||||
|
@ -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: alloca %struct.anon{{.*}}
|
||||
|
|
|
@ -28,7 +28,7 @@ void test1() {
|
|||
// 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: 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: define internal void @[[HelperName]]
|
||||
// CHECK-2: define internal {{.*}}void @[[HelperName]]
|
||||
// CHECK-2-NOT: }
|
||||
// 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: define internal void @__captured_stmt[[HelperName]]
|
||||
// CHECK-GLOBALS: define internal {{.*}}void @__captured_stmt[[HelperName]]
|
||||
// CHECK-GLOBALS-NOT: ret
|
||||
// CHECK-GLOBALS: load i32, i32* @global
|
||||
// CHECK-GLOBALS: load i32, i32* @
|
||||
|
|
|
@ -21,7 +21,7 @@ void foo(signed char sc, unsigned char uc, signed long long sll,
|
|||
_Complex unsigned char cuc1;
|
||||
_Complex signed long long csll1;
|
||||
_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.
|
||||
// CHECK: i[[CHSIZE:[0-9]+]]{{[^,]*}},
|
||||
// CHECK: i[[CHSIZE]]{{[^,]*}},
|
||||
|
|
|
@ -71,6 +71,6 @@ void test6f(void);
|
|||
void test6() {
|
||||
do {
|
||||
} while (test6f(), 0);
|
||||
// CHECK: call void @test6f()
|
||||
// CHECK: call {{.*}}void @test6f()
|
||||
}
|
||||
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
float f0, f1, f2;
|
||||
|
||||
void foo(void) {
|
||||
// CHECK-LABEL: define void @foo()
|
||||
// CHECK-LABEL: define {{.*}}void @foo()
|
||||
|
||||
// CHECK: fadd fast
|
||||
f0 = f1 + f2;
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
float f0, f1, f2;
|
||||
|
||||
void foo(void) {
|
||||
// CHECK-LABEL: define void @foo()
|
||||
// CHECK-LABEL: define {{.*}}void @foo()
|
||||
|
||||
// FINITE: fadd nnan ninf
|
||||
// NSZ: fadd nsz
|
||||
|
|
|
@ -16,4 +16,4 @@ void g0() {
|
|||
}
|
||||
|
||||
extern void f(int x) { } // still has internal linkage
|
||||
// CHECK-LABEL: define internal void @f
|
||||
// CHECK-LABEL: define internal {{.*}}void @f
|
||||
|
|
|
@ -7,6 +7,6 @@ double pow(double, double);
|
|||
|
||||
double foo(double a, double b) {
|
||||
return pow(a, b);
|
||||
// CHECK: call double @pow
|
||||
// CHECK: call {{.*}}double @pow
|
||||
}
|
||||
|
||||
|
|
|
@ -1,13 +1,13 @@
|
|||
// 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
|
||||
// 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
|
||||
// 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
|
||||
// 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
|
||||
// SAFESTACK: define void @test1(i8* %msg) #0 {
|
||||
// SAFESTACK: define {{.*}}void @test1(i8* %msg) #0 {
|
||||
|
||||
typedef __SIZE_TYPE__ size_t;
|
||||
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
// RUN: %clang_cc1 -emit-llvm -o - %s | FileCheck %s
|
||||
// CHECK: ModuleID
|
||||
// CHECK-NOT: zeroinitializer
|
||||
// CHECK-LABEL: define i8* @f
|
||||
// CHECK-LABEL: define {{.*}}i8* @f
|
||||
|
||||
struct s {
|
||||
int a;
|
||||
|
|
|
@ -14,9 +14,9 @@ unsigned i;
|
|||
// FUNC: @hash
|
||||
// FILE: @hash
|
||||
unsigned hash() {
|
||||
// DEFAULT: call void @__ubsan
|
||||
// FUNC-NOT: call void @__ubsan
|
||||
// FILE-NOT: call void @__ubsan
|
||||
// DEFAULT: call {{.*}}void @__ubsan
|
||||
// FUNC-NOT: call {{.*}}void @__ubsan
|
||||
// FILE-NOT: call {{.*}}void @__ubsan
|
||||
return i * 37;
|
||||
}
|
||||
|
||||
|
@ -24,8 +24,8 @@ unsigned hash() {
|
|||
// FUNC: @add
|
||||
// FILE: @add
|
||||
unsigned add() {
|
||||
// DEFAULT: call void @__ubsan
|
||||
// FUNC: call void @__ubsan
|
||||
// FILE-NOT: call void @__ubsan
|
||||
// DEFAULT: call {{.*}}void @__ubsan
|
||||
// FUNC: call {{.*}}void @__ubsan
|
||||
// FILE-NOT: call {{.*}}void @__ubsan
|
||||
return i + 1;
|
||||
}
|
||||
|
|
|
@ -22,7 +22,7 @@ int printf(const char *, ...);
|
|||
// that do implicit lvalue-to-rvalue conversion are substantially
|
||||
// reduced.
|
||||
|
||||
// CHECK-LABEL: define void @test()
|
||||
// CHECK-LABEL: define {{.*}}void @test()
|
||||
void test() {
|
||||
// CHECK: load volatile [[INT]], [[INT]]* @i
|
||||
i;
|
||||
|
@ -303,11 +303,11 @@ void test() {
|
|||
}
|
||||
|
||||
extern volatile enum X x;
|
||||
// CHECK-LABEL: define void @test1()
|
||||
// CHECK-LABEL: define {{.*}}void @test1()
|
||||
void test1() {
|
||||
extern void test1_helper(void);
|
||||
test1_helper();
|
||||
// CHECK: call void @test1_helper()
|
||||
// CHECK: call {{.*}}void @test1_helper()
|
||||
// CHECK-NEXT: ret void
|
||||
x;
|
||||
(void) x;
|
||||
|
|
|
@ -4,6 +4,6 @@ struct a {
|
|||
};
|
||||
|
||||
void g(a *a) {
|
||||
// CHECK: call void @_ZN1a1fEv()
|
||||
// CHECK: call {{.*}}void @_ZN1a1fEv()
|
||||
a->f();
|
||||
}
|
||||
|
|
|
@ -9,8 +9,8 @@ void test() {
|
|||
// CHECK: @_Z1fIiEvv
|
||||
void (*p2)() = f<int>;
|
||||
}
|
||||
// CHECK-LABEL: define linkonce_odr void @_Z1fIiEvT_
|
||||
// CHECK-LABEL: define linkonce_odr void @_Z1fIiEvv
|
||||
// CHECK-LABEL: define linkonce_odr {{.*}}void @_Z1fIiEvT_
|
||||
// CHECK-LABEL: define linkonce_odr {{.*}}void @_Z1fIiEvv
|
||||
|
||||
namespace PR6973 {
|
||||
template<typename T>
|
||||
|
|
|
@ -5,7 +5,7 @@ namespace N {
|
|||
}
|
||||
|
||||
int main(void) {
|
||||
// CHECK: call void @_ZN1N4freeEPv
|
||||
// CHECK: call {{.*}}void @_ZN1N4freeEPv
|
||||
void *fp __attribute__((cleanup(N::free)));
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -20,9 +20,9 @@ int main()
|
|||
// CHECK-LABEL: define internal void @__Block_byref_object_dispose_
|
||||
// CHECK: call {{.*}} @_ZN1AD1Ev
|
||||
// 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: call void @_Block_object_dispose
|
||||
// CHECK: call {{.*}}void @_Block_object_dispose
|
||||
|
||||
// rdar://problem/11135650
|
||||
namespace test1 {
|
||||
|
|
|
@ -15,10 +15,10 @@ extern "C" {
|
|||
extern "C" {
|
||||
static void test2_f() {
|
||||
}
|
||||
// CHECK-LABEL: define internal void @_Z7test2_fv
|
||||
// CHECK-LABEL: define internal {{.*}}void @_Z7test2_fv
|
||||
static void test2_f(int x) {
|
||||
}
|
||||
// CHECK-LABEL: define internal void @_Z7test2_fi
|
||||
// CHECK-LABEL: define internal {{.*}}void @_Z7test2_fi
|
||||
void test2_use() {
|
||||
test2_f();
|
||||
test2_f(42);
|
||||
|
|
|
@ -44,11 +44,11 @@ void test1() {
|
|||
// 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: call i32 @__cxa_guard_acquire(
|
||||
// CHECK-1: call {{.*}}i32 @__cxa_guard_acquire(
|
||||
// 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 %[[Capture]], %[[Capture]]* {{[^,]*}}, i32 0, i32 1
|
||||
|
||||
|
@ -61,13 +61,13 @@ void test2(int x) {
|
|||
return x;
|
||||
}();
|
||||
|
||||
// CHECK-2-LABEL: define void @_Z5test2i
|
||||
// CHECK-2-LABEL: define {{.*}}void @_Z5test2i
|
||||
// CHECK-2: call {{.*}} @[[Lambda:["$\w]+]]
|
||||
//
|
||||
// CHECK-2: define internal {{.*}} @[[Lambda]]
|
||||
// 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: 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-LABEL: define void @_Z5test3i
|
||||
// CHECK-3-LABEL: define {{.*}}void @_Z5test3i
|
||||
// CHECK-3: store i32*
|
||||
// CHECK-3: call void @{{.*}}__captured_stmt
|
||||
// CHECK-3: ret void
|
||||
|
@ -93,11 +93,11 @@ void test4() {
|
|||
Foo f;
|
||||
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: ret void
|
||||
//
|
||||
// CHECK-4: define internal void @[[HelperName]]
|
||||
// CHECK-4: define internal {{.*}}void @[[HelperName]]
|
||||
// CHECK-4: store i32 5, i32*
|
||||
// CHECK-4: call {{.*}}FooD1Ev
|
||||
}
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
// PR6521
|
||||
void bar();
|
||||
struct Foo {
|
||||
// CHECK-LABEL: define linkonce_odr void @_ZN3Foo3fooEv
|
||||
// CHECK-LABEL: define linkonce_odr {{.*}}void @_ZN3Foo3fooEv
|
||||
static void foo() __attribute__((constructor)) {
|
||||
bar();
|
||||
}
|
||||
|
|
|
@ -11,8 +11,8 @@
|
|||
// 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-LABEL: define internal void @_GLOBAL__sub_I_ctor_globalopt.cpp()
|
||||
// CHECK: call void @
|
||||
// CHECK-LABEL: define internal {{.*}}void @_GLOBAL__sub_I_ctor_globalopt.cpp()
|
||||
// CHECK: call {{.*}}void @
|
||||
// CHECK-NOT: call{{ }}
|
||||
|
||||
// O1: @llvm.global_ctors = appending global [0 x { i32, void ()*, i8* }] zeroinitializer
|
||||
|
|
|
@ -158,7 +158,7 @@ __complex double f11() {
|
|||
void f12() {
|
||||
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
|
||||
f12_2();
|
||||
}
|
||||
|
|
|
@ -7,10 +7,10 @@ void* bar() { return a; }
|
|||
|
||||
// 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: ret void
|
||||
|
||||
// CHECK-LABEL: define internal void @_GLOBAL__sub_I_deferred_global_init.cpp
|
||||
// CHECK: call void @__cxx_global_var_init()
|
||||
// CHECK-LABEL: define internal {{.*}}void @_GLOBAL__sub_I_deferred_global_init.cpp
|
||||
// CHECK: call {{.*}}void @__cxx_global_var_init()
|
||||
// CHECK: ret void
|
||||
|
|
|
@ -9,7 +9,7 @@ struct D final : virtual C {
|
|||
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) {
|
||||
// CHECK-NOT: load i8*, i8**
|
||||
return d;
|
||||
|
|
|
@ -13,14 +13,14 @@ struct B : public A {
|
|||
// does not use runtime support.
|
||||
A *upcast(B *b) {
|
||||
return dynamic_cast<A *>(b);
|
||||
// CHECK-LABEL: define %struct.A* @_Z6upcastP1B
|
||||
// CHECK-NOT: call i8* @__dynamic_cast
|
||||
// CHECK-LABEL: define {{.*}}%struct.A* @_Z6upcastP1B
|
||||
// CHECK-NOT: call {{.*}}i8* @__dynamic_cast
|
||||
}
|
||||
|
||||
// A NoOp dynamic_cast can be used with -fno-rtti iff it does not use
|
||||
// runtime support.
|
||||
B *samecast(B *b) {
|
||||
return dynamic_cast<B *>(b);
|
||||
// CHECK-LABEL: define %struct.B* @_Z8samecastP1B
|
||||
// CHECK-NOT: call i8* @__dynamic_cast
|
||||
// CHECK-LABEL: define {{.*}}%struct.B* @_Z8samecastP1B
|
||||
// CHECK-NOT: call {{.*}}i8* @__dynamic_cast
|
||||
}
|
||||
|
|
|
@ -71,5 +71,5 @@ namespace PR19411 {
|
|||
struct A { void f(); };
|
||||
extern "C" void A::f() { void g(); g(); }
|
||||
// CHECK-LABEL: @_ZN7PR194111A1fEv(
|
||||
// CHECK: call void @g()
|
||||
// CHECK: call {{.*}}void @g()
|
||||
}
|
||||
|
|
|
@ -3,11 +3,11 @@
|
|||
template<typename T> void a(T);
|
||||
template<> void a(int) {}
|
||||
|
||||
// CHECK-LABEL: define void @_Z1aIiEvT_
|
||||
// CHECK-LABEL: define {{.*}}void @_Z1aIiEvT_
|
||||
|
||||
namespace X {
|
||||
template<typename T> void b(T);
|
||||
template<> void b(int) {}
|
||||
}
|
||||
|
||||
// CHECK-LABEL: define void @_ZN1X1bIiEEvT_
|
||||
// CHECK-LABEL: define {{.*}}void @_ZN1X1bIiEEvT_
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
// Verify that the global init helper function does not get associated
|
||||
// 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: !DISubprogram(linkageName: "_GLOBAL__sub_I_globalinit_loc.cpp"
|
||||
// CHECK-NOT: line:
|
||||
|
|
|
@ -1,12 +1,12 @@
|
|||
// 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) { }
|
||||
// CHECK-LABEL: define void @_Z2f0PU3AS1c
|
||||
// CHECK-LABEL: define {{.*}}void @_Z2f0PU3AS1c
|
||||
void f0(char __attribute__((address_space(1))) *p) { }
|
||||
|
||||
struct OpaqueType;
|
||||
typedef OpaqueType __attribute__((address_space(100))) * OpaqueTypePtr;
|
||||
|
||||
// CHECK-LABEL: define void @_Z2f0PU5AS10010OpaqueType
|
||||
// CHECK-LABEL: define {{.*}}void @_Z2f0PU5AS10010OpaqueType
|
||||
void f0(OpaqueTypePtr) { }
|
||||
|
|
|
@ -2,15 +2,15 @@
|
|||
|
||||
template<int *ip> struct IP {};
|
||||
|
||||
// CHECK-LABEL: define void @_Z5test12IPILPi0EE
|
||||
// CHECK-LABEL: define {{.*}}void @_Z5test12IPILPi0EE
|
||||
void test1(IP<nullptr>) {}
|
||||
|
||||
struct X{ };
|
||||
template<int X::*pm> struct PM {};
|
||||
|
||||
// CHECK-LABEL: define void @_Z5test22PMILM1Xi0EE
|
||||
// CHECK-LABEL: define {{.*}}void @_Z5test22PMILM1Xi0EE
|
||||
void test2(PM<nullptr>) { }
|
||||
|
||||
// CHECK-LABEL: define void @_Z5test316DependentTypePtrIPiLS0_0EE
|
||||
// CHECK-LABEL: define {{.*}}void @_Z5test316DependentTypePtrIPiLS0_0EE
|
||||
template<typename T, T x> struct DependentTypePtr {};
|
||||
void test3(DependentTypePtr<int*,nullptr>) { }
|
||||
|
|
|
@ -98,7 +98,7 @@ namespace test8 {
|
|||
template<typename T>
|
||||
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)>);
|
||||
}
|
||||
|
||||
|
@ -157,13 +157,13 @@ namespace test12 {
|
|||
const int n = 10;
|
||||
template<typename T, T v> void test() {}
|
||||
void use() {
|
||||
// CHECK-LABEL: define internal void @_ZN6test124testIFivEXadL_ZNS_L1fEvEEEEvv(
|
||||
// CHECK-LABEL: define internal {{.*}}void @_ZN6test124testIFivEXadL_ZNS_L1fEvEEEEvv(
|
||||
test<int(), &f>();
|
||||
// CHECK-LABEL: define internal void @_ZN6test124testIRFivEL_ZNS_L1fEvEEEvv(
|
||||
// CHECK-LABEL: define internal {{.*}}void @_ZN6test124testIRFivEL_ZNS_L1fEvEEEvv(
|
||||
test<int(&)(), f>();
|
||||
// CHECK-LABEL: define internal void @_ZN6test124testIPKiXadL_ZNS_L1nEEEEEvv(
|
||||
// CHECK-LABEL: define internal {{.*}}void @_ZN6test124testIPKiXadL_ZNS_L1nEEEEEvv(
|
||||
test<const int*, &n>();
|
||||
// CHECK-LABEL: define internal void @_ZN6test124testIRKiL_ZNS_L1nEEEEvv(
|
||||
// CHECK-LABEL: define internal {{.*}}void @_ZN6test124testIRKiL_ZNS_L1nEEEEvv(
|
||||
test<const int&, n>();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -5,4 +5,4 @@ namespace std __attribute__ ((__visibility__ ("default"))) {}
|
|||
void foo() {
|
||||
}
|
||||
#pragma GCC visibility pop
|
||||
// CHECK-LABEL: define void @_Z3foov()
|
||||
// CHECK-LABEL: define {{.*}}void @_Z3foov()
|
||||
|
|
|
@ -11,4 +11,4 @@ extern "C" {
|
|||
// PR18661: Clang would fail to emit function definition with mismatching
|
||||
// exception specification, even though it was just treated as a warning.
|
||||
|
||||
// CHECK: define void @f()
|
||||
// CHECK: define {{.*}}void @f()
|
||||
|
|
|
@ -8,7 +8,7 @@ struct X : A // default constructor is not trivial
|
|||
};
|
||||
|
||||
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: define linkonce_odr {{.*}} @_ZN1XIiEC1Ev
|
||||
// CHECK: define linkonce_odr {{.*}} @_ZN1XIiEC2Ev
|
||||
|
|
|
@ -14,18 +14,18 @@ void S::foo() {}
|
|||
|
||||
#pragma weak zed
|
||||
namespace bar { void zed() {} }
|
||||
// CHECK-LABEL: define void @_ZN3bar3zedEv(
|
||||
// CHECK-LABEL: define {{.*}}void @_ZN3bar3zedEv(
|
||||
|
||||
#pragma weak bah
|
||||
void bah() {}
|
||||
// CHECK-LABEL: define void @_Z3bahv(
|
||||
// CHECK-LABEL: define {{.*}}void @_Z3bahv(
|
||||
|
||||
#pragma weak baz
|
||||
extern "C" void baz() {}
|
||||
// CHECK-LABEL: define weak void @baz(
|
||||
// CHECK-LABEL: define weak {{.*}}void @baz(
|
||||
|
||||
#pragma weak _Z3baxv
|
||||
void bax() {}
|
||||
// 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.
|
||||
// CHECK-LABEL: define void @_Z3baxv(
|
||||
// CHECK-LABEL: define {{.*}}void @_Z3baxv(
|
||||
|
|
|
@ -559,11 +559,11 @@ XXX::XXX()
|
|||
_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()
|
||||
{
|
||||
_dispatch_once(^{ notify_register_dispatch( ^(int token) { XXLog(__FUNCTION__); });
|
||||
});
|
||||
}
|
||||
// CHECK: define internal void @___ZN3XXXD2Ev_block_invoke_
|
||||
// CHECK: define internal {{.*}}void @___ZN3XXXD2Ev_block_invoke_
|
||||
|
|
|
@ -18,7 +18,7 @@ void IntToString(T a)
|
|||
}
|
||||
|
||||
int main() {
|
||||
// CHECK-LABEL: define linkonce_odr void @_Z11IntToStringIcEvT_(
|
||||
// CHECK-LABEL: define linkonce_odr {{.*}}void @_Z11IntToStringIcEvT_(
|
||||
IntToString('a');
|
||||
}
|
||||
|
||||
|
|
|
@ -10,73 +10,73 @@ struct A {
|
|||
struct B : A {};
|
||||
|
||||
void f1(A *x) { typeid(false, *x); }
|
||||
// CHECK-LABEL: define void @_Z2f1P1A
|
||||
// CHECK-LABEL: define {{.*}}void @_Z2f1P1A
|
||||
// CHECK: icmp eq {{.*}}, null
|
||||
// CHECK-NEXT: br i1
|
||||
|
||||
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-NEXT: br i1
|
||||
|
||||
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-NEXT: br i1
|
||||
|
||||
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-NEXT: br i1
|
||||
|
||||
void f5(volatile A *x) { typeid(*x); }
|
||||
// CHECK-LABEL: define void @_Z2f5PV1A
|
||||
// CHECK-LABEL: define {{.*}}void @_Z2f5PV1A
|
||||
// CHECK: icmp eq {{.*}}, null
|
||||
// CHECK-NEXT: br i1
|
||||
|
||||
void f6(A *x) { typeid((B &)*(B *)x); }
|
||||
// CHECK-LABEL: define void @_Z2f6P1A
|
||||
// CHECK-LABEL: define {{.*}}void @_Z2f6P1A
|
||||
// CHECK: icmp eq {{.*}}, null
|
||||
// CHECK-NEXT: br i1
|
||||
|
||||
void f7(A *x) { typeid((*x)); }
|
||||
// CHECK-LABEL: define void @_Z2f7P1A
|
||||
// CHECK-LABEL: define {{.*}}void @_Z2f7P1A
|
||||
// CHECK: icmp eq {{.*}}, null
|
||||
// CHECK-NEXT: br i1
|
||||
|
||||
void f8(A *x) { typeid(x[0]); }
|
||||
// CHECK-LABEL: define void @_Z2f8P1A
|
||||
// CHECK-LABEL: define {{.*}}void @_Z2f8P1A
|
||||
// CHECK: icmp eq {{.*}}, null
|
||||
// CHECK-NEXT: br i1
|
||||
|
||||
void f9(A *x) { typeid(0[x]); }
|
||||
// CHECK-LABEL: define void @_Z2f9P1A
|
||||
// CHECK-LABEL: define {{.*}}void @_Z2f9P1A
|
||||
// CHECK: icmp eq {{.*}}, null
|
||||
// CHECK-NEXT: br i1
|
||||
|
||||
void f10(A *x, A *y) { typeid(*y ?: *x); }
|
||||
// CHECK-LABEL: define void @_Z3f10P1AS0_
|
||||
// CHECK-LABEL: define {{.*}}void @_Z3f10P1AS0_
|
||||
// CHECK: icmp eq {{.*}}, null
|
||||
// CHECK-NEXT: br i1
|
||||
|
||||
void f11(A *x, A &y) { typeid(*x ?: y); }
|
||||
// CHECK-LABEL: define void @_Z3f11P1ARS_
|
||||
// CHECK-LABEL: define {{.*}}void @_Z3f11P1ARS_
|
||||
// CHECK: icmp eq {{.*}}, null
|
||||
// CHECK-NEXT: br i1
|
||||
|
||||
void f12(A &x, A *y) { typeid(x ?: *y); }
|
||||
// CHECK-LABEL: define void @_Z3f12R1APS_
|
||||
// CHECK-LABEL: define {{.*}}void @_Z3f12R1APS_
|
||||
// CHECK: icmp eq {{.*}}, null
|
||||
// CHECK-NEXT: br i1
|
||||
|
||||
void f13(A &x, A &y) { typeid(x ?: y); }
|
||||
// CHECK-LABEL: define void @_Z3f13R1AS0_
|
||||
// CHECK-LABEL: define {{.*}}void @_Z3f13R1AS0_
|
||||
// CHECK-NOT: icmp eq {{.*}}, null
|
||||
|
||||
void f14(A *x) { typeid((const A &)(A)*x); }
|
||||
// CHECK-LABEL: define void @_Z3f14P1A
|
||||
// CHECK-LABEL: define {{.*}}void @_Z3f14P1A
|
||||
// CHECK-NOT: icmp eq {{.*}}, null
|
||||
|
||||
void f15(A *x) { typeid((A &&)*(A *)nullptr); }
|
||||
// CHECK-LABEL: define void @_Z3f15P1A
|
||||
// CHECK-LABEL: define {{.*}}void @_Z3f15P1A
|
||||
// CHECK-NOT: icmp eq {{.*}}, null
|
||||
|
|
|
@ -8,7 +8,7 @@ struct X {
|
|||
|
||||
void vararg(...);
|
||||
|
||||
// CHECK-LABEL: define void @_Z4test1X
|
||||
// CHECK-LABEL: define {{.*}}void @_Z4test1X
|
||||
void test(X x) {
|
||||
// CHECK: call void @llvm.trap()
|
||||
vararg(x);
|
||||
|
|
|
@ -12,5 +12,5 @@ pile_box::pile_box(box *pp)
|
|||
{
|
||||
}
|
||||
|
||||
// CHECK: call void @_ZdlPv
|
||||
// CHECK: call {{.*}}void @_ZdlPv
|
||||
|
||||
|
|
|
@ -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_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: store [[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: [[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: call{{( x86_thiscallcc)?}} void [[G_LAMBDA:@.+]]([[CAP_TYPE1]]* [[CAP_ARG]])
|
||||
// CHECK: call{{.*}} void [[G_LAMBDA:@.+]]([[CAP_TYPE1]]* [[CAP_ARG]])
|
||||
// CHECK: ret void
|
||||
void g(intptr_t n) {
|
||||
intptr_t buffer[n];
|
||||
|
@ -70,17 +70,17 @@ void b(intptr_t n, T arg) {
|
|||
|
||||
// CHECK-LABEL: @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);
|
||||
// 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);
|
||||
// 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);
|
||||
// CHECK: ret i32 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: call i{{.+}}* @llvm.stacksave()
|
||||
// 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: [[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: 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: ret void
|
||||
// CHECK: void [[B_INT]]([[INTPTR_T]]
|
||||
// CHECK: [[SIZE1:%.+]] = call [[INTPTR_T]]
|
||||
// CHECK: [[SIZE1:%.+]] = call {{.*}}[[INTPTR_T]]
|
||||
// CHECK: call i{{.+}}* @llvm.stacksave()
|
||||
// CHECK: [[BUFFER2_ADDR:%.+]] = alloca [[INTPTR_T]], [[INTPTR_T]] [[SIZE1]]
|
||||
// CHECK: [[SIZE2:%.+]] = add
|
||||
|
@ -107,11 +107,11 @@ int main() {
|
|||
// 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: 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: 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: [[SIZE_REF:%.+]] = getelementptr inbounds [[CAP_TYPE2]], [[CAP_TYPE2]]* [[THIS]], i{{.+}} 0, i{{.+}} 0
|
||||
// CHECK: [[SIZE:%.+]] = load [[INTPTR_T]], [[INTPTR_T]]* [[SIZE_REF]]
|
||||
|
@ -120,7 +120,7 @@ int main() {
|
|||
// CHECK: call void @llvm.stackrestore(
|
||||
// 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:%.+]] = 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
|
||||
|
@ -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_ORIG:%.+]] = load [[INTPTR_T]]*, [[INTPTR_T]]** [[BUFFER1_ADDR_REF_ORIG]]
|
||||
// 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: 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:%.+]] = 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
|
||||
|
|
|
@ -17,7 +17,7 @@ volatile struct S {
|
|||
int printf(const char *, ...);
|
||||
|
||||
|
||||
// CHECK: define void @{{.*}}test
|
||||
// CHECK: define {{.*}}void @{{.*}}test
|
||||
void test() {
|
||||
|
||||
asm("nop"); // CHECK: call void asm
|
||||
|
|
|
@ -8,15 +8,15 @@ void use_int(int);
|
|||
|
||||
void test0(int i) {
|
||||
block_t block = ^{ use_int(i); };
|
||||
// CHECK-LABEL: define void @test0(
|
||||
// CHECK: call i8* @objc_retainBlock(i8* {{%.*}}) [[NUW:#[0-9]+]], !clang.arc.copy_on_escape
|
||||
// CHECK-LABEL: define {{.*}}void @test0(
|
||||
// CHECK: call {{.*}}i8* @objc_retainBlock(i8* {{%.*}}) [[NUW:#[0-9]+]], !clang.arc.copy_on_escape
|
||||
// CHECK: ret void
|
||||
}
|
||||
|
||||
void test1(int i) {
|
||||
id block = ^{ use_int(i); };
|
||||
// CHECK-LABEL: define void @test1(
|
||||
// CHECK: call i8* @objc_retainBlock(i8* {{%.*}}) [[NUW]]
|
||||
// CHECK-LABEL: define {{.*}}void @test1(
|
||||
// CHECK: call {{.*}}i8* @objc_retainBlock(i8* {{%.*}}) [[NUW]]
|
||||
// CHECK-NOT: !clang.arc.copy_on_escape
|
||||
// CHECK: ret void
|
||||
}
|
||||
|
|
|
@ -7,9 +7,9 @@
|
|||
//
|
||||
// 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-LABEL: define void @f1
|
||||
// CHECK_OLD_DISPATCH-LABEL: define {{.*}}void @f1
|
||||
// CHECK_OLD_DISPATCH: load {{.*}}OBJC_SELECTOR_REFERENCES
|
||||
|
||||
@interface A
|
||||
|
|
|
@ -9,7 +9,7 @@
|
|||
@interface NSString : NSObject
|
||||
@end
|
||||
|
||||
// CHECK-LABEL: define void @test1()
|
||||
// CHECK-LABEL: define {{.*}}void @test1()
|
||||
void test1() {
|
||||
// CHECK: {{call.*@objc_msgSend}}
|
||||
// CHECK: {{call.*@objc_msgSend}}
|
||||
|
@ -18,7 +18,7 @@ void test1() {
|
|||
NSString *str1 = [[[NSString alloc] init] retain];
|
||||
}
|
||||
|
||||
// CHECK-LABEL: define void @test2()
|
||||
// CHECK-LABEL: define {{.*}}void @test2()
|
||||
void test2() {
|
||||
// CHECK: {{call.*@objc_msgSend}}
|
||||
// CHECK: {{call.*@objc_msgSend}}
|
||||
|
@ -32,7 +32,7 @@ void test2() {
|
|||
@end
|
||||
|
||||
@implementation Test2
|
||||
// CHECK: define internal i8* @"\01-[Test2 init]"
|
||||
// CHECK: define internal {{.*}}i8* @"\01-[Test2 init]"
|
||||
- (id)init {
|
||||
// CHECK: {{call.*@objc_msgSendSuper}}
|
||||
// CHECK-NEXT: bitcast i8*
|
||||
|
@ -45,7 +45,7 @@ void test2() {
|
|||
@end
|
||||
|
||||
@implementation Test3
|
||||
// CHECK: define internal i8* @"\01-[Test3 init]"
|
||||
// CHECK: define internal {{.*}}i8* @"\01-[Test3 init]"
|
||||
- (id)init {
|
||||
// CHECK: {{call.*@objc_msgSendSuper}}
|
||||
// CHECK-NEXT: bitcast i8*
|
||||
|
|
|
@ -1,25 +1,25 @@
|
|||
// 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 *) {}
|
||||
// CHECK-LABEL: define void @_Z1fPU6__weakP11objc_object(i8**)
|
||||
// CHECK-LABEL: define {{.*}}void @_Z1fPU6__weakP11objc_object(i8**)
|
||||
void f(__weak id *) {}
|
||||
// CHECK-LABEL: define void @_Z1fPU15__autoreleasingP11objc_object(i8**)
|
||||
// CHECK-LABEL: define {{.*}}void @_Z1fPU15__autoreleasingP11objc_object(i8**)
|
||||
void f(__autoreleasing id *) {}
|
||||
// CHECK-LABEL: define void @_Z1fPP11objc_object(i8**)
|
||||
// CHECK-LABEL: define {{.*}}void @_Z1fPP11objc_object(i8**)
|
||||
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 *) {}
|
||||
// CHECK-LABEL: define void @_Z1fPKU6__weakP11objc_object(i8**)
|
||||
// CHECK-LABEL: define {{.*}}void @_Z1fPKU6__weakP11objc_object(i8**)
|
||||
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 *) {}
|
||||
// CHECK-LABEL: define void @_Z1fPKP11objc_object(i8**)
|
||||
// CHECK-LABEL: define {{.*}}void @_Z1fPKP11objc_object(i8**)
|
||||
void f(const __unsafe_unretained id *) {}
|
||||
|
||||
|
||||
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 void g<const void>(unsigned_c<sizeof(id) + 1> *);
|
||||
|
|
|
@ -15,7 +15,7 @@ void f1() {
|
|||
}();
|
||||
}
|
||||
|
||||
// CHECK-LABEL: define internal i8* @"\01-[TNSObject init]"
|
||||
// CHECK-LABEL: define internal {{.*}}i8* @"\01-[TNSObject init]"
|
||||
@implementation TNSObject
|
||||
- (id)init
|
||||
{
|
||||
|
|
|
@ -6,7 +6,7 @@ void kernel ker() {
|
|||
event_t e;
|
||||
// CHECK: alloca %opencl.event_t*,
|
||||
foo(e);
|
||||
// CHECK: call void @foo(%opencl.event_t* %
|
||||
// CHECK: call {{.*}}void @foo(%opencl.event_t* %
|
||||
foo(0);
|
||||
// CHECK: call void @foo(%opencl.event_t* null)
|
||||
// CHECK: call {{.*}}void @foo(%opencl.event_t* null)
|
||||
}
|
||||
|
|
|
@ -8,7 +8,7 @@ __kernel void foo(void) {
|
|||
func(&i);
|
||||
}
|
||||
|
||||
// CHECK-LABEL: define void @_Z3barPU7CLlocali
|
||||
// CHECK-LABEL: define {{.*}}void @_Z3barPU7CLlocali
|
||||
__kernel void __attribute__((__overloadable__)) bar(local int *x) {
|
||||
*x = 5;
|
||||
}
|
||||
|
|
|
@ -22,7 +22,7 @@ void fnc3(image3d_t img) {}
|
|||
// CHECK: @fnc3(%opencl.image3d_t*
|
||||
|
||||
void fnc4smp(sampler_t s) {}
|
||||
// CHECK-LABEL: define void @fnc4smp(i32
|
||||
// CHECK-LABEL: define {{.*}}void @fnc4smp(i32
|
||||
|
||||
kernel void foo(image1d_t img) {
|
||||
sampler_t smp = 5;
|
||||
|
@ -31,9 +31,9 @@ kernel void foo(image1d_t img) {
|
|||
// CHECK: alloca %opencl.event_t*
|
||||
// CHECK: store i32 5,
|
||||
fnc4smp(smp);
|
||||
// CHECK: call void @fnc4smp(i32
|
||||
// CHECK: call {{.*}}void @fnc4smp(i32
|
||||
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) {}
|
||||
|
|
|
@ -12,7 +12,7 @@ CtorInit<int> x;
|
|||
|
||||
// Keep these two namespace definitions separate; merging them hides the bug.
|
||||
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(
|
||||
struct C {
|
||||
__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 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);
|
||||
// CHECK: define available_externally {{signext i32|i32}} @_ZN1SIiE1fEv({{.*}} #[[ALWAYS_INLINE]] align
|
||||
// CHECK: define available_externally {{.*}}{{signext i32|i32}} @_ZN1SIiE1fEv({{.*}} #[[ALWAYS_INLINE]] align
|
||||
|
||||
namespace ImplicitSpecialMembers {
|
||||
// CHECK-LABEL: define {{.*}} @_ZN22ImplicitSpecialMembers1BC2ERKS0_(
|
||||
|
@ -49,9 +49,9 @@ namespace ImplicitSpecialMembers {
|
|||
// CHECK-LABEL: define {{.*}} @_ZN22ImplicitSpecialMembers1DC2EOS0_(
|
||||
// CHECK: call {{.*}} @_ZN22ImplicitSpecialMembers1AC1ERKS0_(
|
||||
// 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;
|
||||
B b2(b1);
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
// 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
|
||||
|
||||
// CHECK: call i8* @getModuleVersion
|
||||
// CHECK: call {{.*}}i8* @getModuleVersion
|
||||
const char* getVer(void) {
|
||||
return getModuleVersion();
|
||||
}
|
||||
|
|
|
@ -6,4 +6,4 @@
|
|||
void f() { SPXTrace(); }
|
||||
void g() { double x = DBL_MAX; }
|
||||
|
||||
// CHECK: define internal void @SPXTrace
|
||||
// CHECK: define internal {{.*}}void @SPXTrace
|
||||
|
|
|
@ -11,7 +11,7 @@
|
|||
// CHECK: [[UNNAMED_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() {}
|
||||
|
||||
|
@ -21,15 +21,15 @@ int main() {
|
|||
// CHECK: [[A_ADDR:%.+]] = alloca i8
|
||||
char a;
|
||||
|
||||
// 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: [[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-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
|
||||
a = 2;
|
||||
// CHECK: call void @__kmpc_critical([[IDENT_T_TY]]* [[DEFAULT_LOC]], i32 [[GTID]], [8 x i32]* [[THE_NAME_LOCK]])
|
||||
// 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_critical([[IDENT_T_TY]]* [[DEFAULT_LOC]], i32 [[GTID]], [8 x i32]* [[THE_NAME_LOCK]])
|
||||
// CHECK-NEXT: invoke {{.*}}void [[FOO]]()
|
||||
// CHECK: call {{.*}}void @__kmpc_end_critical([[IDENT_T_TY]]* [[DEFAULT_LOC]], i32 [[GTID]], [8 x i32]* [[THE_NAME_LOCK]])
|
||||
#pragma omp critical(the_name)
|
||||
foo();
|
||||
// CHECK-NOT: call void @__kmpc_critical
|
||||
|
|
|
@ -19,16 +19,16 @@ int main() {
|
|||
static int a;
|
||||
#pragma omp flush
|
||||
#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);
|
||||
// CHECK: call {{.*}} [[TMAIN:@.+]](
|
||||
// CHECK: ret
|
||||
}
|
||||
|
||||
// CHECK: [[TMAIN]]
|
||||
// CHECK: call void @__kmpc_flush(%{{.+}}* {{(@|%).+}})
|
||||
// CHECK: call void @__kmpc_flush(%{{.+}}* {{(@|%).+}})
|
||||
// CHECK: call {{.*}}void @__kmpc_flush(%{{.+}}* {{(@|%).+}})
|
||||
// CHECK: call {{.*}}void @__kmpc_flush(%{{.+}}* {{(@|%).+}})
|
||||
// CHECK: ret
|
||||
|
||||
#endif
|
||||
|
|
|
@ -43,10 +43,10 @@ int main() {
|
|||
#ifdef LAMBDA
|
||||
// LAMBDA: [[G:@.+]] = global double
|
||||
// LAMBDA-LABEL: @main
|
||||
// LAMBDA: call{{( x86_thiscallcc)?}} void [[OUTER_LAMBDA:@.+]](
|
||||
// LAMBDA: call{{.*}} 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 for private(g)
|
||||
for (int i = 0; i < 2; ++i) {
|
||||
|
@ -54,12 +54,12 @@ int main() {
|
|||
// LAMBDA: [[G_PRIVATE_ADDR:%.+]] = alloca double,
|
||||
// LAMBDA: store %{{.+}}* [[ARG]], %{{.+}}** [[ARG_REF:%.+]],
|
||||
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: [[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: call{{( x86_thiscallcc)?}} void [[INNER_LAMBDA:@.+]](%{{.+}}* [[ARG]])
|
||||
// LAMBDA: call void @__kmpc_for_static_fini(
|
||||
// LAMBDA: call{{.*}} void [[INNER_LAMBDA:@.+]](%{{.+}}* [[ARG]])
|
||||
// LAMBDA: call {{.*}}void @__kmpc_for_static_fini(
|
||||
[&]() {
|
||||
// LAMBDA: define {{.+}} void [[INNER_LAMBDA]](%{{.+}}* [[ARG_PTR:%.+]])
|
||||
// LAMBDA: store %{{.+}}* [[ARG_PTR]], %{{.+}}** [[ARG_PTR_REF:%.+]],
|
||||
|
@ -75,10 +75,10 @@ int main() {
|
|||
#elif defined(BLOCKS)
|
||||
// BLOCKS: [[G:@.+]] = global double
|
||||
// BLOCKS-LABEL: @main
|
||||
// BLOCKS: call void {{%.+}}(i8
|
||||
// BLOCKS: call {{.*}}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 for private(g)
|
||||
for (int i = 0; i < 2; ++i) {
|
||||
|
@ -86,13 +86,13 @@ int main() {
|
|||
// BLOCKS: [[G_PRIVATE_ADDR:%.+]] = alloca double,
|
||||
// BLOCKS: store %{{.+}}* [[ARG]], %{{.+}}** [[ARG_REF:%.+]],
|
||||
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-NOT: [[G]]{{[[^:word:]]}}
|
||||
// BLOCKS: double* [[G_PRIVATE_ADDR]]
|
||||
// BLOCKS-NOT: [[G]]{{[[^:word:]]}}
|
||||
// BLOCKS: call void {{%.+}}(i8
|
||||
// BLOCKS: call void @__kmpc_for_static_fini(
|
||||
// BLOCKS: call {{.*}}void {{%.+}}(i8
|
||||
// BLOCKS: call {{.*}}void @__kmpc_for_static_fini(
|
||||
^{
|
||||
// BLOCKS: define {{.+}} void {{@.+}}(i8*
|
||||
g = 2;
|
||||
|
|
|
@ -9,7 +9,7 @@
|
|||
|
||||
// CHECK: [[IDENT_T_TY:%.+]] = type { i32, i32, i32, i32, i8* }
|
||||
|
||||
// CHECK: define void [[FOO:@.+]]()
|
||||
// CHECK: define {{.*}}void [[FOO:@.+]]()
|
||||
|
||||
void foo() {}
|
||||
|
||||
|
@ -19,23 +19,23 @@ int main() {
|
|||
// CHECK: [[A_ADDR:%.+]] = alloca i8
|
||||
char a;
|
||||
|
||||
// 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: [[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-NEXT: [[IS_MASTER:%.+]] = icmp ne i32 [[RES]], 0
|
||||
// CHECK-NEXT: br i1 [[IS_MASTER]], label {{%?}}[[THEN:.+]], label {{%?}}[[EXIT:.+]]
|
||||
// CHECK: [[THEN]]
|
||||
// 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: [[EXIT]]
|
||||
#pragma omp master
|
||||
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: br i1 [[IS_MASTER]], label {{%?}}[[THEN:.+]], label {{%?}}[[EXIT:.+]]
|
||||
// CHECK: [[THEN]]
|
||||
// CHECK-NEXT: invoke void [[FOO]]()
|
||||
// CHECK: call void @__kmpc_end_master([[IDENT_T_TY]]* [[DEFAULT_LOC]], i32 [[GTID]])
|
||||
// CHECK-NEXT: invoke {{.*}}void [[FOO]]()
|
||||
// CHECK: call {{.*}}void @__kmpc_end_master([[IDENT_T_TY]]* [[DEFAULT_LOC]], i32 [[GTID]])
|
||||
// CHECK-NEXT: br label {{%?}}[[EXIT]]
|
||||
// CHECK: [[EXIT]]
|
||||
#pragma omp master
|
||||
|
|
|
@ -34,14 +34,14 @@ int main (int argc, char **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: [[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: [[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: [[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: }
|
||||
// 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: }
|
||||
|
||||
// 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: [[CONTEXT_ADDR:%.+]] = alloca %struct.anon*
|
||||
// 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_REF:%.+]] = load i32*, i32** [[ARGC_PTR_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: ret void
|
||||
// CHECK: call void @{{.+terminate.*|abort}}(
|
||||
// CHECK: call {{.*}}void @{{.+terminate.*|abort}}(
|
||||
// CHECK-NEXT: unreachable
|
||||
// CHECK-NEXT: }
|
||||
// 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: }
|
||||
|
||||
// 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: define linkonce_odr {{.*}}void [[FOO]]({{i32[ ]?[a-z]*}} %argc)
|
||||
// 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: 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: [[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: [[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: }
|
||||
// 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: }
|
||||
|
||||
// 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: store %struct.anon.0* %__context, %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_REF:%.+]] = load i8***, i8**** [[ARGC_PTR_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: ret void
|
||||
// CHECK: call void @{{.+terminate.*|abort}}(
|
||||
// CHECK: call {{.*}}void @{{.+terminate.*|abort}}(
|
||||
// CHECK-NEXT: unreachable
|
||||
// CHECK-NEXT: }
|
||||
// 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: }
|
||||
|
||||
// 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: attributes #[[FN_ATTRS]] = {{.+}} nounwind
|
||||
|
|
|
@ -58,16 +58,16 @@ int main() {
|
|||
#ifdef LAMBDA
|
||||
// LAMBDA: [[G:@.+]] = global i{{[0-9]+}} 1212,
|
||||
// LAMBDA-LABEL: @main
|
||||
// LAMBDA: call{{( x86_thiscallcc)?}} void [[OUTER_LAMBDA:@.+]](
|
||||
// LAMBDA: call{{.*}} 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)
|
||||
{
|
||||
// LAMBDA: define{{.*}} internal{{.*}} void [[OMP_REGION]](i32* %{{.+}}, i32* %{{.+}}, %{{.+}}* [[ARG:%.+]])
|
||||
|
||||
// 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: icmp ne i{{[0-9]+}} ptrtoint (i{{[0-9]+}}* [[G]] to i{{[0-9]+}}), %{{.+}}
|
||||
// LAMBDA: br i1 %{{.+}}, label %[[NOT_MASTER:.+]], label %[[DONE:.+]]
|
||||
|
@ -76,9 +76,9 @@ int main() {
|
|||
// LAMBDA: store volatile i{{[0-9]+}} %{{.+}}, i{{[0-9]+}}* %{{.+}},
|
||||
// LAMBDA: [[DONE]]
|
||||
|
||||
// LAMBDA: call i32 @__kmpc_cancel_barrier(
|
||||
// LAMBDA: call {{.*}}i32 @__kmpc_cancel_barrier(
|
||||
g = 1;
|
||||
// LAMBDA: call{{( x86_thiscallcc)?}} void [[INNER_LAMBDA:@.+]](%{{.+}}*
|
||||
// LAMBDA: call{{.*}} void [[INNER_LAMBDA:@.+]](%{{.+}}*
|
||||
[&]() {
|
||||
// LAMBDA: define {{.+}} void [[INNER_LAMBDA]](%{{.+}}* [[ARG_PTR:%.+]])
|
||||
// LAMBDA: store %{{.+}}* [[ARG_PTR]], %{{.+}}** [[ARG_PTR_REF:%.+]],
|
||||
|
@ -91,16 +91,16 @@ int main() {
|
|||
#elif defined(BLOCKS)
|
||||
// BLOCKS: [[G:@.+]] = global i{{[0-9]+}} 1212,
|
||||
// BLOCKS-LABEL: @main
|
||||
// BLOCKS: call void {{%.+}}(i8
|
||||
// BLOCKS: call {{.*}}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)
|
||||
{
|
||||
// BLOCKS: define{{.*}} internal{{.*}} void [[OMP_REGION]](i32* %{{.+}}, i32* %{{.+}}, %{{.+}}* [[ARG:%.+]])
|
||||
|
||||
// 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: icmp ne i{{[0-9]+}} ptrtoint (i{{[0-9]+}}* [[G]] to i{{[0-9]+}}), %{{.+}}
|
||||
// BLOCKS: br i1 %{{.+}}, label %[[NOT_MASTER:.+]], label %[[DONE:.+]]
|
||||
|
@ -109,16 +109,16 @@ int main() {
|
|||
// BLOCKS: store volatile i{{[0-9]+}} %{{.+}}, i{{[0-9]+}}* %{{.+}},
|
||||
// BLOCKS: [[DONE]]
|
||||
|
||||
// BLOCKS: call i32 @__kmpc_cancel_barrier(
|
||||
// BLOCKS: call {{.*}}i32 @__kmpc_cancel_barrier(
|
||||
g = 1;
|
||||
// BLOCKS: store volatile i{{[0-9]+}} 1, i{{[0-9]+}}*
|
||||
// BLOCKS-NOT: [[G]]{{[[^:word:]]}}
|
||||
// BLOCKS: call void {{%.+}}(i8
|
||||
// BLOCKS: call {{.*}}void {{%.+}}(i8
|
||||
^{
|
||||
// BLOCKS: define {{.+}} void {{@.+}}(i8*
|
||||
g = 2;
|
||||
// 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-NOT: [[G]]{{[[^:word:]]}}
|
||||
// BLOCKS: ret
|
||||
|
@ -148,19 +148,19 @@ int main() {
|
|||
// CHECK-LABEL: @main
|
||||
// CHECK: [[TEST:%.+]] = alloca [[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_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_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 {{.*}}i{{.+}} [[TMAIN_INT:@.+]]()
|
||||
// CHECK: call {{.*}} [[S_FLOAT_TY_DESTR:@.+]]([[S_FLOAT_TY]]*
|
||||
// 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: [[GTID_ADDR:%.+]] = load i32*, i32** [[GTID_ADDR_ADDR]],
|
||||
// CHECK: [[GTID:%.+]] = load i32, i32* [[GTID_ADDR]],
|
||||
|
||||
// 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: icmp ne i{{[0-9]+}} ptrtoint (i{{[0-9]+}}* [[T_VAR]] to i{{[0-9]+}}), %{{.+}}
|
||||
// CHECK: br i1 %{{.+}}, label %[[NOT_MASTER:.+]], label %[[DONE:.+]]
|
||||
|
@ -169,11 +169,11 @@ int main() {
|
|||
// CHECK: store i{{[0-9]+}} %{{.+}}, i{{[0-9]+}}* %{{.+}},
|
||||
|
||||
// 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*),
|
||||
|
||||
// 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_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]]
|
||||
|
@ -183,20 +183,20 @@ int main() {
|
|||
// CHECK: br i1 {{.+}}, label %{{.+}}, label %[[S_ARR_BODY]]
|
||||
|
||||
// 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: [[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: 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: [[GTID_ADDR:%.+]] = load i32*, i32** [[GTID_ADDR_ADDR]],
|
||||
// CHECK: [[GTID:%.+]] = load i32, i32* [[GTID_ADDR]],
|
||||
|
||||
// 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: icmp ne i{{[0-9]+}} ptrtoint (i{{[0-9]+}}* [[T_VAR]] to i{{[0-9]+}}), %{{.+}}
|
||||
// CHECK: br i1 %{{.+}}, label %[[NOT_MASTER:.+]], label %[[DONE:.+]]
|
||||
|
@ -205,24 +205,24 @@ int main() {
|
|||
// CHECK: store i{{[0-9]+}} %{{.+}}, i{{[0-9]+}}* %{{.+}},
|
||||
// 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: define {{.*}} i{{[0-9]+}} [[TMAIN_INT]]()
|
||||
// CHECK: [[TEST:%.+]] = alloca [[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_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_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 {{.*}} [[S_INT_TY_DESTR:@.+]]([[S_INT_TY]]*
|
||||
// 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: [[GTID_ADDR:%.+]] = load i32*, i32** [[GTID_ADDR_ADDR]],
|
||||
// CHECK: [[GTID:%.+]] = load i32, i32* [[GTID_ADDR]],
|
||||
|
||||
// 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: icmp ne i{{[0-9]+}} ptrtoint (i{{[0-9]+}}* [[TMAIN_T_VAR]] to i{{[0-9]+}}), %{{.+}}
|
||||
// CHECK: br i1 %{{.+}}, label %[[NOT_MASTER:.+]], label %[[DONE:.+]]
|
||||
|
@ -231,11 +231,11 @@ int main() {
|
|||
// CHECK: store i{{[0-9]+}} %{{.+}}, i{{[0-9]+}}* %{{.+}},
|
||||
|
||||
// threadprivate_vec = 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 {{.*}}i8* @__kmpc_threadprivate_cached({{.+}} [[TMAIN_VEC]]
|
||||
// CHECK: call {{.*}}void @llvm.memcpy{{.*}}(i8* %{{.+}}, i8* bitcast ([2 x i{{[0-9]+}}]* [[TMAIN_VEC]] to i8*),
|
||||
|
||||
// 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_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]]
|
||||
|
@ -245,20 +245,20 @@ int main() {
|
|||
// CHECK: br i1 {{.+}}, label %{{.+}}, label %[[S_ARR_BODY]]
|
||||
|
||||
// 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: [[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: 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: [[GTID_ADDR:%.+]] = load i32*, i32** [[GTID_ADDR_ADDR]],
|
||||
// CHECK: [[GTID:%.+]] = load i32, i32* [[GTID_ADDR]],
|
||||
|
||||
// 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: icmp ne i{{[0-9]+}} ptrtoint (i{{[0-9]+}}* [[TMAIN_T_VAR]] to i{{[0-9]+}}), %{{.+}}
|
||||
// CHECK: br i1 %{{.+}}, label %[[NOT_MASTER:.+]], label %[[DONE:.+]]
|
||||
|
@ -267,7 +267,7 @@ int main() {
|
|||
// CHECK: store i{{[0-9]+}} %{{.+}}, i{{[0-9]+}}* %{{.+}},
|
||||
// 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
|
||||
|
||||
#endif
|
||||
|
|
|
@ -56,13 +56,13 @@ int main() {
|
|||
#ifdef LAMBDA
|
||||
// LAMBDA: [[G:@.+]] = global i{{[0-9]+}} 1212,
|
||||
// LAMBDA-LABEL: @main
|
||||
// LAMBDA: call{{( x86_thiscallcc)?}} void [[OUTER_LAMBDA:@.+]](
|
||||
// LAMBDA: call{{.*}} 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: store i{{[0-9]+}}* [[G]], i{{[0-9]+}}** [[G_LOCAL_REF]]
|
||||
// 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)
|
||||
{
|
||||
// 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_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: call i32 @__kmpc_cancel_barrier(
|
||||
// LAMBDA: call {{.*}}i32 @__kmpc_cancel_barrier(
|
||||
g = 1;
|
||||
// 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: 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: store %{{.+}}* [[ARG_PTR]], %{{.+}}** [[ARG_PTR_REF:%.+]],
|
||||
|
@ -94,13 +94,13 @@ int main() {
|
|||
#elif defined(BLOCKS)
|
||||
// BLOCKS: [[G:@.+]] = global i{{[0-9]+}} 1212,
|
||||
// BLOCKS-LABEL: @main
|
||||
// BLOCKS: call void {{%.+}}(i8
|
||||
// BLOCKS: call {{.*}}void {{%.+}}(i8
|
||||
^{
|
||||
// BLOCKS: define{{.*}} internal{{.*}} void {{.+}}(i8*
|
||||
// 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: [[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)
|
||||
{
|
||||
// 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_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: call i32 @__kmpc_cancel_barrier(
|
||||
// BLOCKS: call {{.*}}i32 @__kmpc_cancel_barrier(
|
||||
g = 1;
|
||||
// BLOCKS: store volatile i{{[0-9]+}} 1, i{{[0-9]+}}* [[G_PRIVATE_ADDR]],
|
||||
// BLOCKS-NOT: [[G]]{{[[^:word:]]}}
|
||||
// BLOCKS: i{{[0-9]+}}* [[G_PRIVATE_ADDR]]
|
||||
// BLOCKS-NOT: [[G]]{{[[^:word:]]}}
|
||||
// BLOCKS: call void {{%.+}}(i8
|
||||
// BLOCKS: call {{.*}}void {{%.+}}(i8
|
||||
^{
|
||||
// BLOCKS: define {{.+}} void {{@.+}}(i8*
|
||||
g = 2;
|
||||
|
@ -150,12 +150,12 @@ int main() {
|
|||
// CHECK: [[TEST:%.+]] = alloca [[S_FLOAT_TY]],
|
||||
// CHECK: call {{.*}} [[S_FLOAT_TY_DEF_CONSTR:@.+]]([[S_FLOAT_TY]]* [[TEST]])
|
||||
// CHECK: %{{.+}} = bitcast [[CAP_MAIN_TY]]*
|
||||
// CHECK: call void (%{{.+}}*, i{{[0-9]+}}, void (i{{[0-9]+}}*, i{{[0-9]+}}*, ...)*, ...) @__kmpc_fork_call(%{{.+}}* @{{.+}}, i{{[0-9]+}} 1, void (i{{[0-9]+}}*, i{{[0-9]+}}*, ...)* bitcast (void (i{{[0-9]+}}*, i{{[0-9]+}}*, [[CAP_MAIN_TY]]*)* [[MAIN_MICROTASK:@.+]] to void
|
||||
// CHECK: call {{.*}}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 {{.*}} [[S_FLOAT_TY_DESTR:@.+]]([[S_FLOAT_TY]]*
|
||||
// CHECK: ret
|
||||
//
|
||||
// CHECK: define internal void [[MAIN_MICROTASK]](i{{[0-9]+}}* [[GTID_ADDR:%.+]], i{{[0-9]+}}* %{{.+}}, [[CAP_MAIN_TY]]* %{{.+}})
|
||||
// CHECK: 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: [[VEC_PRIV:%.+]] = alloca [2 x i{{[0-9]+}}],
|
||||
// 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: [[GTID_REF:%.+]] = load i{{[0-9]+}}*, i{{[0-9]+}}** [[GTID_ADDR_ADDR]]
|
||||
// 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]]*
|
||||
// CHECK: ret void
|
||||
|
@ -197,11 +197,11 @@ int main() {
|
|||
// CHECK: define {{.*}} i{{[0-9]+}} [[TMAIN_INT]]()
|
||||
// CHECK: [[TEST:%.+]] = alloca [[S_INT_TY]],
|
||||
// CHECK: call {{.*}} [[S_INT_TY_DEF_CONSTR:@.+]]([[S_INT_TY]]* [[TEST]])
|
||||
// CHECK: call void (%{{.+}}*, i{{[0-9]+}}, void (i{{[0-9]+}}*, i{{[0-9]+}}*, ...)*, ...) @__kmpc_fork_call(%{{.+}}* @{{.+}}, i{{[0-9]+}} 1, void (i{{[0-9]+}}*, i{{[0-9]+}}*, ...)* bitcast (void (i{{[0-9]+}}*, i{{[0-9]+}}*, [[CAP_TMAIN_TY]]*)* [[TMAIN_MICROTASK:@.+]] to void
|
||||
// CHECK: call {{.*}}void (%{{.+}}*, 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: 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: [[VEC_PRIV:%.+]] = alloca [2 x i{{[0-9]+}}],
|
||||
// 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: [[GTID_REF:%.+]] = load i{{[0-9]+}}*, i{{[0-9]+}}** [[GTID_ADDR_ADDR]]
|
||||
// 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]]*
|
||||
// CHECK: ret void
|
||||
|
|
|
@ -14,27 +14,27 @@ void fn6();
|
|||
|
||||
int Arg;
|
||||
|
||||
// CHECK-LABEL: define void @{{.+}}gtid_test
|
||||
// CHECK-LABEL: define {{.*}}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 if (false)
|
||||
gtid_test();
|
||||
// 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: [[GTID_ADDR:%.+]] = load i{{[0-9]+}}*, i{{[0-9]+}}** [[GTID_ADDR_REF]]
|
||||
// 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: 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: define internal void [[GTID_TEST_REGION2]](
|
||||
// CHECK: call void @{{.+}}gtid_test
|
||||
// CHECK: define internal {{.*}}void [[GTID_TEST_REGION2]](
|
||||
// CHECK: call {{.*}}void @{{.+}}gtid_test
|
||||
// CHECK: ret void
|
||||
|
||||
template <typename T>
|
||||
|
@ -50,26 +50,26 @@ int tmain(T Arg) {
|
|||
|
||||
// CHECK-LABEL: define {{.*}}i{{[0-9]+}} @main()
|
||||
int main() {
|
||||
// CHECK: [[GTID:%.+]] = call i32 @__kmpc_global_thread_num(
|
||||
// CHECK: call void {{.+}} @__kmpc_fork_call(%{{.+}}* @{{.+}}, i{{.+}} 1, void {{.+}}* [[CAP_FN4:@.+]] to void
|
||||
// CHECK: [[GTID:%.+]] = call {{.*}}i32 @__kmpc_global_thread_num(
|
||||
// CHECK: call {{.*}}void {{.+}} @__kmpc_fork_call(%{{.+}}* @{{.+}}, i{{.+}} 1, void {{.+}}* [[CAP_FN4:@.+]] to void
|
||||
#pragma omp parallel if (true)
|
||||
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: 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)
|
||||
fn5();
|
||||
|
||||
// CHECK: br i1 %{{.+}}, label %[[OMP_THEN:.+]], label %[[OMP_ELSE:.+]]
|
||||
// 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: [[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: 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: [[OMP_END]]
|
||||
#pragma omp parallel if (Arg)
|
||||
|
@ -78,47 +78,47 @@ int main() {
|
|||
return tmain(Arg);
|
||||
}
|
||||
|
||||
// CHECK: define internal void [[CAP_FN4]]
|
||||
// CHECK: call void @{{.+}}fn4
|
||||
// CHECK: define internal {{.*}}void [[CAP_FN4]]
|
||||
// CHECK: call {{.*}}void @{{.+}}fn4
|
||||
// CHECK: ret void
|
||||
|
||||
// CHECK: define internal void [[CAP_FN5]]
|
||||
// CHECK: call void @{{.+}}fn5
|
||||
// CHECK: define internal {{.*}}void [[CAP_FN5]]
|
||||
// CHECK: call {{.*}}void @{{.+}}fn5
|
||||
// CHECK: ret void
|
||||
|
||||
// CHECK: define internal void [[CAP_FN6]]
|
||||
// CHECK: call void @{{.+}}fn6
|
||||
// CHECK: define internal {{.*}}void [[CAP_FN6]]
|
||||
// CHECK: call {{.*}}void @{{.+}}fn6
|
||||
// CHECK: ret void
|
||||
|
||||
// CHECK-LABEL: define {{.+}} @{{.+}}tmain
|
||||
// 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_serialized_parallel(%{{.+}}* @{{.+}}, i32 [[GTID]])
|
||||
// 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_serialized_parallel(%{{.+}}* @{{.+}}, i32 [[GTID]])
|
||||
// CHECK: store i32 [[GTID]], 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: [[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: [[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: 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: [[OMP_END]]
|
||||
|
||||
// CHECK: define internal void [[CAP_FN1]]
|
||||
// CHECK: call void @{{.+}}fn1
|
||||
// CHECK: define internal {{.*}}void [[CAP_FN1]]
|
||||
// CHECK: call {{.*}}void @{{.+}}fn1
|
||||
// CHECK: ret void
|
||||
|
||||
// CHECK: define internal void [[CAP_FN2]]
|
||||
// CHECK: call void @{{.+}}fn2
|
||||
// CHECK: define internal {{.*}}void [[CAP_FN2]]
|
||||
// CHECK: call {{.*}}void @{{.+}}fn2
|
||||
// CHECK: ret void
|
||||
|
||||
// CHECK: define internal void [[CAP_FN3]]
|
||||
// CHECK: call void @{{.+}}fn3
|
||||
// CHECK: define internal {{.*}}void [[CAP_FN3]]
|
||||
// CHECK: call {{.*}}void @{{.+}}fn3
|
||||
// CHECK: ret void
|
||||
|
||||
#endif
|
||||
|
|
|
@ -43,16 +43,16 @@ int main() {
|
|||
// CHECK-LABEL: define {{.*}}i{{[0-9]+}} @main()
|
||||
// CHECK-DAG: [[S_ADDR:%.+]] = alloca [[S_TY]]
|
||||
// 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: [[S_CHAR_OP:%.+]] = invoke{{.*}} i8 [[S_TY_CHAR_OP:@.+]]([[S_TY]]* [[S_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_fork_call(
|
||||
// CHECK: call {{.*}}void @__kmpc_push_num_threads([[IDENT_T_TY]]* [[DEF_LOC_2]], i32 [[GTID]], i32 2)
|
||||
// CHECK: call {{.*}}void {{.*}} @__kmpc_fork_call(
|
||||
// CHECK: [[A_VAL:%.+]] = load i8, i8* [[A_ADDR]]
|
||||
// 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_fork_call(
|
||||
// CHECK: call {{.*}}void @__kmpc_push_num_threads([[IDENT_T_TY]]* [[DEF_LOC_2]], i32 [[GTID]], i32 [[RES]])
|
||||
// CHECK: call {{.*}}void {{.*}} @__kmpc_fork_call(
|
||||
// CHECK: invoke{{.*}} [[INT_TY:i[0-9]+]] [[TMAIN_CHAR_5:@.+]]()
|
||||
// CHECK: invoke{{.*}} [[INT_TY]] [[TMAIN_S_1:@.+]]()
|
||||
// CHECK: call {{.*}} [[S_TY_DESTR:@.+]]([[S_TY]]* [[S_ADDR]])
|
||||
|
@ -60,24 +60,24 @@ int main() {
|
|||
// CHECK: }
|
||||
|
||||
// CHECK: define{{.*}} [[INT_TY]] [[TMAIN_CHAR_5]]()
|
||||
// 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_fork_call(
|
||||
// CHECK: call void @__kmpc_push_num_threads([[IDENT_T_TY]]* [[DEF_LOC_2]], i32 [[GTID]], i32 23)
|
||||
// CHECK: call void {{.*}} @__kmpc_fork_call(
|
||||
// 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_fork_call(
|
||||
// CHECK: call {{.*}}void @__kmpc_push_num_threads([[IDENT_T_TY]]* [[DEF_LOC_2]], i32 [[GTID]], i32 23)
|
||||
// CHECK: call {{.*}}void {{.*}} @__kmpc_fork_call(
|
||||
// CHECK: ret [[INT_TY]] 0
|
||||
// CHECK-NEXT: }
|
||||
|
||||
// CHECK: define{{.*}} [[INT_TY]] [[TMAIN_S_1]]()
|
||||
// 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_fork_call(
|
||||
// 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_fork_call(
|
||||
// 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: [[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 void {{.*}} @__kmpc_fork_call(
|
||||
// CHECK: call {{.*}}void {{.*}} @__kmpc_fork_call(
|
||||
// CHECK: ret [[INT_TY]] 0
|
||||
// CHECK: }
|
||||
|
||||
|
|
|
@ -41,12 +41,12 @@ int main() {
|
|||
#ifdef LAMBDA
|
||||
// LAMBDA: [[G:@.+]] = global i{{[0-9]+}} 1212,
|
||||
// LAMBDA-LABEL: @main
|
||||
// LAMBDA: call{{( x86_thiscallcc)?}} void [[OUTER_LAMBDA:@.+]](
|
||||
// LAMBDA: call{{.*}} void [[OUTER_LAMBDA:@.+]](
|
||||
[&]() {
|
||||
// LAMBDA: define{{.*}} internal{{.*}} void [[OUTER_LAMBDA]](
|
||||
// LAMBDA-NOT: = getelementptr inbounds %{{.+}},
|
||||
// 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)
|
||||
{
|
||||
// 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: [[G_PRIVATE_ADDR_REF:%.+]] = getelementptr inbounds %{{.+}}, %{{.+}}* [[ARG:%.+]], i{{[0-9]+}} 0, i{{[0-9]+}} 0
|
||||
// LAMBDA: store i{{[0-9]+}}* [[G_PRIVATE_ADDR]], i{{[0-9]+}}** [[G_PRIVATE_ADDR_REF]]
|
||||
// LAMBDA: call{{( x86_thiscallcc)?}} void [[INNER_LAMBDA:@.+]](%{{.+}}* [[ARG]])
|
||||
// LAMBDA: call{{.*}} void [[INNER_LAMBDA:@.+]](%{{.+}}* [[ARG]])
|
||||
[&]() {
|
||||
// LAMBDA: define {{.+}} void [[INNER_LAMBDA]](%{{.+}}* [[ARG_PTR:%.+]])
|
||||
// LAMBDA: store %{{.+}}* [[ARG_PTR]], %{{.+}}** [[ARG_PTR_REF:%.+]],
|
||||
|
@ -72,12 +72,12 @@ int main() {
|
|||
#elif defined(BLOCKS)
|
||||
// BLOCKS: [[G:@.+]] = global i{{[0-9]+}} 1212,
|
||||
// BLOCKS-LABEL: @main
|
||||
// BLOCKS: call void {{%.+}}(i8
|
||||
// BLOCKS: call{{.*}} void {{%.+}}(i8
|
||||
^{
|
||||
// BLOCKS: define{{.*}} internal{{.*}} void {{.+}}(i8*
|
||||
// BLOCKS-NOT: = getelementptr inbounds %{{.+}},
|
||||
// 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)
|
||||
{
|
||||
// BLOCKS: define{{.*}} internal{{.*}} void [[OMP_REGION]](i32* %{{.+}}, i32* %{{.+}}, %{{.+}}* [[ARG:%.+]])
|
||||
|
@ -88,7 +88,7 @@ int main() {
|
|||
// BLOCKS-NOT: [[G]]{{[[^:word:]]}}
|
||||
// BLOCKS: i{{[0-9]+}}* [[G_PRIVATE_ADDR]]
|
||||
// BLOCKS-NOT: [[G]]{{[[^:word:]]}}
|
||||
// BLOCKS: call void {{%.+}}(i8
|
||||
// BLOCKS: call{{.*}} void {{%.+}}(i8
|
||||
^{
|
||||
// BLOCKS: define {{.+}} void {{@.+}}(i8*
|
||||
g = 2;
|
||||
|
|
|
@ -36,16 +36,16 @@ int main() {
|
|||
}
|
||||
|
||||
// CHECK-LABEL: @main
|
||||
// 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 (%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 (%ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(
|
||||
// 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 (%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 (%ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(
|
||||
|
||||
// CHECK-LABEL: @{{.+}}tmain
|
||||
// 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 (%ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(
|
||||
// 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 (%ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(
|
||||
// CHECK: ret i32 0
|
||||
// CHECK-NEXT: }
|
||||
|
||||
|
|
|
@ -43,10 +43,10 @@ int main() {
|
|||
#ifdef LAMBDA
|
||||
// LAMBDA: [[G:@.+]] = global double
|
||||
// LAMBDA-LABEL: @main
|
||||
// LAMBDA: call{{( x86_thiscallcc)?}} void [[OUTER_LAMBDA:@.+]](
|
||||
// LAMBDA: call{{.*}} 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 sections private(g)
|
||||
{
|
||||
|
@ -54,12 +54,12 @@ int main() {
|
|||
// LAMBDA: [[G_PRIVATE_ADDR:%.+]] = alloca double,
|
||||
// LAMBDA: store %{{.+}}* [[ARG]], %{{.+}}** [[ARG_REF:%.+]],
|
||||
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: [[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: call{{( x86_thiscallcc)?}} void [[INNER_LAMBDA:@.+]](%{{.+}}* [[ARG]])
|
||||
// LAMBDA: call void @__kmpc_for_static_fini(
|
||||
// LAMBDA: call{{.*}} void [[INNER_LAMBDA:@.+]](%{{.+}}* [[ARG]])
|
||||
// LAMBDA: call {{.*}}void @__kmpc_for_static_fini(
|
||||
#pragma omp section
|
||||
[&]() {
|
||||
// LAMBDA: define {{.+}} void [[INNER_LAMBDA]](%{{.+}}* [[ARG_PTR:%.+]])
|
||||
|
@ -76,10 +76,10 @@ int main() {
|
|||
#elif defined(BLOCKS)
|
||||
// BLOCKS: [[G:@.+]] = global double
|
||||
// BLOCKS-LABEL: @main
|
||||
// BLOCKS: call void {{%.+}}(i8
|
||||
// BLOCKS: call {{.*}}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 sections private(g)
|
||||
{
|
||||
|
@ -87,13 +87,13 @@ int main() {
|
|||
// BLOCKS: [[G_PRIVATE_ADDR:%.+]] = alloca double,
|
||||
// BLOCKS: store %{{.+}}* [[ARG]], %{{.+}}** [[ARG_REF:%.+]],
|
||||
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-NOT: [[G]]{{[[^:word:]]}}
|
||||
// BLOCKS: double* [[G_PRIVATE_ADDR]]
|
||||
// BLOCKS-NOT: [[G]]{{[[^:word:]]}}
|
||||
// BLOCKS: call void {{%.+}}(i8
|
||||
// BLOCKS: call void @__kmpc_for_static_fini(
|
||||
// BLOCKS: call {{.*}}void {{%.+}}(i8
|
||||
// BLOCKS: call {{.*}}void @__kmpc_for_static_fini(
|
||||
#pragma omp section
|
||||
^{
|
||||
// BLOCKS: define {{.+}} void {{@.+}}(i8*
|
||||
|
|
|
@ -42,10 +42,10 @@ int main() {
|
|||
#ifdef LAMBDA
|
||||
// LAMBDA: [[G:@.+]] = global double
|
||||
// LAMBDA-LABEL: @main
|
||||
// LAMBDA: call{{( x86_thiscallcc)?}} void [[OUTER_LAMBDA:@.+]](
|
||||
// LAMBDA: call{{.*}} 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 single private(g)
|
||||
{
|
||||
|
@ -53,12 +53,12 @@ int main() {
|
|||
// LAMBDA: [[G_PRIVATE_ADDR:%.+]] = alloca double,
|
||||
// LAMBDA: store %{{.+}}* [[ARG]], %{{.+}}** [[ARG_REF:%.+]],
|
||||
g = 1;
|
||||
// LAMBDA: call i32 @__kmpc_single(
|
||||
// LAMBDA: call {{.*}}i32 @__kmpc_single(
|
||||
// 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: store double* [[G_PRIVATE_ADDR]], double** [[G_PRIVATE_ADDR_REF]]
|
||||
// LAMBDA: call{{( x86_thiscallcc)?}} void [[INNER_LAMBDA:@.+]](%{{.+}}* [[ARG]])
|
||||
// LAMBDA: call void @__kmpc_end_single(
|
||||
// LAMBDA: call{{.*}} void [[INNER_LAMBDA:@.+]](%{{.+}}* [[ARG]])
|
||||
// LAMBDA: call {{.*}}void @__kmpc_end_single(
|
||||
[&]() {
|
||||
// LAMBDA: define {{.+}} void [[INNER_LAMBDA]](%{{.+}}* [[ARG_PTR:%.+]])
|
||||
// LAMBDA: store %{{.+}}* [[ARG_PTR]], %{{.+}}** [[ARG_PTR_REF:%.+]],
|
||||
|
@ -74,10 +74,10 @@ int main() {
|
|||
#elif defined(BLOCKS)
|
||||
// BLOCKS: [[G:@.+]] = global double
|
||||
// BLOCKS-LABEL: @main
|
||||
// BLOCKS: call void {{%.+}}(i8
|
||||
// BLOCKS: call {{.*}}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 single private(g)
|
||||
{
|
||||
|
@ -85,13 +85,13 @@ int main() {
|
|||
// BLOCKS: [[G_PRIVATE_ADDR:%.+]] = alloca double,
|
||||
// BLOCKS: store %{{.+}}* [[ARG]], %{{.+}}** [[ARG_REF:%.+]],
|
||||
g = 1;
|
||||
// BLOCKS: call i32 @__kmpc_single(
|
||||
// BLOCKS: call {{.*}}i32 @__kmpc_single(
|
||||
// BLOCKS: store volatile double 1.0{{.+}}, double* [[G_PRIVATE_ADDR]],
|
||||
// BLOCKS-NOT: [[G]]{{[[^:word:]]}}
|
||||
// BLOCKS: double* [[G_PRIVATE_ADDR]]
|
||||
// BLOCKS-NOT: [[G]]{{[[^:word:]]}}
|
||||
// BLOCKS: call void {{%.+}}(i8
|
||||
// BLOCKS: call void @__kmpc_end_single(
|
||||
// BLOCKS: call {{.*}}void {{%.+}}(i8
|
||||
// BLOCKS: call {{.*}}void @__kmpc_end_single(
|
||||
^{
|
||||
// BLOCKS: define {{.+}} void {{@.+}}(i8*
|
||||
g = 2;
|
||||
|
|
|
@ -9,7 +9,7 @@
|
|||
|
||||
// CHECK: [[IDENT_T_TY:%.+]] = type { i32, i32, i32, i32, i8* }
|
||||
|
||||
// CHECK: define void [[FOO:@.+]]()
|
||||
// CHECK: define {{.*}}void [[FOO:@.+]]()
|
||||
|
||||
void foo() {}
|
||||
|
||||
|
@ -19,19 +19,19 @@ int main() {
|
|||
// CHECK: [[A_ADDR:%.+]] = alloca i8
|
||||
char a;
|
||||
|
||||
// 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: [[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-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
|
||||
a = 2;
|
||||
// CHECK: call void @__kmpc_taskgroup([[IDENT_T_TY]]* [[DEFAULT_LOC]], i32 [[GTID]])
|
||||
// CHECK-NEXT: invoke void [[FOO]]()
|
||||
// CHECK: call void @__kmpc_end_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: call {{.*}}void @__kmpc_end_taskgroup([[IDENT_T_TY]]* [[DEFAULT_LOC]], i32 [[GTID]])
|
||||
#pragma omp taskgroup
|
||||
foo();
|
||||
// CHECK-NOT: call void @__kmpc_taskgroup
|
||||
// CHECK-NOT: call void @__kmpc_end_taskgroup
|
||||
// CHECK-NOT: call {{.*}}void @__kmpc_taskgroup
|
||||
// CHECK-NOT: call {{.*}}void @__kmpc_end_taskgroup
|
||||
return a;
|
||||
}
|
||||
|
||||
|
|
|
@ -17,11 +17,11 @@ struct A {
|
|||
|
||||
template<typename T> void f(T) {}
|
||||
|
||||
// CHECK-LABEL: define void @_Z1g1A(
|
||||
// CHECK-LABEL: define {{.*}}void @_Z1g1A(
|
||||
void g(A a) {
|
||||
// CHECK: call void @_Z1fIN1AUt0_EEvT_(
|
||||
// CHECK: call {{.*}}void @_Z1fIN1AUt0_EEvT_(
|
||||
f(a.b);
|
||||
// CHECK: call void @_Z1fIN1AUt_EEvT_(
|
||||
// CHECK: call {{.*}}void @_Z1fIN1AUt_EEvT_(
|
||||
f(a.a);
|
||||
}
|
||||
|
||||
|
|
|
@ -14,7 +14,7 @@
|
|||
// CHECK-PRINT: oldObject = dictionary[key];
|
||||
// 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}}
|
||||
|
|
|
@ -39,7 +39,7 @@ typedef unsigned char BOOL;
|
|||
+ (id)dictionaryWithObjects:(const id [])objects forKeys:(const id [])keys count:(unsigned long)cnt;
|
||||
@end
|
||||
|
||||
// CHECK-IR: define internal void @test_numeric_literals()
|
||||
// CHECK-IR: define internal {{.*}}void @test_numeric_literals()
|
||||
static inline void test_numeric_literals() {
|
||||
// CHECK-PRINT: id intlit = @17
|
||||
// CHECK-IR: {{call.*17}}
|
||||
|
|
|
@ -50,7 +50,7 @@ pair<T, U> make_pair(const T& first, const U& 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>
|
||||
void variadic_dictionary_expansion(pair<Ts, Us>... key_values) {
|
||||
// CHECK-PRINT: id dict = @{ key_values.first : key_values.second... };
|
||||
|
|
|
@ -13,14 +13,14 @@
|
|||
// 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
|
||||
|
||||
// PGOGEN-LABEL: define void @_Z7lambdasv()
|
||||
// PGOUSE-LABEL: define void @_Z7lambdasv()
|
||||
// PGOGEN-LABEL: define {{.*}}void @_Z7lambdasv()
|
||||
// PGOUSE-LABEL: define {{.*}}void @_Z7lambdasv()
|
||||
// PGOGEN: store {{.*}} @[[LWC]], i64 0, i64 0
|
||||
void lambdas() {
|
||||
int i = 1;
|
||||
|
||||
// LMBGEN-LABEL: define internal{{( x86_thiscallcc)?( zeroext)?}} i1 @"_ZZ7lambdasvENK3$_0clEi"(
|
||||
// LMBUSE-LABEL: define internal{{( x86_thiscallcc)?( zeroext)?}} i1 @"_ZZ7lambdasvENK3$_0clEi"(
|
||||
// LMBGEN-LABEL: define internal{{( [a-z\_\b]*)?( zeroext)?}} i1 @"_ZZ7lambdasvENK3$_0clEi"(
|
||||
// LMBUSE-LABEL: define internal{{( [a-z\_\b]*)?( zeroext)?}} i1 @"_ZZ7lambdasvENK3$_0clEi"(
|
||||
// LMBGEN: store {{.*}} @[[LFC]], i64 0, i64 0
|
||||
auto f = [&i](int k) {
|
||||
// LMBGEN: store {{.*}} @[[LFC]], i64 0, i64 1
|
||||
|
|
|
@ -9,7 +9,7 @@
|
|||
|
||||
// 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
|
||||
void range_for() {
|
||||
int arr[] = {1, 2, 3, 4, 5};
|
||||
|
|
|
@ -13,10 +13,10 @@
|
|||
// 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
|
||||
|
||||
// T0GEN-LABEL: define linkonce_odr void @_Z4loopILj0EEvv()
|
||||
// T0USE-LABEL: define linkonce_odr void @_Z4loopILj0EEvv()
|
||||
// T100GEN-LABEL: define linkonce_odr void @_Z4loopILj100EEvv()
|
||||
// T100USE-LABEL: define linkonce_odr void @_Z4loopILj100EEvv()
|
||||
// T0GEN-LABEL: define linkonce_odr {{.*}}void @_Z4loopILj0EEvv()
|
||||
// T0USE-LABEL: define linkonce_odr {{.*}}void @_Z4loopILj0EEvv()
|
||||
// T100GEN-LABEL: define linkonce_odr {{.*}}void @_Z4loopILj100EEvv()
|
||||
// T100USE-LABEL: define linkonce_odr {{.*}}void @_Z4loopILj100EEvv()
|
||||
template <unsigned N> void loop() {
|
||||
// ALL-NOT: ret
|
||||
// T0GEN: store {{.*}} @[[T0C]], i64 0, i64 0
|
||||
|
|
|
@ -19,10 +19,10 @@ __attribute((malloc)) int (*g)(); // expected-warning{{attribute only applies to
|
|||
|
||||
__attribute((malloc))
|
||||
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__))
|
||||
void * xalloc2(unsigned) malloc_like;
|
||||
void * xalloc2(unsigned n) { return malloc(n); }
|
||||
// RUN: grep 'define noalias .* @xalloc2(' %t
|
||||
// RUN: grep 'define .*noalias .* @xalloc2(' %t %t
|
||||
|
||||
|
|
|
@ -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")));
|
||||
|
||||
void test2(const char *s, int i) {
|
||||
// CHECK: define void @test2
|
||||
// CHECK: define {{.*}}void @test2
|
||||
const char c[123];
|
||||
strnlen(s, i);
|
||||
// CHECK: call {{.*}}strnlen_real1
|
||||
|
|
Loading…
Reference in New Issue