summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorMichael Liao <michael.liao@intel.com>2013-12-03 09:17:32 +0000
committerMichael Liao <michael.liao@intel.com>2013-12-03 09:17:32 +0000
commit239ffb30b0cefd4e5eb9b410e92bc7df51936233 (patch)
treecc47edf9fe0dbe3545897a1efa899fa7db5f0274 /test
parent07fc4841b1e438db1cfb0d24fb06556cd99aa14b (diff)
downloadllvm-239ffb30b0cefd4e5eb9b410e92bc7df51936233.tar.gz
llvm-239ffb30b0cefd4e5eb9b410e92bc7df51936233.tar.bz2
llvm-239ffb30b0cefd4e5eb9b410e92bc7df51936233.tar.xz
Enhance the fix of PR17631
- The fix to PR17631 fixes part of the cases where 'vzeroupper' should not be issued before 'call' insn. There're other cases where helper calls will be inserted not limited to epilog. These helper calls do not follow the standard calling convention and won't clobber any YMM registers. (So far, all call conventions will clobber any or part of YMM registers.) This patch enhances the previous fix to cover more cases 'vzerosupper' should not be inserted by checking if that function call won't clobber any YMM registers and skipping it if so. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@196261 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test')
-rw-r--r--test/CodeGen/X86/pr17631.ll20
1 files changed, 16 insertions, 4 deletions
diff --git a/test/CodeGen/X86/pr17631.ll b/test/CodeGen/X86/pr17631.ll
index a572ff2e3b..98f951f1b1 100644
--- a/test/CodeGen/X86/pr17631.ll
+++ b/test/CodeGen/X86/pr17631.ll
@@ -1,16 +1,16 @@
; RUN: llc < %s -mcpu=core-avx-i -mtriple=i386-pc-win32 | FileCheck %s
-
+
%struct_type = type { [64 x <8 x float>], <8 x float> }
-
+
; Function Attrs: nounwind readnone
declare i32 @llvm.x86.avx.movmsk.ps.256(<8 x float>)
-
+
; Function Attrs: nounwind
define i32 @equal(<8 x i32> %A) {
allocas:
%first_alloc = alloca [64 x <8 x i32>]
%second_alloc = alloca %struct_type
-
+
%A1 = bitcast <8 x i32> %A to <8 x float>
%A2 = call i32 @llvm.x86.avx.movmsk.ps.256(<8 x float> %A1)
ret i32 %A2
@@ -20,3 +20,15 @@ allocas:
; CHECK-NOT: vzeroupper
; CHECK: _chkstk
; CHECK: ret
+
+define <8 x float> @foo(<8 x float> %y, i64* %p, double %x) {
+ %i = fptoui double %x to i64
+ store i64 %i, i64* %p
+ %ret = fadd <8 x float> %y, %y
+ ret <8 x float> %ret
+}
+
+; CHECK: foo
+; CHECK-NOT: vzeroupper
+; CHECK: _ftol2
+; CHECK: ret