Author: Yaxun (Sam) Liu Date: 2020-10-04T22:03:16-04:00 New Revision: 5b551b79d3bba5a8a282bf5f72c7baaccf925870
URL: https://github.com/llvm/llvm-project/commit/5b551b79d3bba5a8a282bf5f72c7baaccf925870 DIFF: https://github.com/llvm/llvm-project/commit/5b551b79d3bba5a8a282bf5f72c7baaccf925870.diff LOG: [HIP] Fix default output file for -E By convention the default output file for -E is "-" (stdout). This is expected by tools like ccache, which uses output of -E to determine if a file and its dependence has changed. Currently clang does not use stdout as default output file for -E for HIP, which causes ccache not working. This patch fixes that. Differential Revision: https://reviews.llvm.org/D88730 Added: Modified: clang/lib/Driver/Driver.cpp clang/test/Driver/hip-output-file-name.hip Removed: ################################################################################ diff --git a/clang/lib/Driver/Driver.cpp b/clang/lib/Driver/Driver.cpp index 96798b3d0adb..6f2a030290ed 100644 --- a/clang/lib/Driver/Driver.cpp +++ b/clang/lib/Driver/Driver.cpp @@ -4604,6 +4604,17 @@ static const char *MakeCLOutputFilename(const ArgList &Args, StringRef ArgValue, return Args.MakeArgString(Filename.c_str()); } +static bool HasPreprocessOutput(const Action &JA) { + if (isa<PreprocessJobAction>(JA)) + return true; + if (isa<OffloadAction>(JA) && isa<PreprocessJobAction>(JA.getInputs()[0])) + return true; + if (isa<OffloadBundlingJobAction>(JA) && + HasPreprocessOutput(*(JA.getInputs()[0]))) + return true; + return false; +} + const char *Driver::GetNamedOutputPath(Compilation &C, const JobAction &JA, const char *BaseInput, StringRef BoundArch, bool AtTopLevel, @@ -4629,8 +4640,9 @@ const char *Driver::GetNamedOutputPath(Compilation &C, const JobAction &JA, } // Default to writing to stdout? - if (AtTopLevel && !CCGenDiagnostics && isa<PreprocessJobAction>(JA)) + if (AtTopLevel && !CCGenDiagnostics && HasPreprocessOutput(JA)) { return "-"; + } // Is this the assembly listing for /FA? if (JA.getType() == types::TY_PP_Asm && diff --git a/clang/test/Driver/hip-output-file-name.hip b/clang/test/Driver/hip-output-file-name.hip index d57f7e87f89e..b0b1a9d7ff3d 100644 --- a/clang/test/Driver/hip-output-file-name.hip +++ b/clang/test/Driver/hip-output-file-name.hip @@ -7,3 +7,45 @@ // RUN: 2>&1 | FileCheck %s // CHECK: {{.*}}clang-offload-bundler{{.*}}"-outputs=hip-output-file-name.o" + +// Check -E default output is "-" (stdout). + +// RUN: %clang -### -E -target x86_64-linux-gnu \ +// RUN: --cuda-gpu-arch=gfx803 --cuda-gpu-arch=gfx900 %s \ +// RUN: 2>&1 | FileCheck -check-prefixes=DASH %s + +// RUN: %clang -### -E -save-temps -target x86_64-linux-gnu \ +// RUN: --cuda-gpu-arch=gfx803 --cuda-gpu-arch=gfx900 %s \ +// RUN: 2>&1 | FileCheck -check-prefixes=DASH %s + +// RUN: %clang -### -E --cuda-device-only -target x86_64-linux-gnu \ +// RUN: --cuda-gpu-arch=gfx803 --cuda-gpu-arch=gfx900 %s \ +// RUN: 2>&1 | FileCheck -check-prefixes=CLANG-DASH %s + +// RUN: %clang -### -E --cuda-host-only -target x86_64-linux-gnu \ +// RUN: --cuda-gpu-arch=gfx803 --cuda-gpu-arch=gfx900 %s \ +// RUN: 2>&1 | FileCheck -check-prefixes=CLANG-DASH %s + +// DASH: {{.*}}clang-offload-bundler{{.*}}"-outputs=-" +// CLANG-DASH: {{.*}}clang{{.*}}"-o" "-" + +// Check -E with -o. + +// RUN: %clang -### -E -o test.cui -target x86_64-linux-gnu \ +// RUN: --cuda-gpu-arch=gfx803 --cuda-gpu-arch=gfx900 %s \ +// RUN: 2>&1 | FileCheck -check-prefixes=OUT %s + +// RUN: %clang -### -E -o test.cui -save-temps -target x86_64-linux-gnu \ +// RUN: --cuda-gpu-arch=gfx803 --cuda-gpu-arch=gfx900 %s \ +// RUN: 2>&1 | FileCheck -check-prefixes=OUT %s + +// RUN: %clang -### -E -o test.cui --cuda-device-only -target x86_64-linux-gnu \ +// RUN: --cuda-gpu-arch=gfx803 --cuda-gpu-arch=gfx900 %s \ +// RUN: 2>&1 | FileCheck -check-prefixes=CLANG-OUT %s + +// RUN: %clang -### -E -o test.cui --cuda-host-only -target x86_64-linux-gnu \ +// RUN: --cuda-gpu-arch=gfx803 --cuda-gpu-arch=gfx900 %s \ +// RUN: 2>&1 | FileCheck -check-prefixes=CLANG-OUT %s + +// OUT: {{.*}}clang-offload-bundler{{.*}}"-outputs=test.cui" +// CLANG-OUT: {{.*}}clang{{.*}}"-o" "test.cui" _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits