14
14
#include " LoongArchBaseInfo.h"
15
15
#include " llvm/ADT/ArrayRef.h"
16
16
#include " llvm/MC/MCSubtargetInfo.h"
17
+ #include " llvm/Support/ErrorHandling.h"
17
18
#include " llvm/Support/raw_ostream.h"
18
19
#include " llvm/TargetParser/Triple.h"
19
20
20
21
namespace llvm {
21
22
22
23
namespace LoongArchABI {
23
24
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
+
24
52
ABI computeTargetABI (const Triple &TT, StringRef ABIName) {
25
53
ABI ArgProvidedABI = getTargetABI (ABIName);
26
54
bool Is64Bit = TT.isArch64Bit ();
@@ -50,15 +78,15 @@ ABI computeTargetABI(const Triple &TT, StringRef ABIName) {
50
78
errs () << " '" << ABIName
51
79
<< " ' is not a recognized ABI for this target, ignoring and using "
52
80
" triple-implied ABI\n " ;
53
- return TripleABI;
81
+ return checkABIStandardized ( TripleABI) ;
54
82
55
83
case LoongArchABI::ABI_ILP32S:
56
84
case LoongArchABI::ABI_ILP32F:
57
85
case LoongArchABI::ABI_ILP32D:
58
86
if (Is64Bit) {
59
87
errs () << " 32-bit ABIs are not supported for 64-bit targets, ignoring "
60
88
" target-abi and using triple-implied ABI\n " ;
61
- return TripleABI;
89
+ return checkABIStandardized ( TripleABI) ;
62
90
}
63
91
break ;
64
92
@@ -68,7 +96,7 @@ ABI computeTargetABI(const Triple &TT, StringRef ABIName) {
68
96
if (!Is64Bit) {
69
97
errs () << " 64-bit ABIs are not supported for 32-bit targets, ignoring "
70
98
" target-abi and using triple-implied ABI\n " ;
71
- return TripleABI;
99
+ return checkABIStandardized ( TripleABI) ;
72
100
}
73
101
break ;
74
102
}
@@ -77,7 +105,7 @@ ABI computeTargetABI(const Triple &TT, StringRef ABIName) {
77
105
errs () << " warning: triple-implied ABI conflicts with provided target-abi '"
78
106
<< ABIName << " ', using target-abi\n " ;
79
107
80
- return ArgProvidedABI;
108
+ return checkABIStandardized ( ArgProvidedABI) ;
81
109
}
82
110
83
111
ABI getTargetABI (StringRef ABIName) {
0 commit comments