aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
-rw-r--r--sparse-llvm.c17
1 files changed, 15 insertions, 2 deletions
diff --git a/sparse-llvm.c b/sparse-llvm.c
index 99b18ae8..3dbb9874 100644
--- a/sparse-llvm.c
+++ b/sparse-llvm.c
@@ -942,9 +942,22 @@ static void output_insn(struct function *fn, struct instruction *insn)
insn->target->priv = target;
break;
}
- case OP_NEG:
- assert(0);
+ case OP_NEG: {
+ LLVMValueRef src, target;
+ char target_name[64];
+
+ src = pseudo_to_value(fn, insn, insn->src);
+
+ pseudo_name(insn->target, target_name);
+
+ if (is_float_type(insn->type))
+ target = LLVMBuildFNeg(fn->builder, src, target_name);
+ else
+ target = LLVMBuildNeg(fn->builder, src, target_name);
+
+ insn->target->priv = target;
break;
+ }
case OP_CONTEXT:
assert(0);
break;