Create an option to turn off generation of fcmp instructions while still

allowing integer setxx instructions to be converted to icmp.

llvm-svn: 32302
This commit is contained in:
Reid Spencer 2006-12-07 04:22:23 +00:00
parent bee1306634
commit fc9ca55b6a
1 changed files with 9 additions and 0 deletions

View File

@ -24,6 +24,7 @@
#define YYINCLUDED_STDLIB_H #define YYINCLUDED_STDLIB_H
#define YYDEBUG 1 #define YYDEBUG 1
#define UPGRADE_SETCOND_OPS 0 #define UPGRADE_SETCOND_OPS 0
#define GENERATE_FCMP_INSTS 0
int yylex(); // declaration" of xxx warnings. int yylex(); // declaration" of xxx warnings.
int yyparse(); int yyparse();
@ -247,8 +248,16 @@ getCompareOp(const std::string& setcc, const TypeInfo& TI) {
result[6] = cc1; result[6] = cc1;
result[7] = cc2; result[7] = cc2;
if (TI.isFloatingPoint()) { if (TI.isFloatingPoint()) {
#if GENERATE_FCMP_INSTS
result[0] = 'f'; result[0] = 'f';
result[5] = 'o'; // FIXME: Always map to ordered comparison ? result[5] = 'o'; // FIXME: Always map to ordered comparison ?
if (cc1 == 'n')
result[5] = 'u'; // NE maps to unordered
else
result[5] = 'o'; // everything else maps to ordered
#else
result = setcc;
#endif
} else if (TI.isIntegral() || TI.isPointer()) { } else if (TI.isIntegral() || TI.isPointer()) {
result[0] = 'i'; result[0] = 'i';
if ((cc1 == 'e' && cc2 == 'q') || (cc1 == 'n' && cc2 == 'e')) if ((cc1 == 'e' && cc2 == 'q') || (cc1 == 'n' && cc2 == 'e'))