[sanitizer] Improve FreeBSD ASLR detection
[llvm-project.git] / llvm / test / Transforms / SCCP / pthreads.ll
blobfa4d7311f3b4956007619a5fccfb01d03c3d1cb6
1 ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
2 ; RUN: opt -passes=ipsccp -S < %s | FileCheck %s
4 ;    #include <pthread.h>
6 ;    void *GlobalVPtr;
8 ;    static void *foo(void *arg) { return arg; }
9 ;    static void *bar(void *arg) { return arg; }
11 ;    int main() {
12 ;      pthread_t thread;
13 ;      pthread_create(&thread, NULL, foo, NULL);
14 ;      pthread_create(&thread, NULL, bar, &GlobalVPtr);
15 ;      return 0;
16 ;    }
18 ; Verify the constant values NULL and &GlobalVPtr are propagated into foo and
19 ; bar, respectively.
21 target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
23 %union.pthread_attr_t = type { i64, [48 x i8] }
25 @GlobalVPtr = common dso_local global i8* null, align 8
27 define dso_local i32 @main() {
28 ; CHECK-LABEL: @main(
29 ; CHECK-NEXT:  entry:
30 ; CHECK-NEXT:    [[THREAD:%.*]] = alloca i64, align 8
31 ; CHECK-NEXT:    [[CALL:%.*]] = call i32 @pthread_create(i64* nonnull [[THREAD]], %union.pthread_attr_t* null, i8* (i8*)* nonnull @foo, i8* null)
32 ; CHECK-NEXT:    [[CALL1:%.*]] = call i32 @pthread_create(i64* nonnull [[THREAD]], %union.pthread_attr_t* null, i8* (i8*)* nonnull @bar, i8* bitcast (i8** @GlobalVPtr to i8*))
33 ; CHECK-NEXT:    ret i32 0
35 entry:
36   %thread = alloca i64, align 8
37   %call = call i32 @pthread_create(i64* nonnull %thread, %union.pthread_attr_t* null, i8* (i8*)* nonnull @foo, i8* null)
38   %call1 = call i32 @pthread_create(i64* nonnull %thread, %union.pthread_attr_t* null, i8* (i8*)* nonnull @bar, i8* bitcast (i8** @GlobalVPtr to i8*))
39   ret i32 0
42 declare !callback !0 dso_local i32 @pthread_create(i64*, %union.pthread_attr_t*, i8* (i8*)*, i8*)
44 define internal i8* @foo(i8* %arg) {
45 ; CHECK-LABEL: @foo(
46 ; CHECK-NEXT:  entry:
47 ; CHECK-NEXT:    ret i8* [[ARG:%.*]]
49 entry:
50   ret i8* %arg
53 define internal i8* @bar(i8* %arg) {
54 ; CHECK-LABEL: @bar(
55 ; CHECK-NEXT:  entry:
56 ; CHECK-NEXT:    ret i8* [[ARG:%.*]]
58 entry:
59   ret i8* %arg
62 !1 = !{i64 2, i64 3, i1 false}
63 !0 = !{!1}