xref: /llvm-project/llvm/test/CodeGen/X86/apx/no-rex2-special.ll (revision 7652a59407018c057cdc1163c9f64b5b6f0954eb)
1; NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2; RUN: llc < %s -mtriple=x86_64-unknown -stop-after=x86-isel -mattr=+xsave,+egpr  | FileCheck %s
3; RUN: llc < %s -enable-new-pm -mtriple=x86_64-unknown -stop-after=x86-isel -mattr=+xsave,+egpr  | FileCheck %s
4
5define void @test_xsave(ptr %ptr, i32 %hi, i32 %lo) {
6  ; CHECK-LABEL: name: test_xsave
7  ; CHECK: bb.0 (%ir-block.0):
8  ; CHECK-NEXT:   liveins: $rdi, $esi, $edx
9  ; CHECK-NEXT: {{  $}}
10  ; CHECK-NEXT:   [[COPY:%[0-9]+]]:gr32 = COPY $edx
11  ; CHECK-NEXT:   [[COPY1:%[0-9]+]]:gr32 = COPY $esi
12  ; CHECK-NEXT:   [[COPY2:%[0-9]+]]:gr64_norex2 = COPY $rdi
13  ; CHECK-NEXT:   $edx = COPY [[COPY1]]
14  ; CHECK-NEXT:   $eax = COPY [[COPY]]
15  ; CHECK-NEXT:   XSAVE [[COPY2]], 1, $noreg, 0, $noreg, implicit $edx, implicit $eax
16  ; CHECK-NEXT:   RET 0
17  call void @llvm.x86.xsave(ptr %ptr, i32 %hi, i32 %lo)
18  ret void;
19}
20declare void @llvm.x86.xsave(ptr, i32, i32)
21
22define void @test_xsave64(ptr %ptr, i32 %hi, i32 %lo) {
23  ; CHECK-LABEL: name: test_xsave64
24  ; CHECK: bb.0 (%ir-block.0):
25  ; CHECK-NEXT:   liveins: $rdi, $esi, $edx
26  ; CHECK-NEXT: {{  $}}
27  ; CHECK-NEXT:   [[COPY:%[0-9]+]]:gr32 = COPY $edx
28  ; CHECK-NEXT:   [[COPY1:%[0-9]+]]:gr32 = COPY $esi
29  ; CHECK-NEXT:   [[COPY2:%[0-9]+]]:gr64_norex2 = COPY $rdi
30  ; CHECK-NEXT:   $edx = COPY [[COPY1]]
31  ; CHECK-NEXT:   $eax = COPY [[COPY]]
32  ; CHECK-NEXT:   XSAVE64 [[COPY2]], 1, $noreg, 0, $noreg, implicit $edx, implicit $eax
33  ; CHECK-NEXT:   RET 0
34  call void @llvm.x86.xsave64(ptr %ptr, i32 %hi, i32 %lo)
35  ret void;
36}
37declare void @llvm.x86.xsave64(ptr, i32, i32)
38
39define void @test_xrstor(ptr %ptr, i32 %hi, i32 %lo) {
40  ; CHECK-LABEL: name: test_xrstor
41  ; CHECK: bb.0 (%ir-block.0):
42  ; CHECK-NEXT:   liveins: $rdi, $esi, $edx
43  ; CHECK-NEXT: {{  $}}
44  ; CHECK-NEXT:   [[COPY:%[0-9]+]]:gr32 = COPY $edx
45  ; CHECK-NEXT:   [[COPY1:%[0-9]+]]:gr32 = COPY $esi
46  ; CHECK-NEXT:   [[COPY2:%[0-9]+]]:gr64_norex2 = COPY $rdi
47  ; CHECK-NEXT:   $edx = COPY [[COPY1]]
48  ; CHECK-NEXT:   $eax = COPY [[COPY]]
49  ; CHECK-NEXT:   XRSTOR [[COPY2]], 1, $noreg, 0, $noreg, implicit $edx, implicit $eax
50  ; CHECK-NEXT:   RET 0
51  call void @llvm.x86.xrstor(ptr %ptr, i32 %hi, i32 %lo)
52  ret void;
53}
54declare void @llvm.x86.xrstor(ptr, i32, i32)
55
56define void @test_xrstor64(ptr %ptr, i32 %hi, i32 %lo) {
57  ; CHECK-LABEL: name: test_xrstor64
58  ; CHECK: bb.0 (%ir-block.0):
59  ; CHECK-NEXT:   liveins: $rdi, $esi, $edx
60  ; CHECK-NEXT: {{  $}}
61  ; CHECK-NEXT:   [[COPY:%[0-9]+]]:gr32 = COPY $edx
62  ; CHECK-NEXT:   [[COPY1:%[0-9]+]]:gr32 = COPY $esi
63  ; CHECK-NEXT:   [[COPY2:%[0-9]+]]:gr64_norex2 = COPY $rdi
64  ; CHECK-NEXT:   $edx = COPY [[COPY1]]
65  ; CHECK-NEXT:   $eax = COPY [[COPY]]
66  ; CHECK-NEXT:   XRSTOR64 [[COPY2]], 1, $noreg, 0, $noreg, implicit $edx, implicit $eax
67  ; CHECK-NEXT:   RET 0
68  call void @llvm.x86.xrstor64(ptr %ptr, i32 %hi, i32 %lo)
69  ret void;
70}
71declare void @llvm.x86.xrstor64(ptr, i32, i32)
72