70 lines
2.8 KiB
LLVM
70 lines
2.8 KiB
LLVM
; NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
|
|
; RUN: llc < %s -mtriple=x86_64-unknown -stop-after=x86-isel -mattr=+xsave,+egpr | FileCheck %s
|
|
|
|
define void @test_xsave(ptr %ptr, i32 %hi, i32 %lo) {
|
|
; CHECK-LABEL: name: test_xsave
|
|
; CHECK: bb.0 (%ir-block.0):
|
|
; CHECK-NEXT: liveins: $rdi, $esi, $edx
|
|
; CHECK-NEXT: {{ $}}
|
|
; CHECK-NEXT: [[COPY:%[0-9]+]]:gr32 = COPY $edx
|
|
; CHECK-NEXT: [[COPY1:%[0-9]+]]:gr32 = COPY $esi
|
|
; CHECK-NEXT: [[COPY2:%[0-9]+]]:gr64_norex2 = COPY $rdi
|
|
; CHECK-NEXT: $edx = COPY [[COPY1]]
|
|
; CHECK-NEXT: $eax = COPY [[COPY]]
|
|
; CHECK-NEXT: XSAVE [[COPY2]], 1, $noreg, 0, $noreg, implicit $edx, implicit $eax
|
|
; CHECK-NEXT: RET 0
|
|
call void @llvm.x86.xsave(ptr %ptr, i32 %hi, i32 %lo)
|
|
ret void;
|
|
}
|
|
declare void @llvm.x86.xsave(ptr, i32, i32)
|
|
|
|
define void @test_xsave64(ptr %ptr, i32 %hi, i32 %lo) {
|
|
; CHECK-LABEL: name: test_xsave64
|
|
; CHECK: bb.0 (%ir-block.0):
|
|
; CHECK-NEXT: liveins: $rdi, $esi, $edx
|
|
; CHECK-NEXT: {{ $}}
|
|
; CHECK-NEXT: [[COPY:%[0-9]+]]:gr32 = COPY $edx
|
|
; CHECK-NEXT: [[COPY1:%[0-9]+]]:gr32 = COPY $esi
|
|
; CHECK-NEXT: [[COPY2:%[0-9]+]]:gr64_norex2 = COPY $rdi
|
|
; CHECK-NEXT: $edx = COPY [[COPY1]]
|
|
; CHECK-NEXT: $eax = COPY [[COPY]]
|
|
; CHECK-NEXT: XSAVE64 [[COPY2]], 1, $noreg, 0, $noreg, implicit $edx, implicit $eax
|
|
; CHECK-NEXT: RET 0
|
|
call void @llvm.x86.xsave64(ptr %ptr, i32 %hi, i32 %lo)
|
|
ret void;
|
|
}
|
|
declare void @llvm.x86.xsave64(ptr, i32, i32)
|
|
|
|
define void @test_xrstor(ptr %ptr, i32 %hi, i32 %lo) {
|
|
; CHECK-LABEL: name: test_xrstor
|
|
; CHECK: bb.0 (%ir-block.0):
|
|
; CHECK-NEXT: liveins: $rdi, $esi, $edx
|
|
; CHECK-NEXT: {{ $}}
|
|
; CHECK-NEXT: [[COPY:%[0-9]+]]:gr32 = COPY $edx
|
|
; CHECK-NEXT: [[COPY1:%[0-9]+]]:gr32 = COPY $esi
|
|
; CHECK-NEXT: [[COPY2:%[0-9]+]]:gr64_norex2 = COPY $rdi
|
|
; CHECK-NEXT: $edx = COPY [[COPY1]]
|
|
; CHECK-NEXT: $eax = COPY [[COPY]]
|
|
; CHECK-NEXT: XRSTOR [[COPY2]], 1, $noreg, 0, $noreg, implicit $edx, implicit $eax
|
|
; CHECK-NEXT: RET 0
|
|
call void @llvm.x86.xrstor(ptr %ptr, i32 %hi, i32 %lo)
|
|
ret void;
|
|
}
|
|
declare void @llvm.x86.xrstor(ptr, i32, i32)
|
|
|
|
define void @test_xrstor64(ptr %ptr, i32 %hi, i32 %lo) {
|
|
; CHECK-LABEL: name: test_xrstor64
|
|
; CHECK: bb.0 (%ir-block.0):
|
|
; CHECK-NEXT: liveins: $rdi, $esi, $edx
|
|
; CHECK-NEXT: {{ $}}
|
|
; CHECK-NEXT: [[COPY:%[0-9]+]]:gr32 = COPY $edx
|
|
; CHECK-NEXT: [[COPY1:%[0-9]+]]:gr32 = COPY $esi
|
|
; CHECK-NEXT: [[COPY2:%[0-9]+]]:gr64_norex2 = COPY $rdi
|
|
; CHECK-NEXT: $edx = COPY [[COPY1]]
|
|
; CHECK-NEXT: $eax = COPY [[COPY]]
|
|
; CHECK-NEXT: XRSTOR64 [[COPY2]], 1, $noreg, 0, $noreg, implicit $edx, implicit $eax
|
|
; CHECK-NEXT: RET 0
|
|
call void @llvm.x86.xrstor64(ptr %ptr, i32 %hi, i32 %lo)
|
|
ret void;
|
|
}
|
|
declare void @llvm.x86.xrstor64(ptr, i32, i32)
|