Fix C++ output for unordered fp compares.
Fixes a bug introduced in 46716aada3.
This commit is contained in:
31
cbackend.cpp
31
cbackend.cpp
@@ -3233,17 +3233,22 @@ void CWriter::visitFCmpInst(FCmpInst &I) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Note that we always generate calls to the ordered functions here,
|
||||
// since the regular C++ comparison ops should give us what we
|
||||
// originally wanted when we generated the unordered ones from the
|
||||
// ispc source.
|
||||
|
||||
if (isVector) {
|
||||
switch (I.getPredicate()) {
|
||||
default: llvm_unreachable("Illegal FCmp predicate");
|
||||
case FCmpInst::FCMP_ORD: Out << "__ordered("; break;
|
||||
case FCmpInst::FCMP_UNO: Out << "__cmpunord("; break;
|
||||
case FCmpInst::FCMP_UEQ: Out << "__ucomeq("; break;
|
||||
case FCmpInst::FCMP_UNE: Out << "__ucomneq("; break;
|
||||
case FCmpInst::FCMP_ULT: Out << "__ucomlt("; break;
|
||||
case FCmpInst::FCMP_ULE: Out << "__ucomle("; break;
|
||||
case FCmpInst::FCMP_UGT: Out << "__ucomgt("; break;
|
||||
case FCmpInst::FCMP_UGE: Out << "__ucomge("; break;
|
||||
case FCmpInst::FCMP_UEQ: Out << "__equal("; break;
|
||||
case FCmpInst::FCMP_UNE: Out << "__not_equal("; break;
|
||||
case FCmpInst::FCMP_ULT: Out << "__less_than("; break;
|
||||
case FCmpInst::FCMP_ULE: Out << "__less_equal("; break;
|
||||
case FCmpInst::FCMP_UGT: Out << "__greater_than("; break;
|
||||
case FCmpInst::FCMP_UGE: Out << "__greater_equal("; break;
|
||||
case FCmpInst::FCMP_OEQ: Out << "__equal("; break;
|
||||
case FCmpInst::FCMP_ONE: Out << "__not_equal("; break;
|
||||
case FCmpInst::FCMP_OLT: Out << "__less_than("; break;
|
||||
@@ -3258,12 +3263,14 @@ void CWriter::visitFCmpInst(FCmpInst &I) {
|
||||
default: llvm_unreachable("Illegal FCmp predicate");
|
||||
case FCmpInst::FCMP_ORD: op = "ord"; break;
|
||||
case FCmpInst::FCMP_UNO: op = "uno"; break;
|
||||
case FCmpInst::FCMP_UEQ: op = "ueq"; break;
|
||||
case FCmpInst::FCMP_UNE: op = "une"; break;
|
||||
case FCmpInst::FCMP_ULT: op = "ult"; break;
|
||||
case FCmpInst::FCMP_ULE: op = "ule"; break;
|
||||
case FCmpInst::FCMP_UGT: op = "ugt"; break;
|
||||
case FCmpInst::FCMP_UGE: op = "uge"; break;
|
||||
|
||||
case FCmpInst::FCMP_UEQ: op = "oeq"; break;
|
||||
case FCmpInst::FCMP_UNE: op = "one"; break;
|
||||
case FCmpInst::FCMP_ULT: op = "olt"; break;
|
||||
case FCmpInst::FCMP_ULE: op = "ole"; break;
|
||||
case FCmpInst::FCMP_UGT: op = "ogt"; break;
|
||||
case FCmpInst::FCMP_UGE: op = "oge"; break;
|
||||
|
||||
case FCmpInst::FCMP_OEQ: op = "oeq"; break;
|
||||
case FCmpInst::FCMP_ONE: op = "one"; break;
|
||||
case FCmpInst::FCMP_OLT: op = "olt"; break;
|
||||
|
||||
Reference in New Issue
Block a user