[Mesa-dev] [PATCH 2/3] gallivm: add lp_build_alloca_undef
Nicolai Hähnle
nhaehnle at gmail.com
Tue Aug 9 10:38:26 UTC 2016
From: Nicolai Hähnle <nicolai.haehnle at amd.com>
---
src/gallium/auxiliary/gallivm/lp_bld_flow.c | 19 +++++++++++++++++++
src/gallium/auxiliary/gallivm/lp_bld_flow.h | 5 +++++
2 files changed, 24 insertions(+)
diff --git a/src/gallium/auxiliary/gallivm/lp_bld_flow.c b/src/gallium/auxiliary/gallivm/lp_bld_flow.c
index 9183f45..3c3f16c 100644
--- a/src/gallium/auxiliary/gallivm/lp_bld_flow.c
+++ b/src/gallium/auxiliary/gallivm/lp_bld_flow.c
@@ -501,20 +501,39 @@ lp_build_alloca(struct gallivm_state *gallivm,
res = LLVMBuildAlloca(first_builder, type, name);
LLVMBuildStore(builder, LLVMConstNull(type), res);
LLVMDisposeBuilder(first_builder);
return res;
}
/**
+ * Like lp_build_alloca_undef, but do not zero-initialize the variable.
+ */
+LLVMValueRef
+lp_build_alloca_undef(struct gallivm_state *gallivm,
+ LLVMTypeRef type,
+ const char *name)
+{
+ LLVMBuilderRef first_builder = create_builder_at_entry(gallivm);
+ LLVMValueRef res;
+
+ res = LLVMBuildAlloca(first_builder, type, name);
+
+ LLVMDisposeBuilder(first_builder);
+
+ return res;
+}
+
+
+/**
* Allocate an array of scalars/vectors.
*
* mem2reg pass is not capable of promoting structs or arrays to registers, but
* we still put it in the first block anyway as failure to put allocas in the
* first block may prevent the X86 backend from successfully align the stack as
* required.
*
* Also the scalarrepl pass is supposedly more powerful and can promote
* arrays in many cases.
*
diff --git a/src/gallium/auxiliary/gallivm/lp_bld_flow.h b/src/gallium/auxiliary/gallivm/lp_bld_flow.h
index 083b0ad..674fc18 100644
--- a/src/gallium/auxiliary/gallivm/lp_bld_flow.h
+++ b/src/gallium/auxiliary/gallivm/lp_bld_flow.h
@@ -189,20 +189,25 @@ lp_build_endif(struct lp_build_if_state *ctx);
LLVMBasicBlockRef
lp_build_insert_new_block(struct gallivm_state *gallivm, const char *name);
LLVMValueRef
lp_build_alloca(struct gallivm_state *gallivm,
LLVMTypeRef type,
const char *name);
LLVMValueRef
+lp_build_alloca_undef(struct gallivm_state *gallivm,
+ LLVMTypeRef type,
+ const char *name);
+
+LLVMValueRef
lp_build_array_alloca(struct gallivm_state *gallivm,
LLVMTypeRef type,
LLVMValueRef count,
const char *name);
#ifdef __cplusplus
}
#endif
#endif /* !LP_BLD_FLOW_H */
--
2.7.4
More information about the mesa-dev
mailing list