summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorCraig Topper <craig.topper@intel.com>2017-09-12 03:50:44 +0000
committerCraig Topper <craig.topper@intel.com>2017-09-12 03:50:44 +0000
commitafdc36ed74fc151917947e43b0da6dba0df65752 (patch)
tree234c2685dc9c9dede8971d53ea96095f311ebd7d
parentf162013e6e5eef49af8e2d2ba185a3e995d8ec72 (diff)
downloadbcm5719-llvm-afdc36ed74fc151917947e43b0da6dba0df65752.tar.gz
bcm5719-llvm-afdc36ed74fc151917947e43b0da6dba0df65752.zip
[X86] Add an extra instruction to TruncAssertSext.ll to prevent the 'or' from being narrowed so that the movl is really required to avoid a miscompile.
If we allow the OR to be narrowed then the upper bits really are zero and we can't tell if the zeroing movl was removed on purpose. While here regenerate the test with update_llc_test_checks.py llvm-svn: 312995
-rw-r--r--llvm/test/CodeGen/X86/TruncAssertSext.ll12
1 files changed, 8 insertions, 4 deletions
diff --git a/llvm/test/CodeGen/X86/TruncAssertSext.ll b/llvm/test/CodeGen/X86/TruncAssertSext.ll
index 3d92cb045ae..d4f9a5d4873 100644
--- a/llvm/test/CodeGen/X86/TruncAssertSext.ll
+++ b/llvm/test/CodeGen/X86/TruncAssertSext.ll
@@ -1,16 +1,20 @@
-; RUN: llc < %s -O2 -mtriple=x86_64-- | FileCheck %s
+; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
+; RUN: llc < %s -O2 -mtriple=x86_64-unknown-unknown | FileCheck %s
; Checks that a zeroing mov is inserted for the trunc/zext pair even when
; the source of the zext is an AssertSext node
; PR20494
define i64 @main(i64 %a) {
-; CHECK-LABEL: main
-; CHECK: movl %e{{..}}, %eax
-; CHECK: ret
+; CHECK-LABEL: main:
+; CHECK: # BB#0:
+; CHECK-NEXT: orq $-2, %rdi
+; CHECK-NEXT: movl %edi, %eax
+; CHECK-NEXT: retq
%or = or i64 %a, -2
%trunc = trunc i64 %or to i32
br label %l
l:
%ext = zext i32 %trunc to i64
+ trunc i64 %or to i32 ; to keep the or from being narrowed
ret i64 %ext
}
OpenPOWER on IntegriCloud