mirror of
https://github.com/c3lang/c3c.git
synced 2026-02-27 12:01:16 +00:00
Add $$matrix_mul and $$matrix_transpose builtins.
This commit is contained in:
38
test/test_suite/builtins/matrix_builtin.c3t
Normal file
38
test/test_suite/builtins/matrix_builtin.c3t
Normal file
@@ -0,0 +1,38 @@
|
||||
// #target: macos-x64
|
||||
module test;
|
||||
fn int main()
|
||||
{
|
||||
int[<4>] x = { 1, 2, 3, 4 };
|
||||
int[<4>] z = $$matrix_mul(x, x, 2, 2, 2);
|
||||
int[<2>] a = { 1, 2 };
|
||||
int[<3>] b = { 1, 2, 3 };
|
||||
int[<6>] c = $$matrix_mul(a, b, 2, 1, 3);
|
||||
c = $$matrix_transpose(c, 2, 3);
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* #expect: test.ll
|
||||
|
||||
define i32 @main() #0 {
|
||||
entry:
|
||||
%x = alloca <4 x i32>, align 16
|
||||
%z = alloca <4 x i32>, align 16
|
||||
%a = alloca <2 x i32>, align 8
|
||||
%b = alloca <3 x i32>, align 16
|
||||
%c = alloca <6 x i32>, align 32
|
||||
store <4 x i32> <i32 1, i32 2, i32 3, i32 4>, ptr %x, align 16
|
||||
%0 = load <4 x i32>, ptr %x, align 16
|
||||
%1 = load <4 x i32>, ptr %x, align 16
|
||||
%2 = call <4 x i32> @llvm.matrix.multiply.v4i32.v4i32.v4i32(<4 x i32> %0, <4 x i32> %1, i32 2, i32 2, i32 2)
|
||||
store <4 x i32> %2, ptr %z, align 16
|
||||
store <2 x i32> <i32 1, i32 2>, ptr %a, align 8
|
||||
store <3 x i32> <i32 1, i32 2, i32 3>, ptr %b, align 16
|
||||
%3 = load <2 x i32>, ptr %a, align 8
|
||||
%4 = load <3 x i32>, ptr %b, align 16
|
||||
%5 = call <6 x i32> @llvm.matrix.multiply.v6i32.v2i32.v3i32(<2 x i32> %3, <3 x i32> %4, i32 2, i32 1, i32 3)
|
||||
store <6 x i32> %5, ptr %c, align 32
|
||||
%6 = load <6 x i32>, ptr %c, align 32
|
||||
%7 = call <6 x i32> @llvm.matrix.transpose.v6i32(<6 x i32> %6, i32 2, i32 3)
|
||||
store <6 x i32> %7, ptr %c, align 32
|
||||
ret i32 0
|
||||
}
|
||||
Reference in New Issue
Block a user