forked from OSchip/llvm-project
[X86] Remove isel predicates for xgetbv/xsetbv instructions so they can work on Windows.
https://reviews.llvm.org/D56686 was supposed to allow these to work on Windows without needing to enable the xsave feature to match MSVC. It seems this didn't work because the backend isel patterns would still block it. This patch removes the predicates from the isel patterns. Fixes PR51706. Reviewed By: pengfei Differential Revision: https://reviews.llvm.org/D109097
This commit is contained in:
parent
1637921134
commit
3e89cc5cda
|
@ -529,16 +529,17 @@ let SchedRW = [WriteSystem] in {
|
||||||
//===----------------------------------------------------------------------===//
|
//===----------------------------------------------------------------------===//
|
||||||
// XSAVE instructions
|
// XSAVE instructions
|
||||||
let SchedRW = [WriteSystem] in {
|
let SchedRW = [WriteSystem] in {
|
||||||
let Predicates = [HasXSAVE] in {
|
// NOTE: No HasXSAVE predicate so that these can be used with _xgetbv/_xsetbv
|
||||||
|
// on Windows without needing to enable the xsave feature to be compatible with
|
||||||
|
// MSVC.
|
||||||
let Defs = [EDX, EAX], Uses = [ECX] in
|
let Defs = [EDX, EAX], Uses = [ECX] in
|
||||||
def XGETBV : I<0x01, MRM_D0, (outs), (ins), "xgetbv", []>, PS;
|
def XGETBV : I<0x01, MRM_D0, (outs), (ins), "xgetbv", []>, PS;
|
||||||
|
|
||||||
let Uses = [EDX, EAX, ECX] in
|
let Uses = [EDX, EAX, ECX] in
|
||||||
def XSETBV : I<0x01, MRM_D1, (outs), (ins),
|
def XSETBV : I<0x01, MRM_D1, (outs), (ins),
|
||||||
"xsetbv",
|
"xsetbv",
|
||||||
[(int_x86_xsetbv ECX, EDX, EAX)]>, PS;
|
[(int_x86_xsetbv ECX, EDX, EAX)]>, PS;
|
||||||
|
|
||||||
} // HasXSAVE
|
|
||||||
|
|
||||||
let Uses = [EDX, EAX] in {
|
let Uses = [EDX, EAX] in {
|
||||||
def XSAVE : I<0xAE, MRM4m, (outs), (ins opaquemem:$dst),
|
def XSAVE : I<0xAE, MRM4m, (outs), (ins opaquemem:$dst),
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
; RUN: llc < %s -mtriple=i686-unknown-unknown -mattr=+xsave | FileCheck %s
|
; RUN: llc < %s -mtriple=i686-unknown-unknown | FileCheck %s
|
||||||
; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+xsave | FileCheck %s --check-prefix=CHECK64
|
; RUN: llc < %s -mtriple=x86_64-unknown-unknown | FileCheck %s --check-prefix=CHECK64
|
||||||
|
|
||||||
define void @test_xsetbv(i32 %in, i32 %high, i32 %low) {
|
define void @test_xsetbv(i32 %in, i32 %high, i32 %low) {
|
||||||
; CHECK-LABEL: test_xsetbv
|
; CHECK-LABEL: test_xsetbv
|
||||||
|
|
Loading…
Reference in New Issue