diff options
| author | Luc Van Oostenryck <luc.vanoostenryck@gmail.com> | 2017-03-19 21:59:31 +0100 |
|---|---|---|
| committer | Luc Van Oostenryck <luc.vanoostenryck@gmail.com> | 2017-11-17 10:04:37 +0100 |
| commit | 410e2ee59d5791090685ca638f88d0ba60859d1a (patch) | |
| tree | 8b4527a8d699c17d249626a75420a06228ff2c5b | |
| parent | cec2a1d03f10003498209f2311f4a86865c6fbf3 (diff) | |
| download | sparse-dev-410e2ee59d5791090685ca638f88d0ba60859d1a.tar.gz | |
llvm: let pseudo_to_value() directly use the type
Signed-off-by: Luc Van Oostenryck <luc.vanoostenryck@gmail.com>
| -rw-r--r-- | sparse-llvm.c | 42 |
1 files changed, 21 insertions, 21 deletions
diff --git a/sparse-llvm.c b/sparse-llvm.c index 75e396e5..1713367a 100644 --- a/sparse-llvm.c +++ b/sparse-llvm.c @@ -372,7 +372,7 @@ static LLVMValueRef val_to_value(unsigned long long val, struct symbol *ctype) return constant_value(val, dtype); } -static LLVMValueRef pseudo_to_value(struct function *fn, struct instruction *insn, pseudo_t pseudo) +static LLVMValueRef pseudo_to_value(struct function *fn, struct symbol *ctype, pseudo_t pseudo) { LLVMValueRef result = NULL; @@ -384,7 +384,7 @@ static LLVMValueRef pseudo_to_value(struct function *fn, struct instruction *ins result = get_sym_value(fn, pseudo->sym); break; case PSEUDO_VAL: - result = val_to_value(pseudo->value, insn->type); + result = val_to_value(pseudo->value, ctype); break; case PSEUDO_ARG: { result = LLVMGetParam(fn->fn, pseudo->nr - 1); @@ -505,10 +505,10 @@ static void output_op_binary(struct function *fn, struct instruction *insn) LLVMValueRef lhs, rhs, target; char target_name[64]; - lhs = pseudo_to_value(fn, insn, insn->src1); + lhs = pseudo_to_value(fn, insn->type, insn->src1); lhs = value_to_ivalue(fn, insn->type, lhs); - rhs = pseudo_to_value(fn, insn, insn->src2); + rhs = pseudo_to_value(fn, insn->type, insn->src2); rhs = value_to_ivalue(fn, insn->type, rhs); pseudo_name(insn->target, target_name); @@ -619,11 +619,11 @@ static void output_op_compare(struct function *fn, struct instruction *insn) LLVMValueRef lhs, rhs, target; char target_name[64]; - lhs = pseudo_to_value(fn, insn, insn->src1); + lhs = pseudo_to_value(fn, NULL, insn->src1); if (insn->src2->type == PSEUDO_VAL) rhs = constant_value(insn->src2->value, LLVMTypeOf(lhs)); else - rhs = pseudo_to_value(fn, insn, insn->src2); + rhs = pseudo_to_value(fn, NULL, insn->src2); pseudo_name(insn->target, target_name); @@ -662,7 +662,7 @@ static void output_op_ret(struct function *fn, struct instruction *insn) pseudo_t pseudo = insn->src; if (pseudo && pseudo != VOID) { - LLVMValueRef result = pseudo_to_value(fn, insn, pseudo); + LLVMValueRef result = pseudo_to_value(fn, insn->type, pseudo); result = adjust_type(fn, insn->type, result); LLVMBuildRet(fn->builder, result); @@ -681,7 +681,7 @@ static LLVMValueRef calc_memop_addr(struct function *fn, struct instruction *ins off = LLVMConstInt(int_type, insn->offset, 0); /* convert src to the effective pointer type */ - src = pseudo_to_value(fn, insn, insn->src); + src = pseudo_to_value(fn, insn->type, insn->src); as = LLVMGetPointerAddressSpace(LLVMTypeOf(src)); addr_type = LLVMPointerType(insn_symbol_type(insn), as); src = LLVMBuildPointerCast(fn->builder, src, addr_type, LLVMGetValueName(src)); @@ -712,7 +712,7 @@ static void output_op_store(struct function *fn, struct instruction *insn) addr = calc_memop_addr(fn, insn); - target_in = pseudo_to_value(fn, insn, insn->target); + target_in = pseudo_to_value(fn, insn->type, insn->target); /* perform store */ LLVMBuildStore(fn->builder, target_in, addr); @@ -729,7 +729,7 @@ static LLVMValueRef bool_value(struct function *fn, LLVMValueRef value) static void output_op_cbr(struct function *fn, struct instruction *br) { LLVMValueRef cond = bool_value(fn, - pseudo_to_value(fn, br, br->cond)); + pseudo_to_value(fn, NULL, br->cond)); LLVMBuildCondBr(fn->builder, cond, br->bb_true->priv, @@ -746,9 +746,9 @@ static void output_op_sel(struct function *fn, struct instruction *insn) LLVMValueRef target, src1, src2, src3; char name[MAX_PSEUDO_NAME]; - src1 = bool_value(fn, pseudo_to_value(fn, insn, insn->src1)); - src2 = pseudo_to_value(fn, insn, insn->src2); - src3 = pseudo_to_value(fn, insn, insn->src3); + src1 = bool_value(fn, pseudo_to_value(fn, NULL, insn->src1)); + src2 = pseudo_to_value(fn, insn->type, insn->src2); + src3 = pseudo_to_value(fn, insn->type, insn->src3); pseudo_name(insn->target, name); target = LLVMBuildSelect(fn->builder, src1, src2, src3, name); @@ -770,7 +770,7 @@ static void output_op_switch(struct function *fn, struct instruction *insn) def = jmp->target; } END_FOR_EACH_PTR(jmp); - sw_val = pseudo_to_value(fn, insn, insn->target); + sw_val = pseudo_to_value(fn, insn->type, insn->target); target = LLVMBuildSwitch(fn->builder, sw_val, def ? def->priv : NULL, n_jmp); @@ -797,10 +797,10 @@ static void output_op_call(struct function *fn, struct instruction *insn) i = 0; FOR_EACH_PTR(insn->arguments, arg) { - args[i++] = pseudo_to_value(fn, insn, arg); + args[i++] = pseudo_to_value(fn, NULL, arg); } END_FOR_EACH_PTR(arg); - func = pseudo_to_value(fn, insn, insn->func); + func = pseudo_to_value(fn, NULL, insn->func); pseudo_name(insn->target, name); target = LLVMBuildCall(fn->builder, func, args, n_arg, name); @@ -815,7 +815,7 @@ static void output_op_phisrc(struct function *fn, struct instruction *insn) assert(insn->target->priv == NULL); /* target = src */ - v = pseudo_to_value(fn, insn, insn->phi_src); + v = pseudo_to_value(fn, insn->type, insn->phi_src); FOR_EACH_PTR(insn->phi_users, phi) { LLVMValueRef load, ptr; @@ -851,7 +851,7 @@ static void output_op_ptrcast(struct function *fn, struct instruction *insn) src = insn->src->priv; if (!src) - src = pseudo_to_value(fn, insn, insn->src); + src = pseudo_to_value(fn, insn->type, insn->src); pseudo_name(insn->target, target_name); @@ -885,7 +885,7 @@ static void output_op_cast(struct function *fn, struct instruction *insn, LLVMOp src = insn->src->priv; if (!src) - src = pseudo_to_value(fn, insn, insn->src); + src = pseudo_to_value(fn, insn->type, insn->src); pseudo_name(insn->target, target_name); @@ -1006,7 +1006,7 @@ static void output_insn(struct function *fn, struct instruction *insn) LLVMValueRef src, target; char target_name[64]; - src = pseudo_to_value(fn, insn, insn->src); + src = pseudo_to_value(fn, insn->type, insn->src); pseudo_name(insn->target, target_name); @@ -1019,7 +1019,7 @@ static void output_insn(struct function *fn, struct instruction *insn) LLVMValueRef src, target; char target_name[64]; - src = pseudo_to_value(fn, insn, insn->src); + src = pseudo_to_value(fn, insn->type, insn->src); pseudo_name(insn->target, target_name); |
