1414#include " LoongArchBaseInfo.h"
1515#include " llvm/ADT/ArrayRef.h"
1616#include " llvm/MC/MCSubtargetInfo.h"
17+ #include " llvm/Support/ErrorHandling.h"
1718#include " llvm/Support/raw_ostream.h"
1819#include " llvm/TargetParser/Triple.h"
1920
2021namespace llvm {
2122
2223namespace LoongArchABI {
2324
25+ // Check if ABI has been standardized; issue a warning if it hasn't.
26+ // FIXME: Once all ABIs are standardized, this will be removed.
27+ static ABI checkABIStandardized (ABI Abi) {
28+ StringRef ABIName;
29+ switch (Abi) {
30+ case ABI_ILP32S:
31+ ABIName = " ilp32s" ;
32+ break ;
33+ case ABI_ILP32F:
34+ ABIName = " ilp32f" ;
35+ break ;
36+ case ABI_ILP32D:
37+ ABIName = " ilp32d" ;
38+ break ;
39+ case ABI_LP64F:
40+ ABIName = " lp64f" ;
41+ break ;
42+ case ABI_LP64S:
43+ case ABI_LP64D:
44+ return Abi;
45+ default :
46+ llvm_unreachable (" " );
47+ }
48+ errs () << " warning: '" << ABIName << " ' has not been standardized\n " ;
49+ return Abi;
50+ }
51+
2452ABI computeTargetABI (const Triple &TT, StringRef ABIName) {
2553 ABI ArgProvidedABI = getTargetABI (ABIName);
2654 bool Is64Bit = TT.isArch64Bit ();
@@ -50,15 +78,15 @@ ABI computeTargetABI(const Triple &TT, StringRef ABIName) {
5078 errs () << " '" << ABIName
5179 << " ' is not a recognized ABI for this target, ignoring and using "
5280 " triple-implied ABI\n " ;
53- return TripleABI;
81+ return checkABIStandardized ( TripleABI) ;
5482
5583 case LoongArchABI::ABI_ILP32S:
5684 case LoongArchABI::ABI_ILP32F:
5785 case LoongArchABI::ABI_ILP32D:
5886 if (Is64Bit) {
5987 errs () << " 32-bit ABIs are not supported for 64-bit targets, ignoring "
6088 " target-abi and using triple-implied ABI\n " ;
61- return TripleABI;
89+ return checkABIStandardized ( TripleABI) ;
6290 }
6391 break ;
6492
@@ -68,7 +96,7 @@ ABI computeTargetABI(const Triple &TT, StringRef ABIName) {
6896 if (!Is64Bit) {
6997 errs () << " 64-bit ABIs are not supported for 32-bit targets, ignoring "
7098 " target-abi and using triple-implied ABI\n " ;
71- return TripleABI;
99+ return checkABIStandardized ( TripleABI) ;
72100 }
73101 break ;
74102 }
@@ -77,7 +105,7 @@ ABI computeTargetABI(const Triple &TT, StringRef ABIName) {
77105 errs () << " warning: triple-implied ABI conflicts with provided target-abi '"
78106 << ABIName << " ', using target-abi\n " ;
79107
80- return ArgProvidedABI;
108+ return checkABIStandardized ( ArgProvidedABI) ;
81109}
82110
83111ABI getTargetABI (StringRef ABIName) {
0 commit comments