aboutsummaryrefslogtreecommitdiff
path: root/src/llvm_backend_expr.cpp
diff options
context:
space:
mode:
authorgingerBill <bill@gingerbill.org>2021-10-20 15:36:24 +0100
committergingerBill <bill@gingerbill.org>2021-10-20 15:36:24 +0100
commit30c141ceb98d4b65418fb70c572f86cd701dd872 (patch)
tree78f257ec2885b3d8acb44032fc38502f260b5cab /src/llvm_backend_expr.cpp
parentd3abc1a2b4fe024fed5f2b9f5371fc2b7fb029be (diff)
Minor clean up for `lb_matrix_trimmed_vector_mask`
Diffstat (limited to 'src/llvm_backend_expr.cpp')
-rw-r--r--src/llvm_backend_expr.cpp14
1 files changed, 8 insertions, 6 deletions
diff --git a/src/llvm_backend_expr.cpp b/src/llvm_backend_expr.cpp
index 7d1c8e3db..beb860383 100644
--- a/src/llvm_backend_expr.cpp
+++ b/src/llvm_backend_expr.cpp
@@ -517,18 +517,14 @@ LLVMValueRef lb_matrix_to_vector(lbProcedure *p, lbValue matrix) {
return matrix_vector;
}
-LLVMValueRef lb_matrix_to_trimmed_vector(lbProcedure *p, lbValue m) {
- Type *mt = base_type(m.type);
+LLVMValueRef lb_matrix_trimmed_vector_mask(lbProcedure *p, Type *mt) {
+ mt = base_type(mt);
GB_ASSERT(mt->kind == Type_Matrix);
unsigned stride = cast(unsigned)matrix_type_stride_in_elems(mt);
unsigned row_count = cast(unsigned)mt->Matrix.row_count;
unsigned column_count = cast(unsigned)mt->Matrix.column_count;
- auto columns = slice_make<LLVMValueRef>(permanent_allocator(), column_count);
-
- LLVMValueRef vector = lb_matrix_to_vector(p, m);
-
unsigned mask_elems_index = 0;
auto mask_elems = slice_make<LLVMValueRef>(permanent_allocator(), row_count*column_count);
for (unsigned j = 0; j < column_count; j++) {
@@ -539,6 +535,12 @@ LLVMValueRef lb_matrix_to_trimmed_vector(lbProcedure *p, lbValue m) {
}
LLVMValueRef mask = LLVMConstVector(mask_elems.data, cast(unsigned)mask_elems.count);
+ return mask;
+}
+
+LLVMValueRef lb_matrix_to_trimmed_vector(lbProcedure *p, lbValue m) {
+ LLVMValueRef vector = lb_matrix_to_vector(p, m);
+ LLVMValueRef mask = lb_matrix_trimmed_vector_mask(p, m.type);
LLVMValueRef trimmed_vector = LLVMBuildShuffleVector(p->builder, vector, LLVMGetUndef(LLVMTypeOf(vector)), mask, "");
return trimmed_vector;
}