aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
authorLuc Van Oostenryck <luc.vanoostenryck@gmail.com>2017-03-20 23:25:19 +0100
committerLuc Van Oostenryck <luc.vanoostenryck@gmail.com>2017-11-17 10:04:37 +0100
commitd7b0e39b2cfd90247c9b928afe95988c6ecd96ef (patch)
tree7fe19799d967737e00dd242a2feb5fb476a9ee8d
parent40bfd90b89f50da47b52c2ec4800ee611a02788c (diff)
downloadsparse-dev-d7b0e39b2cfd90247c9b928afe95988c6ecd96ef.tar.gz
llvm: fix mutated OP_[PTR]CAST
Signed-off-by: Luc Van Oostenryck <luc.vanoostenryck@gmail.com>
-rw-r--r--sparse-llvm.c10
1 files changed, 4 insertions, 6 deletions
diff --git a/sparse-llvm.c b/sparse-llvm.c
index 58230880..e6115d2e 100644
--- a/sparse-llvm.c
+++ b/sparse-llvm.c
@@ -879,13 +879,12 @@ static void output_op_ptrcast(struct function *fn, struct instruction *insn)
{
LLVMValueRef src, target;
LLVMTypeRef dtype;
+ struct symbol *otype = insn->orig_type;
LLVMOpcode op;
char target_name[64];
- src = insn->src->priv;
- if (!src)
- src = pseudo_to_value(fn, insn->type, insn->src);
+ src = get_operand(fn, otype, insn->src);
pseudo_name(insn->target, target_name);
assert(!is_float_type(insn->type));
@@ -910,16 +909,15 @@ static void output_op_cast(struct function *fn, struct instruction *insn, LLVMOp
{
LLVMValueRef src, target;
LLVMTypeRef dtype;
+ struct symbol *otype = insn->orig_type;
char target_name[64];
unsigned int width;
if (is_ptr_type(insn->type)) // cast to void* is OP_CAST ...
return output_op_ptrcast(fn, insn);
- src = insn->src->priv;
- if (!src)
- src = pseudo_to_value(fn, insn->type, insn->src);
+ src = get_operand(fn, otype, insn->src);
pseudo_name(insn->target, target_name);
assert(!is_float_type(insn->type));