aboutsummaryrefslogtreecommitdiff
path: root/clang/test/Driver/linker-wrapper-passes.c
blob: fb63ef7970ac732b07064afe95455b39f6e3d5b1 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
// Check various clang-linker-wrapper pass options after -offload-opt.

// REQUIRES: llvm-plugins, llvm-examples
// REQUIRES: x86-registered-target
// REQUIRES: amdgpu-registered-target

// https://github.com/llvm/llvm-project/issues/100212
// XFAIL: *

// Setup.
// RUN: mkdir -p %t
// RUN: %clang -cc1 -emit-llvm-bc -o %t/host-x86_64-unknown-linux-gnu.bc \
// RUN:     -disable-O0-optnone -triple=x86_64-unknown-linux-gnu %s
// RUN: %clang -cc1 -emit-llvm-bc -o %t/openmp-amdgcn-amd-amdhsa.bc \
// RUN:     -disable-O0-optnone -triple=amdgcn-amd-amdhsa %s
// RUN: opt %t/openmp-amdgcn-amd-amdhsa.bc -o %t/openmp-amdgcn-amd-amdhsa.bc \
// RUN:     -passes=forceattrs -force-remove-attribute=f:noinline
// RUN: clang-offload-packager -o %t/openmp-x86_64-unknown-linux-gnu.out \
// RUN:     --image=file=%t/openmp-amdgcn-amd-amdhsa.bc,arch=gfx90a,triple=amdgcn-amd-amdhsa
// RUN: %clang -cc1 -S -o %t/host-x86_64-unknown-linux-gnu.s \
// RUN:     -fopenmp -fopenmp-targets=amdgcn-amd-amdhsa \
// RUN:     -fembed-offload-object=%t/openmp-x86_64-unknown-linux-gnu.out \
// RUN:     %t/host-x86_64-unknown-linux-gnu.bc
// RUN: %clang -cc1as -o %t/host-x86_64-unknown-linux-gnu.o \
// RUN:     -triple x86_64-unknown-linux-gnu -filetype obj -target-cpu x86-64 \
// RUN:     %t/host-x86_64-unknown-linux-gnu.s

// Check plugin, -passes, and no remarks.
// RUN: clang-linker-wrapper -o a.out --embed-bitcode \
// RUN:     --linker-path=/usr/bin/true %t/host-x86_64-unknown-linux-gnu.o \
// RUN:     %offload-opt-loadbye --offload-opt=-wave-goodbye \
// RUN:     --offload-opt=-passes="function(goodbye),module(inline)" 2>&1 | \
// RUN:   FileCheck -match-full-lines -check-prefixes=OUT %s

// Check plugin, -p, and remarks.
// RUN: clang-linker-wrapper -o a.out --embed-bitcode \
// RUN:     --linker-path=/usr/bin/true %t/host-x86_64-unknown-linux-gnu.o \
// RUN:     %offload-opt-loadbye --offload-opt=-wave-goodbye \
// RUN:     --offload-opt=-p="function(goodbye),module(inline)" \
// RUN:     --offload-opt=-pass-remarks=inline \
// RUN:     --offload-opt=-pass-remarks-output=%t/remarks.yml \
// RUN:     --offload-opt=-pass-remarks-filter=inline \
// RUN:     --offload-opt=-pass-remarks-format=yaml 2>&1 | \
// RUN:   FileCheck -match-full-lines -check-prefixes=OUT,REM %s
// RUN: FileCheck -input-file=%t/remarks.yml -match-full-lines \
// RUN:     -check-prefixes=YML %s

// Check handling of bad plugin.
// RUN: not clang-linker-wrapper \
// RUN:     --offload-opt=-load-pass-plugin=%t/nonexistent.so 2>&1 | \
// RUN:   FileCheck -match-full-lines -check-prefixes=BAD-PLUGIN %s

//  OUT-NOT: {{.}}
//      OUT: Bye: f
// OUT-NEXT: Bye: test
// REM-NEXT: remark: {{.*}} 'f' inlined into 'test' {{.*}}
//  OUT-NOT: {{.}}

//  YML-NOT: {{.}}
//      YML: --- !Passed
// YML-NEXT: Pass: inline
// YML-NEXT: Name: Inlined
// YML-NEXT: Function: test
// YML-NEXT: Args:
//      YML:  - Callee: f
//      YML:  - Caller: test
//      YML: ...
//  YML-NOT: {{.}}

// BAD-PLUGIN-NOT: {{.}}
//     BAD-PLUGIN: {{.*}}Could not load library {{.*}}nonexistent.so{{.*}}
// BAD-PLUGIN-NOT: {{.}}

void f() {}
void test() { f(); }