summaryrefslogtreecommitdiff
path: root/test/CodeGen/X86/subreg-to-reg-0.ll
diff options
context:
space:
mode:
authorDan Gohman <gohman@apple.com>2008-08-07 02:54:50 +0000
committerDan Gohman <gohman@apple.com>2008-08-07 02:54:50 +0000
commite3d920699c6df959f3e0844aeadd983b2955b23e (patch)
tree7578dc6bd96037d61f965d03bac25fbe96259ad7 /test/CodeGen/X86/subreg-to-reg-0.ll
parent865db4566e84b788e5738fec462804a779223b8b (diff)
downloadllvm-e3d920699c6df959f3e0844aeadd983b2955b23e.tar.gz
llvm-e3d920699c6df959f3e0844aeadd983b2955b23e.tar.bz2
llvm-e3d920699c6df959f3e0844aeadd983b2955b23e.tar.xz
Re-enable elimination of unnecessary SUBREG_TO_REG instructions in
LowerSubregs, and fix an x86-64 isel bug that this exposed. SUBREG_TO_REG for x86-64 implicit zero extension is only safe for isel to generate when the source is known to always have zeros in the high 32 bits. The EXTRACT_SUBREG instruction does not clear the high 32 bits. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@54444 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test/CodeGen/X86/subreg-to-reg-0.ll')
-rw-r--r--test/CodeGen/X86/subreg-to-reg-0.ll11
1 files changed, 11 insertions, 0 deletions
diff --git a/test/CodeGen/X86/subreg-to-reg-0.ll b/test/CodeGen/X86/subreg-to-reg-0.ll
new file mode 100644
index 0000000000..6b60f65265
--- /dev/null
+++ b/test/CodeGen/X86/subreg-to-reg-0.ll
@@ -0,0 +1,11 @@
+; RUN: llvm-as < %s | llc -march=x86-64 | grep mov | count 1
+
+; Do eliminate the zero-extension instruction and rely on
+; x86-64's implicit zero-extension!
+
+define i64 @foo(i32* %p) nounwind {
+ %t = load i32* %p
+ %n = add i32 %t, 1
+ %z = zext i32 %n to i64
+ ret i64 %z
+}