Skip to content

Commit cc5aa71

Browse files
committed
Merge branch 'release_70' of github.com:flang-compiler/flang-driver into release_70
2 parents 73ea9be + 4a9339f commit cc5aa71

File tree

4 files changed

+101
-1
lines changed

4 files changed

+101
-1
lines changed

lib/Driver/ToolChains/Cuda.cpp

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -830,3 +830,36 @@ VersionTuple CudaToolChain::computeMSVCVersion(const Driver *D,
830830
const ArgList &Args) const {
831831
return HostTC.computeMSVCVersion(D, Args);
832832
}
833+
834+
static void AddFlangSysIncludeArg(const ArgList &DriverArgs,
835+
ArgStringList &Flang1Args,
836+
ToolChain::path_list IncludePathList) {
837+
std::string ArgValue; // Path argument value
838+
839+
// Make up argument value consisting of paths separated by colons
840+
bool first = true;
841+
for (auto P : IncludePathList) {
842+
if (first) {
843+
first = false;
844+
} else {
845+
ArgValue += ":";
846+
}
847+
ArgValue += P;
848+
}
849+
850+
// Add the argument
851+
Flang1Args.push_back("-stdinc");
852+
Flang1Args.push_back(DriverArgs.MakeArgString(ArgValue));
853+
}
854+
855+
void CudaToolChain::AddFlangSystemIncludeArgs(const llvm::opt::ArgList &DriverArgs,
856+
llvm::opt::ArgStringList &Flang1Args) const {
857+
path_list IncludePathList;
858+
const Driver &D = getDriver();
859+
if (DriverArgs.hasArg(options::OPT_nostdinc))
860+
return;
861+
SmallString<128> P(D.InstalledDir);
862+
llvm::sys::path::append(P, "../include");
863+
IncludePathList.push_back(P.str());
864+
AddFlangSysIncludeArg(DriverArgs, Flang1Args, IncludePathList);
865+
}

lib/Driver/ToolChains/Cuda.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -186,6 +186,9 @@ class LLVM_LIBRARY_VISIBILITY CudaToolChain : public ToolChain {
186186
const ToolChain &HostTC;
187187
CudaInstallationDetector CudaInstallation;
188188

189+
void
190+
AddFlangSystemIncludeArgs(const llvm::opt::ArgList &DriverArgs,
191+
llvm::opt::ArgStringList &Flang1Args) const override;
189192
protected:
190193
Tool *buildAssembler() const override; // ptxas
191194
Tool *buildLinker() const override; // fatbinary (ok, not really a linker)

lib/Driver/ToolChains/Flang.cpp

Lines changed: 63 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -792,6 +792,23 @@ void FlangFrontend::ConstructJob(Compilation &C, const JobAction &JA,
792792
UpperCmdArgs.push_back("-output");
793793
UpperCmdArgs.push_back(ILMFile);
794794

795+
SmallString<256> Path;
796+
if(Args.getAllArgValues(options::OPT_fopenmp_targets_EQ).size() > 0) {
797+
SmallString<128> TargetInfo;
798+
Path = llvm::sys::path::parent_path(Output.getFilename());
799+
Arg* Tgts = Args.getLastArg(options::OPT_fopenmp_targets_EQ);
800+
assert(Tgts && Tgts->getNumValues() &&
801+
"OpenMP offloading has to have targets specified.");
802+
for (unsigned i = 0; i < Tgts->getNumValues(); ++i) {
803+
if (i)
804+
TargetInfo += ',';
805+
llvm::Triple T(Tgts->getValue(i));
806+
TargetInfo += T.getTriple();
807+
}
808+
UpperCmdArgs.push_back("-fopenmp-targets");
809+
UpperCmdArgs.push_back(Args.MakeArgString(TargetInfo.str()));
810+
}
811+
795812
C.addCommand(llvm::make_unique<Command>(JA, *this, UpperExec, UpperCmdArgs, Inputs));
796813

797814
// For -fsyntax-only or -E that is it
@@ -899,7 +916,52 @@ void FlangFrontend::ConstructJob(Compilation &C, const JobAction &JA,
899916
LowerCmdArgs.push_back("-stbfile");
900917
LowerCmdArgs.push_back(STBFile);
901918

902-
LowerCmdArgs.push_back("-asm"); LowerCmdArgs.push_back(Args.MakeArgString(OutFile));
919+
Path = llvm::sys::path::parent_path(Output.getFilename());
920+
bool IsOpenMPDevice = JA.isDeviceOffloading(Action::OFK_OpenMP);
921+
922+
/* OpenMP GPU Offload */
923+
if(Args.getAllArgValues(options::OPT_fopenmp_targets_EQ).size() > 0) {
924+
SmallString<128> TargetInfo;//("-fopenmp-targets ");
925+
SmallString<256> TargetInfoAsm;//("-fopenmp-targets-asm ");
926+
927+
Arg* Tgts = Args.getLastArg(options::OPT_fopenmp_targets_EQ);
928+
assert(Tgts && Tgts->getNumValues() &&
929+
"OpenMP offloading has to have targets specified.");
930+
for (unsigned i = 0; i < Tgts->getNumValues(); ++i) {
931+
if (i)
932+
TargetInfo += ',';
933+
// We need to get the string from the triple because it may be not exactly
934+
// the same as the one we get directly from the arguments.
935+
llvm::Triple T(Tgts->getValue(i));
936+
TargetInfo += T.getTriple();
937+
// We also need to give a output file
938+
TargetInfoAsm += Path;
939+
TargetInfoAsm += "/";
940+
TargetInfoAsm += Stem;
941+
TargetInfoAsm += "-";
942+
TargetInfoAsm += T.getTriple();
943+
TargetInfoAsm += ".ll";
944+
}
945+
// The driver is aware that flang2 can generate multiple files at the same time.
946+
// We mimic it here by exchanging the output files.
947+
// The driver always uses the output file of -asm.
948+
LowerCmdArgs.push_back("-fopenmp-targets");
949+
LowerCmdArgs.push_back(Args.MakeArgString(TargetInfo.str()));
950+
if(IsOpenMPDevice) {
951+
LowerCmdArgs.push_back("-fopenmp-targets-asm");
952+
LowerCmdArgs.push_back(Args.MakeArgString(OutFile));
953+
LowerCmdArgs.push_back("-asm");
954+
LowerCmdArgs.push_back(Args.MakeArgString(TargetInfoAsm.str()));
955+
} else {
956+
LowerCmdArgs.push_back("-fopenmp-targets-asm");
957+
LowerCmdArgs.push_back(Args.MakeArgString(TargetInfoAsm.str()));
958+
LowerCmdArgs.push_back("-asm");
959+
LowerCmdArgs.push_back(Args.MakeArgString(OutFile));
960+
}
961+
} else {
962+
LowerCmdArgs.push_back("-asm");
963+
LowerCmdArgs.push_back(Args.MakeArgString(OutFile));
964+
}
903965

904966
C.addCommand(llvm::make_unique<Command>(JA, *this, LowerExec, LowerCmdArgs, Inputs));
905967
}

tools/clang-offload-bundler/ClangOffloadBundler.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -742,6 +742,8 @@ static FileHandler *CreateFileHandler(MemoryBuffer &FirstInput) {
742742
return new TextFileHandler(/*Comment=*/"//");
743743
if (FilesType == "ll")
744744
return new TextFileHandler(/*Comment=*/";");
745+
if (FilesType == "f95")
746+
return new TextFileHandler(/*Comment=*/"!");
745747
if (FilesType == "bc")
746748
return new BinaryFileHandler();
747749
if (FilesType == "s")

0 commit comments

Comments
 (0)