aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
-rw-r--r--functional/binops.c20
-rw-r--r--sparse-llvm.c34
2 files changed, 50 insertions, 4 deletions
diff --git a/functional/binops.c b/functional/binops.c
index 16af33e7..bd618e00 100644
--- a/functional/binops.c
+++ b/functional/binops.c
@@ -118,4 +118,24 @@ unsigned int uor_bool(unsigned int x, unsigned int y)
{
return x || y;
}
+
+int sete(int x, int y)
+{
+ return x == y;
+}
+
+int setne(int x, int y)
+{
+ return x != y;
+}
+
+int setl(int x, int y)
+{
+ return x < y;
+}
+
+int setg(int x, int y)
+{
+ return x > y;
+}
#endif
diff --git a/sparse-llvm.c b/sparse-llvm.c
index d59c78bc..d15d3f6c 100644
--- a/sparse-llvm.c
+++ b/sparse-llvm.c
@@ -185,10 +185,10 @@ static void output_op_binary(struct function *fn, struct instruction *insn)
/* Binary comparison */
case OP_SET_EQ:
- assert(0);
+ target = LLVMBuildICmp(fn->builder, LLVMIntEQ, lhs, rhs, target_name);
break;
case OP_SET_NE:
- assert(0);
+ target = LLVMBuildICmp(fn->builder, LLVMIntNE, lhs, rhs, target_name);
break;
case OP_SET_LE:
assert(0);
@@ -197,10 +197,10 @@ static void output_op_binary(struct function *fn, struct instruction *insn)
assert(0);
break;
case OP_SET_LT:
- assert(0);
+ target = LLVMBuildICmp(fn->builder, LLVMIntSLT, lhs, rhs, target_name);
break;
case OP_SET_GT:
- assert(0);
+ target = LLVMBuildICmp(fn->builder, LLVMIntSGT, lhs, rhs, target_name);
break;
case OP_SET_B:
assert(0);
@@ -241,52 +241,78 @@ static void output_insn(struct function *fn, struct instruction *insn)
output_op_ret(fn, insn);
break;
case OP_BR:
+ assert(0);
break;
case OP_SYMADDR:
+ assert(0);
break;
case OP_SETVAL:
+ assert(0);
break;
case OP_SWITCH:
+ assert(0);
break;
case OP_COMPUTEDGOTO:
+ assert(0);
break;
case OP_PHISOURCE:
+ assert(0);
break;
case OP_PHI:
+ assert(0);
break;
case OP_LOAD: case OP_LNOP:
+ assert(0);
break;
case OP_STORE: case OP_SNOP:
+ assert(0);
break;
case OP_INLINED_CALL:
case OP_CALL:
+ assert(0);
break;
case OP_CAST:
+ assert(0);
+ break;
case OP_SCAST:
+ assert(0);
+ break;
case OP_FPCAST:
+ assert(0);
+ break;
case OP_PTRCAST:
+ assert(0);
break;
case OP_BINARY ... OP_BINARY_END:
case OP_BINCMP ... OP_BINCMP_END:
output_op_binary(fn, insn);
break;
case OP_SEL:
+ assert(0);
break;
case OP_SLICE:
+ assert(0);
break;
case OP_NOT: case OP_NEG:
+ assert(0);
break;
case OP_CONTEXT:
+ assert(0);
break;
case OP_RANGE:
+ assert(0);
break;
case OP_NOP:
+ assert(0);
break;
case OP_DEATHNOTE:
+ assert(0);
break;
case OP_ASM:
+ assert(0);
break;
case OP_COPY:
+ assert(0);
break;
default:
break;