@@ -951,9 +951,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;
sparse-llvm has not yet support for OP_NEG and stop on an assert if one is encountered. Fix this by invoking the appropriate LLVMBuild[F]Neg(). Signed-off-by: Luc Van Oostenryck <luc.vanoostenryck@gmail.com> --- sparse-llvm.c | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-)