1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-11-25 04:02:41 +01:00

Add instructions to fold unary and binary instructions.

llvm-svn: 87
This commit is contained in:
Chris Lattner 2001-06-27 23:31:34 +00:00
parent 5cfc551fa2
commit 8daf407266

View File

@ -36,6 +36,7 @@
#define LLVM_OPT_CONSTANTHANDLING_H
#include "llvm/ConstPoolVals.h"
#include "llvm/Instruction.h"
#include "llvm/Type.h"
//===----------------------------------------------------------------------===//
@ -142,4 +143,35 @@ inline ConstPoolBool *operator<=(const ConstPoolVal &V1,
return Result; // !(V1 > V2)
}
//===----------------------------------------------------------------------===//
// Implement higher level instruction folding type instructions
//===----------------------------------------------------------------------===//
inline ConstPoolVal *ConstantFoldUnaryInstruction(unsigned Opcode,
ConstPoolVal *V) {
switch (Opcode) {
case Instruction::Not: return !*V;
case Instruction::Neg: return -*V;
}
return 0;
}
inline ConstPoolVal *ConstantFoldBinaryInstruction(unsigned Opcode,
ConstPoolVal *V1,
ConstPoolVal *V2) {
switch (Opcode) {
case Instruction::Add: return *V1 + *V2;
case Instruction::Sub: return *V1 - *V2;
case Instruction::SetEQ: return *V1 == *V2;
case Instruction::SetNE: return *V1 != *V2;
case Instruction::SetLE: return *V1 <= *V2;
case Instruction::SetGE: return *V1 >= *V2;
case Instruction::SetLT: return *V1 < *V2;
case Instruction::SetGT: return *V1 > *V2;
}
return 0;
}
#endif