diff options
| author | Luc Van Oostenryck <luc.vanoostenryck@gmail.com> | 2017-03-19 21:39:34 +0100 |
|---|---|---|
| committer | Luc Van Oostenryck <luc.vanoostenryck@gmail.com> | 2017-11-17 10:04:37 +0100 |
| commit | 2fb8e679d470c6c69662291731f13f9bf9816e5c (patch) | |
| tree | 953533f8129a8e5fd53a2963b8ad9f0324edb11f | |
| parent | 55144532db34e154f7e6339337d1ede0090a98c2 (diff) | |
| download | sparse-dev-2fb8e679d470c6c69662291731f13f9bf9816e5c.tar.gz | |
llvm: make value_to_pvalue() more flexible
Signed-off-by: Luc Van Oostenryck <luc.vanoostenryck@gmail.com>
| -rw-r--r-- | sparse-llvm.c | 15 |
1 files changed, 12 insertions, 3 deletions
diff --git a/sparse-llvm.c b/sparse-llvm.c index b1ceb614..6c2d0176 100644 --- a/sparse-llvm.c +++ b/sparse-llvm.c @@ -415,10 +415,19 @@ static LLVMValueRef value_to_ivalue(struct function *fn, LLVMValueRef val) static LLVMValueRef value_to_pvalue(struct function *fn, struct symbol *ctype, LLVMValueRef val) { - if (LLVMGetTypeKind(LLVMTypeOf(val)) == LLVMIntegerTypeKind) { - LLVMTypeRef dtype = symbol_type(ctype); - const char *name = LLVMGetValueName(val); + const char *name = LLVMGetValueName(val); + LLVMTypeRef dtype = symbol_type(ctype); + + assert(is_ptr_type(ctype)); + switch (LLVMGetTypeKind(LLVMTypeOf(val))) { + case LLVMIntegerTypeKind: val = LLVMBuildIntToPtr(fn->builder, val, dtype, name); + break; + case LLVMPointerTypeKind: + val = LLVMBuildBitCast(fn->builder, val, dtype, name); + break; + default: + break; } return val; } |
