You no longer have to delete constants! They are located in a global

constant pool instead of in local ones.

Change bool handling to prevent modification of bool values

llvm-svn: 436
This commit is contained in:
Chris Lattner 2001-09-07 16:29:18 +00:00
parent 5e89d7c81c
commit a7f5ed8f26
1 changed files with 11 additions and 19 deletions

View File

@ -12,10 +12,8 @@
//
//===----------------------------------------------------------------------===//
//
// WARNING: These operators return pointers to newly 'new'd objects. You MUST
// make sure to free them if you don't want them hanging around. Also,
// note that these may return a null object if I don't know how to
// perform those operations on the specified constant types.
// WARNING: These operators may return a null object if I don't know how to
// perform the specified operation on the specified constant types.
//
//===----------------------------------------------------------------------===//
//
@ -42,13 +40,18 @@
namespace opt {
//===----------------------------------------------------------------------===//
// Implement == directly...
// Implement == and != directly...
//===----------------------------------------------------------------------===//
inline ConstPoolBool *operator==(const ConstPoolVal &V1,
const ConstPoolVal &V2) {
assert(V1.getType() == V2.getType() && "Constant types must be identical!");
return new ConstPoolBool(V1.equals(&V2));
return ConstPoolBool::get(&V1 == &V2);
}
inline ConstPoolBool *operator!=(const ConstPoolVal &V1,
const ConstPoolVal &V2) {
return ConstPoolBool::get(&V1 != &V2);
}
//===----------------------------------------------------------------------===//
@ -156,25 +159,14 @@ inline ConstPoolBool *operator>(const ConstPoolVal &V1,
return V2 < V1;
}
inline ConstPoolBool *operator!=(const ConstPoolVal &V1,
const ConstPoolVal &V2) {
ConstPoolBool *Result = V1 == V2;
Result->setValue(!Result->getValue()); // Invert value
return Result; // !(V1 == V2)
}
inline ConstPoolBool *operator>=(const ConstPoolVal &V1,
const ConstPoolVal &V2) {
ConstPoolBool *Result = V1 < V2;
Result->setValue(!Result->getValue()); // Invert value
return Result; // !(V1 < V2)
return (V1 < V2)->inverted(); // !(V1 < V2)
}
inline ConstPoolBool *operator<=(const ConstPoolVal &V1,
const ConstPoolVal &V2) {
ConstPoolBool *Result = V1 > V2;
Result->setValue(!Result->getValue()); // Invert value
return Result; // !(V1 > V2)
return (V1 > V2)->inverted(); // !(V1 > V2)
}