Skip to content

Commit 697bc74

Browse files
authored
Allow disabling of types from the command line (#107126)
Adding hidden options to disable types through the `TargetCharacteristics`. I am seeing issues when I do this programmatically and would like, for anyone, to have the ability to reproduce them for development and testing purposes. I am planning to file a couple of issues following this patch.
1 parent 0367305 commit 697bc74

File tree

5 files changed

+39
-5
lines changed

5 files changed

+39
-5
lines changed

clang/include/clang/Driver/Options.td

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6762,6 +6762,14 @@ def fdefault_integer_8 : Flag<["-"],"fdefault-integer-8">, Group<f_Group>,
67626762
HelpText<"Set the default integer and logical kind to an 8 byte wide type">;
67636763
def fdefault_real_8 : Flag<["-"],"fdefault-real-8">, Group<f_Group>,
67646764
HelpText<"Set the default real kind to an 8 byte wide type">;
6765+
def fdisable_real_3 : Flag<["-"],"fdisable-real-3">, Group<f_Group>,
6766+
HelpText<"Disable real(KIND=3) from TargetCharacteristics">, Flags<[HelpHidden]>;
6767+
def fdisable_real_10 : Flag<["-"],"fdisable-real-10">, Group<f_Group>,
6768+
HelpText<"Disable real(KIND=10) from TargetCharacteristics">, Flags<[HelpHidden]>;
6769+
def fdisable_integer_2 : Flag<["-"],"fdisable-integer-2">, Group<f_Group>,
6770+
HelpText<"Disable integer(KIND=2) from TargetCharacteristics">, Flags<[HelpHidden]>;
6771+
def fdisable_integer_16 : Flag<["-"],"fdisable-integer-16">, Group<f_Group>,
6772+
HelpText<"Disable integer(KIND=16) from TargetCharacteristics">, Flags<[HelpHidden]>;
67656773
def flarge_sizes : Flag<["-"],"flarge-sizes">, Group<f_Group>,
67666774
HelpText<"Use INTEGER(KIND=8) for the result type in size-related intrinsics">;
67676775

flang/include/flang/Frontend/TargetOptions.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,12 @@ class TargetOptions {
3838
/// The list of target specific features to enable or disable, as written on
3939
/// the command line.
4040
std::vector<std::string> featuresAsWritten;
41+
42+
/// The real KINDs disabled for this target
43+
std::vector<int> disabledRealKinds;
44+
45+
/// The integer KINDs disabled for this target
46+
std::vector<int> disabledIntegerKinds;
4147
};
4248

4349
} // end namespace Fortran::frontend

flang/include/flang/Tools/TargetSetup.h

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,13 +10,15 @@
1010
#define FORTRAN_TOOLS_TARGET_SETUP_H
1111

1212
#include "flang/Evaluate/target.h"
13+
#include "flang/Frontend/TargetOptions.h"
1314
#include "llvm/Target/TargetMachine.h"
1415

1516
namespace Fortran::tools {
1617

1718
[[maybe_unused]] inline static void setUpTargetCharacteristics(
1819
Fortran::evaluate::TargetCharacteristics &targetCharacteristics,
1920
const llvm::TargetMachine &targetMachine,
21+
const Fortran::frontend::TargetOptions &targetOptions,
2022
const std::string &compilerVersion, const std::string &compilerOptions) {
2123

2224
const llvm::Triple &targetTriple{targetMachine.getTargetTriple()};
@@ -25,6 +27,12 @@ namespace Fortran::tools {
2527
targetCharacteristics.DisableType(
2628
Fortran::common::TypeCategory::Real, /*kind=*/10);
2729

30+
for (auto realKind : targetOptions.disabledRealKinds)
31+
targetCharacteristics.DisableType(common::TypeCategory::Real, realKind);
32+
33+
for (auto intKind : targetOptions.disabledIntegerKinds)
34+
targetCharacteristics.DisableType(common::TypeCategory::Integer, intKind);
35+
2836
targetCharacteristics.set_compilerOptionsString(compilerOptions)
2937
.set_compilerVersionString(compilerVersion);
3038

flang/lib/Frontend/CompilerInvocation.cpp

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -438,8 +438,19 @@ static void parseTargetArgs(TargetOptions &opts, llvm::opt::ArgList &args) {
438438
for (const llvm::opt::Arg *currentArg :
439439
args.filtered(clang::driver::options::OPT_target_feature))
440440
opts.featuresAsWritten.emplace_back(currentArg->getValue());
441-
}
442441

442+
if (args.hasArg(clang::driver::options::OPT_fdisable_real_10))
443+
opts.disabledRealKinds.push_back(10);
444+
445+
if (args.hasArg(clang::driver::options::OPT_fdisable_real_3))
446+
opts.disabledRealKinds.push_back(3);
447+
448+
if (args.hasArg(clang::driver::options::OPT_fdisable_integer_2))
449+
opts.disabledIntegerKinds.push_back(2);
450+
451+
if (args.hasArg(clang::driver::options::OPT_fdisable_integer_16))
452+
opts.disabledIntegerKinds.push_back(16);
453+
}
443454
// Tweak the frontend configuration based on the frontend action
444455
static void setUpFrontendBasedOnAction(FrontendOptions &opts) {
445456
if (opts.programAction == DebugDumpParsingLog)
@@ -1531,8 +1542,8 @@ CompilerInvocation::getSemanticsCtx(
15311542

15321543
std::string compilerVersion = Fortran::common::getFlangFullVersion();
15331544
Fortran::tools::setUpTargetCharacteristics(
1534-
semanticsContext->targetCharacteristics(), targetMachine, compilerVersion,
1535-
allCompilerInvocOpts);
1545+
semanticsContext->targetCharacteristics(), targetMachine, getTargetOpts(),
1546+
compilerVersion, allCompilerInvocOpts);
15361547
return semanticsContext;
15371548
}
15381549

flang/tools/bbc/bbc.cpp

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
#include "flang/Common/OpenMP-features.h"
1919
#include "flang/Common/Version.h"
2020
#include "flang/Common/default-kinds.h"
21+
#include "flang/Frontend/TargetOptions.h"
2122
#include "flang/Lower/Bridge.h"
2223
#include "flang/Lower/PFTBuilder.h"
2324
#include "flang/Lower/Support/Verifier.h"
@@ -556,8 +557,8 @@ int main(int argc, char **argv) {
556557
std::string compilerVersion = Fortran::common::getFlangToolFullVersion("bbc");
557558
std::string compilerOptions = "";
558559
Fortran::tools::setUpTargetCharacteristics(
559-
semanticsContext.targetCharacteristics(), *targetMachine, compilerVersion,
560-
compilerOptions);
560+
semanticsContext.targetCharacteristics(), *targetMachine, {},
561+
compilerVersion, compilerOptions);
561562

562563
return mlir::failed(
563564
convertFortranSourceToMLIR(inputFilename, options, programPrefix,

0 commit comments

Comments
 (0)