aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorlaytan <laytanlaats@hotmail.com>2025-11-29 12:14:06 +0100
committerlaytan <laytanlaats@hotmail.com>2025-11-29 12:14:06 +0100
commit4db4841413095645e2319afcafc1db7276259f9d (patch)
tree43cc5ebe43ab7e2143d49a58bed759ca7e5f1ec2
parent31817be087eae5b8025c0dbb4676977bb79e5b36 (diff)
fix matrix transpose with different result type
Fixes #5623
-rw-r--r--src/llvm_backend_expr.cpp4
-rw-r--r--src/llvm_backend_proc.cpp2
2 files changed, 3 insertions, 3 deletions
diff --git a/src/llvm_backend_expr.cpp b/src/llvm_backend_expr.cpp
index 187c34595..40b749e1b 100644
--- a/src/llvm_backend_expr.cpp
+++ b/src/llvm_backend_expr.cpp
@@ -634,7 +634,7 @@ gb_internal LLVMValueRef lb_matrix_to_trimmed_vector(lbProcedure *p, lbValue m)
}
-gb_internal lbValue lb_emit_matrix_tranpose(lbProcedure *p, lbValue m, Type *type) {
+gb_internal lbValue lb_emit_matrix_transpose(lbProcedure *p, lbValue m, Type *type) {
if (is_type_array(m.type)) {
i32 rank = type_math_rank(m.type);
if (rank == 2) {
@@ -664,7 +664,7 @@ gb_internal lbValue lb_emit_matrix_tranpose(lbProcedure *p, lbValue m, Type *typ
Type *mt = base_type(m.type);
GB_ASSERT(mt->kind == Type_Matrix);
- if (lb_is_matrix_simdable(mt)) {
+ if (lb_is_matrix_simdable(mt) && lb_is_matrix_simdable(type)) {
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;
diff --git a/src/llvm_backend_proc.cpp b/src/llvm_backend_proc.cpp
index 890556a61..10e10564e 100644
--- a/src/llvm_backend_proc.cpp
+++ b/src/llvm_backend_proc.cpp
@@ -2681,7 +2681,7 @@ gb_internal lbValue lb_build_builtin_proc(lbProcedure *p, Ast *expr, TypeAndValu
case BuiltinProc_transpose:
{
lbValue m = lb_build_expr(p, ce->args[0]);
- return lb_emit_matrix_tranpose(p, m, tv.type);
+ return lb_emit_matrix_transpose(p, m, tv.type);
}
case BuiltinProc_outer_product: