diff options
Diffstat (limited to 'test/CodeGen/X86')
-rw-r--r-- | test/CodeGen/X86/subreg-to-reg-0.ll | 11 | ||||
-rw-r--r-- | test/CodeGen/X86/subreg-to-reg-1.ll | 10 |
2 files changed, 21 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 0000000..6b60f65 --- /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 +} diff --git a/test/CodeGen/X86/subreg-to-reg-1.ll b/test/CodeGen/X86/subreg-to-reg-1.ll new file mode 100644 index 0000000..4e487e1 --- /dev/null +++ b/test/CodeGen/X86/subreg-to-reg-1.ll @@ -0,0 +1,10 @@ +; RUN: llvm-as < %s | llc -march=x86-64 | grep {movl %e.\*, %e.\*} | count 1 + +; Don't eliminate or coalesce away the explicit zero-extension! + +define i64 @foo(i64 %a) { + %b = add i64 %a, 4294967295 + %c = and i64 %b, 4294967295 + %d = add i64 %c, 1 + ret i64 %d +} |