1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
#include "IRprinter.h"
std::string print_as_op(Value *v, bool print_ty) {
std::string op_ir;
if (print_ty) {
op_ir += v->get_type()->print();
op_ir += " ";
}
if (dynamic_cast<GlobalVariable *>(v)) {
op_ir += "@" + v->get_name();
} else if (dynamic_cast<Function *>(v)) {
op_ir += "@" + v->get_name();
} else if (dynamic_cast<Constant *>(v)) {
op_ir += v->print();
} else {
op_ir += "%" + v->get_name();
}
return op_ir;
}
std::string print_cmp_type(CmpInst::CmpOp op) {
switch (op) {
case CmpInst::GE: return "sge"; break;
case CmpInst::GT: return "sgt"; break;
case CmpInst::LE: return "sle"; break;
case CmpInst::LT: return "slt"; break;
case CmpInst::EQ: return "eq"; break;
case CmpInst::NE: return "ne"; break;
default: break;
}
return "wrong cmpop";
}
std::string print_fcmp_type(FCmpInst::CmpOp op) {
switch (op) {
case FCmpInst::GE: return "uge"; break;
case FCmpInst::GT: return "ugt"; break;
case FCmpInst::LE: return "ule"; break;
case FCmpInst::LT: return "ult"; break;
case FCmpInst::EQ: return "ueq"; break;
case FCmpInst::NE: return "une"; break;
default: break;
}
return "wrong fcmpop";
}