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