|
11 | 11 | using namespace llvm;
|
12 | 12 | using namespace RTLIB;
|
13 | 13 |
|
| 14 | +void RuntimeLibcallsInfo::initSoftFloatCmpLibcallPredicates() { |
| 15 | + std::fill(SoftFloatCompareLibcallPredicates, |
| 16 | + SoftFloatCompareLibcallPredicates + RTLIB::UNKNOWN_LIBCALL, |
| 17 | + CmpInst::BAD_ICMP_PREDICATE); |
| 18 | + SoftFloatCompareLibcallPredicates[RTLIB::OEQ_F32] = CmpInst::ICMP_EQ; |
| 19 | + SoftFloatCompareLibcallPredicates[RTLIB::OEQ_F64] = CmpInst::ICMP_EQ; |
| 20 | + SoftFloatCompareLibcallPredicates[RTLIB::OEQ_F128] = CmpInst::ICMP_EQ; |
| 21 | + SoftFloatCompareLibcallPredicates[RTLIB::OEQ_PPCF128] = CmpInst::ICMP_EQ; |
| 22 | + SoftFloatCompareLibcallPredicates[RTLIB::UNE_F32] = CmpInst::ICMP_NE; |
| 23 | + SoftFloatCompareLibcallPredicates[RTLIB::UNE_F64] = CmpInst::ICMP_NE; |
| 24 | + SoftFloatCompareLibcallPredicates[RTLIB::UNE_F128] = CmpInst::ICMP_NE; |
| 25 | + SoftFloatCompareLibcallPredicates[RTLIB::UNE_PPCF128] = CmpInst::ICMP_NE; |
| 26 | + SoftFloatCompareLibcallPredicates[RTLIB::OGE_F32] = CmpInst::ICMP_SGE; |
| 27 | + SoftFloatCompareLibcallPredicates[RTLIB::OGE_F64] = CmpInst::ICMP_SGE; |
| 28 | + SoftFloatCompareLibcallPredicates[RTLIB::OGE_F128] = CmpInst::ICMP_SGE; |
| 29 | + SoftFloatCompareLibcallPredicates[RTLIB::OGE_PPCF128] = CmpInst::ICMP_SGE; |
| 30 | + SoftFloatCompareLibcallPredicates[RTLIB::OLT_F32] = CmpInst::ICMP_SLT; |
| 31 | + SoftFloatCompareLibcallPredicates[RTLIB::OLT_F64] = CmpInst::ICMP_SLT; |
| 32 | + SoftFloatCompareLibcallPredicates[RTLIB::OLT_F128] = CmpInst::ICMP_SLT; |
| 33 | + SoftFloatCompareLibcallPredicates[RTLIB::OLT_PPCF128] = CmpInst::ICMP_SLT; |
| 34 | + SoftFloatCompareLibcallPredicates[RTLIB::OLE_F32] = CmpInst::ICMP_SLE; |
| 35 | + SoftFloatCompareLibcallPredicates[RTLIB::OLE_F64] = CmpInst::ICMP_SLE; |
| 36 | + SoftFloatCompareLibcallPredicates[RTLIB::OLE_F128] = CmpInst::ICMP_SLE; |
| 37 | + SoftFloatCompareLibcallPredicates[RTLIB::OLE_PPCF128] = CmpInst::ICMP_SLE; |
| 38 | + SoftFloatCompareLibcallPredicates[RTLIB::OGT_F32] = CmpInst::ICMP_SGT; |
| 39 | + SoftFloatCompareLibcallPredicates[RTLIB::OGT_F64] = CmpInst::ICMP_SGT; |
| 40 | + SoftFloatCompareLibcallPredicates[RTLIB::OGT_F128] = CmpInst::ICMP_SGT; |
| 41 | + SoftFloatCompareLibcallPredicates[RTLIB::OGT_PPCF128] = CmpInst::ICMP_SGT; |
| 42 | + SoftFloatCompareLibcallPredicates[RTLIB::UO_F32] = CmpInst::ICMP_NE; |
| 43 | + SoftFloatCompareLibcallPredicates[RTLIB::UO_F64] = CmpInst::ICMP_NE; |
| 44 | + SoftFloatCompareLibcallPredicates[RTLIB::UO_F128] = CmpInst::ICMP_NE; |
| 45 | + SoftFloatCompareLibcallPredicates[RTLIB::UO_PPCF128] = CmpInst::ICMP_NE; |
| 46 | +} |
| 47 | + |
14 | 48 | /// Set default libcall names. If a target wants to opt-out of a libcall it
|
15 | 49 | /// should be placed here.
|
16 | 50 | void RuntimeLibcallsInfo::initLibcalls(const Triple &TT) {
|
17 | 51 | std::fill(std::begin(LibcallRoutineNames), std::end(LibcallRoutineNames),
|
18 | 52 | nullptr);
|
19 | 53 |
|
| 54 | + initSoftFloatCmpLibcallPredicates(); |
| 55 | + |
20 | 56 | #define HANDLE_LIBCALL(code, name) setLibcallName(RTLIB::code, name);
|
21 | 57 | #include "llvm/IR/RuntimeLibcalls.def"
|
22 | 58 | #undef HANDLE_LIBCALL
|
|
0 commit comments