1// REQUIRES: clang-driver
2// REQUIRES: x86-registered-target
3// REQUIRES: amdgpu-registered-target
4
5// RUN: %clang -### -target x86_64-linux-gnu \
6// RUN:   -x hip --cuda-gpu-arch=gfx803 --cuda-gpu-arch=gfx900 \
7// RUN:   -c -nogpuinc -nogpulib --cuda-device-only -fgpu-rdc \
8// RUN:   %S/Inputs/hip_multiple_inputs/a.cu \
9// RUN:   %S/Inputs/hip_multiple_inputs/b.hip \
10// RUN: 2>&1 | FileCheck -check-prefixes=COMMON,EMITBC %s
11
12// With `-emit-llvm`, the output should be the same as the aforementioned line
13// as `-fgpu-rdc` in HIP implies `-emit-llvm`.
14
15// RUN: %clang -### -target x86_64-linux-gnu \
16// RUN:   -x hip --cuda-gpu-arch=gfx803 --cuda-gpu-arch=gfx900 \
17// RUN:   -c -emit-llvm -nogpuinc -nogpulib --cuda-device-only -fgpu-rdc \
18// RUN:   %S/Inputs/hip_multiple_inputs/a.cu \
19// RUN:   %S/Inputs/hip_multiple_inputs/b.hip \
20// RUN: 2>&1 | FileCheck -check-prefixes=COMMON,EMITBC %s
21
22// RUN: %clang -### -target x86_64-linux-gnu \
23// RUN:   -x hip --cuda-gpu-arch=gfx803 --cuda-gpu-arch=gfx900 \
24// RUN:   -S -nogpuinc -nogpulib --cuda-device-only -fgpu-rdc \
25// RUN:   %S/Inputs/hip_multiple_inputs/a.cu \
26// RUN:   %S/Inputs/hip_multiple_inputs/b.hip \
27// RUN: 2>&1 | FileCheck -check-prefixes=COMMON,EMITLL %s
28
29// With `-emit-llvm`, the output should be the same as the aforementioned line
30// as `-fgpu-rdc` in HIP implies `-emit-llvm`.
31
32// RUN: %clang -### -target x86_64-linux-gnu \
33// RUN:   -x hip --cuda-gpu-arch=gfx803 --cuda-gpu-arch=gfx900 \
34// RUN:   -S -emit-llvm -nogpuinc -nogpulib --cuda-device-only -fgpu-rdc \
35// RUN:   %S/Inputs/hip_multiple_inputs/a.cu \
36// RUN:   %S/Inputs/hip_multiple_inputs/b.hip \
37// RUN: 2>&1 | FileCheck -check-prefixes=COMMON,EMITLL %s
38
39// With `-save-temps`, commane lines for each steps are dumped. For assembly
40// output, there should 3 steps (preprocessor, compile, and backend) per source
41// and per target, totally 12 steps.
42
43// RUN: %clang -### -save-temps -target x86_64-linux-gnu \
44// RUN:   -x hip --cuda-gpu-arch=gfx803 --cuda-gpu-arch=gfx900 \
45// RUN:   -S -nogpuinc -nogpulib --cuda-device-only -fgpu-rdc \
46// RUN:   %S/Inputs/hip_multiple_inputs/a.cu \
47// RUN:   %S/Inputs/hip_multiple_inputs/b.hip \
48// RUN: 2>&1 | FileCheck -check-prefix=SAVETEMP %s
49
50// COMMON: [[CLANG:".*clang.*"]] "-cc1" "-mllvm" "--amdhsa-code-object-version=4" "-triple" "amdgcn-amd-amdhsa"
51// COMMON-SAME: "-aux-triple" "x86_64-unknown-linux-gnu"
52// EMITBC-SAME: "-emit-llvm-bc"
53// EMITLL-SAME: "-emit-llvm"
54// COMMON-SAME: {{.*}} "-main-file-name" "a.cu"
55// COMMON-SAME: "-fcuda-is-device" "-fgpu-rdc" "-fcuda-allow-variadic-functions" "-fvisibility" "hidden"
56// COMMON-SAME: "-fapply-global-visibility-to-externs"
57// COMMON-SAME: "-target-cpu" "gfx803"
58// EMITBC-SAME: {{.*}} "-o" {{"a.*bc"}} "-x" "hip"
59// EMITLL-SAME: {{.*}} "-o" {{"a.*ll"}} "-x" "hip"
60// CHECK-SAME: {{.*}} {{".*a.cu"}}
61
62// COMMON: [[CLANG]] "-cc1" "-mllvm" "--amdhsa-code-object-version=4" "-triple" "amdgcn-amd-amdhsa"
63// COMMON-SAME: "-aux-triple" "x86_64-unknown-linux-gnu"
64// EMITBC-SAME: "-emit-llvm-bc"
65// EMITLL-SAME: "-emit-llvm"
66// COMMON-SAME: {{.*}} "-main-file-name" "a.cu"
67// COMMON-SAME: "-fcuda-is-device" "-fgpu-rdc" "-fcuda-allow-variadic-functions" "-fvisibility" "hidden"
68// COMMON-SAME: "-fapply-global-visibility-to-externs"
69// COMMON-SAME: "-target-cpu" "gfx900"
70// EMITBC-SAME: {{.*}} "-o" {{"a.*bc"}} "-x" "hip"
71// EMITLL-SAME: {{.*}} "-o" {{"a.*ll"}} "-x" "hip"
72// COMMON-SAME: {{.*}} {{".*a.cu"}}
73
74// COMMON: [[CLANG]] "-cc1" "-mllvm" "--amdhsa-code-object-version=4" "-triple" "amdgcn-amd-amdhsa"
75// COMMON-SAME: "-aux-triple" "x86_64-unknown-linux-gnu"
76// EMITBC-SAME: "-emit-llvm-bc"
77// EMITLL-SAME: "-emit-llvm"
78// COMMON-SAME: {{.*}} "-main-file-name" "b.hip"
79// COMMON-SAME: "-fcuda-is-device" "-fgpu-rdc" "-fcuda-allow-variadic-functions" "-fvisibility" "hidden"
80// COMMON-SAME: "-fapply-global-visibility-to-externs"
81// COMMON-SAME: "-target-cpu" "gfx803"
82// EMITBC-SAME: {{.*}} "-o" {{"b.*bc"}} "-x" "hip"
83// EMITLL-SAME: {{.*}} "-o" {{"b.*ll"}} "-x" "hip"
84// COMMON-SAME: {{.*}} {{".*b.hip"}}
85
86// COMMON: [[CLANG]] "-cc1" "-mllvm" "--amdhsa-code-object-version=4" "-triple" "amdgcn-amd-amdhsa"
87// COMMON-SAME: "-aux-triple" "x86_64-unknown-linux-gnu"
88// EMITBC-SAME: "-emit-llvm-bc"
89// EMITLL-SAME: "-emit-llvm"
90// COMMON-SAME: {{.*}} "-main-file-name" "b.hip"
91// COMMON-SAME: "-fcuda-is-device" "-fgpu-rdc" "-fcuda-allow-variadic-functions" "-fvisibility" "hidden"
92// COMMON-SAME: "-fapply-global-visibility-to-externs"
93// COMMON-SAME: "-target-cpu" "gfx900"
94// EMITBC-SAME: {{.*}} "-o" {{"b.*bc"}} "-x" "hip"
95// EMITLL-SAME: {{.*}} "-o" {{"b.*ll"}} "-x" "hip"
96// COMMON-SAME: {{.*}} {{".*b.hip"}}
97
98// SAVETEMP: [[CLANG:".*clang.*"]] "-cc1" "-mllvm" "--amdhsa-code-object-version=4" "-triple" "amdgcn-amd-amdhsa" "-aux-triple" "x86_64-unknown-linux-gnu"
99// SAVETEMP-SAME: "-E"
100// SAVETEMP-SAME: {{.*}} "-main-file-name" "a.cu" {{.*}} "-target-cpu" "gfx803"
101// SAVETEMP-SAME: {{.*}} "-o" [[A_GFX803_CUI:"a.*cui"]] "-x" "hip" {{".*a.cu"}}
102// SAVETEMP-NEXT: [[CLANG]] "-cc1" "-mllvm" "--amdhsa-code-object-version=4" "-triple" "amdgcn-amd-amdhsa" "-aux-triple" "x86_64-unknown-linux-gnu"
103// SAVETEMP-SAME: "-emit-llvm-bc"
104// SAVETEMP-SAME: {{.*}} "-main-file-name" "a.cu" {{.*}} "-target-cpu" "gfx803"
105// SAVETEMP-SAME: {{.*}} "-o" [[A_GFX803_TMP_BC:"a.*tmp.bc"]] "-x" "hip-cpp-output" [[A_GFX803_CUI]]
106// SAVETEMP-NEXT: [[CLANG]] "-cc1" "-mllvm" "--amdhsa-code-object-version=4" "-triple" "amdgcn-amd-amdhsa" "-aux-triple" "x86_64-unknown-linux-gnu"
107// SAVETEMP-SAME: "-emit-llvm"
108// SAVETEMP-SAME: {{.*}} "-main-file-name" "a.cu" {{.*}} "-target-cpu" "gfx803"
109// SAVETEMP-SAME: {{.*}} "-o" {{"a.*.ll"}} "-x" "ir" [[A_GFX803_TMP_BC]]
110
111// SAVETEMP: [[CLANG]] "-cc1" "-mllvm" "--amdhsa-code-object-version=4" "-triple" "amdgcn-amd-amdhsa" "-aux-triple" "x86_64-unknown-linux-gnu"
112// SAVETEMP-SAME: "-E"
113// SAVETEMP-SAME: {{.*}} "-main-file-name" "a.cu" {{.*}} "-target-cpu" "gfx900"
114// SAVETEMP-SAME: {{.*}} "-o" [[A_GFX900_CUI:"a.*cui"]] "-x" "hip" {{".*a.cu"}}
115// SAVETEMP-NEXT: [[CLANG]] "-cc1" "-mllvm" "--amdhsa-code-object-version=4" "-triple" "amdgcn-amd-amdhsa" "-aux-triple" "x86_64-unknown-linux-gnu"
116// SAVETEMP-SAME: "-emit-llvm-bc"
117// SAVETEMP-SAME: {{.*}} "-main-file-name" "a.cu" {{.*}} "-target-cpu" "gfx900"
118// SAVETEMP-SAME: {{.*}} "-o" [[A_GFX900_TMP_BC:"a.*tmp.bc"]] "-x" "hip-cpp-output" [[A_GFX900_CUI]]
119// SAVETEMP-NEXT: [[CLANG]] "-cc1" "-mllvm" "--amdhsa-code-object-version=4" "-triple" "amdgcn-amd-amdhsa" "-aux-triple" "x86_64-unknown-linux-gnu"
120// SAVETEMP-SAME: "-emit-llvm"
121// SAVETEMP-SAME: {{.*}} "-main-file-name" "a.cu" {{.*}} "-target-cpu" "gfx900"
122// SAVETEMP-SAME: {{.*}} "-o" {{"a.*.ll"}} "-x" "ir" [[A_GFX900_TMP_BC]]
123
124// SAVETEMP: [[CLANG]] "-cc1" "-mllvm" "--amdhsa-code-object-version=4" "-triple" "amdgcn-amd-amdhsa" "-aux-triple" "x86_64-unknown-linux-gnu"
125// SAVETEMP-SAME: "-E"
126// SAVETEMP-SAME: {{.*}} "-main-file-name" "b.hip" {{.*}} "-target-cpu" "gfx803"
127// SAVETEMP-SAME: {{.*}} "-o" [[B_GFX803_CUI:"b.*cui"]] "-x" "hip" {{".*b.hip"}}
128// SAVETEMP-NEXT: [[CLANG]] "-cc1" "-mllvm" "--amdhsa-code-object-version=4" "-triple" "amdgcn-amd-amdhsa" "-aux-triple" "x86_64-unknown-linux-gnu"
129// SAVETEMP-SAME: "-emit-llvm-bc"
130// SAVETEMP-SAME: {{.*}} "-main-file-name" "b.hip" {{.*}} "-target-cpu" "gfx803"
131// SAVETEMP-SAME: {{.*}} "-o" [[B_GFX803_TMP_BC:"b.*tmp.bc"]] "-x" "hip-cpp-output" [[B_GFX803_CUI]]
132// SAVETEMP-NEXT: [[CLANG]] "-cc1" "-mllvm" "--amdhsa-code-object-version=4" "-triple" "amdgcn-amd-amdhsa" "-aux-triple" "x86_64-unknown-linux-gnu"
133// SAVETEMP-SAME: "-emit-llvm"
134// SAVETEMP-SAME: {{.*}} "-main-file-name" "b.hip" {{.*}} "-target-cpu" "gfx803"
135// SAVETEMP-SAME: {{.*}} "-o" {{"b.*.ll"}} "-x" "ir" [[B_GFX803_TMP_BC]]
136
137// SAVETEMP: [[CLANG]] "-cc1" "-mllvm" "--amdhsa-code-object-version=4" "-triple" "amdgcn-amd-amdhsa" "-aux-triple" "x86_64-unknown-linux-gnu"
138// SAVETEMP-SAME: "-E"
139// SAVETEMP-SAME: {{.*}} "-main-file-name" "b.hip" {{.*}} "-target-cpu" "gfx900"
140// SAVETEMP-SAME: {{.*}} "-o" [[B_GFX900_CUI:"b.*cui"]] "-x" "hip" {{".*b.hip"}}
141// SAVETEMP-NEXT: [[CLANG]] "-cc1" "-mllvm" "--amdhsa-code-object-version=4" "-triple" "amdgcn-amd-amdhsa" "-aux-triple" "x86_64-unknown-linux-gnu"
142// SAVETEMP-SAME: "-emit-llvm-bc"
143// SAVETEMP-SAME: {{.*}} "-main-file-name" "b.hip" {{.*}} "-target-cpu" "gfx900"
144// SAVETEMP-SAME: {{.*}} "-o" [[B_GFX900_TMP_BC:"b.*tmp.bc"]] "-x" "hip-cpp-output" [[B_GFX900_CUI]]
145// SAVETEMP-NEXT: [[CLANG]] "-cc1" "-mllvm" "--amdhsa-code-object-version=4" "-triple" "amdgcn-amd-amdhsa" "-aux-triple" "x86_64-unknown-linux-gnu"
146// SAVETEMP-SAME: "-emit-llvm"
147// SAVETEMP-SAME: {{.*}} "-main-file-name" "b.hip" {{.*}} "-target-cpu" "gfx900"
148// SAVETEMP-SAME: {{.*}} "-o" {{"b.*.ll"}} "-x" "ir" [[B_GFX900_TMP_BC]]
149