aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
-rw-r--r--sparse-llvm.c14
-rw-r--r--validation/backend/degenerate-ptr.c1
-rw-r--r--validation/backend/function-ptr.c1
-rw-r--r--validation/backend/pointer-param.c1
-rw-r--r--validation/backend/symaddr.c1
5 files changed, 12 insertions, 6 deletions
diff --git a/sparse-llvm.c b/sparse-llvm.c
index 08f055a9..0043b797 100644
--- a/sparse-llvm.c
+++ b/sparse-llvm.c
@@ -403,6 +403,16 @@ static LLVMValueRef pseudo_to_value(struct function *fn, struct symbol *ctype, p
return result;
}
+static LLVMValueRef pseudo_to_rvalue(struct function *fn, struct symbol *ctype, pseudo_t pseudo)
+{
+ LLVMValueRef val = pseudo_to_value(fn, ctype, pseudo);
+ LLVMTypeRef dtype = symbol_type(ctype);
+ char name[MAX_PSEUDO_NAME];
+
+ pseudo_name(pseudo, name);
+ return LLVMBuildBitCast(fn->builder, val, dtype, name);
+}
+
static LLVMValueRef value_to_ivalue(struct function *fn, struct symbol *ctype, LLVMValueRef val)
{
const char *name = LLVMGetValueName(val);
@@ -712,7 +722,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->type, insn->target);
+ target_in = pseudo_to_rvalue(fn, insn->type, insn->target);
/* perform store */
LLVMBuildStore(fn->builder, target_in, addr);
@@ -800,7 +810,7 @@ static void output_op_call(struct function *fn, struct instruction *insn)
i = 0;
FOR_EACH_PTR(insn->arguments, arg) {
NEXT_PTR_LIST(ctype);
- args[i++] = pseudo_to_value(fn, ctype, arg);
+ args[i++] = pseudo_to_rvalue(fn, ctype, arg);
} END_FOR_EACH_PTR(arg);
FINISH_PTR_LIST(ctype);
diff --git a/validation/backend/degenerate-ptr.c b/validation/backend/degenerate-ptr.c
index 5e71d0d8..8de979e0 100644
--- a/validation/backend/degenerate-ptr.c
+++ b/validation/backend/degenerate-ptr.c
@@ -69,5 +69,4 @@ void global(void)
/*
* check-name: degenerated pointer handling
* check-command: ./sparsec -c $file -o tmp.o
- * check-known-to-fail
*/
diff --git a/validation/backend/function-ptr.c b/validation/backend/function-ptr.c
index dbf3cab3..4fac9dc2 100644
--- a/validation/backend/function-ptr.c
+++ b/validation/backend/function-ptr.c
@@ -150,5 +150,4 @@ void ops(int a, int *p, struct ops *ops)
/*
* check-name: Function pointer code generation
* check-command: sparsec -c $file -o tmp.o
- * check-known-to-fail
*/
diff --git a/validation/backend/pointer-param.c b/validation/backend/pointer-param.c
index 745d069f..b705e6f4 100644
--- a/validation/backend/pointer-param.c
+++ b/validation/backend/pointer-param.c
@@ -39,5 +39,4 @@ void foo(int *p, int a[5], int (*pfun)(int))
/*
* check-name: pointer-param
* check-command: ./sparsec -c $file -o tmp.o
- * check-known-to-fail
*/
diff --git a/validation/backend/symaddr.c b/validation/backend/symaddr.c
index 8b450111..71fb9def 100644
--- a/validation/backend/symaddr.c
+++ b/validation/backend/symaddr.c
@@ -67,5 +67,4 @@ void gfoo(int *p, int a)
/*
* check-name: symbol address
* check-command: ./sparsec -Wno-decl -c $file -o tmp.o
- * check-known-to-fail
*/