Break circular dependency between FIR dialect and utilities
[llvm-project.git] / flang / lib / Common / Fortran-features.cpp
blob25a948818e6560b4be410d4bcbab3f1668f06401
1 //===-- lib/Common/Fortran-features.cpp -----------------------------------===//
2 //
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6 //
7 //===----------------------------------------------------------------------===//
9 #include "flang/Common/Fortran-features.h"
10 #include "flang/Common/Fortran.h"
11 #include "flang/Common/idioms.h"
13 namespace Fortran::common {
15 std::vector<const char *> LanguageFeatureControl::GetNames(
16 LogicalOperator opr) const {
17 std::vector<const char *> result;
18 result.push_back(AsFortran(opr));
19 if (opr == LogicalOperator::Neqv && IsEnabled(LanguageFeature::XOROperator)) {
20 result.push_back(".xor.");
22 if (IsEnabled(LanguageFeature::LogicalAbbreviations)) {
23 switch (opr) {
24 SWITCH_COVERS_ALL_CASES
25 case LogicalOperator::And:
26 result.push_back(".a.");
27 break;
28 case LogicalOperator::Or:
29 result.push_back(".o.");
30 break;
31 case LogicalOperator::Not:
32 result.push_back(".n.");
33 break;
34 case LogicalOperator::Neqv:
35 if (IsEnabled(LanguageFeature::XOROperator)) {
36 result.push_back(".x.");
38 break;
39 case LogicalOperator::Eqv:
40 break;
43 return result;
46 std::vector<const char *> LanguageFeatureControl::GetNames(
47 RelationalOperator opr) const {
48 switch (opr) {
49 SWITCH_COVERS_ALL_CASES
50 case RelationalOperator::LT:
51 return {".lt.", "<"};
52 case RelationalOperator::LE:
53 return {".le.", "<="};
54 case RelationalOperator::EQ:
55 return {".eq.", "=="};
56 case RelationalOperator::GE:
57 return {".ge.", ">="};
58 case RelationalOperator::GT:
59 return {".gt.", ">"};
60 case RelationalOperator::NE:
61 if (IsEnabled(LanguageFeature::AlternativeNE)) {
62 return {".ne.", "/=", "<>"};
63 } else {
64 return {".ne.", "/="};
69 } // namespace Fortran::common