diff --git a/llvm/lib/Target/X86/X86InstrSystem.td b/llvm/lib/Target/X86/X86InstrSystem.td index 48c27051a8723..0f86f0364ccd1 100644 --- a/llvm/lib/Target/X86/X86InstrSystem.td +++ b/llvm/lib/Target/X86/X86InstrSystem.td @@ -529,16 +529,17 @@ let SchedRW = [WriteSystem] in { //===----------------------------------------------------------------------===// // XSAVE instructions 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 - 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 - def XSETBV : I<0x01, MRM_D1, (outs), (ins), - "xsetbv", - [(int_x86_xsetbv ECX, EDX, EAX)]>, PS; +def XSETBV : I<0x01, MRM_D1, (outs), (ins), + "xsetbv", + [(int_x86_xsetbv ECX, EDX, EAX)]>, PS; -} // HasXSAVE let Uses = [EDX, EAX] in { def XSAVE : I<0xAE, MRM4m, (outs), (ins opaquemem:$dst), diff --git a/llvm/test/CodeGen/X86/system-intrinsics-xsetbv.ll b/llvm/test/CodeGen/X86/system-intrinsics-xsetbv.ll index a0961a097ec2f..64ae257cb376c 100644 --- a/llvm/test/CodeGen/X86/system-intrinsics-xsetbv.ll +++ b/llvm/test/CodeGen/X86/system-intrinsics-xsetbv.ll @@ -1,5 +1,5 @@ -; RUN: llc < %s -mtriple=i686-unknown-unknown -mattr=+xsave | FileCheck %s -; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+xsave | FileCheck %s --check-prefix=CHECK64 +; RUN: llc < %s -mtriple=i686-unknown-unknown | FileCheck %s +; RUN: llc < %s -mtriple=x86_64-unknown-unknown | FileCheck %s --check-prefix=CHECK64 define void @test_xsetbv(i32 %in, i32 %high, i32 %low) { ; CHECK-LABEL: test_xsetbv