[Reland][Runtimes] Merge 'compile_commands.json' files from runtimes build (#116303)
[llvm-project.git] / llvm / test / CodeGen / X86 / amx_movrs_transpose_intrinsics.ll
blob146b69773eb186a99f44fd853cdaa890a8f396f3
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc < %s -O0 -mtriple=x86_64-unknown-unknown -mattr=+amx-transpose,+amx-movrs | FileCheck %s --check-prefixes=CHECK,O0
3 ; RUN: llc < %s -O2 -mtriple=x86_64-unknown-unknown -mattr=+amx-transpose,+amx-movrs | FileCheck %s --check-prefixes=CHECK,O2
5 define void @test_amx(i64 %stride, i8* %addr1) #0 {
6 ; CHECK-LABEL: test_amx:
7 ; CHECK:       # %bb.0:
8 ; CHECK-NEXT:    t2rpntlvwz0rs (%rsi,%rdi), %tmm0
9 ; CHECK-NEXT:    t2rpntlvwz0rst1 (%rsi,%rdi), %tmm2
10 ; CHECK-NEXT:    t2rpntlvwz1rs (%rsi,%rdi), %tmm0
11 ; CHECK-NEXT:    t2rpntlvwz1rst1 (%rsi,%rdi), %tmm2
12 ; CHECK-NEXT:    retq
13   call void @llvm.x86.t2rpntlvwz0rs(i8 1, i8* %addr1, i64 %stride)
14   call void @llvm.x86.t2rpntlvwz0rst1(i8 2, i8* %addr1, i64 %stride)
15   call void @llvm.x86.t2rpntlvwz1rs(i8 1, i8* %addr1, i64 %stride)
16   call void @llvm.x86.t2rpntlvwz1rst1(i8 2, i8* %addr1, i64 %stride)
17   ret void
19 declare void @llvm.x86.t2rpntlvwz0rs(i8 , i8* , i64 )
20 declare void @llvm.x86.t2rpntlvwz0rst1(i8 , i8* , i64 )
21 declare void @llvm.x86.t2rpntlvwz1rs(i8 , i8* , i64 )
22 declare void @llvm.x86.t2rpntlvwz1rst1(i8 , i8* , i64 )
24 define void @test_amx2(i8* %base, i64 %stride) #0 {
25 ; O0-LABEL: test_amx2:
26 ; O0:       # %bb.0:
27 ; O0-NEXT:    xorps %xmm0, %xmm0
28 ; O0-NEXT:    movups %xmm0, -{{[0-9]+}}(%rsp)
29 ; O0-NEXT:    movups %xmm0, -{{[0-9]+}}(%rsp)
30 ; O0-NEXT:    movups %xmm0, -{{[0-9]+}}(%rsp)
31 ; O0-NEXT:    movups %xmm0, -{{[0-9]+}}(%rsp)
32 ; O0-NEXT:    movb $1, -{{[0-9]+}}(%rsp)
33 ; O0-NEXT:    movw $8, %ax
34 ; O0-NEXT:    # implicit-def: $al
35 ; O0-NEXT:    movb %al, -{{[0-9]+}}(%rsp)
36 ; O0-NEXT:    movw %ax, -{{[0-9]+}}(%rsp)
37 ; O0-NEXT:    # implicit-def: $al
38 ; O0-NEXT:    movb %al, -{{[0-9]+}}(%rsp)
39 ; O0-NEXT:    movw %ax, -{{[0-9]+}}(%rsp)
40 ; O0-NEXT:    ldtilecfg -{{[0-9]+}}(%rsp)
41 ; O0-NEXT:    t2rpntlvwz0rst1 (%rdi,%rsi), %tmm4
42 ; O0-NEXT:    movw $8, %ax
43 ; O0-NEXT:    # implicit-def: $al
44 ; O0-NEXT:    movb %al, -{{[0-9]+}}(%rsp)
45 ; O0-NEXT:    movw %ax, -{{[0-9]+}}(%rsp)
46 ; O0-NEXT:    # implicit-def: $al
47 ; O0-NEXT:    movb %al, -{{[0-9]+}}(%rsp)
48 ; O0-NEXT:    movw %ax, -{{[0-9]+}}(%rsp)
49 ; O0-NEXT:    ldtilecfg -{{[0-9]+}}(%rsp)
50 ; O0-NEXT:    t2rpntlvwz1rs (%rdi,%rsi), %tmm4
51 ; O0-NEXT:    movw $8, %ax
52 ; O0-NEXT:    # implicit-def: $al
53 ; O0-NEXT:    movb %al, -{{[0-9]+}}(%rsp)
54 ; O0-NEXT:    movw %ax, -{{[0-9]+}}(%rsp)
55 ; O0-NEXT:    # implicit-def: $al
56 ; O0-NEXT:    movb %al, -{{[0-9]+}}(%rsp)
57 ; O0-NEXT:    movw %ax, -{{[0-9]+}}(%rsp)
58 ; O0-NEXT:    ldtilecfg -{{[0-9]+}}(%rsp)
59 ; O0-NEXT:    t2rpntlvwz1rst1 (%rdi,%rsi), %tmm4
60 ; O0-NEXT:    tilerelease
61 ; O0-NEXT:    retq
63 ; O2-LABEL: test_amx2:
64 ; O2:       # %bb.0:
65 ; O2-NEXT:    xorps %xmm0, %xmm0
66 ; O2-NEXT:    movups %xmm0, -{{[0-9]+}}(%rsp)
67 ; O2-NEXT:    movups %xmm0, -{{[0-9]+}}(%rsp)
68 ; O2-NEXT:    movups %xmm0, -{{[0-9]+}}(%rsp)
69 ; O2-NEXT:    movups %xmm0, -{{[0-9]+}}(%rsp)
70 ; O2-NEXT:    movb $1, -{{[0-9]+}}(%rsp)
71 ; O2-NEXT:    movb $8, -{{[0-9]+}}(%rsp)
72 ; O2-NEXT:    movw $8, -{{[0-9]+}}(%rsp)
73 ; O2-NEXT:    movb $8, -{{[0-9]+}}(%rsp)
74 ; O2-NEXT:    movw $8, -{{[0-9]+}}(%rsp)
75 ; O2-NEXT:    ldtilecfg -{{[0-9]+}}(%rsp)
76 ; O2-NEXT:    movw $8, %ax
77 ; O2-NEXT:    t2rpntlvwz0rs (%rdi,%rsi), %tmm4
78 ; O2-NEXT:    t2rpntlvwz0rst1 (%rdi,%rsi), %tmm4
79 ; O2-NEXT:    t2rpntlvwz1rs (%rdi,%rsi), %tmm4
80 ; O2-NEXT:    t2rpntlvwz1rst1 (%rdi,%rsi), %tmm4
81 ; O2-NEXT:    tilerelease
82 ; O2-NEXT:    retq
83   call { x86_amx, x86_amx } @llvm.x86.t2rpntlvwz0rs.internal(i16 8, i16 8, i16 8, i8* %base, i64 %stride)
84   call { x86_amx, x86_amx } @llvm.x86.t2rpntlvwz0rst1.internal(i16 8, i16 8, i16 8, i8* %base, i64 %stride)
85   call { x86_amx, x86_amx } @llvm.x86.t2rpntlvwz1rs.internal(i16 8, i16 8, i16 8, i8* %base, i64 %stride)
86   call { x86_amx, x86_amx } @llvm.x86.t2rpntlvwz1rst1.internal(i16 8, i16 8, i16 8, i8* %base, i64 %stride)
87   ret void
89 declare { x86_amx, x86_amx } @llvm.x86.t2rpntlvwz0rs.internal(i16, i16, i16, i8*, i64)
90 declare { x86_amx, x86_amx } @llvm.x86.t2rpntlvwz0rst1.internal(i16, i16, i16, i8*, i64)
91 declare { x86_amx, x86_amx } @llvm.x86.t2rpntlvwz1rs.internal(i16, i16, i16, i8*, i64)
92 declare { x86_amx, x86_amx } @llvm.x86.t2rpntlvwz1rst1.internal(i16, i16, i16, i8*, i64)