aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
-rw-r--r--sparse-llvm.c8
-rw-r--r--validation/backend/cmp-ops.c20
2 files changed, 24 insertions, 4 deletions
diff --git a/sparse-llvm.c b/sparse-llvm.c
index 6402666e..700a7a4d 100644
--- a/sparse-llvm.c
+++ b/sparse-llvm.c
@@ -502,10 +502,10 @@ static void output_op_binary(struct function *fn, struct instruction *insn)
target = LLVMBuildICmp(fn->builder, LLVMIntNE, lhs, rhs, target_name);
break;
case OP_SET_LE:
- assert(0);
+ target = LLVMBuildICmp(fn->builder, LLVMIntSLE, lhs, rhs, target_name);
break;
case OP_SET_GE:
- assert(0);
+ target = LLVMBuildICmp(fn->builder, LLVMIntSGE, lhs, rhs, target_name);
break;
case OP_SET_LT:
assert(!symbol_is_fp_type(insn->type));
@@ -522,10 +522,10 @@ static void output_op_binary(struct function *fn, struct instruction *insn)
target = LLVMBuildICmp(fn->builder, LLVMIntUGT, lhs, rhs, target_name);
break;
case OP_SET_BE:
- assert(0);
+ target = LLVMBuildICmp(fn->builder, LLVMIntULE, lhs, rhs, target_name);
break;
case OP_SET_AE:
- assert(0);
+ target = LLVMBuildICmp(fn->builder, LLVMIntUGE, lhs, rhs, target_name);
break;
default:
assert(0);
diff --git a/validation/backend/cmp-ops.c b/validation/backend/cmp-ops.c
index b1ad2275..7bbc81ce 100644
--- a/validation/backend/cmp-ops.c
+++ b/validation/backend/cmp-ops.c
@@ -18,6 +18,16 @@ static int setg(int x, int y)
return x > y;
}
+static int setle(int x, int y)
+{
+ return x <= y;
+}
+
+static int setge(int x, int y)
+{
+ return x >= y;
+}
+
static int setb(unsigned int x, unsigned int y)
{
return x < y;
@@ -28,6 +38,16 @@ static int seta(unsigned int x, unsigned int y)
return x > y;
}
+static int setbe(unsigned int x, unsigned int y)
+{
+ return x <= y;
+}
+
+static int setae(unsigned int x, unsigned int y)
+{
+ return x >= y;
+}
+
/*
* check-name: Comparison operator code generation
* check-command: ./sparsec -c $file -o tmp.o