[X86] Add XSAVE intrinsic family

Add intrinsics for the
  XSAVE instructions (XSAVE/XSAVE64/XRSTOR/XRSTOR64)
  XSAVEOPT instructions (XSAVEOPT/XSAVEOPT64)
  XSAVEC instructions (XSAVEC/XSAVEC64)
  XSAVES instructions (XSAVES/XSAVES64/XRSTORS/XRSTORS64)

Differential Revision: http://reviews.llvm.org/D13012

llvm-svn: 250029
diff --git a/llvm/test/CodeGen/X86/system-intrinsics-xsaves.ll b/llvm/test/CodeGen/X86/system-intrinsics-xsaves.ll
new file mode 100644
index 0000000..ca1c5c1
--- /dev/null
+++ b/llvm/test/CodeGen/X86/system-intrinsics-xsaves.ll
@@ -0,0 +1,23 @@
+; RUN: llc < %s -mtriple=i686-unknown-unknown -mattr=+xsave,+xsaves | FileCheck %s

+

+define void @test_xsaves(i8* %ptr, i32 %hi, i32 %lo) {

+; CHECK-LABEL: test_xsaves

+; CHECK: movl   8(%esp), %edx

+; CHECK: movl   12(%esp), %eax

+; CHECK: movl   4(%esp), %ecx

+; CHECK: xsaves (%ecx)

+  call void @llvm.x86.xsaves(i8* %ptr, i32 %hi, i32 %lo)

+  ret void;

+}

+declare void @llvm.x86.xsaves(i8*, i32, i32)

+

+define void @test_xrstors(i8* %ptr, i32 %hi, i32 %lo) {

+; CHECK-LABEL: test_xrstors

+; CHECK: movl    8(%esp), %edx

+; CHECK: movl    12(%esp), %eax

+; CHECK: movl    4(%esp), %ecx

+; CHECK: xrstors (%ecx)

+  call void @llvm.x86.xrstors(i8* %ptr, i32 %hi, i32 %lo)

+  ret void;

+}

+declare void @llvm.x86.xrstors(i8*, i32, i32)