Skip to content

Commit f847af3

Browse files
committed
TableGen: Handle setting runtime libcall calling conventions
Allow associating a non-default CallingConv with a set of library functions, and applying a default for a SystemLibrary. I also wanted to be able to apply a default calling conv to a RuntimeLibcallImpl, but that turned out to be annoying so leave it for later.
1 parent 191a077 commit f847af3

File tree

6 files changed

+344
-178
lines changed

6 files changed

+344
-178
lines changed

llvm/include/llvm/IR/RuntimeLibcalls.td

Lines changed: 128 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1254,11 +1254,12 @@ def __gnu_h2f_ieee : RuntimeLibcallImpl<FPEXT_F16_F32>;
12541254
//===----------------------------------------------------------------------===//
12551255

12561256
// Several of the runtime library functions use a special calling conv
1257-
def __divmodqi4 : RuntimeLibcallImpl<SDIVREM_I8>; // CallingConv::AVR_BUILTIN
1258-
def __divmodhi4 : RuntimeLibcallImpl<SDIVREM_I16>; // CallingConv::AVR_BUILTIN
1257+
def __divmodqi4 : RuntimeLibcallImpl<SDIVREM_I8>;
1258+
def __divmodhi4 : RuntimeLibcallImpl<SDIVREM_I16>;
1259+
def __udivmodqi4 : RuntimeLibcallImpl<UDIVREM_I8>;
1260+
def __udivmodhi4 : RuntimeLibcallImpl<UDIVREM_I16>;
1261+
12591262
//def __divmodsi4 : RuntimeLibcallImpl<SDIVREM_I32>;
1260-
def __udivmodqi4 : RuntimeLibcallImpl<UDIVREM_I8>; // CallingConv::AVR_BUILTIN
1261-
def __udivmodhi4 : RuntimeLibcallImpl<UDIVREM_I16>; // CallingConv::AVR_BUILTIN
12621263
//def __udivmodsi4 : RuntimeLibcallImpl<UDIVREM_I32>;
12631264

12641265
// Standard sinf/cosf name replaced with "sin" and "cos". Define a
@@ -1284,9 +1285,12 @@ def AVRSystemLibrary
12841285
// Standard f64 names are replaced
12851286
sin, cos, sinf, cosf),
12861287

1287-
__divmodqi4, __divmodhi4, __divmodsi4, __udivmodqi4, __udivmodhi4,
1288-
__udivmodsi4,
1289-
1288+
// Several of the runtime library functions use a special calling
1289+
// conv
1290+
LibcallsWithCC<(add __divmodqi4, __divmodhi4, __udivmodqi4,
1291+
__udivmodhi4),
1292+
AVR_BUILTIN>,
1293+
__divmodsi4, __udivmodsi4,
12901294
// Trigonometric rtlib functions
12911295
avr_sin, avr_cos)>;
12921296

@@ -1509,6 +1513,117 @@ def __mspabi_mpyll : RuntimeLibcallImpl<MUL_I64>;
15091513

15101514
// setLibcallCallingConv(MUL_I64, CallingConv::MSP430_BUILTIN);
15111515

1516+
def isMSP430 : RuntimeLibcallPredicate<"TT.getArch() == Triple::msp430">;
1517+
1518+
defvar MSP430DefaultOptOut = [
1519+
__addsf3, __divsf3, __extendsfdf2, __truncdfsf2, __fixsfsi,
1520+
__fixsfdi, __fixunssfsi, __mulsf3, __eqsf2, __gesf2, __gtsf2,
1521+
__divhi3, __divsi3, __ashlsi3, __floatsidf, __floatsisf,
1522+
__ashrsi3, __modhi3, __udivsi3, __fixdfsi, __fixunssfdi,
1523+
__udivhi3, __umodsi3, __nesf2, __lesf2, __floatundisf,
1524+
__fixdfdi, __fixunsdfsi, __modsi3, __floatunsisf,
1525+
__fixunsdfdi, __ltsf2, __floatdisf, __floatdidf,
1526+
__lshrsi3, __subsf3, __umodhi3, __floatunsidf,
1527+
__floatundidf
1528+
];
1529+
1530+
// EABI Libcalls - EABI Section 6.2
1531+
def MSP430SystemLibrary
1532+
: SystemRuntimeLibrary<isMSP430,
1533+
(add (sub DefaultRuntimeLibcallImpls, MSP430DefaultOptOut),
1534+
1535+
// Floating point conversions - EABI Table 6
1536+
__mspabi_cvtdf,
1537+
__mspabi_cvtfd,
1538+
// The following is NOT implemented in libgcc
1539+
//__mspabi_fixdi,
1540+
__mspabi_fixdli,
1541+
__mspabi_fixdlli,
1542+
// The following is NOT implemented in libgcc
1543+
// __mspabi_fixdu
1544+
__mspabi_fixdul,
1545+
__mspabi_fixdull,
1546+
// The following is NOT implemented in libgcc
1547+
//__mspabi_fixfi,
1548+
__mspabi_fixfli,
1549+
__mspabi_fixflli,
1550+
// The following is NOT implemented in libgcc
1551+
//__mspabi_fixfu,
1552+
__mspabi_fixful,
1553+
__mspabi_fixfull,
1554+
// TODO The following IS implemented in libgcc
1555+
//__mspabi_fltid
1556+
__mspabi_fltlid,
1557+
// TODO The following IS implemented in libgcc but is not in the EABI
1558+
__mspabi_fltllid,
1559+
// TODO The following IS implemented in libgcc
1560+
//__mspabi_fltud,
1561+
__mspabi_fltuld,
1562+
// The following IS implemented in libgcc but is not in the EABI
1563+
__mspabi_fltulld,
1564+
// TODO The following IS implemented in libgcc
1565+
//__mspabi_fltif,
1566+
__mspabi_fltlif,
1567+
// TODO The following IS implemented in libgcc but is not in the EABI
1568+
__mspabi_fltllif,
1569+
// TODO The following IS implemented in libgcc
1570+
//__mspabi_fltuf,
1571+
__mspabi_fltulf,
1572+
// The following IS implemented in libgcc but is not in the EABI
1573+
__mspabi_fltullf,
1574+
1575+
// Floating point comparisons - EABI Table 7
1576+
LibcallsWithCC<(add __mspabi_cmpd__oeq,
1577+
__mspabi_cmpd__une,
1578+
__mspabi_cmpd__oge,
1579+
__mspabi_cmpd__olt,
1580+
__mspabi_cmpd__ole,
1581+
__mspabi_cmpd__ogt), MSP430_BUILTIN>,
1582+
__mspabi_cmpf__oeq,
1583+
__mspabi_cmpf__une,
1584+
__mspabi_cmpf__oge,
1585+
__mspabi_cmpf__olt,
1586+
__mspabi_cmpf__ole,
1587+
__mspabi_cmpf__ogt,
1588+
1589+
// Floating point arithmetic - EABI Table 8
1590+
LibcallsWithCC<(add __mspabi_addd,
1591+
__mspabi_subd,
1592+
__mspabi_mpyd,
1593+
__mspabi_divd), MSP430_BUILTIN>,
1594+
1595+
__mspabi_addf,
1596+
__mspabi_subf,
1597+
__mspabi_mpyf,
1598+
__mspabi_divf,
1599+
1600+
// The following are NOT implemented in libgcc
1601+
// __mspabi_negd,
1602+
// __mspabi_negf,
1603+
1604+
// Universal Integer Operations - EABI Table 9
1605+
__mspabi_divi,
1606+
__mspabi_divli,
1607+
LibcallsWithCC<(add __mspabi_divlli), MSP430_BUILTIN>,
1608+
__mspabi_divu,
1609+
__mspabi_divul,
1610+
LibcallsWithCC<(add __mspabi_divull), MSP430_BUILTIN>,
1611+
__mspabi_remi,
1612+
__mspabi_remli,
1613+
LibcallsWithCC<(add __mspabi_remlli), MSP430_BUILTIN>,
1614+
__mspabi_remu,
1615+
__mspabi_remul,
1616+
LibcallsWithCC<(add __mspabi_remull), MSP430_BUILTIN>,
1617+
1618+
// Bitwise Operations - EABI Table 10
1619+
// TODO: __mspabi_[srli/srai/slli] ARE implemented in libgcc
1620+
__mspabi_srll,
1621+
__mspabi_sral,
1622+
__mspabi_slll
1623+
// __mspabi_[srlll/srall/sllll/rlli/rlll] are NOT implemented in libgcc
1624+
)
1625+
>;
1626+
15121627
//===----------------------------------------------------------------------===//
15131628
// NVPTX Runtime Libcalls
15141629
//===----------------------------------------------------------------------===//
@@ -1655,11 +1770,12 @@ def _Q_ulltoq : RuntimeLibcallImpl<UINTTOFP_I64_F128>;
16551770
//===----------------------------------------------------------------------===//
16561771

16571772
// TT.isWindowsMSVCEnvironment() || TT.isWindowsItaniumEnvironment()
1658-
def _alldiv : RuntimeLibcallImpl<SDIV_I64>; // CallingConv::X86_StdCall
1659-
def _aulldiv : RuntimeLibcallImpl<UDIV_I64>; // CallingConv::X86_StdCall
1660-
def _allrem : RuntimeLibcallImpl<SREM_I64>; // CallingConv::X86_StdCall
1661-
def _aullrem : RuntimeLibcallImpl<UREM_I64>; // CallingConv::X86_StdCall
1662-
def _allmul : RuntimeLibcallImpl<MUL_I64>; // CallingConv::X86_StdCall
1773+
1774+
def _alldiv : RuntimeLibcallImpl<SDIV_I64>;
1775+
def _aulldiv : RuntimeLibcallImpl<UDIV_I64>;
1776+
def _allrem : RuntimeLibcallImpl<SREM_I64>;
1777+
def _aullrem : RuntimeLibcallImpl<UREM_I64>;
1778+
def _allmul : RuntimeLibcallImpl<MUL_I64>;
16631779

16641780
//===----------------------------------------------------------------------===//
16651781
// XCore Runtime Libcalls

llvm/include/llvm/IR/RuntimeLibcallsImpl.td

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,19 @@ class LibcallLoweringPredicate<code cond> { code Cond = cond; }
2323

2424
def AlwaysAvailable : RuntimeLibcallPredicate<[{}]>;
2525

26+
class LibcallCallingConv<code CC = [{}]> {
27+
// Enum value for the calling convention. Empty string defaults to
28+
// CallingConv::C.
29+
code CallingConv = CC;
30+
}
31+
32+
def DefaultCC : LibcallCallingConv;
33+
def MSP430_BUILTIN : LibcallCallingConv<[{CallingConv::MSP430_BUILTIN}]>;
34+
def ARM_AAPCS : LibcallCallingConv<[{CallingConv::ARM_AAPCS}]>;
35+
def ARM_AAPCS_VFP : LibcallCallingConv<[{CallingConv::ARM_AAPCS_VFP}]>;
36+
def X86_STDCALL : LibcallCallingConv<[{CallingConv::X86_StdCall}]>;
37+
def AVR_BUILTIN : LibcallCallingConv<[{CallingConv::AVR_BUILTIN}]>;
38+
2639
/// Abstract definition for functionality the compiler may need to
2740
/// emit a call to. Emits the RTLIB::Libcall enum - This enum defines
2841
/// all of the runtime library calls the backend can emit. The various
@@ -41,7 +54,6 @@ class RuntimeLibcall {
4154
// Concrete implementation of a libcall, which may have a different
4255
// name and only be valid on some subset of targets.
4356

44-
// TODO: Do we need a way to conditionally select calling convention?
4557
class RuntimeLibcallImpl<RuntimeLibcall P, string Name = NAME> {
4658
RuntimeLibcall Provides = P;
4759
string LibCallFuncName = Name;
@@ -54,15 +66,27 @@ class LibcallImpls<dag funcList,
5466
// Function of the triple where this applies
5567
RuntimeLibcallPredicate AvailabilityPredicate = Pred;
5668
dag MemberList = funcList;
69+
70+
// If set, applies calling convention to every entry instead of
71+
// taking the system default.
72+
LibcallCallingConv CallingConv = ?;
5773
}
5874

5975
/// Convenience wrapper around LibcallImplSet to make a single libcall
6076
/// implementation conditionally conditionally available.
6177
class AvailableIf<RuntimeLibcallImpl Impl, RuntimeLibcallPredicate Pred>
6278
: LibcallImpls<(add Impl), Pred>;
6379

80+
class LibcallsWithCC<dag funcList, LibcallCallingConv CC,
81+
RuntimeLibcallPredicate Pred = AlwaysAvailable>
82+
: LibcallImpls<funcList, Pred> {
83+
LibcallCallingConv CallingConv = CC;
84+
}
85+
6486
/// Define a complete top level set of runtime libcalls for a target.
6587
class SystemRuntimeLibrary<RuntimeLibcallPredicate Pred, dag funcList> {
88+
/// Set the default calling convention assumed for RuntimeLibcallImpl members.
89+
LibcallCallingConv DefaultLibcallCallingConv = DefaultCC;
6690
RuntimeLibcallPredicate TriplePred = Pred;
6791
LibcallImpls MemberList = LibcallImpls<funcList>;
6892
}

llvm/lib/IR/RuntimeLibcalls.cpp

Lines changed: 0 additions & 141 deletions
Original file line numberDiff line numberDiff line change
@@ -100,137 +100,6 @@ static void setARMLibcallNames(RuntimeLibcallsInfo &Info, const Triple &TT,
100100
}
101101
}
102102

103-
static void setMSP430Libcalls(RuntimeLibcallsInfo &Info, const Triple &TT) {
104-
// EABI Libcalls - EABI Section 6.2
105-
const struct {
106-
const RTLIB::Libcall Op;
107-
const RTLIB::LibcallImpl Impl;
108-
} LibraryCalls[] = {
109-
// Floating point conversions - EABI Table 6
110-
{RTLIB::FPROUND_F64_F32, RTLIB::__mspabi_cvtdf},
111-
{RTLIB::FPEXT_F32_F64, RTLIB::__mspabi_cvtfd},
112-
// The following is NOT implemented in libgcc
113-
//{ RTLIB::FPTOSINT_F64_I16, RTLIB::__mspabi_fixdi },
114-
{RTLIB::FPTOSINT_F64_I32, RTLIB::__mspabi_fixdli},
115-
{RTLIB::FPTOSINT_F64_I64, RTLIB::__mspabi_fixdlli},
116-
// The following is NOT implemented in libgcc
117-
//{ RTLIB::FPTOUINT_F64_I16, RTLIB::__mspabi_fixdu },
118-
{RTLIB::FPTOUINT_F64_I32, RTLIB::__mspabi_fixdul},
119-
{RTLIB::FPTOUINT_F64_I64, RTLIB::__mspabi_fixdull},
120-
// The following is NOT implemented in libgcc
121-
//{ RTLIB::FPTOSINT_F32_I16, RTLIB::__mspabi_fixfi },
122-
{RTLIB::FPTOSINT_F32_I32, RTLIB::__mspabi_fixfli},
123-
{RTLIB::FPTOSINT_F32_I64, RTLIB::__mspabi_fixflli},
124-
// The following is NOT implemented in libgcc
125-
//{ RTLIB::FPTOUINT_F32_I16, RTLIB::__mspabi_fixfu },
126-
{RTLIB::FPTOUINT_F32_I32, RTLIB::__mspabi_fixful},
127-
{RTLIB::FPTOUINT_F32_I64, RTLIB::__mspabi_fixfull},
128-
// TODO The following IS implemented in libgcc
129-
//{ RTLIB::SINTTOFP_I16_F64, RTLIB::__mspabi_fltid },
130-
{RTLIB::SINTTOFP_I32_F64, RTLIB::__mspabi_fltlid},
131-
// TODO The following IS implemented in libgcc but is not in the EABI
132-
{RTLIB::SINTTOFP_I64_F64, RTLIB::__mspabi_fltllid},
133-
// TODO The following IS implemented in libgcc
134-
//{ RTLIB::UINTTOFP_I16_F64, RTLIB::__mspabi_fltud },
135-
{RTLIB::UINTTOFP_I32_F64, RTLIB::__mspabi_fltuld},
136-
// The following IS implemented in libgcc but is not in the EABI
137-
{RTLIB::UINTTOFP_I64_F64, RTLIB::__mspabi_fltulld},
138-
// TODO The following IS implemented in libgcc
139-
//{ RTLIB::SINTTOFP_I16_F32, RTLIB::__mspabi_fltif },
140-
{RTLIB::SINTTOFP_I32_F32, RTLIB::__mspabi_fltlif},
141-
// TODO The following IS implemented in libgcc but is not in the EABI
142-
{RTLIB::SINTTOFP_I64_F32, RTLIB::__mspabi_fltllif},
143-
// TODO The following IS implemented in libgcc
144-
//{ RTLIB::UINTTOFP_I16_F32, RTLIB::__mspabi_fltuf },
145-
{RTLIB::UINTTOFP_I32_F32, RTLIB::__mspabi_fltulf},
146-
// The following IS implemented in libgcc but is not in the EABI
147-
{RTLIB::UINTTOFP_I64_F32, RTLIB::__mspabi_fltullf},
148-
149-
// Floating point comparisons - EABI Table 7
150-
{RTLIB::OEQ_F64, RTLIB::__mspabi_cmpd__oeq},
151-
{RTLIB::UNE_F64, RTLIB::__mspabi_cmpd__une},
152-
{RTLIB::OGE_F64, RTLIB::__mspabi_cmpd__oge},
153-
{RTLIB::OLT_F64, RTLIB::__mspabi_cmpd__olt},
154-
{RTLIB::OLE_F64, RTLIB::__mspabi_cmpd__ole},
155-
{RTLIB::OGT_F64, RTLIB::__mspabi_cmpd__ogt},
156-
{RTLIB::OEQ_F32, RTLIB::__mspabi_cmpf__oeq},
157-
{RTLIB::UNE_F32, RTLIB::__mspabi_cmpf__une},
158-
{RTLIB::OGE_F32, RTLIB::__mspabi_cmpf__oge},
159-
{RTLIB::OLT_F32, RTLIB::__mspabi_cmpf__olt},
160-
{RTLIB::OLE_F32, RTLIB::__mspabi_cmpf__ole},
161-
{RTLIB::OGT_F32, RTLIB::__mspabi_cmpf__ogt},
162-
163-
// Floating point arithmetic - EABI Table 8
164-
{RTLIB::ADD_F64, RTLIB::__mspabi_addd},
165-
{RTLIB::ADD_F32, RTLIB::__mspabi_addf},
166-
{RTLIB::DIV_F64, RTLIB::__mspabi_divd},
167-
{RTLIB::DIV_F32, RTLIB::__mspabi_divf},
168-
{RTLIB::MUL_F64, RTLIB::__mspabi_mpyd},
169-
{RTLIB::MUL_F32, RTLIB::__mspabi_mpyf},
170-
{RTLIB::SUB_F64, RTLIB::__mspabi_subd},
171-
{RTLIB::SUB_F32, RTLIB::__mspabi_subf},
172-
// The following are NOT implemented in libgcc
173-
// { RTLIB::NEG_F64, RTLIB::__mspabi_negd },
174-
// { RTLIB::NEG_F32, RTLIB::__mspabi_negf },
175-
176-
// Universal Integer Operations - EABI Table 9
177-
{RTLIB::SDIV_I16, RTLIB::__mspabi_divi},
178-
{RTLIB::SDIV_I32, RTLIB::__mspabi_divli},
179-
{RTLIB::SDIV_I64, RTLIB::__mspabi_divlli},
180-
{RTLIB::UDIV_I16, RTLIB::__mspabi_divu},
181-
{RTLIB::UDIV_I32, RTLIB::__mspabi_divul},
182-
{RTLIB::UDIV_I64, RTLIB::__mspabi_divull},
183-
{RTLIB::SREM_I16, RTLIB::__mspabi_remi},
184-
{RTLIB::SREM_I32, RTLIB::__mspabi_remli},
185-
{RTLIB::SREM_I64, RTLIB::__mspabi_remlli},
186-
{RTLIB::UREM_I16, RTLIB::__mspabi_remu},
187-
{RTLIB::UREM_I32, RTLIB::__mspabi_remul},
188-
{RTLIB::UREM_I64, RTLIB::__mspabi_remull},
189-
190-
// Bitwise Operations - EABI Table 10
191-
// TODO: __mspabi_[srli/srai/slli] ARE implemented in libgcc
192-
{RTLIB::SRL_I32, RTLIB::__mspabi_srll},
193-
{RTLIB::SRA_I32, RTLIB::__mspabi_sral},
194-
{RTLIB::SHL_I32, RTLIB::__mspabi_slll},
195-
// __mspabi_[srlll/srall/sllll/rlli/rlll] are NOT implemented in libgcc
196-
};
197-
198-
for (const auto &LC : LibraryCalls)
199-
Info.setLibcallImpl(LC.Op, LC.Impl);
200-
201-
// Several of the runtime library functions use a special calling conv
202-
Info.setLibcallImplCallingConv(RTLIB::__mspabi_divull,
203-
CallingConv::MSP430_BUILTIN);
204-
Info.setLibcallImplCallingConv(RTLIB::__mspabi_remull,
205-
CallingConv::MSP430_BUILTIN);
206-
Info.setLibcallImplCallingConv(RTLIB::__mspabi_divlli,
207-
CallingConv::MSP430_BUILTIN);
208-
Info.setLibcallImplCallingConv(RTLIB::__mspabi_remlli,
209-
CallingConv::MSP430_BUILTIN);
210-
Info.setLibcallImplCallingConv(RTLIB::__mspabi_addd,
211-
CallingConv::MSP430_BUILTIN);
212-
Info.setLibcallImplCallingConv(RTLIB::__mspabi_subd,
213-
CallingConv::MSP430_BUILTIN);
214-
Info.setLibcallImplCallingConv(RTLIB::__mspabi_mpyd,
215-
CallingConv::MSP430_BUILTIN);
216-
Info.setLibcallImplCallingConv(RTLIB::__mspabi_divd,
217-
CallingConv::MSP430_BUILTIN);
218-
Info.setLibcallImplCallingConv(RTLIB::__mspabi_cmpd__oeq,
219-
CallingConv::MSP430_BUILTIN);
220-
Info.setLibcallImplCallingConv(RTLIB::__mspabi_cmpd__une,
221-
CallingConv::MSP430_BUILTIN);
222-
Info.setLibcallImplCallingConv(RTLIB::__mspabi_cmpd__oge,
223-
CallingConv::MSP430_BUILTIN);
224-
Info.setLibcallImplCallingConv(RTLIB::__mspabi_cmpd__olt,
225-
CallingConv::MSP430_BUILTIN);
226-
Info.setLibcallImplCallingConv(RTLIB::__mspabi_cmpd__ole,
227-
CallingConv::MSP430_BUILTIN);
228-
Info.setLibcallImplCallingConv(RTLIB::__mspabi_cmpd__ogt,
229-
CallingConv::MSP430_BUILTIN);
230-
231-
// TODO: __mspabi_srall, __mspabi_srlll, __mspabi_sllll
232-
}
233-
234103
void RuntimeLibcallsInfo::initSoftFloatCmpLibcallPredicates() {
235104
SoftFloatCompareLibcallPredicates[RTLIB::OEQ_F32] = CmpInst::ICMP_EQ;
236105
SoftFloatCompareLibcallPredicates[RTLIB::OEQ_F64] = CmpInst::ICMP_EQ;
@@ -473,13 +342,6 @@ void RuntimeLibcallsInfo::initLibcalls(const Triple &TT,
473342

474343
if (TT.isARM() || TT.isThumb())
475344
setARMLibcallNames(*this, TT, FloatABI, EABIVersion);
476-
else if (TT.getArch() == Triple::ArchType::avr) {
477-
// Several of the runtime library functions use a special calling conv
478-
setLibcallImplCallingConv(RTLIB::__divmodqi4, CallingConv::AVR_BUILTIN);
479-
setLibcallImplCallingConv(RTLIB::__divmodhi4, CallingConv::AVR_BUILTIN);
480-
setLibcallImplCallingConv(RTLIB::__udivmodqi4, CallingConv::AVR_BUILTIN);
481-
setLibcallImplCallingConv(RTLIB::__udivmodhi4, CallingConv::AVR_BUILTIN);
482-
}
483345

484346
if (!TT.isWasm()) {
485347
// These libcalls are only available in compiler-rt, not libgcc.
@@ -535,7 +397,4 @@ void RuntimeLibcallsInfo::initLibcalls(const Triple &TT,
535397
RTLIB::HEXAGON_MEMCPY_LIKELY_ALIGNED_MIN32BYTES_MULT8BYTES,
536398
RTLIB::__hexagon_memcpy_likely_aligned_min32bytes_mult8bytes);
537399
}
538-
539-
if (TT.getArch() == Triple::ArchType::msp430)
540-
setMSP430Libcalls(*this, TT);
541400
}

0 commit comments

Comments
 (0)