Skip to content

Commit 940d336

Browse files
mdtoguchibader
authored andcommitted
[SYCL][NFC] Refactor clang driver by adding isObjectFile()
Adds isObjectFile() function, which is used to check if an input file is an object by name (uses object file extension) Signed-off-by: Michael D Toguchi <[email protected]>
1 parent 3e715f5 commit 940d336

File tree

2 files changed

+16
-24
lines changed

2 files changed

+16
-24
lines changed

clang/include/clang/Driver/Driver.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -622,6 +622,9 @@ class Driver {
622622
/// And False otherwise.
623623
bool isOptimizationLevelFast(const llvm::opt::ArgList &Args);
624624

625+
/// \return True if the filename has a valid object file extension.
626+
bool isObjectFile(std::string FileName);
627+
625628
} // end namespace driver
626629
} // end namespace clang
627630

clang/lib/Driver/Driver.cpp

Lines changed: 13 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -3231,14 +3231,10 @@ class OffloadingActionBuilder final {
32313231
if (auto *IA = dyn_cast<InputAction>(HostAction)) {
32323232
SYCLDeviceActions.clear();
32333233

3234+
std::string InputName = IA->getInputArg().getValue();
32343235
// Objects should already be consumed with -foffload-static-lib
3235-
const char * InputName = IA->getInputArg().getValue();
32363236
if (Args.hasArg(options::OPT_foffload_static_lib_EQ) &&
3237-
HostAction->getType() == types::TY_Object &&
3238-
llvm::sys::path::has_extension(InputName) &&
3239-
types::lookupTypeForExtension(
3240-
llvm::sys::path::extension(InputName).drop_front()) ==
3241-
types::TY_Object)
3237+
IA->getType() == types::TY_Object && isObjectFile(InputName))
32423238
return ABRT_Inactive;
32433239

32443240
for (unsigned I = 0; I < ToolChains.size(); ++I)
@@ -3255,11 +3251,7 @@ class OffloadingActionBuilder final {
32553251
// Check if the type of the file is the same as the action. Do not
32563252
// unbundle it if it is not. Do not unbundle .so files, for example,
32573253
// which are not object files.
3258-
if (IA->getType() == types::TY_Object &&
3259-
(!llvm::sys::path::has_extension(FileName) ||
3260-
types::lookupTypeForExtension(
3261-
llvm::sys::path::extension(FileName).drop_front()) !=
3262-
types::TY_Object))
3254+
if (IA->getType() == types::TY_Object && !isObjectFile(FileName))
32633255
return ABRT_Inactive;
32643256
// When creating FPGA device fat objects, all host objects are
32653257
// partially linked. Gather that list here.
@@ -3716,7 +3708,7 @@ class OffloadingActionBuilder final {
37163708
if (CanUseBundler && isa<InputAction>(HostAction) &&
37173709
InputArg->getOption().getKind() == llvm::opt::Option::InputClass &&
37183710
!types::isSrcFile(HostAction->getType())) {
3719-
const char * InputName = InputArg->getValue();
3711+
std::string InputName = InputArg->getValue();
37203712
// Do not create an unbundling action for an object when we know a fat
37213713
// static library is being used. A separate unbundling action is created
37223714
// for all objects and the fat static library.
@@ -3728,10 +3720,7 @@ class OffloadingActionBuilder final {
37283720
// for objects is still needed.
37293721
if (C.getDefaultToolChain().getTriple().isWindowsMSVCEnvironment() ||
37303722
!(HostAction->getType() == types::TY_Object &&
3731-
llvm::sys::path::has_extension(InputName) &&
3732-
types::lookupTypeForExtension(
3733-
llvm::sys::path::extension(InputName).drop_front()) ==
3734-
types::TY_Object &&
3723+
isObjectFile(InputName) &&
37353724
Args.hasArg(options::OPT_foffload_static_lib_EQ))) {
37363725
ActionList HostActionList;
37373726
Action *A(HostAction);
@@ -3740,10 +3729,7 @@ class OffloadingActionBuilder final {
37403729
HostAction->getType() != types::TY_FPGA_AOCR &&
37413730
HostAction->getType() != types::TY_FPGA_AOCX &&
37423731
!(HostAction->getType() == types::TY_Object &&
3743-
llvm::sys::path::has_extension(InputName) &&
3744-
types::lookupTypeForExtension(
3745-
llvm::sys::path::extension(InputName).drop_front()) ==
3746-
types::TY_Object)) {
3732+
isObjectFile(InputName))) {
37473733
if (HasFPGADeviceBinary(C, InputArg->getAsString(Args), true))
37483734
A = C.MakeAction<InputAction>(*InputArg, types::TY_FPGA_AOCX);
37493735
else if (HasFPGADeviceBinary(C, InputArg->getAsString(Args)))
@@ -4162,10 +4148,7 @@ void Driver::BuildActions(Compilation &C, DerivedArgList &Args,
41624148
if (auto *IA = dyn_cast<InputAction>(LI)) {
41634149
std::string FileName = IA->getInputArg().getAsString(Args);
41644150
if (IA->getType() == types::TY_Object &&
4165-
(!llvm::sys::path::has_extension(FileName) ||
4166-
types::lookupTypeForExtension(
4167-
llvm::sys::path::extension(FileName).drop_front()) !=
4168-
types::TY_Object))
4151+
!isObjectFile(FileName))
41694152
// Pass the Input along to linker.
41704153
TempLinkerInputs.push_back(LI);
41714154
else
@@ -5816,3 +5799,9 @@ bool clang::driver::isOptimizationLevelFast(const ArgList &Args) {
58165799
return Args.hasFlag(options::OPT_Ofast, options::OPT_O_Group, false);
58175800
}
58185801

5802+
bool clang::driver::isObjectFile(std::string FileName) {
5803+
return (llvm::sys::path::has_extension(FileName) &&
5804+
types::lookupTypeForExtension(
5805+
llvm::sys::path::extension(FileName).drop_front()) ==
5806+
types::TY_Object);
5807+
}

0 commit comments

Comments
 (0)