aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPekka Enberg <penberg@kernel.org>2011-11-22 17:27:55 +0200
committerPekka Enberg <penberg@kernel.org>2011-11-22 17:27:55 +0200
commitd3e0567c425b6334e4ae71d5067ded447b5a9d75 (patch)
treebf4818721eaed22fdab00ad766e531e25efcbef7
parent2b67f8548ad54267e6c53a9d22f9f16affd07e97 (diff)
downloadsparse-d3e0567c425b6334e4ae71d5067ded447b5a9d75.tar.gz
sparse, llvm: OP_SET_B and OP_SET_A code generation
This patch implement unsigned less than and greater than comparison operator LLVM code generation. Cc: Christopher Li <sparse@chrisli.org> Cc: Jeff Garzik <jgarzik@redhat.com> Cc: Linus Torvalds <torvalds@linux-foundation.org> Signed-off-by: Pekka Enberg <penberg@kernel.org>
-rw-r--r--sparse-llvm.c4
-rw-r--r--validation/backend/cmp-ops.c10
2 files changed, 12 insertions, 2 deletions
diff --git a/sparse-llvm.c b/sparse-llvm.c
index e3d8883a..6402666e 100644
--- a/sparse-llvm.c
+++ b/sparse-llvm.c
@@ -516,10 +516,10 @@ static void output_op_binary(struct function *fn, struct instruction *insn)
target = LLVMBuildICmp(fn->builder, LLVMIntSGT, lhs, rhs, target_name);
break;
case OP_SET_B:
- assert(0);
+ target = LLVMBuildICmp(fn->builder, LLVMIntULT, lhs, rhs, target_name);
break;
case OP_SET_A:
- assert(0);
+ target = LLVMBuildICmp(fn->builder, LLVMIntUGT, lhs, rhs, target_name);
break;
case OP_SET_BE:
assert(0);
diff --git a/validation/backend/cmp-ops.c b/validation/backend/cmp-ops.c
index 5a89bee7..b1ad2275 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 setb(unsigned int x, unsigned int y)
+{
+ return x < y;
+}
+
+static int seta(unsigned int x, unsigned int y)
+{
+ return x > y;
+}
+
/*
* check-name: Comparison operator code generation
* check-command: ./sparsec -c $file -o tmp.o